diff --git a/CHANGELOG.md b/CHANGELOG.md index c462068..07d3962 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## v1.45.0-sdk.1 + +- Regenerated from the public API contract (3529 operations). + ## v1.44.0-sdk.2 - Regenerated from the public API contract (3275 operations). diff --git a/docs/operations.md b/docs/operations.md index a241869..c3c87ca 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: `3275` +Total operations: `3529` | Group | SDK method | Operation ID | HTTP | Params | Auth | Response | Notes | | --- | --- | --- | --- | --- | --- | --- | --- | @@ -66,6 +66,9 @@ Total operations: `3275` | alCom | `alCom.alcomHeadlines` | `alcom-headlines` | `GET /alcom/headlines` | `section` (query String required) | `ApiKeyAuth` | `AlComAlcomHeadlinesResponse` | | | alCom | `alCom.alcomNews` | `alcom-news` | `GET /alcom/news` | none | `ApiKeyAuth` | `AlComAlcomNewsResponse` | | | alCom | `alCom.alcomSections` | `alcom-sections` | `GET /alcom/sections` | none | `ApiKeyAuth` | `AlComAlcomSectionsResponse` | | +| aliExpress | `aliExpress.aliexpressReviews` | `aliexpress-reviews` | `GET /aliexpress/reviews` | `product_id` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `AliExpressAliexpressReviewsResponse` | | +| aliExpress | `aliExpress.aliexpressSearch` | `aliexpress-search` | `GET /aliexpress/search` | `q` (query String required)
`page` (query Integer)
`sort` (query String)
`min_price` (query Double)
`max_price` (query Double)
`free_shipping` (query Boolean)
`choice` (query Boolean)
`attr` (query String) | `ApiKeyAuth` | `AliExpressAliexpressSearchResponse` | | +| aliExpress | `aliExpress.aliexpressSearchFilters` | `aliexpress-search-filters` | `GET /aliexpress/search-filters` | `q` (query String required) | `ApiKeyAuth` | `AliExpressAliexpressSearchFiltersResponse` | | | alJazeera | `alJazeera.aljazeeraArticle` | `aljazeera-article` | `GET /aljazeera/article` | `url` (query String required) | `ApiKeyAuth` | `AlJazeeraAljazeeraArticleResponse` | | | alJazeera | `alJazeera.aljazeeraAuthor` | `aljazeera-author` | `GET /aljazeera/author` | `slug` (query String)
`url` (query String)
`page` (query Integer) | `ApiKeyAuth` | `AlJazeeraAljazeeraAuthorResponse` | | | alJazeera | `alJazeera.aljazeeraCategories` | `aljazeera-categories` | `GET /aljazeera/categories` | none | `ApiKeyAuth` | `AlJazeeraAljazeeraCategoriesResponse` | | @@ -103,6 +106,11 @@ Total operations: `3275` | androidAuthority | `androidAuthority.androidauthorityHeadlines` | `androidauthority-headlines` | `GET /androidauthority/headlines` | `section` (query String required) | `ApiKeyAuth` | `AndroidAuthorityAndroidauthorityHeadlinesResponse` | | | androidAuthority | `androidAuthority.androidauthorityNews` | `androidauthority-news` | `GET /androidauthority/news` | none | `ApiKeyAuth` | `AndroidAuthorityAndroidauthorityNewsResponse` | | | androidAuthority | `androidAuthority.androidauthoritySections` | `androidauthority-sections` | `GET /androidauthority/sections` | none | `ApiKeyAuth` | `AndroidAuthorityAndroidauthoritySectionsResponse` | | +| androidPolice | `androidPolice.androidpoliceArticle` | `androidpolice-article` | `GET /androidpolice/article` | `url` (query String required) | `ApiKeyAuth` | `AndroidPoliceAndroidpoliceArticleResponse` | | +| androidPolice | `androidPolice.androidpoliceAuthor` | `androidpolice-author` | `GET /androidpolice/author` | `url` (query String required) | `ApiKeyAuth` | `AndroidPoliceAndroidpoliceAuthorResponse` | | +| androidPolice | `androidPolice.androidpoliceHeadlines` | `androidpolice-headlines` | `GET /androidpolice/headlines` | `section` (query String required) | `ApiKeyAuth` | `AndroidPoliceAndroidpoliceHeadlinesResponse` | | +| androidPolice | `androidPolice.androidpoliceNews` | `androidpolice-news` | `GET /androidpolice/news` | none | `ApiKeyAuth` | `AndroidPoliceAndroidpoliceNewsResponse` | | +| androidPolice | `androidPolice.androidpoliceSections` | `androidpolice-sections` | `GET /androidpolice/sections` | none | `ApiKeyAuth` | `AndroidPoliceAndroidpoliceSectionsResponse` | | | anime | `anime.airingSchedule` | `anime-airing-schedule` | `GET /anime/airing-schedule` | `page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `AnimeAiringScheduleResponse` | | | anime | `anime.characterSearch` | `anime-character-search` | `GET /anime/character/search` | `query` (query String required)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `AnimeCharacterSearchResponse` | | | anime | `anime.character` | `anime-character` | `GET /anime/character/{id}` | `id` (path String required) | `ApiKeyAuth` | `AnimeCharacterResponse` | | @@ -168,6 +176,8 @@ Total operations: `3275` | applePodcasts | `applePodcasts.showRelated` | `apple-podcasts-show-related` | `GET /apple-podcasts/show/{id}/related` | `id` (path String required)
`country` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `ApplePodcastsShowRelatedResponse` | | | appStore | `appStore.app` | `appstore-app` | `GET /appstore/app` | `id` (query String)
`app_id` (query String)
`country` (query String)
`lang` (query String)
`ratings` (query Boolean)
`platforms` (query Boolean) | `ApiKeyAuth` | `AppStoreAppResponse` | | | appStore | `appStore.categories` | `appstore-categories` | `GET /appstore/categories` | none | `ApiKeyAuth` | `AppStoreCategoriesResponse` | | +| appStore | `appStore.collection` | `appstore-collection` | `GET /appstore/collection` | `platform` (query String required)
`collection_id` (query String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppStoreCollectionResponse` | | +| appStore | `appStore.collections` | `appstore-collections` | `GET /appstore/collections` | `platform` (query String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppStoreCollectionsResponse` | | | appStore | `appStore.developer` | `appstore-developer` | `GET /appstore/developer/{dev_id}` | `dev_id` (path String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppStoreDeveloperResponse` | | | appStore | `appStore.editorial` | `appstore-editorial` | `GET /appstore/editorial` | `device` (query String required)
`section` (query String)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppStoreEditorialResponse` | | | appStore | `appStore.editorialCategory` | `appstore-editorial-category` | `GET /appstore/editorial/category` | `device` (query String required)
`category_id` (query String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppStoreEditorialCategoryResponse` | | @@ -231,6 +241,11 @@ Total operations: `3275` | bbc | `bbc.headlines` | `bbc-headlines` | `GET /bbc/headlines` | `section` (query String) | `ApiKeyAuth` | `BbcHeadlinesResponse` | | | bbc | `bbc.live` | `bbc-live` | `GET /bbc/live` | `url` (query String required) | `ApiKeyAuth` | `BbcLiveResponse` | | | bbc | `bbc.search` | `bbc-search` | `GET /bbc/search` | `q` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `BbcSearchResponse` | | +| benzinga | `benzinga.article` | `benzinga-article` | `GET /benzinga/article` | `url` (query String required) | `ApiKeyAuth` | `BenzingaArticleResponse` | | +| benzinga | `benzinga.headlines` | `benzinga-headlines` | `GET /benzinga/headlines` | `section` (query String required) | `ApiKeyAuth` | `BenzingaHeadlinesResponse` | | +| benzinga | `benzinga.news` | `benzinga-news` | `GET /benzinga/news` | none | `ApiKeyAuth` | `BenzingaNewsResponse` | | +| benzinga | `benzinga.search` | `benzinga-search` | `GET /benzinga/search` | `q` (query String required) | `ApiKeyAuth` | `BenzingaSearchResponse` | | +| benzinga | `benzinga.sections` | `benzinga-sections` | `GET /benzinga/sections` | none | `ApiKeyAuth` | `BenzingaSectionsResponse` | | | bestBuy | `bestBuy.bestbuyBrands` | `bestbuy-brands` | `GET /bestbuy/brands` | none | `ApiKeyAuth` | `BestBuyBestbuyBrandsResponse` | | | bestBuy | `bestBuy.bestbuyCategories` | `bestbuy-categories` | `GET /bestbuy/categories` | none | `ApiKeyAuth` | `BestBuyBestbuyCategoriesResponse` | | | bestBuy | `bestBuy.bestbuyCategoriesTrending` | `bestbuy-categories-trending` | `GET /bestbuy/categories/trending` | none | `ApiKeyAuth` | `BestBuyBestbuyCategoriesTrendingResponse` | | @@ -350,6 +365,11 @@ Total operations: `3275` | 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` | | +| 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` | | +| brisbaneTimes | `brisbaneTimes.brisbanetimesNews` | `brisbanetimes-news` | `GET /brisbanetimes/news` | none | `ApiKeyAuth` | `BrisbaneTimesBrisbanetimesNewsResponse` | | +| brisbaneTimes | `brisbaneTimes.brisbanetimesSections` | `brisbanetimes-sections` | `GET /brisbanetimes/sections` | none | `ApiKeyAuth` | `BrisbaneTimesBrisbanetimesSectionsResponse` | | | brooklinen | `brooklinen.collections` | `brooklinen-collections` | `GET /brooklinen/collections` | `page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `BrooklinenCollectionsResponse` | | | brooklinen | `brooklinen.collectionProducts` | `brooklinen-collection-products` | `GET /brooklinen/collections/{handle}/products` | `handle` (path String required)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `BrooklinenCollectionProductsResponse` | | | brooklinen | `brooklinen.pages` | `brooklinen-pages` | `GET /brooklinen/pages` | `page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `BrooklinenPagesResponse` | | @@ -595,11 +615,19 @@ Total operations: `3275` | dailyExpress | `dailyExpress.dailyexpressHeadlines` | `dailyexpress-headlines` | `GET /dailyexpress/headlines` | `section` (query String required) | `ApiKeyAuth` | `DailyExpressDailyexpressHeadlinesResponse` | | | dailyExpress | `dailyExpress.dailyexpressNews` | `dailyexpress-news` | `GET /dailyexpress/news` | none | `ApiKeyAuth` | `DailyExpressDailyexpressNewsResponse` | | | dailyExpress | `dailyExpress.dailyexpressSections` | `dailyexpress-sections` | `GET /dailyexpress/sections` | none | `ApiKeyAuth` | `DailyExpressDailyexpressSectionsResponse` | | +| dailyKos | `dailyKos.dailykosArticle` | `dailykos-article` | `GET /dailykos/article` | `url` (query String required) | `ApiKeyAuth` | `DailyKosDailykosArticleResponse` | | +| dailyKos | `dailyKos.dailykosHeadlines` | `dailykos-headlines` | `GET /dailykos/headlines` | `section` (query String required) | `ApiKeyAuth` | `DailyKosDailykosHeadlinesResponse` | | +| dailyKos | `dailyKos.dailykosNews` | `dailykos-news` | `GET /dailykos/news` | none | `ApiKeyAuth` | `DailyKosDailykosNewsResponse` | | +| dailyKos | `dailyKos.dailykosSections` | `dailykos-sections` | `GET /dailykos/sections` | none | `ApiKeyAuth` | `DailyKosDailykosSectionsResponse` | | | dailyMail | `dailyMail.dailymailArticle` | `dailymail-article` | `GET /dailymail/article` | `url` (query String required) | `ApiKeyAuth` | `DailyMailDailymailArticleResponse` | | | dailyMail | `dailyMail.dailymailAuthor` | `dailymail-author` | `GET /dailymail/author` | `url` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `DailyMailDailymailAuthorResponse` | | | dailyMail | `dailyMail.dailymailHeadlines` | `dailymail-headlines` | `GET /dailymail/headlines` | `section` (query String required) | `ApiKeyAuth` | `DailyMailDailymailHeadlinesResponse` | | | dailyMail | `dailyMail.dailymailNews` | `dailymail-news` | `GET /dailymail/news` | none | `ApiKeyAuth` | `DailyMailDailymailNewsResponse` | | | dailyMail | `dailyMail.dailymailSections` | `dailymail-sections` | `GET /dailymail/sections` | none | `ApiKeyAuth` | `DailyMailDailymailSectionsResponse` | | +| dailyMaverick | `dailyMaverick.dailymaverickArticle` | `dailymaverick-article` | `GET /dailymaverick/article` | `url` (query String required) | `ApiKeyAuth` | `DailyMaverickDailymaverickArticleResponse` | | +| dailyMaverick | `dailyMaverick.dailymaverickHeadlines` | `dailymaverick-headlines` | `GET /dailymaverick/headlines` | `section` (query String required) | `ApiKeyAuth` | `DailyMaverickDailymaverickHeadlinesResponse` | | +| dailyMaverick | `dailyMaverick.dailymaverickNews` | `dailymaverick-news` | `GET /dailymaverick/news` | none | `ApiKeyAuth` | `DailyMaverickDailymaverickNewsResponse` | | +| dailyMaverick | `dailyMaverick.dailymaverickSections` | `dailymaverick-sections` | `GET /dailymaverick/sections` | none | `ApiKeyAuth` | `DailyMaverickDailymaverickSectionsResponse` | | | dailyRecord | `dailyRecord.dailyrecordArticle` | `dailyrecord-article` | `GET /dailyrecord/article` | `url` (query String required) | `ApiKeyAuth` | `DailyRecordDailyrecordArticleResponse` | | | dailyRecord | `dailyRecord.dailyrecordAuthor` | `dailyrecord-author` | `GET /dailyrecord/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `DailyRecordDailyrecordAuthorResponse` | | | dailyRecord | `dailyRecord.dailyrecordHeadlines` | `dailyrecord-headlines` | `GET /dailyrecord/headlines` | `section` (query String required) | `ApiKeyAuth` | `DailyRecordDailyrecordHeadlinesResponse` | | @@ -640,6 +668,10 @@ Total operations: `3275` | 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.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` | | +| datasets | `datasets.doordashStoresNearby` | `datasets-doordash-stores-nearby` | `GET /datasets/doordash-stores/nearby` | `lat` (query Double required)
`lon` (query Double required)
`radius_m` (query Integer required)
`country` (query String)
`tag` (query String)
`dash_pass_only` (query Boolean)
`pagination` (query String)
`cursor` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsDoordashStoresNearbyResponse` | | +| datasets | `datasets.doordashStoresSearch` | `datasets-doordash-stores-search` | `GET /datasets/doordash-stores/search` | `q` (query String)
`country` (query String)
`state` (query String)
`city` (query String)
`tag` (query String)
`dash_pass_only` (query Boolean)
`min_price` (query Integer)
`max_price` (query Integer)
`min_rating` (query Double)
`lat` (query Double)
`lon` (query Double)
`radius_m` (query Integer)
`sort` (query String)
`pagination` (query String)
`cursor` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsDoordashStoresSearchResponse` | | | datasets | `datasets.facebookPagesFacets` | `datasets-facebook-pages-facets` | `GET /datasets/facebook-pages/facets` | `limit` (query Integer)
`order` (query String)
`after` (query String)
`facet` (query String required)
`q` (query String)
`page_id` (query String)
`identifier` (query String)
`category` (query String)
`discovery_source` (query String)
`has_website` (query Boolean)
`has_email` (query Boolean)
`has_phone` (query Boolean)
`has_whatsapp` (query Boolean)
`min_likes` (query Integer)
`max_likes` (query Integer)
`hydrated_after` (query String)
`hydrated_before` (query String)
`sort` (query String) | `ApiKeyAuth` | `DatasetsFacebookPagesFacetsResponse` | | | datasets | `datasets.facebookPagesItem` | `datasets-facebook-pages-item` | `GET /datasets/facebook-pages/items/{page_id}` | `page_id` (path String required) | `ApiKeyAuth` | `DatasetsFacebookPagesItemResponse` | | | datasets | `datasets.facebookPagesSearch` | `datasets-facebook-pages-search` | `GET /datasets/facebook-pages/search` | `q` (query String)
`page_id` (query String)
`identifier` (query String)
`category` (query String)
`discovery_source` (query String)
`has_website` (query Boolean)
`has_email` (query Boolean)
`has_phone` (query Boolean)
`has_whatsapp` (query Boolean)
`min_likes` (query Integer)
`max_likes` (query Integer)
`hydrated_after` (query String)
`hydrated_before` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsFacebookPagesSearchResponse` | | @@ -756,6 +788,11 @@ Total operations: `3275` | deliveroo | `deliveroo.restaurantMenu` | `deliveroo-restaurant-menu` | `GET /deliveroo/restaurant/menu` | `uname` (query String required)
`market` (query String) | `ApiKeyAuth` | `DeliverooRestaurantMenuResponse` | | | deliveroo | `deliveroo.search` | `deliveroo-search` | `GET /deliveroo/search` | `latitude` (query Double required)
`longitude` (query Double required)
`market` (query String)
`limit` (query Integer)
`collection` (query String)
`cuisine` (query List)
`dietary` (query List)
`dish` (query List)
`top_rated` (query Boolean)
`min_rating` (query String)
`max_delivery_minutes` (query String)
`max_delivery_fee_pounds` (query String)
`has_offer` (query Boolean)
`sort` (query String)
`deliveroos_choice` (query Boolean) | `ApiKeyAuth` | `DeliverooSearchResponse` | | | deliveroo | `deliveroo.searchFilters` | `deliveroo-search-filters` | `GET /deliveroo/search/filters` | `latitude` (query Double required)
`longitude` (query Double required)
`market` (query String) | `ApiKeyAuth` | `DeliverooSearchFiltersResponse` | | +| theDenverPost | `theDenverPost.denverpostArticle` | `denverpost-article` | `GET /denverpost/article` | `url` (query String required) | `ApiKeyAuth` | `TheDenverPostDenverpostArticleResponse` | | +| theDenverPost | `theDenverPost.denverpostAuthor` | `denverpost-author` | `GET /denverpost/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `TheDenverPostDenverpostAuthorResponse` | | +| theDenverPost | `theDenverPost.denverpostHeadlines` | `denverpost-headlines` | `GET /denverpost/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheDenverPostDenverpostHeadlinesResponse` | | +| theDenverPost | `theDenverPost.denverpostNews` | `denverpost-news` | `GET /denverpost/news` | none | `ApiKeyAuth` | `TheDenverPostDenverpostNewsResponse` | | +| theDenverPost | `theDenverPost.denverpostSections` | `denverpost-sections` | `GET /denverpost/sections` | none | `ApiKeyAuth` | `TheDenverPostDenverpostSectionsResponse` | | | depop | `depop.brands` | `depop-brands` | `GET /depop/brands` | none | `ApiKeyAuth` | `DepopBrandsResponse` | | | depop | `depop.categories` | `depop-categories` | `GET /depop/categories` | none | `ApiKeyAuth` | `DepopCategoriesResponse` | | | depop | `depop.item` | `depop-item` | `GET /depop/item/{slug}` | `slug` (path String required) | `ApiKeyAuth` | `DepopItemResponse` | | @@ -886,6 +923,11 @@ Total operations: `3275` | expedia | `expedia.propertiesFilters` | `expedia-properties-filters` | `POST /expedia/properties/filters` | `option` (body String required) | `ApiKeyAuth` | `ExpediaPropertiesFiltersResponse` | | | expedia | `expedia.propertiesReviews` | `expedia-properties-reviews` | `POST /expedia/properties/reviews` | `option` (body String required) | `ApiKeyAuth` | `ExpediaPropertiesReviewsResponse` | | | expedia | `expedia.propertiesSearch` | `expedia-properties-search` | `POST /expedia/properties/search` | `option` (body String required) | `ApiKeyAuth` | `ExpediaPropertiesSearchResponse` | | +| theExpressTribune | `theExpressTribune.expresstribuneArticle` | `expresstribune-article` | `GET /expresstribune/article` | `url` (query String required) | `ApiKeyAuth` | `TheExpressTribuneExpresstribuneArticleResponse` | | +| theExpressTribune | `theExpressTribune.expresstribuneAuthor` | `expresstribune-author` | `GET /expresstribune/author` | `url` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `TheExpressTribuneExpresstribuneAuthorResponse` | | +| theExpressTribune | `theExpressTribune.expresstribuneHeadlines` | `expresstribune-headlines` | `GET /expresstribune/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheExpressTribuneExpresstribuneHeadlinesResponse` | | +| theExpressTribune | `theExpressTribune.expresstribuneNews` | `expresstribune-news` | `GET /expresstribune/news` | none | `ApiKeyAuth` | `TheExpressTribuneExpresstribuneNewsResponse` | | +| 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` | | | fanatics | `fanatics.categories` | `fanatics-categories` | `GET /fanatics/categories` | none | `ApiKeyAuth` | `FanaticsCategoriesResponse` | | @@ -1166,6 +1208,26 @@ Total operations: `3275` | goodreads | `goodreads.list` | `goodreads-list` | `GET /goodreads/list/{id}` | `id` (path String required)
`page` (query Integer) | `ApiKeyAuth` | `GoodreadsListResponse` | | | goodreads | `goodreads.lists` | `goodreads-lists` | `GET /goodreads/lists` | none | `ApiKeyAuth` | `GoodreadsListsResponse` | | | goodreads | `goodreads.search` | `goodreads-search` | `GET /goodreads/search` | `q` (query String required)
`limit` (query Integer) | `ApiKeyAuth` | `GoodreadsSearchResponse` | | +| goodRx | `goodRx.goodrxAnswer` | `goodrx-answer` | `GET /goodrx/answer` | `slug` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxAnswerResponse` | | +| goodRx | `goodRx.goodrxAnswers` | `goodrx-answers` | `GET /goodrx/answers` | none | `ApiKeyAuth` | `GoodRxGoodrxAnswersResponse` | | +| goodRx | `goodRx.goodrxBrands` | `goodrx-brands` | `GET /goodrx/brands` | none | `ApiKeyAuth` | `GoodRxGoodrxBrandsResponse` | | +| goodRx | `goodRx.goodrxClass` | `goodrx-class` | `GET /goodrx/class` | `slug` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxClassResponse` | | +| goodRx | `goodRx.goodrxClasses` | `goodrx-classes` | `GET /goodrx/classes` | none | `ApiKeyAuth` | `GoodRxGoodrxClassesResponse` | | +| goodRx | `goodRx.goodrxComparison` | `goodrx-comparison` | `GET /goodrx/comparison` | `slug` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxComparisonResponse` | | +| goodRx | `goodRx.goodrxComparisons` | `goodrx-comparisons` | `GET /goodrx/comparisons` | none | `ApiKeyAuth` | `GoodRxGoodrxComparisonsResponse` | | +| goodRx | `goodRx.goodrxCondition` | `goodrx-condition` | `GET /goodrx/condition` | `slug` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxConditionResponse` | | +| goodRx | `goodRx.goodrxConditionDrugs` | `goodrx-condition-drugs` | `GET /goodrx/condition-drugs` | `slug` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxConditionDrugsResponse` | | +| goodRx | `goodRx.goodrxConditions` | `goodrx-conditions` | `GET /goodrx/conditions` | none | `ApiKeyAuth` | `GoodRxGoodrxConditionsResponse` | | +| goodRx | `goodRx.goodrxDrugGuide` | `goodrx-drug-guide` | `GET /goodrx/drug-guide` | `slug` (query String required)
`topic` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxDrugGuideResponse` | | +| goodRx | `goodRx.goodrxDrugGuides` | `goodrx-drug-guides` | `GET /goodrx/drug-guides` | `topic` (query String)
`letter` (query String) | `ApiKeyAuth` | `GoodRxGoodrxDrugGuidesResponse` | | +| goodRx | `goodRx.goodrxDrugInfo` | `goodrx-drug-info` | `GET /goodrx/drug-info` | `slug` (query String required)
`audience` (query String) | `ApiKeyAuth` | `GoodRxGoodrxDrugInfoResponse` | | +| goodRx | `goodRx.goodrxDrugOptions` | `goodrx-drug-options` | `GET /goodrx/drug-options` | `slug` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxDrugOptionsResponse` | | +| goodRx | `goodRx.goodrxDrugPrices` | `goodrx-drug-prices` | `GET /goodrx/drug-prices` | `slug` (query String required)
`label` (query String)
`form` (query String)
`dosage` (query String)
`quantity` (query Integer)
`latitude` (query Double)
`longitude` (query Double)
`zip_code` (query String)
`state` (query String) | `ApiKeyAuth` | `GoodRxGoodrxDrugPricesResponse` | | +| goodRx | `goodRx.goodrxDrugs` | `goodrx-drugs` | `GET /goodrx/drugs` | `letter` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxDrugsResponse` | | +| goodRx | `goodRx.goodrxHealthArticle` | `goodrx-health-article` | `GET /goodrx/health-article` | `path` (query String required) | `ApiKeyAuth` | `GoodRxGoodrxHealthArticleResponse` | | +| goodRx | `goodRx.goodrxHealthArticles` | `goodrx-health-articles` | `GET /goodrx/health-articles` | `section` (query String required)
`topic` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `GoodRxGoodrxHealthArticlesResponse` | | +| goodRx | `goodRx.goodrxHealthTopics` | `goodrx-health-topics` | `GET /goodrx/health-topics` | `section` (query String) | `ApiKeyAuth` | `GoodRxGoodrxHealthTopicsResponse` | | +| goodRx | `goodRx.goodrxPetMedications` | `goodrx-pet-medications` | `GET /goodrx/pet-medications` | none | `ApiKeyAuth` | `GoodRxGoodrxPetMedicationsResponse` | | | googleJobs | `googleJobs.job` | `google-jobs-job` | `GET /google-jobs/job` | `id` (query String required) | `ApiKeyAuth` | `GoogleJobsJobResponse` | | | googleJobs | `googleJobs.search` | `google-jobs-search` | `GET /google-jobs/search` | `q` (query String required)
`location` (query String)
`page` (query Integer) | `ApiKeyAuth` | `GoogleJobsSearchResponse` | | | google | `google.financeAnalystArticles` | `google-finance-analyst-articles` | `GET /google/finance/analyst-articles/{quote}` | `quote` (path String required) | `ApiKeyAuth` | `GoogleFinanceAnalystArticlesResponse` | | @@ -1241,6 +1303,15 @@ Total operations: `3275` | grailed | `grailed.similarListings` | `grailed-similar-listings` | `GET /grailed/similar-listings` | `id` (query Integer required)
`limit` (query Integer) | `ApiKeyAuth` | `GrailedSimilarListingsResponse` | | | grailed | `grailed.soldListings` | `grailed-sold-listings` | `GET /grailed/sold-listings` | `q` (query String)
`designer` (query String)
`department` (query String)
`category` (query String)
`size` (query String)
`color` (query String)
`condition` (query String)
`min_price` (query Double)
`max_price` (query Double)
`sort` (query String)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `GrailedSoldListingsResponse` | | | grailed | `grailed.suggest` | `grailed-suggest` | `GET /grailed/suggest` | `q` (query String required) | `ApiKeyAuth` | `GrailedSuggestResponse` | | +| greystar | `greystar.articles` | `greystar-articles` | `GET /greystar/articles` | `section` (query String)
`query` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `GreystarArticlesResponse` | | +| greystar | `greystar.article` | `greystar-article` | `GET /greystar/articles/{section}/{slug}` | `section` (path String required)
`slug` (path String required) | `ApiKeyAuth` | `GreystarArticleResponse` | | +| greystar | `greystar.location` | `greystar-location` | `GET /greystar/location` | `state` (query String required)
`city` (query String)
`neighborhood` (query String) | `ApiKeyAuth` | `GreystarLocationResponse` | | +| greystar | `greystar.locations` | `greystar-locations` | `GET /greystar/locations` | `level` (query String)
`state` (query String)
`city` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `GreystarLocationsResponse` | | +| greystar | `greystar.markets` | `greystar-markets` | `GET /greystar/markets` | none | `ApiKeyAuth` | `GreystarMarketsResponse` | | +| greystar | `greystar.newsroom` | `greystar-newsroom` | `GET /greystar/newsroom` | `query` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `GreystarNewsroomResponse` | | +| greystar | `greystar.newsroomArticle` | `greystar-newsroom-article` | `GET /greystar/newsroom/{slug}` | `slug` (path String required) | `ApiKeyAuth` | `GreystarNewsroomArticleResponse` | | +| greystar | `greystar.property` | `greystar-property` | `GET /greystar/properties/{id}` | `id` (path String required) | `ApiKeyAuth` | `GreystarPropertyResponse` | | +| greystar | `greystar.search` | `greystar-search` | `GET /greystar/search` | `query` (query String)
`market_area` (query String)
`neighborhood` (query String)
`city` (query String)
`state` (query String)
`country_code` (query String)
`min_price` (query Double)
`max_price` (query Double)
`sort` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `GreystarSearchResponse` | | | grubhub | `grubhub.availability` | `grubhub-availability` | `GET /grubhub/availability` | `restaurant_ids` (query String required)
`latitude` (query Double required)
`longitude` (query Double required) | `ApiKeyAuth` | `GrubhubAvailabilityResponse` | | | grubhub | `grubhub.offers` | `grubhub-offers` | `GET /grubhub/offers` | `restaurant_id` (query String required)
`latitude` (query Double required)
`longitude` (query Double required) | `ApiKeyAuth` | `GrubhubOffersResponse` | | | grubhub | `grubhub.restaurant` | `grubhub-restaurant` | `GET /grubhub/restaurant` | `restaurant_id` (query String required) | `ApiKeyAuth` | `GrubhubRestaurantResponse` | | @@ -1282,6 +1353,22 @@ Total operations: `3275` | harvardBusinessReview | `harvardBusinessReview.hbrCategories` | `hbr-categories` | `GET /hbr/categories` | none | `ApiKeyAuth` | `HarvardBusinessReviewHbrCategoriesResponse` | | | harvardBusinessReview | `harvardBusinessReview.hbrHeadlines` | `hbr-headlines` | `GET /hbr/headlines` | none | `ApiKeyAuth` | `HarvardBusinessReviewHbrHeadlinesResponse` | | | harvardBusinessReview | `harvardBusinessReview.hbrTopic` | `hbr-topic` | `GET /hbr/topic` | `topic` (query String required) | `ApiKeyAuth` | `HarvardBusinessReviewHbrTopicResponse` | | +| healthgrades | `healthgrades.autocomplete` | `healthgrades-autocomplete` | `GET /healthgrades/autocomplete` | `term` (query String required) | `ApiKeyAuth` | `HealthgradesAutocompleteResponse` | | +| healthgrades | `healthgrades.facilitiesFilters` | `healthgrades-facilities-filters` | `GET /healthgrades/facilities/filters` | `type` (query String required)
`query` (query String)
`where` (query String required) | `ApiKeyAuth` | `HealthgradesFacilitiesFiltersResponse` | | +| healthgrades | `healthgrades.facilitiesSearch` | `healthgrades-facilities-search` | `GET /healthgrades/facilities/search` | `type` (query String required)
`query` (query String)
`where` (query String required)
`page` (query Integer)
`sort` (query String)
`distance` (query String)
`rating` (query String)
`award` (query String) | `ApiKeyAuth` | `HealthgradesFacilitiesSearchResponse` | | +| healthgrades | `healthgrades.facility` | `healthgrades-facility` | `GET /healthgrades/facility` | `url` (query String required) | `ApiKeyAuth` | `HealthgradesFacilityResponse` | | +| healthgrades | `healthgrades.healthArticle` | `healthgrades-health-article` | `GET /healthgrades/health-article` | `url` (query String required) | `ApiKeyAuth` | `HealthgradesHealthArticleResponse` | | +| healthgrades | `healthgrades.healthArticles` | `healthgrades-health-articles` | `GET /healthgrades/health-articles` | `topic` (query String required)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `HealthgradesHealthArticlesResponse` | | +| healthgrades | `healthgrades.healthTopics` | `healthgrades-health-topics` | `GET /healthgrades/health-topics` | none | `ApiKeyAuth` | `HealthgradesHealthTopicsResponse` | | +| healthgrades | `healthgrades.hospital` | `healthgrades-hospital` | `GET /healthgrades/hospital` | `url` (query String required) | `ApiKeyAuth` | `HealthgradesHospitalResponse` | | +| healthgrades | `healthgrades.hospitalAwards` | `healthgrades-hospital-awards` | `GET /healthgrades/hospital-awards` | `award` (query String required)
`year` (query String)
`state` (query String)
`city` (query String)
`list` (query String)
`list_category` (query String)
`specialty` (query String)
`ob_gyn_type` (query String)
`sort` (query String)
`latitude` (query Double)
`longitude` (query Double)
`page` (query Integer) | `ApiKeyAuth` | `HealthgradesHospitalAwardsResponse` | | +| healthgrades | `healthgrades.hospitalAwardFilters` | `healthgrades-hospital-award-filters` | `GET /healthgrades/hospital-awards/filters` | `award` (query String required)
`state` (query String)
`year` (query String) | `ApiKeyAuth` | `HealthgradesHospitalAwardFiltersResponse` | | +| healthgrades | `healthgrades.locations` | `healthgrades-locations` | `GET /healthgrades/locations` | `term` (query String required) | `ApiKeyAuth` | `HealthgradesLocationsResponse` | | +| healthgrades | `healthgrades.physician` | `healthgrades-physician` | `GET /healthgrades/physician` | `url` (query String required) | `ApiKeyAuth` | `HealthgradesPhysicianResponse` | | +| healthgrades | `healthgrades.physiciansFilters` | `healthgrades-physicians-filters` | `GET /healthgrades/physicians/filters` | `query` (query String required)
`where` (query String) | `ApiKeyAuth` | `HealthgradesPhysiciansFiltersResponse` | | +| healthgrades | `healthgrades.physiciansSearch` | `healthgrades-physicians-search` | `GET /healthgrades/physicians/search` | `query` (query String required)
`where` (query String)
`page` (query Integer)
`sort` (query String)
`gender` (query String)
`distance` (query String)
`age` (query String)
`availability` (query String)
`rating` (query String)
`insurance` (query String)
`insurance_plan` (query String)
`language` (query String)
`clinical_focus` (query String)
`affiliated_hospital` (query String)
`specialty` (query String)
`affirming_care` (query Boolean) | `ApiKeyAuth` | `HealthgradesPhysiciansSearchResponse` | | +| healthgrades | `healthgrades.specialties` | `healthgrades-specialties` | `GET /healthgrades/specialties` | none | `ApiKeyAuth` | `HealthgradesSpecialtiesResponse` | | +| healthgrades | `healthgrades.topSearches` | `healthgrades-top-searches` | `GET /healthgrades/top-searches` | none | `ApiKeyAuth` | `HealthgradesTopSearchesResponse` | | | hermes | `hermes.categories` | `hermes-categories` | `GET /hermes/categories` | `locale` (query String) | `ApiKeyAuth` | `HermesCategoriesResponse` | | | hermes | `hermes.category` | `hermes-category` | `GET /hermes/category` | `category` (query String required)
`sort` (query String)
`locale` (query String)
`page` (query Integer) | `ApiKeyAuth` | `HermesCategoryResponse` | | | hermes | `hermes.product` | `hermes-product` | `GET /hermes/product` | `sku` (query String required)
`locale` (query String) | `ApiKeyAuth` | `HermesProductResponse` | | @@ -1320,6 +1407,11 @@ Total operations: `3275` | hotelsCom | `hotelsCom.hotelsReviews` | `hotels-reviews` | `POST /hotels/reviews` | `request` (body String required) | `ApiKeyAuth` | `HotelsComHotelsReviewsResponse` | | | hotelsCom | `hotelsCom.hotelsReviewsArchive` | `hotels-reviews-archive` | `POST /hotels/reviews/archive` | `request` (body String required) | `ApiKeyAuth` | `HotelsComHotelsReviewsArchiveResponse` | | | hotelsCom | `hotelsCom.hotelsSearch` | `hotels-search` | `POST /hotels/search` | `request` (body String required) | `ApiKeyAuth` | `HotelsComHotelsSearchResponse` | | +| houstonChronicle | `houstonChronicle.article` | `houston-chronicle-article` | `GET /houston-chronicle/article` | `url` (query String required) | `ApiKeyAuth` | `HoustonChronicleArticleResponse` | | +| houstonChronicle | `houstonChronicle.author` | `houston-chronicle-author` | `GET /houston-chronicle/author` | `url` (query String required) | `ApiKeyAuth` | `HoustonChronicleAuthorResponse` | | +| houstonChronicle | `houstonChronicle.headlines` | `houston-chronicle-headlines` | `GET /houston-chronicle/headlines` | `section` (query String required) | `ApiKeyAuth` | `HoustonChronicleHeadlinesResponse` | | +| houstonChronicle | `houstonChronicle.news` | `houston-chronicle-news` | `GET /houston-chronicle/news` | none | `ApiKeyAuth` | `HoustonChronicleNewsResponse` | | +| houstonChronicle | `houstonChronicle.sections` | `houston-chronicle-sections` | `GET /houston-chronicle/sections` | none | `ApiKeyAuth` | `HoustonChronicleSectionsResponse` | | | howToGeek | `howToGeek.howtogeekNews` | `howtogeek-news` | `GET /howtogeek/news` | none | `ApiKeyAuth` | `HowToGeekHowtogeekNewsResponse` | | | huffPost | `huffPost.huffpostArticle` | `huffpost-article` | `GET /huffpost/article` | `url` (query String required) | `ApiKeyAuth` | `HuffPostHuffpostArticleResponse` | | | huffPost | `huffPost.huffpostAuthor` | `huffpost-author` | `GET /huffpost/author` | `url` (query String required) | `ApiKeyAuth` | `HuffPostHuffpostAuthorResponse` | | @@ -1434,6 +1526,11 @@ Total operations: `3275` | 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` | | +| 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` | | +| theJapanTimes | `theJapanTimes.japantimesNews` | `japantimes-news` | `GET /japantimes/news` | none | `ApiKeyAuth` | `TheJapanTimesJapantimesNewsResponse` | | +| theJapanTimes | `theJapanTimes.japantimesSections` | `japantimes-sections` | `GET /japantimes/sections` | none | `ApiKeyAuth` | `TheJapanTimesJapantimesSectionsResponse` | | | jCrew | `jCrew.jcrewCategories` | `jcrew-categories` | `GET /jcrew/categories` | `site` (query String)
`department` (query String) | `ApiKeyAuth` | `JCrewJcrewCategoriesResponse` | | | jCrew | `jCrew.jcrewCategory` | `jcrew-category` | `GET /jcrew/category` | `category` (query String required)
`site` (query String)
`page` (query Integer) | `ApiKeyAuth` | `JCrewJcrewCategoryResponse` | | | jCrew | `jCrew.jcrewProduct` | `jcrew-product` | `GET /jcrew/product` | `pid` (query String required)
`site` (query String) | `ApiKeyAuth` | `JCrewJcrewProductResponse` | | @@ -1643,6 +1740,15 @@ Total operations: `3275` | macyS | `macyS.macysProductReviews` | `macys-product-reviews` | `GET /macys/product/reviews` | `product_id` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `MacySMacysProductReviewsResponse` | | | macyS | `macyS.macysProduct` | `macys-product` | `GET /macys/product/{productId}` | `productId` (path String required) | `ApiKeyAuth` | `MacySMacysProductResponse` | | | macyS | `macyS.macysSuggest` | `macys-suggest` | `GET /macys/suggest` | `query` (query String required) | `ApiKeyAuth` | `MacySMacysSuggestResponse` | | +| makeUseOf | `makeUseOf.makeuseofArticle` | `makeuseof-article` | `GET /makeuseof/article` | `url` (query String required) | `ApiKeyAuth` | `MakeUseOfMakeuseofArticleResponse` | | +| makeUseOf | `makeUseOf.makeuseofAuthor` | `makeuseof-author` | `GET /makeuseof/author` | `url` (query String required) | `ApiKeyAuth` | `MakeUseOfMakeuseofAuthorResponse` | | +| makeUseOf | `makeUseOf.makeuseofHeadlines` | `makeuseof-headlines` | `GET /makeuseof/headlines` | `section` (query String required) | `ApiKeyAuth` | `MakeUseOfMakeuseofHeadlinesResponse` | | +| makeUseOf | `makeUseOf.makeuseofNews` | `makeuseof-news` | `GET /makeuseof/news` | none | `ApiKeyAuth` | `MakeUseOfMakeuseofNewsResponse` | | +| makeUseOf | `makeUseOf.makeuseofSections` | `makeuseof-sections` | `GET /makeuseof/sections` | none | `ApiKeyAuth` | `MakeUseOfMakeuseofSectionsResponse` | | +| malayMail | `malayMail.malaymailArticle` | `malaymail-article` | `GET /malaymail/article` | `url` (query String required) | `ApiKeyAuth` | `MalayMailMalaymailArticleResponse` | | +| malayMail | `malayMail.malaymailHeadlines` | `malaymail-headlines` | `GET /malaymail/headlines` | `section` (query String required) | `ApiKeyAuth` | `MalayMailMalaymailHeadlinesResponse` | | +| malayMail | `malayMail.malaymailNews` | `malaymail-news` | `GET /malaymail/news` | none | `ApiKeyAuth` | `MalayMailMalaymailNewsResponse` | | +| malayMail | `malayMail.malaymailSections` | `malaymail-sections` | `GET /malaymail/sections` | none | `ApiKeyAuth` | `MalayMailMalaymailSectionsResponse` | | | manga | `manga.rankings` | `manga-rankings` | `GET /manga/rankings` | `sort` (query String)
`format` (query String)
`genre` (query String)
`status` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `MangaRankingsResponse` | | | manga | `manga.search` | `manga-search` | `GET /manga/search` | `query` (query String required)
`sort` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `MangaSearchResponse` | | | manga | `manga.title` | `manga-title` | `GET /manga/title/{id}` | `id` (path String required)
`mal` (query Boolean) | `ApiKeyAuth` | `MangaTitleResponse` | | @@ -1742,13 +1848,59 @@ Total operations: `3275` | mlb | `mlb.leagueStats` | `mlb-league-stats` | `GET /mlb/league-stats` | `season` (query Integer)
`group` (query String required)
`stat_type` (query String)
`game_type` (query String)
`start_date` (query String)
`end_date` (query String)
`opponent_team_id` (query String)
`opponent_player_id` (query String)
`league_id` (query String)
`team_id` (query String)
`position` (query String)
`player_pool` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbLeagueStatsResponse` | | | mlb | `mlb.player` | `mlb-player` | `GET /mlb/player` | `id` (query String required) | `ApiKeyAuth` | `MlbPlayerResponse` | | | mlb | `mlb.playerStats` | `mlb-player-stats` | `GET /mlb/player-stats` | `id` (query String required)
`season` (query Integer)
`group` (query String required)
`stat_type` (query String)
`game_type` (query String)
`start_date` (query String)
`end_date` (query String)
`opponent_team_id` (query String)
`opponent_player_id` (query String) | `ApiKeyAuth` | `MlbPlayerStatsResponse` | | +| mlb | `mlb.prospectRankings` | `mlb-prospect-rankings` | `GET /mlb/prospect-rankings` | `view` (query String)
`year` (query String)
`team_slug` (query String)
`position` (query String)
`team_filter` (query String)
`q` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbProspectRankingsResponse` | | | mlb | `mlb.prospectStats` | `mlb-prospect-stats` | `GET /mlb/prospect-stats` | `list_type` (query String)
`team_id` (query String)
`date_range` (query String)
`player_type` (query String)
`min_pa` (query String)
`position` (query String)
`q` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbProspectStatsResponse` | | | mlb | `mlb.schedule` | `mlb-schedule` | `GET /mlb/schedule` | `date` (query String)
`start_date` (query String)
`end_date` (query String)
`team_id` (query String)
`game_type` (query String) | `ApiKeyAuth` | `MlbScheduleResponse` | | | mlb | `mlb.search` | `mlb-search` | `GET /mlb/search` | `q` (query String required) | `ApiKeyAuth` | `MlbSearchResponse` | | | mlb | `mlb.standings` | `mlb-standings` | `GET /mlb/standings` | `season` (query Integer)
`type` (query String)
`date` (query String) | `ApiKeyAuth` | `MlbStandingsResponse` | | +| mlb | `mlb.statcastAbsChallenges` | `mlb-statcast-abs-challenges` | `GET /mlb/statcast-abs-challenges` | `challenge_type` (query String)
`seasons` (query String)
`game_types` (query String)
`data_mode` (query String)
`data_count` (query String)
`min_challenges` (query String)
`min_opponent_challenges` (query String)
`level` (query String)
`leverage` (query String)
`ball_strike` (query String)
`breakeven` (query String)
`split_year` (query String)
`splits` (query String)
`challenge_team_ids` (query String)
`opponent_team_ids` (query String)
`pitch_types` (query String)
`shadow_zones` (query String) | `ApiKeyAuth` | `MlbStatcastAbsChallengesResponse` | | +| mlb | `mlb.statcastActiveSpin` | `mlb-statcast-active-spin` | `GET /mlb/statcast-active-spin` | `year` (query String)
`min` (query String)
`hand` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastActiveSpinResponse` | | +| mlb | `mlb.statcastArmAngle` | `mlb-statcast-arm-angle` | `GET /mlb/statcast-arm-angle` | `seasons` (query String)
`teams` (query String)
`game_types` (query String)
`pitch_types` (query String)
`pitch_hand` (query String)
`bat_side` (query String)
`min` (query String)
`min_group_pitches` (query String)
`group_by` (query String)
`date_start` (query String)
`date_end` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastArmAngleResponse` | | +| mlb | `mlb.statcastArmStrength` | `mlb-statcast-arm-strength` | `GET /mlb/statcast-arm-strength` | `type` (query String)
`year` (query String)
`team_id` (query String)
`position` (query String)
`min_throws` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastArmStrengthResponse` | | +| mlb | `mlb.statcastArmStrengthPlayer` | `mlb-statcast-arm-strength-player` | `GET /mlb/statcast-arm-strength-player` | `player_id` (query String required)
`year` (query String) | `ApiKeyAuth` | `MlbStatcastArmStrengthPlayerResponse` | | +| mlb | `mlb.statcastArmValue` | `mlb-statcast-arm-value` | `GET /mlb/statcast-arm-value` | `q` (query String)
`type` (query String)
`game_type` (query String)
`key_base_out` (query String)
`minimum_opps` (query String)
`start_year` (query Integer)
`end_year` (query Integer)
`split` (query String)
`team_id` (query String)
`with_team_only` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastArmValueResponse` | | +| mlb | `mlb.statcastArmValueDetails` | `mlb-statcast-arm-value-details` | `GET /mlb/statcast-arm-value-details` | `entity_id` (query String required)
`type` (query String)
`game_type` (query String)
`key_base_out` (query String)
`minimum_opps` (query String)
`start_year` (query Integer)
`end_year` (query Integer)
`split` (query String)
`team_id` (query String)
`with_team_only` (query String) | `ApiKeyAuth` | `MlbStatcastArmValueDetailsResponse` | | +| mlb | `mlb.statcastBaserunning` | `mlb-statcast-baserunning` | `GET /mlb/statcast-baserunning` | `board` (query String required)
`type` (query String)
`game_type` (query String)
`season_start` (query String)
`season_end` (query String)
`split` (query String)
`n` (query String)
`team` (query String)
`with_team_only` (query Boolean)
`pitch_hand` (query String)
`runner_moved` (query String)
`target_base` (query String)
`prior_pk` (query String)
`key_base_out` (query String)
`sort` (query String)
`sort_dir` (query String)
`search` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastBaserunningResponse` | | +| mlb | `mlb.statcastBatTracking` | `mlb-statcast-bat-tracking` | `GET /mlb/statcast-bat-tracking` | `type` (query String)
`season_start` (query String)
`season_end` (query String)
`game_type` (query String)
`min_swings` (query String)
`min_group_swings` (query String)
`date_start` (query String)
`date_end` (query String)
`bat_side` (query String)
`contact_type` (query String)
`is_hard_hit` (query String)
`attack_zone` (query String)
`pitch_hand` (query String)
`teams` (query String)
`pitch_types` (query String)
`counts` (query String)
`group_by` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastBatTrackingResponse` | | +| mlb | `mlb.statcastBattedBall` | `mlb-statcast-batted-ball` | `GET /mlb/statcast-batted-ball` | `type` (query String)
`seasons` (query String)
`game_types` (query String)
`splits` (query String)
`min` (query String)
`min_split` (query String)
`split_year` (query String)
`teams` (query String)
`date_start` (query String)
`date_end` (query String)
`bat_side` (query String)
`pitch_hand` (query String)
`pitch_types` (query String)
`include_league_average` (query Boolean)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastBattedBallResponse` | | +| mlb | `mlb.statcastBirthdayIndex` | `mlb-statcast-birthday-index` | `GET /mlb/statcast-birthday-index` | `type` (query String)
`min_games` (query String)
`date` (query String)
`show_inactives` (query Boolean)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastBirthdayIndexResponse` | | +| mlb | `mlb.statcastCatcherBlocking` | `mlb-statcast-catcher-blocking` | `GET /mlb/statcast-catcher-blocking` | `type` (query String)
`game_type` (query String)
`min` (query String)
`start_year` (query Integer)
`end_year` (query Integer)
`split` (query String)
`team` (query String)
`with_team_only` (query Boolean)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastCatcherBlockingResponse` | | +| mlb | `mlb.statcastCatcherBlockingDetails` | `mlb-statcast-catcher-blocking-details` | `GET /mlb/statcast-catcher-blocking-details` | `entity_id` (query String required)
`type` (query String)
`game_type` (query String)
`start_year` (query Integer)
`end_year` (query Integer)
`split` (query String)
`team` (query String)
`with_team_only` (query Boolean)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastCatcherBlockingDetailsResponse` | | +| mlb | `mlb.statcastCatcherFraming` | `mlb-statcast-catcher-framing` | `GET /mlb/statcast-catcher-framing` | `type` (query String)
`game_type` (query String)
`team` (query String)
`min_pitches` (query String)
`min_results` (query String)
`season_start` (query String)
`season_end` (query String)
`date_start` (query String)
`date_end` (query String)
`bat_side` (query String)
`pitch_hand` (query String)
`pitch_type` (query String)
`ball_strike` (query String)
`call` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastCatcherFramingResponse` | | +| mlb | `mlb.statcastCatcherFramingDetails` | `mlb-statcast-catcher-framing-details` | `GET /mlb/statcast-catcher-framing-details` | `entity_id` (query String required)
`type` (query String)
`game_type` (query String)
`team` (query String)
`min_pitches` (query String)
`min_results` (query String)
`season_start` (query String)
`season_end` (query String)
`date_start` (query String)
`date_end` (query String)
`bat_side` (query String)
`pitch_hand` (query String)
`pitch_type` (query String)
`ball_strike` (query String)
`call` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastCatcherFramingDetailsResponse` | | +| mlb | `mlb.statcastCatcherPopTime` | `mlb-statcast-catcher-pop-time` | `GET /mlb/statcast-catcher-pop-time` | `year` (query String)
`team_id` (query String)
`min2b` (query String)
`min3b` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastCatcherPopTimeResponse` | | +| mlb | `mlb.statcastCatcherStance` | `mlb-statcast-catcher-stance` | `GET /mlb/statcast-catcher-stance` | `type` (query String)
`season_start` (query String)
`season_end` (query String)
`game_type` (query String)
`min_pitches` (query String)
`min_results` (query String)
`date_start` (query String)
`date_end` (query String)
`bat_side` (query String)
`pitch_hand` (query String)
`knee_code` (query String)
`teams` (query String)
`pitch_types` (query String)
`group_by` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastCatcherStanceResponse` | | +| mlb | `mlb.statcastCatcherThrowing` | `mlb-statcast-catcher-throwing` | `GET /mlb/statcast-catcher-throwing` | `type` (query String)
`season_start` (query String)
`season_end` (query String)
`game_type` (query String)
`minimum` (query String)
`target_base` (query String)
`split` (query String)
`team` (query String)
`with_team_only` (query Boolean)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastCatcherThrowingResponse` | | +| mlb | `mlb.statcastCatcherThrowingDetails` | `mlb-statcast-catcher-throwing-details` | `GET /mlb/statcast-catcher-throwing-details` | `entity_id` (query Integer required)
`year` (query String)
`game_type` (query String)
`minimum` (query String)
`target_base` (query String)
`split` (query String)
`team` (query String)
`with_team_only` (query Boolean)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastCatcherThrowingDetailsResponse` | | | mlb | `mlb.statcastExpected` | `mlb-statcast-expected` | `GET /mlb/statcast-expected` | `type` (query String)
`year` (query Integer)
`team_id` (query String)
`position` (query String)
`filter_type` (query String)
`minimum` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastExpectedResponse` | | +| mlb | `mlb.statcastFieldingRunValue` | `mlb-statcast-fielding-run-value` | `GET /mlb/statcast-fielding-run-value` | `type` (query String)
`season_start` (query String)
`season_end` (query String)
`game_type` (query String)
`minimum` (query String)
`minimum_split` (query String)
`position` (query String)
`team_id` (query String)
`group_by` (query String)
`date_start` (query String)
`date_end` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastFieldingRunValueResponse` | | +| mlb | `mlb.statcastFirstBaseReceiving` | `mlb-statcast-first-base-receiving` | `GET /mlb/statcast-first-base-receiving` | `type` (query String)
`season[]` (query String)
`gameType[]` (query String)
`min` (query String)
`minSplit` (query String)
`splitYear` (query String)
`split[]` (query String)
`team[]` (query String)
`dateStart` (query String)
`dateEnd` (query String)
`fielder_3_hand` (query String)
`min_height_in_inches` (query String)
`is_hit_into_play_field_out` (query String)
`runners_on_cd[]` (query String)
`throw_pos_id[]` (query String)
`throw_height_code[]` (query String)
`throw_location_code_full[]` (query String)
`bin_time_X10[]` (query String)
`sortColumn` (query String)
`sortDirection` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastFirstBaseReceivingResponse` | | +| mlb | `mlb.statcastFirstBaseReceivingDetails` | `mlb-statcast-first-base-receiving-details` | `GET /mlb/statcast-first-base-receiving-details` | `player_id` (query Integer required)
`type` (query String)
`season[]` (query String)
`gameType[]` (query String)
`min` (query String)
`minSplit` (query String)
`split[]` (query String)
`splitYear` (query String)
`team[]` (query String)
`dateStart` (query String)
`dateEnd` (query String)
`fielder_3_hand` (query String)
`min_height_in_inches` (query String)
`is_hit_into_play_field_out` (query String)
`runners_on_cd[]` (query String)
`throw_pos_id[]` (query String)
`throw_height_code[]` (query String)
`throw_location_code_full[]` (query String)
`bin_time_X10[]` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastFirstBaseReceivingDetailsResponse` | | +| mlb | `mlb.statcastHomeRuns` | `mlb-statcast-home-runs` | `GET /mlb/statcast-home-runs` | `player_type` (query String)
`year` (query String)
`team` (query String)
`min` (query String)
`cat` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastHomeRunsResponse` | | +| mlb | `mlb.statcastHomeRunsDetails` | `mlb-statcast-home-runs-details` | `GET /mlb/statcast-home-runs-details` | `player_id` (query String required)
`player_type` (query String)
`year` (query String)
`cat` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastHomeRunsDetailsResponse` | | | mlb | `mlb.statcast` | `mlb-statcast` | `GET /mlb/statcast-leaders` | `type` (query String)
`year` (query Integer)
`team_id` (query String)
`position` (query String)
`min_bbe` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastResponse` | | | mlb | `mlb.statcastOaa` | `mlb-statcast-oaa` | `GET /mlb/statcast-oaa` | `type` (query String)
`start_year` (query Integer)
`end_year` (query Integer)
`split` (query String)
`team_id` (query String)
`range` (query String)
`minimum` (query String)
`position` (query String)
`roles` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastOaaResponse` | | +| mlb | `mlb.statcastParkFactors` | `mlb-statcast-park-factors` | `GET /mlb/statcast-park-factors` | `type` (query String)
`year` (query String)
`bat_side` (query String)
`condition` (query String)
`rolling` (query String)
`stat` (query String)
`parks` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastParkFactorsResponse` | | +| mlb | `mlb.statcastPercentile` | `mlb-statcast-percentile` | `GET /mlb/statcast-percentile` | `type` (query String)
`year` (query String)
`team` (query String)
`pctl` (query List)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastPercentileResponse` | | +| mlb | `mlb.statcastPitchArsenal` | `mlb-statcast-pitch-arsenal` | `GET /mlb/statcast-pitch-arsenal` | `type` (query String)
`year` (query String)
`team_id` (query String)
`pitch_type` (query String)
`min_pa` (query String)
`min_pitches` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastPitchArsenalResponse` | | +| mlb | `mlb.statcastPitchArsenalDetails` | `mlb-statcast-pitch-arsenal-details` | `GET /mlb/statcast-pitch-arsenal-details` | `player_id` (query String required)
`player_type` (query String)
`pitch_type` (query String required)
`year` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastPitchArsenalDetailsResponse` | | +| mlb | `mlb.statcastPitchArsenals` | `mlb-statcast-pitch-arsenals` | `GET /mlb/statcast-pitch-arsenals` | `year` (query String)
`type` (query String)
`hand` (query String)
`min_pitches` (query String)
`team` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastPitchArsenalsResponse` | | +| mlb | `mlb.statcastPitchMovement` | `mlb-statcast-pitch-movement` | `GET /mlb/statcast-pitch-movement` | `year` (query String)
`pitch_type` (query String)
`hand` (query String)
`min` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastPitchMovementResponse` | | +| mlb | `mlb.statcastPitchTempo` | `mlb-statcast-pitch-tempo` | `GET /mlb/statcast-pitch-tempo` | `type` (query String)
`season_start` (query String)
`season_end` (query String)
`game_type` (query String)
`n` (query String)
`team` (query String)
`split` (query String)
`with_team_only` (query String)
`q` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastPitchTempoResponse` | | +| mlb | `mlb.statcastPitchTempoPlayer` | `mlb-statcast-pitch-tempo-player` | `GET /mlb/statcast-pitch-tempo-player` | `entity_id` (query String required)
`type` (query String)
`season_start` (query String)
`season_end` (query String)
`game_type` (query String) | `ApiKeyAuth` | `MlbStatcastPitchTempoPlayerResponse` | | +| mlb | `mlb.statcastPitchTimer` | `mlb-statcast-pitch-timer` | `GET /mlb/statcast-pitch-timer` | `type` (query String)
`season` (query String)
`min_pitches` (query String)
`include_zeroes` (query String)
`q` (query String)
`chart_sort` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastPitchTimerResponse` | | +| mlb | `mlb.statcastPlayerDetails` | `mlb-statcast-player-details` | `GET /mlb/statcast-player-details` | `player_id` (query String required)
`player_type` (query String)
`year` (query Integer) | `ApiKeyAuth` | `MlbStatcastPlayerDetailsResponse` | | +| mlb | `mlb.statcastRolling` | `mlb-statcast-rolling` | `GET /mlb/statcast-rolling` | `metric` (query String)
`role` (query String)
`window_pa` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastRollingResponse` | | +| mlb | `mlb.statcastRunValue` | `mlb-statcast-run-value` | `GET /mlb/statcast-run-value` | `group` (query String)
`year` (query String)
`team` (query String)
`min` (query String)
`leverage` (query String)
`type` (query String)
`sub_type` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastRunValueResponse` | | +| mlb | `mlb.statcastRunningGame` | `mlb-statcast-running-game` | `GET /mlb/statcast-running-game` | `type` (query String)
`game_type` (query String)
`pitch_hand` (query String)
`runner_moved` (query String)
`target_base` (query String)
`prior_pk` (query String)
`n` (query String)
`season_start` (query String)
`season_end` (query String)
`split` (query String)
`team` (query String)
`with_team_only` (query Boolean)
`sort` (query String)
`sort_dir` (query String)
`search` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastRunningGameResponse` | | +| mlb | `mlb.statcastRunningGameDetails` | `mlb-statcast-running-game-details` | `GET /mlb/statcast-running-game-details` | `entity_id` (query Integer required)
`type` (query String)
`game_type` (query String)
`pitch_hand` (query String)
`runner_moved` (query String)
`target_base` (query String)
`prior_pk` (query String)
`n` (query String)
`season_start` (query String)
`season_end` (query String)
`split` (query String)
`team` (query String)
`with_team_only` (query Boolean)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastRunningGameDetailsResponse` | | +| mlb | `mlb.statcastSprintSpeed` | `mlb-statcast-sprint-speed` | `GET /mlb/statcast-sprint-speed` | `min_season` (query String)
`max_season` (query String)
`position` (query String)
`team_id` (query String)
`minimum_runs` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastSprintSpeedResponse` | | +| mlb | `mlb.statcastSprintSpeedTeams` | `mlb-statcast-sprint-speed-teams` | `GET /mlb/statcast-sprint-speed-teams` | `season` (query String)
`team` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastSprintSpeedTeamsResponse` | | +| mlb | `mlb.statcastSwingPath` | `mlb-statcast-swing-path` | `GET /mlb/statcast-swing-path` | `type` (query String)
`season_start` (query String)
`season_end` (query String)
`game_type` (query String)
`min_swings` (query String)
`min_group_swings` (query String)
`team_id` (query String)
`date_start` (query String)
`date_end` (query String)
`bat_side` (query String)
`contact_type` (query String)
`is_hard_hit` (query String)
`attack_zone` (query String)
`pitch_hand` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastSwingPathResponse` | | +| mlb | `mlb.statcastSwingTiming` | `mlb-statcast-swing-timing` | `GET /mlb/statcast-swing-timing` | `type` (query String)
`seasons` (query String)
`game_types` (query String)
`splits` (query String)
`min_swings` (query String)
`min_split` (query String)
`split_year` (query String)
`teams` (query String)
`date_start` (query String)
`date_end` (query String)
`bat_side` (query String)
`contact_type` (query String)
`attack_zone` (query String)
`pitch_hand` (query String)
`pitch_types` (query String)
`counts` (query String)
`swing_timing_x` (query String)
`swing_timing_y` (query String)
`swing_timing_z` (query String)
`flags` (query String)
`not_flags` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastSwingTimingResponse` | | +| mlb | `mlb.statcastSwingTimingDetails` | `mlb-statcast-swing-timing-details` | `GET /mlb/statcast-swing-timing-details` | `row_id` (query String required)
`type` (query String required)
`seasons` (query String)
`game_types` (query String)
`splits` (query String)
`min_swings` (query String)
`min_split` (query String)
`split_year` (query String)
`teams` (query String)
`date_start` (query String)
`date_end` (query String)
`bat_side` (query String)
`contact_type` (query String)
`attack_zone` (query String)
`pitch_hand` (query String)
`pitch_types` (query String)
`counts` (query String)
`swing_timing_x` (query String)
`swing_timing_y` (query String)
`swing_timing_z` (query String)
`flags` (query String)
`not_flags` (query String) | `ApiKeyAuth` | `MlbStatcastSwingTimingDetailsResponse` | | +| mlb | `mlb.statcastTopPerformers` | `mlb-statcast-top-performers` | `GET /mlb/statcast-top-performers` | `year` (query Integer) | `ApiKeyAuth` | `MlbStatcastTopPerformersResponse` | | +| mlb | `mlb.statcastYearToYear` | `mlb-statcast-year-to-year` | `GET /mlb/statcast-year-to-year` | `group` (query String)
`type` (query String)
`year` (query String)
`sort` (query String)
`sort_dir` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MlbStatcastYearToYearResponse` | | | mlb | `mlb.teamRoster` | `mlb-team-roster` | `GET /mlb/team-roster` | `team_id` (query String required)
`season` (query Integer)
`roster_type` (query String) | `ApiKeyAuth` | `MlbTeamRosterResponse` | | | mlb | `mlb.teamStats` | `mlb-team-stats` | `GET /mlb/team-stats` | `team_id` (query String required)
`season` (query Integer)
`group` (query String required)
`stat_type` (query String)
`game_type` (query String)
`start_date` (query String)
`end_date` (query String)
`opponent_team_id` (query String)
`opponent_player_id` (query String) | `ApiKeyAuth` | `MlbTeamStatsResponse` | | | mlb | `mlb.teams` | `mlb-teams` | `GET /mlb/teams` | `season` (query Integer) | `ApiKeyAuth` | `MlbTeamsResponse` | | @@ -1785,6 +1937,11 @@ Total operations: `3275` | nationAfrica | `nationAfrica.nationafricaHeadlines` | `nationafrica-headlines` | `GET /nationafrica/headlines` | `section` (query String required) | `ApiKeyAuth` | `NationAfricaNationafricaHeadlinesResponse` | | | nationAfrica | `nationAfrica.nationafricaNews` | `nationafrica-news` | `GET /nationafrica/news` | none | `ApiKeyAuth` | `NationAfricaNationafricaNewsResponse` | | | nationAfrica | `nationAfrica.nationafricaSections` | `nationafrica-sections` | `GET /nationafrica/sections` | none | `ApiKeyAuth` | `NationAfricaNationafricaSectionsResponse` | | +| theNational | `theNational.nationalArticle` | `national-article` | `GET /national/article` | `url` (query String required) | `ApiKeyAuth` | `TheNationalNationalArticleResponse` | | +| theNational | `theNational.nationalAuthor` | `national-author` | `GET /national/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `TheNationalNationalAuthorResponse` | | +| theNational | `theNational.nationalHeadlines` | `national-headlines` | `GET /national/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheNationalNationalHeadlinesResponse` | | +| theNational | `theNational.nationalNews` | `national-news` | `GET /national/news` | none | `ApiKeyAuth` | `TheNationalNationalNewsResponse` | | +| theNational | `theNational.nationalSections` | `national-sections` | `GET /national/sections` | none | `ApiKeyAuth` | `TheNationalNationalSectionsResponse` | | | nationalPost | `nationalPost.nationalpostArticle` | `nationalpost-article` | `GET /nationalpost/article` | `url` (query String required) | `ApiKeyAuth` | `NationalPostNationalpostArticleResponse` | | | nationalPost | `nationalPost.nationalpostAuthor` | `nationalpost-author` | `GET /nationalpost/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `NationalPostNationalpostAuthorResponse` | | | nationalPost | `nationalPost.nationalpostHeadlines` | `nationalpost-headlines` | `GET /nationalpost/headlines` | `section` (query String required) | `ApiKeyAuth` | `NationalPostNationalpostHeadlinesResponse` | | @@ -1796,11 +1953,17 @@ Total operations: `3275` | nbcNews | `nbcNews.call` | `nbc-news` | `GET /nbc/news` | none | `ApiKeyAuth` | `NbcNewsCallResponse` | | | nbcNews | `nbcNews.nbcSections` | `nbc-sections` | `GET /nbc/sections` | none | `ApiKeyAuth` | `NbcNewsNbcSectionsResponse` | | | ndtv | `ndtv.article` | `ndtv-article` | `GET /ndtv/article` | `url` (query String required) | `ApiKeyAuth` | `NdtvArticleResponse` | | -| ndtv | `ndtv.author` | `ndtv-author` | `GET /ndtv/author` | `url` (query String required) | `ApiKeyAuth` | `NdtvAuthorResponse` | | +| ndtv | `ndtv.author` | `ndtv-author` | `GET /ndtv/author` | `url` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `NdtvAuthorResponse` | | | ndtv | `ndtv.headlines` | `ndtv-headlines` | `GET /ndtv/headlines` | `section` (query String required) | `ApiKeyAuth` | `NdtvHeadlinesResponse` | | +| ndtv | `ndtv.latestVideos` | `ndtv-latest-videos` | `GET /ndtv/latest-videos` | `page` (query Integer) | `ApiKeyAuth` | `NdtvLatestVideosResponse` | | +| ndtv | `ndtv.liveBlog` | `ndtv-live-blog` | `GET /ndtv/live-blog` | `url` (query String required) | `ApiKeyAuth` | `NdtvLiveBlogResponse` | | +| ndtv | `ndtv.liveBlogs` | `ndtv-live-blogs` | `GET /ndtv/live-blogs` | `page` (query Integer) | `ApiKeyAuth` | `NdtvLiveBlogsResponse` | | | ndtv | `ndtv.news` | `ndtv-news` | `GET /ndtv/news` | none | `ApiKeyAuth` | `NdtvNewsResponse` | | | ndtv | `ndtv.search` | `ndtv-search` | `GET /ndtv/search` | `query` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `NdtvSearchResponse` | | | ndtv | `ndtv.sections` | `ndtv-sections` | `GET /ndtv/sections` | none | `ApiKeyAuth` | `NdtvSectionsResponse` | | +| 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` | | | 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` | | @@ -1839,6 +2002,11 @@ Total operations: `3275` | nike | `nike.search` | `nike-search` | `GET /nike/search` | `keyword` (query String)
`category` (query String)
`page` (query Integer) | `ApiKeyAuth` | `NikeSearchResponse` | | | nike | `nike.stores` | `nike-stores` | `GET /nike/stores` | `lat` (query Double required)
`lng` (query Double required)
`radius_miles` (query Integer)
`page` (query Integer) | `ApiKeyAuth` | `NikeStoresResponse` | | | nike | `nike.suggest` | `nike-suggest` | `GET /nike/suggest` | `query` (query String required) | `ApiKeyAuth` | `NikeSuggestResponse` | | +| nineToFiveGoogle | `nineToFiveGoogle.article` | `ninetofivegoogle-article` | `GET /ninetofivegoogle/article` | `url` (query String required) | `ApiKeyAuth` | `NineToFiveGoogleArticleResponse` | | +| nineToFiveGoogle | `nineToFiveGoogle.author` | `ninetofivegoogle-author` | `GET /ninetofivegoogle/author` | `url` (query String required) | `ApiKeyAuth` | `NineToFiveGoogleAuthorResponse` | | +| nineToFiveGoogle | `nineToFiveGoogle.headlines` | `ninetofivegoogle-headlines` | `GET /ninetofivegoogle/headlines` | `section` (query String required) | `ApiKeyAuth` | `NineToFiveGoogleHeadlinesResponse` | | +| nineToFiveGoogle | `nineToFiveGoogle.news` | `ninetofivegoogle-news` | `GET /ninetofivegoogle/news` | none | `ApiKeyAuth` | `NineToFiveGoogleNewsResponse` | | +| nineToFiveGoogle | `nineToFiveGoogle.sections` | `ninetofivegoogle-sections` | `GET /ninetofivegoogle/sections` | none | `ApiKeyAuth` | `NineToFiveGoogleSectionsResponse` | | | nineToFiveMac | `nineToFiveMac.article` | `ninetofivemac-article` | `GET /ninetofivemac/article` | `url` (query String required) | `ApiKeyAuth` | `NineToFiveMacArticleResponse` | | | nineToFiveMac | `nineToFiveMac.author` | `ninetofivemac-author` | `GET /ninetofivemac/author` | `url` (query String required) | `ApiKeyAuth` | `NineToFiveMacAuthorResponse` | | | nineToFiveMac | `nineToFiveMac.headlines` | `ninetofivemac-headlines` | `GET /ninetofivemac/headlines` | `section` (query String required) | `ApiKeyAuth` | `NineToFiveMacHeadlinesResponse` | | @@ -2025,6 +2193,10 @@ Total operations: `3275` | phoneArena | `phoneArena.phonearenaHeadlines` | `phonearena-headlines` | `GET /phonearena/headlines` | `section` (query String required) | `ApiKeyAuth` | `PhoneArenaPhonearenaHeadlinesResponse` | | | phoneArena | `phoneArena.phonearenaNews` | `phonearena-news` | `GET /phonearena/news` | none | `ApiKeyAuth` | `PhoneArenaPhonearenaNewsResponse` | | | phoneArena | `phoneArena.phonearenaSections` | `phonearena-sections` | `GET /phonearena/sections` | none | `ApiKeyAuth` | `PhoneArenaPhonearenaSectionsResponse` | | +| physOrg | `physOrg.physorgArticle` | `physorg-article` | `GET /physorg/article` | `url` (query String required) | `ApiKeyAuth` | `PhysOrgPhysorgArticleResponse` | | +| physOrg | `physOrg.physorgHeadlines` | `physorg-headlines` | `GET /physorg/headlines` | `section` (query String required) | `ApiKeyAuth` | `PhysOrgPhysorgHeadlinesResponse` | | +| physOrg | `physOrg.physorgNews` | `physorg-news` | `GET /physorg/news` | none | `ApiKeyAuth` | `PhysOrgPhysorgNewsResponse` | | +| physOrg | `physOrg.physorgSections` | `physorg-sections` | `GET /physorg/sections` | none | `ApiKeyAuth` | `PhysOrgPhysorgSectionsResponse` | | | meta | `meta.ping` | `ping` | `GET /ping` | none | none | `MetaPingResponse` | | | meta | `meta.ready` | `ready` | `GET /ready` | none | none | `MetaReadyResponse` | | | pinterest | `pinterest.board` | `pinterest-board` | `GET /pinterest/board/{username}/{slug}` | `username` (path String required)
`slug` (path String required) | `ApiKeyAuth` | `PinterestBoardResponse` | | @@ -2285,6 +2457,19 @@ Total operations: `3275` | resy | `resy.locations` | `resy-locations` | `GET /resy/locations` | `q` (query String)
`country` (query String) | `ApiKeyAuth` | `ResyLocationsResponse` | | | resy | `resy.restaurant` | `resy-restaurant` | `GET /resy/restaurant` | `restaurant_id` (query String required) | `ApiKeyAuth` | `ResyRestaurantResponse` | | | resy | `resy.search` | `resy-search` | `GET /resy/search` | `term` (query String)
`latitude` (query Double required)
`longitude` (query Double required)
`date` (query String)
`party_size` (query Integer)
`size` (query Integer) | `ApiKeyAuth` | `ResySearchResponse` | | +| retailMeNot | `retailMeNot.retailmenotAutocomplete` | `retailmenot-autocomplete` | `GET /retailmenot/autocomplete` | `term` (query String required) | `ApiKeyAuth` | `RetailMeNotRetailmenotAutocompleteResponse` | | +| retailMeNot | `retailMeNot.retailmenotBlogCategories` | `retailmenot-blog-categories` | `GET /retailmenot/blog-categories` | none | `ApiKeyAuth` | `RetailMeNotRetailmenotBlogCategoriesResponse` | | +| retailMeNot | `retailMeNot.retailmenotBlogPost` | `retailmenot-blog-post` | `GET /retailmenot/blog-post` | `slug` (query String required) | `ApiKeyAuth` | `RetailMeNotRetailmenotBlogPostResponse` | | +| retailMeNot | `retailMeNot.retailmenotBlogPosts` | `retailmenot-blog-posts` | `GET /retailmenot/blog-posts` | `query` (query String)
`category` (query String)
`tag` (query String)
`order_by` (query String)
`order` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `RetailMeNotRetailmenotBlogPostsResponse` | | +| retailMeNot | `retailMeNot.retailmenotBlogTags` | `retailmenot-blog-tags` | `GET /retailmenot/blog-tags` | `query` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `RetailMeNotRetailmenotBlogTagsResponse` | | +| retailMeNot | `retailMeNot.retailmenotCashback` | `retailmenot-cashback` | `GET /retailmenot/cashback` | none | `ApiKeyAuth` | `RetailMeNotRetailmenotCashbackResponse` | | +| retailMeNot | `retailMeNot.retailmenotCategories` | `retailmenot-categories` | `GET /retailmenot/categories` | none | `ApiKeyAuth` | `RetailMeNotRetailmenotCategoriesResponse` | | +| retailMeNot | `retailMeNot.retailmenotCategory` | `retailmenot-category` | `GET /retailmenot/category` | `slug` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `RetailMeNotRetailmenotCategoryResponse` | | +| retailMeNot | `retailMeNot.retailmenotDealEvent` | `retailmenot-deal-event` | `GET /retailmenot/deal-event` | `slug` (query String required) | `ApiKeyAuth` | `RetailMeNotRetailmenotDealEventResponse` | | +| retailMeNot | `retailMeNot.retailmenotDealEvents` | `retailmenot-deal-events` | `GET /retailmenot/deal-events` | none | `ApiKeyAuth` | `RetailMeNotRetailmenotDealEventsResponse` | | +| retailMeNot | `retailMeNot.retailmenotHome` | `retailmenot-home` | `GET /retailmenot/home` | none | `ApiKeyAuth` | `RetailMeNotRetailmenotHomeResponse` | | +| retailMeNot | `retailMeNot.retailmenotStore` | `retailmenot-store` | `GET /retailmenot/store` | `domain` (query String required)
`market` (query String) | `ApiKeyAuth` | `RetailMeNotRetailmenotStoreResponse` | | +| retailMeNot | `retailMeNot.retailmenotStores` | `retailmenot-stores` | `GET /retailmenot/stores` | `letter` (query String required)
`market` (query String) | `ApiKeyAuth` | `RetailMeNotRetailmenotStoresResponse` | | | reuters | `reuters.article` | `reuters-article` | `GET /reuters/article` | `url` (query String required) | `ApiKeyAuth` | `ReutersArticleResponse` | | | reuters | `reuters.articles` | `reuters-articles` | `GET /reuters/articles` | `page` (query Integer) | `ApiKeyAuth` | `ReutersArticlesResponse` | | | reuters | `reuters.author` | `reuters-author` | `GET /reuters/author` | `url` (query String required) | `ApiKeyAuth` | `ReutersAuthorResponse` | | @@ -2563,15 +2748,31 @@ Total operations: `3275` | sportingNews | `sportingNews.sportingnewsSections` | `sportingnews-sections` | `GET /sportingnews/sections` | none | `ApiKeyAuth` | `SportingNewsSportingnewsSectionsResponse` | | | sportskeeda | `sportskeeda.article` | `sportskeeda-article` | `GET /sportskeeda/article` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `SportskeedaArticleResponse` | | | sportskeeda | `sportskeeda.author` | `sportskeeda-author` | `GET /sportskeeda/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `SportskeedaAuthorResponse` | | +| sportskeeda | `sportskeeda.collegeBasketballSchedule` | `sportskeeda-college-basketball-schedule` | `GET /sportskeeda/college-basketball-schedule` | `date` (query String required)
`season` (query Integer required) | `ApiKeyAuth` | `SportskeedaCollegeBasketballScheduleResponse` | | +| sportskeeda | `sportskeeda.collegeBasketballScheduleOptions` | `sportskeeda-college-basketball-schedule-options` | `GET /sportskeeda/college-basketball-schedule-options` | `season` (query Integer) | `ApiKeyAuth` | `SportskeedaCollegeBasketballScheduleOptionsResponse` | | +| sportskeeda | `sportskeeda.cricketCommentary` | `sportskeeda-cricket-commentary` | `GET /sportskeeda/cricket-commentary` | `slug` (query String required)
`cursor` (query String)
`language` (query String) | `ApiKeyAuth` | `SportskeedaCricketCommentaryResponse` | | +| sportskeeda | `sportskeeda.cricketMatch` | `sportskeeda-cricket-match` | `GET /sportskeeda/cricket-match` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaCricketMatchResponse` | | | sportskeeda | `sportskeeda.depthChart` | `sportskeeda-depth-chart` | `GET /sportskeeda/depth-chart` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaDepthChartResponse` | | +| sportskeeda | `sportskeeda.draftPicks` | `sportskeeda-draft-picks` | `GET /sportskeeda/draft-picks` | `slug` (query String required)
`year` (query Integer)
`round` (query String)
`position` (query String)
`q` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `SportskeedaDraftPicksResponse` | | +| sportskeeda | `sportskeeda.draftPicksOptions` | `sportskeeda-draft-picks-options` | `GET /sportskeeda/draft-picks-options` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaDraftPicksOptionsResponse` | | +| sportskeeda | `sportskeeda.eventCalendar` | `sportskeeda-event-calendar` | `GET /sportskeeda/event-calendar` | `region` (query String)
`sport` (query String)
`month` (query String)
`start_date` (query String)
`end_date` (query String) | `ApiKeyAuth` | `SportskeedaEventCalendarResponse` | | +| sportskeeda | `sportskeeda.eventCalendarOptions` | `sportskeeda-event-calendar-options` | `GET /sportskeeda/event-calendar-options` | none | `ApiKeyAuth` | `SportskeedaEventCalendarOptionsResponse` | | | sportskeeda | `sportskeeda.feed` | `sportskeeda-feed` | `GET /sportskeeda/feed` | `slug` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `SportskeedaFeedResponse` | | | sportskeeda | `sportskeeda.footballData` | `sportskeeda-football-data` | `GET /sportskeeda/football-data` | `event` (query String required)
`matchday` (query String) | `ApiKeyAuth` | `SportskeedaFootballDataResponse` | | | sportskeeda | `sportskeeda.footballOptions` | `sportskeeda-football-options` | `GET /sportskeeda/football-options` | `event` (query String) | `ApiKeyAuth` | `SportskeedaFootballOptionsResponse` | | +| sportskeeda | `sportskeeda.guessingGame` | `sportskeeda-guessing-game` | `GET /sportskeeda/guessing-game` | `slug` (query String required)
`date` (query String required) | `ApiKeyAuth` | `SportskeedaGuessingGameResponse` | | +| sportskeeda | `sportskeeda.guessingGameEntities` | `sportskeeda-guessing-game-entities` | `GET /sportskeeda/guessing-game-entities` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaGuessingGameEntitiesResponse` | | +| sportskeeda | `sportskeeda.guessingGames` | `sportskeeda-guessing-games` | `GET /sportskeeda/guessing-games` | none | `ApiKeyAuth` | `SportskeedaGuessingGamesResponse` | | +| sportskeeda | `sportskeeda.nbaQueries` | `sportskeeda-nba-queries` | `GET /sportskeeda/nba-queries` | `category` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `SportskeedaNbaQueriesResponse` | | | sportskeeda | `sportskeeda.news` | `sportskeeda-news` | `GET /sportskeeda/news` | none | `ApiKeyAuth` | `SportskeedaNewsResponse` | | -| sportskeeda | `sportskeeda.pageData` | `sportskeeda-page-data` | `GET /sportskeeda/page-data` | `slug` (query String required)
`season` (query Integer)
`type` (query String) | `ApiKeyAuth` | `SportskeedaPageDataResponse` | | +| sportskeeda | `sportskeeda.pageData` | `sportskeeda-page-data` | `GET /sportskeeda/page-data` | `slug` (query String required)
`season` (query Integer)
`type` (query String)
`conference` (query String) | `ApiKeyAuth` | `SportskeedaPageDataResponse` | | | sportskeeda | `sportskeeda.pageOptions` | `sportskeeda-page-options` | `GET /sportskeeda/page-options` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaPageOptionsResponse` | | | sportskeeda | `sportskeeda.playerStats` | `sportskeeda-player-stats` | `GET /sportskeeda/player-stats` | `slug` (query String required)
`event_type` (query String) | `ApiKeyAuth` | `SportskeedaPlayerStatsResponse` | | | sportskeeda | `sportskeeda.profile` | `sportskeeda-profile` | `GET /sportskeeda/profile` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaProfileResponse` | | +| sportskeeda | `sportskeeda.quiz` | `sportskeeda-quiz` | `GET /sportskeeda/quiz` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaQuizResponse` | | +| sportskeeda | `sportskeeda.quizCategories` | `sportskeeda-quiz-categories` | `GET /sportskeeda/quiz-categories` | none | `ApiKeyAuth` | `SportskeedaQuizCategoriesResponse` | | +| sportskeeda | `sportskeeda.quizzes` | `sportskeeda-quizzes` | `GET /sportskeeda/quizzes` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaQuizzesResponse` | | +| sportskeeda | `sportskeeda.salaryCap` | `sportskeeda-salary-cap` | `GET /sportskeeda/salary-cap` | `slug` (query String required)
`q` (query String)
`sort_by` (query String)
`order` (query String) | `ApiKeyAuth` | `SportskeedaSalaryCapResponse` | | | sportskeeda | `sportskeeda.schedule` | `sportskeeda-schedule` | `GET /sportskeeda/schedule` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaScheduleResponse` | | | sportskeeda | `sportskeeda.sections` | `sportskeeda-sections` | `GET /sportskeeda/sections` | none | `ApiKeyAuth` | `SportskeedaSectionsResponse` | | | sportskeeda | `sportskeeda.sitemapItems` | `sportskeeda-sitemap-items` | `GET /sportskeeda/sitemap-items` | `slug` (query String)
`sitemap_url` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `SportskeedaSitemapItemsResponse` | | @@ -2579,9 +2780,20 @@ Total operations: `3275` | sportskeeda | `sportskeeda.standings` | `sportskeeda-standings` | `GET /sportskeeda/standings` | `slug` (query String required)
`season` (query String) | `ApiKeyAuth` | `SportskeedaStandingsResponse` | | | sportskeeda | `sportskeeda.standingsOptions` | `sportskeeda-standings-options` | `GET /sportskeeda/standings-options` | `slug` (query String required)
`season` (query String) | `ApiKeyAuth` | `SportskeedaStandingsOptionsResponse` | | | sportskeeda | `sportskeeda.taxonomySearch` | `sportskeeda-taxonomy-search` | `GET /sportskeeda/taxonomy-search` | `q` (query String required) | `ApiKeyAuth` | `SportskeedaTaxonomySearchResponse` | | +| sportskeeda | `sportskeeda.topic` | `sportskeeda-topic` | `GET /sportskeeda/topic` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaTopicResponse` | | | sportskeeda | `sportskeeda.tradeValues` | `sportskeeda-trade-values` | `GET /sportskeeda/trade-values` | `slug` (query String required)
`position` (query String)
`scoring` (query String)
`superflex` (query Boolean)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `SportskeedaTradeValuesResponse` | | +| sportskeeda | `sportskeeda.transactions` | `sportskeeda-transactions` | `GET /sportskeeda/transactions` | `slug` (query String)
`season` (query String)
`month` (query String required)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `SportskeedaTransactionsResponse` | | +| sportskeeda | `sportskeeda.transactionsOptions` | `sportskeeda-transactions-options` | `GET /sportskeeda/transactions-options` | `season` (query String) | `ApiKeyAuth` | `SportskeedaTransactionsOptionsResponse` | | | sportskeeda | `sportskeeda.video` | `sportskeeda-video` | `GET /sportskeeda/video` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaVideoResponse` | | | sportskeeda | `sportskeeda.videos` | `sportskeeda-videos` | `GET /sportskeeda/videos` | `slug` (query String) | `ApiKeyAuth` | `SportskeedaVideosResponse` | | +| sportskeeda | `sportskeeda.wikiActivity` | `sportskeeda-wiki-activity` | `GET /sportskeeda/wiki-activity` | `slug` (query String required)
`page` (query Integer)
`limit` (query Integer)
`sort` (query String)
`sort_by` (query String) | `ApiKeyAuth` | `SportskeedaWikiActivityResponse` | | +| sportskeeda | `sportskeeda.wikiArticle` | `sportskeeda-wiki-article` | `GET /sportskeeda/wiki-article` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaWikiArticleResponse` | | +| sportskeeda | `sportskeeda.wikiCategories` | `sportskeeda-wiki-categories` | `GET /sportskeeda/wiki-categories` | `wiki` (query String required) | `ApiKeyAuth` | `SportskeedaWikiCategoriesResponse` | | +| sportskeeda | `sportskeeda.wikiContributors` | `sportskeeda-wiki-contributors` | `GET /sportskeeda/wiki-contributors` | `slug` (query String required)
`page` (query Integer)
`limit` (query Integer)
`sort` (query String)
`sort_by` (query String) | `ApiKeyAuth` | `SportskeedaWikiContributorsResponse` | | +| sportskeeda | `sportskeeda.wikiIssues` | `sportskeeda-wiki-issues` | `GET /sportskeeda/wiki-issues` | `slug` (query String required)
`page` (query Integer)
`limit` (query Integer)
`status` (query String) | `ApiKeyAuth` | `SportskeedaWikiIssuesResponse` | | +| sportskeeda | `sportskeeda.wikiOptions` | `sportskeeda-wiki-options` | `GET /sportskeeda/wiki-options` | none | `ApiKeyAuth` | `SportskeedaWikiOptionsResponse` | | +| sportskeeda | `sportskeeda.wikiPages` | `sportskeeda-wiki-pages` | `GET /sportskeeda/wiki-pages` | `wiki` (query String required)
`page` (query Integer)
`limit` (query Integer)
`sort` (query String)
`sort_by` (query String)
`search` (query String) | `ApiKeyAuth` | `SportskeedaWikiPagesResponse` | | +| sportskeeda | `sportskeeda.wikiSummary` | `sportskeeda-wiki-summary` | `GET /sportskeeda/wiki-summary` | `slug` (query String required) | `ApiKeyAuth` | `SportskeedaWikiSummaryResponse` | | | spotifyPodcasts | `spotifyPodcasts.categories` | `spotify-podcasts-categories` | `GET /spotify-podcasts/categories` | `uri` (query String)
`page_offset` (query Integer)
`page_limit` (query Integer)
`section_offset` (query Integer)
`section_limit` (query Integer)
`include_episode_content_ratings_v2` (query Boolean) | `ApiKeyAuth` | `SpotifyPodcastsCategoriesResponse` | | | spotifyPodcasts | `spotifyPodcasts.charts` | `spotify-podcasts-charts` | `GET /spotify-podcasts/charts` | `chart` (query String)
`region` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `SpotifyPodcastsChartsResponse` | | | spotifyPodcasts | `spotifyPodcasts.episode` | `spotify-podcasts-episode` | `GET /spotify-podcasts/episode` | `uri` (query String)
`id` (query String) | `ApiKeyAuth` | `SpotifyPodcastsEpisodeResponse` | | @@ -2677,6 +2889,17 @@ Total operations: `3275` | strava | `strava.club` | `strava-club` | `GET /strava/clubs/{id}` | `id` (path String required) | `ApiKeyAuth` | `StravaClubResponse` | | | strava | `strava.routes` | `strava-routes` | `GET /strava/routes` | `sport` (query String required)
`country` (query String required)
`region` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `StravaRoutesResponse` | | | strava | `strava.routeDetail` | `strava-route-detail` | `GET /strava/routes/detail` | `path` (query String required) | `ApiKeyAuth` | `StravaRouteDetailResponse` | | +| streetEasy | `streetEasy.streeteasyAreas` | `streeteasy-areas` | `GET /streeteasy/areas` | none | `ApiKeyAuth` | `StreetEasyStreeteasyAreasResponse` | | +| streetEasy | `streetEasy.streeteasyBuilding` | `streeteasy-building` | `GET /streeteasy/buildings/{slug}` | `slug` (path String required) | `ApiKeyAuth` | `StreetEasyStreeteasyBuildingResponse` | | +| streetEasy | `streetEasy.streeteasyMarketDataCatalog` | `streeteasy-market-data-catalog` | `GET /streeteasy/market-data/catalog` | none | `ApiKeyAuth` | `StreetEasyStreeteasyMarketDataCatalogResponse` | | +| streetEasy | `streetEasy.streeteasyMarketIndices` | `streeteasy-market-indices` | `GET /streeteasy/market-data/indices` | `start_month` (query String)
`end_month` (query String) | `ApiKeyAuth` | `StreetEasyStreeteasyMarketIndicesResponse` | | +| streetEasy | `streetEasy.streeteasyMarketInventory` | `streeteasy-market-inventory` | `GET /streeteasy/market-data/inventory` | `start_month` (query String)
`end_month` (query String) | `ApiKeyAuth` | `StreetEasyStreeteasyMarketInventoryResponse` | | +| streetEasy | `streetEasy.streeteasyMarketDataSeries` | `streeteasy-market-data-series` | `GET /streeteasy/market-data/series` | `dataset` (query String required)
`start_month` (query String)
`end_month` (query String) | `ApiKeyAuth` | `StreetEasyStreeteasyMarketDataSeriesResponse` | | +| streetEasy | `streetEasy.streeteasyQuickSearch` | `streeteasy-quick-search` | `GET /streeteasy/quick-search` | `query` (query String required) | `ApiKeyAuth` | `StreetEasyStreeteasyQuickSearchResponse` | | +| streetEasy | `streetEasy.streeteasyRentalsSearch` | `streeteasy-rentals-search` | `GET /streeteasy/rentals/search` | `area_id` (query List required)
`page` (query Integer)
`per_page` (query Integer)
`sort` (query String)
`min_price` (query Integer)
`max_price` (query Integer)
`min_bedrooms` (query Integer)
`max_bedrooms` (query Integer)
`min_bathrooms` (query Double)
`max_bathrooms` (query Double)
`min_sqft` (query Integer)
`max_sqft` (query Integer)
`building_type` (query String)
`amenity` (query String)
`optional_amenity` (query String)
`pets_allowed` (query Boolean)
`open_house` (query Boolean)
`tour_3d` (query Boolean)
`video_tour` (query Boolean)
`transit_line` (query String) | `ApiKeyAuth` | `StreetEasyStreeteasyRentalsSearchResponse` | | +| streetEasy | `streetEasy.streeteasySalesSearch` | `streeteasy-sales-search` | `GET /streeteasy/sales/search` | `area_id` (query List required)
`sale_status` (query String)
`sale_type` (query String)
`page` (query Integer)
`per_page` (query Integer)
`sort` (query String)
`min_price` (query Integer)
`max_price` (query Integer)
`min_bedrooms` (query Integer)
`max_bedrooms` (query Integer)
`min_bathrooms` (query Double)
`max_bathrooms` (query Double)
`min_sqft` (query Integer)
`max_sqft` (query Integer)
`min_maintenance` (query Integer)
`max_maintenance` (query Integer)
`min_monthly_taxes` (query Integer)
`max_monthly_taxes` (query Integer)
`min_price_per_sqft` (query Integer)
`max_price_per_sqft` (query Integer)
`include_unknown_price_per_sqft` (query Boolean)
`min_year_built` (query Integer)
`max_year_built` (query Integer)
`prewar` (query Boolean)
`development` (query String)
`income_restricted` (query Boolean)
`school_id` (query List)
`zip_code` (query String)
`keywords` (query String)
`building_type` (query String)
`amenity` (query String)
`optional_amenity` (query String)
`pets_allowed` (query Boolean)
`open_house` (query Boolean)
`tour_3d` (query Boolean)
`video_tour` (query Boolean)
`transit_line` (query String) | `ApiKeyAuth` | `StreetEasyStreeteasySalesSearchResponse` | | +| streetEasy | `streetEasy.streeteasySchool` | `streeteasy-school` | `GET /streeteasy/schools/{slug}` | `slug` (path String required) | `ApiKeyAuth` | `StreetEasyStreeteasySchoolResponse` | | +| streetEasy | `streetEasy.streeteasyUnit` | `streeteasy-unit` | `GET /streeteasy/units/{building_slug}/{unit}` | `building_slug` (path String required)
`unit` (path String required) | `ApiKeyAuth` | `StreetEasyStreeteasyUnitResponse` | | | stubHub | `stubHub.stubhubCarousel` | `stubhub-carousel` | `GET /stubhub/carousel` | `performer_slug` (query String required)
`performer_id` (query Integer required)
`top_level_category_id` (query String required)
`category_id` (query Integer required)
`lat` (query Double required)
`lon` (query Double required)
`max` (query Integer) | `ApiKeyAuth` | `StubHubStubhubCarouselResponse` | | | stubHub | `stubHub.stubhubCategories` | `stubhub-categories` | `GET /stubhub/categories` | `lat` (query Double required)
`lon` (query Double required)
`from` (query String)
`to` (query String) | `ApiKeyAuth` | `StubHubStubhubCategoriesResponse` | | | stubHub | `stubHub.stubhubCategoryEvents` | `stubhub-category-events` | `GET /stubhub/category-events` | `category_id` (query Integer required)
`lat` (query Double required)
`lon` (query Double required)
`from` (query String)
`to` (query String)
`page` (query Integer)
`radius_miles` (query Integer)
`include_parking_passes` (query Boolean) | `ApiKeyAuth` | `StubHubStubhubCategoryEventsResponse` | | @@ -2776,6 +2999,11 @@ Total operations: `3275` | theAtlantic | `theAtlantic.theatlanticAuthor` | `theatlantic-author` | `GET /theatlantic/author` | `url` (query String required) | `ApiKeyAuth` | `TheAtlanticTheatlanticAuthorResponse` | | | theAtlantic | `theAtlantic.theatlanticHeadlines` | `theatlantic-headlines` | `GET /theatlantic/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheAtlanticTheatlanticHeadlinesResponse` | | | theAtlantic | `theAtlantic.theatlanticSections` | `theatlantic-sections` | `GET /theatlantic/sections` | none | `ApiKeyAuth` | `TheAtlanticTheatlanticSectionsResponse` | | +| theBlaze | `theBlaze.theblazeArticle` | `theblaze-article` | `GET /theblaze/article` | `url` (query String required) | `ApiKeyAuth` | `TheBlazeTheblazeArticleResponse` | | +| theBlaze | `theBlaze.theblazeAuthor` | `theblaze-author` | `GET /theblaze/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `TheBlazeTheblazeAuthorResponse` | | +| theBlaze | `theBlaze.theblazeHeadlines` | `theblaze-headlines` | `GET /theblaze/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheBlazeTheblazeHeadlinesResponse` | | +| theBlaze | `theBlaze.theblazeNews` | `theblaze-news` | `GET /theblaze/news` | none | `ApiKeyAuth` | `TheBlazeTheblazeNewsResponse` | | +| theBlaze | `theBlaze.theblazeSections` | `theblaze-sections` | `GET /theblaze/sections` | none | `ApiKeyAuth` | `TheBlazeTheblazeSectionsResponse` | | | theBodyShop | `theBodyShop.thebodyshopCollections` | `thebodyshop-collections` | `GET /thebodyshop/collections` | `page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `TheBodyShopThebodyshopCollectionsResponse` | | | theBodyShop | `theBodyShop.thebodyshopCollectionProducts` | `thebodyshop-collection-products` | `GET /thebodyshop/collections/{handle}/products` | `handle` (path String required)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `TheBodyShopThebodyshopCollectionProductsResponse` | | | theBodyShop | `theBodyShop.thebodyshopPages` | `thebodyshop-pages` | `GET /thebodyshop/pages` | `page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `TheBodyShopThebodyshopPagesResponse` | | @@ -2807,6 +3035,11 @@ Total operations: `3275` | theJournalIe | `theJournalIe.thejournalHeadlines` | `thejournal-headlines` | `GET /thejournal/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheJournalIeThejournalHeadlinesResponse` | | | theJournalIe | `theJournalIe.thejournalNews` | `thejournal-news` | `GET /thejournal/news` | none | `ApiKeyAuth` | `TheJournalIeThejournalNewsResponse` | | | theJournalIe | `theJournalIe.thejournalSections` | `thejournal-sections` | `GET /thejournal/sections` | none | `ApiKeyAuth` | `TheJournalIeThejournalSectionsResponse` | | +| theNextWeb | `theNextWeb.thenextwebArticle` | `thenextweb-article` | `GET /thenextweb/article` | `url` (query String required) | `ApiKeyAuth` | `TheNextWebThenextwebArticleResponse` | | +| theNextWeb | `theNextWeb.thenextwebAuthor` | `thenextweb-author` | `GET /thenextweb/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `TheNextWebThenextwebAuthorResponse` | | +| theNextWeb | `theNextWeb.thenextwebHeadlines` | `thenextweb-headlines` | `GET /thenextweb/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheNextWebThenextwebHeadlinesResponse` | | +| theNextWeb | `theNextWeb.thenextwebNews` | `thenextweb-news` | `GET /thenextweb/news` | none | `ApiKeyAuth` | `TheNextWebThenextwebNewsResponse` | | +| theNextWeb | `theNextWeb.thenextwebSections` | `thenextweb-sections` | `GET /thenextweb/sections` | none | `ApiKeyAuth` | `TheNextWebThenextwebSectionsResponse` | | | theRealReal | `theRealReal.therealrealAutocomplete` | `therealreal-autocomplete` | `GET /therealreal/autocomplete` | `term` (query String required) | `ApiKeyAuth` | `TheRealRealTherealrealAutocompleteResponse` | | | theRealReal | `theRealReal.therealrealCategories` | `therealreal-categories` | `GET /therealreal/categories` | none | `ApiKeyAuth` | `TheRealRealTherealrealCategoriesResponse` | | | theRealReal | `theRealReal.therealrealCategory` | `therealreal-category` | `GET /therealreal/category` | `path` (query String required)
`on_sale` (query Boolean)
`available` (query Boolean)
`after` (query String) | `ApiKeyAuth` | `TheRealRealTherealrealCategoryResponse` | | @@ -2894,6 +3127,10 @@ Total operations: `3275` | time | `time.headlines` | `time-headlines` | `GET /time/headlines` | `section` (query String required) | `ApiKeyAuth` | `TimeHeadlinesResponse` | | | time | `time.news` | `time-news` | `GET /time/news` | none | `ApiKeyAuth` | `TimeNewsResponse` | | | time | `time.sections` | `time-sections` | `GET /time/sections` | none | `ApiKeyAuth` | `TimeSectionsResponse` | | +| timesLive | `timesLive.timesliveArticle` | `timeslive-article` | `GET /timeslive/article` | `url` (query String required) | `ApiKeyAuth` | `TimesLiveTimesliveArticleResponse` | | +| timesLive | `timesLive.timesliveHeadlines` | `timeslive-headlines` | `GET /timeslive/headlines` | `section` (query String required) | `ApiKeyAuth` | `TimesLiveTimesliveHeadlinesResponse` | | +| timesLive | `timesLive.timesliveNews` | `timeslive-news` | `GET /timeslive/news` | none | `ApiKeyAuth` | `TimesLiveTimesliveNewsResponse` | | +| timesLive | `timesLive.timesliveSections` | `timeslive-sections` | `GET /timeslive/sections` | none | `ApiKeyAuth` | `TimesLiveTimesliveSectionsResponse` | | | timesOfIndia | `timesOfIndia.timesofindiaArticle` | `timesofindia-article` | `GET /timesofindia/article` | `url` (query String required) | `ApiKeyAuth` | `TimesOfIndiaTimesofindiaArticleResponse` | | | timesOfIndia | `timesOfIndia.timesofindiaAuthor` | `timesofindia-author` | `GET /timesofindia/author` | `url` (query String required) | `ApiKeyAuth` | `TimesOfIndiaTimesofindiaAuthorResponse` | | | timesOfIndia | `timesOfIndia.timesofindiaHeadlines` | `timesofindia-headlines` | `GET /timesofindia/headlines` | `section` (query String required) | `ApiKeyAuth` | `TimesOfIndiaTimesofindiaHeadlinesResponse` | | @@ -2950,7 +3187,7 @@ Total operations: `3275` | tripAdvisor | `tripAdvisor.tripadvisorEnums` | `tripadvisor-enums` | `GET /tripadvisor/enums` | none | `ApiKeyAuth` | `TripAdvisorTripadvisorEnumsResponse` | | | tripAdvisor | `tripAdvisor.tripadvisorHotels` | `tripadvisor-hotels` | `GET /tripadvisor/hotels` | `geo_id` (query Integer required)
`filter_id` (query String)
`class` (query Integer)
`amenities` (query List)
`price_min` (query Integer)
`price_max` (query Integer)
`pricing_mode` (query String)
`travelers_choice` (query Boolean)
`travelers_choice_botb` (query Boolean)
`currency` (query String)
`offset` (query Integer)
`limit` (query Integer)
`sort` (query String) | `ApiKeyAuth` | `TripAdvisorTripadvisorHotelsResponse` | | | tripAdvisor | `tripAdvisor.tripadvisorPlace` | `tripadvisor-place` | `GET /tripadvisor/place` | `url` (query String)
`id` (query String) | `ApiKeyAuth` | `TripAdvisorTripadvisorPlaceResponse` | | -| tripAdvisor | `tripAdvisor.tripadvisorReviews` | `tripadvisor-reviews` | `GET /tripadvisor/reviews` | `id` (query String)
`url` (query String)
`page` (query Integer)
`limit` (query Integer)
`language` (query String)
`sort_type` (query String)
`sort_by` (query String)
`ratings` (query List)
`do_machine_translation` (query Boolean)
`photos_per_review_limit` (query Integer) | `ApiKeyAuth` | `TripAdvisorTripadvisorReviewsResponse` | | +| tripAdvisor | `tripAdvisor.tripadvisorReviews` | `tripadvisor-reviews` | `GET /tripadvisor/reviews` | `id` (query String)
`url` (query String)
`page` (query Integer)
`limit` (query Integer)
`language` (query String)
`sort_type` (query String)
`sort_by` (query String)
`ratings` (query String)
`do_machine_translation` (query Boolean)
`photos_per_review_limit` (query Integer) | `ApiKeyAuth` | `TripAdvisorTripadvisorReviewsResponse` | | | tripAdvisor | `tripAdvisor.tripadvisorSearch` | `tripadvisor-search` | `GET /tripadvisor/search` | `geo_id` (query Integer required)
`type` (query String required)
`filter_id` (query String)
`class` (query Integer)
`amenities` (query List)
`price_min` (query Integer)
`price_max` (query Integer)
`pricing_mode` (query String)
`travelers_choice` (query Boolean)
`travelers_choice_botb` (query Boolean)
`restaurant_date` (query String)
`restaurant_time` (query String)
`restaurant_guests` (query Integer)
`establishment_types` (query List)
`online_options` (query List)
`offset` (query Integer)
`limit` (query Integer)
`locale` (query String)
`currency` (query String)
`sort` (query String) | `ApiKeyAuth` | `TripAdvisorTripadvisorSearchResponse` | | | tripCom | `tripCom.tripcomHotelsSearch` | `tripcom-hotels-search` | `GET /tripcom/hotels/search` | `city_slug` (query String required)
`city_id` (query String required) | `ApiKeyAuth` | `TripComTripcomHotelsSearchResponse` | | | tripCom | `tripCom.tripcomHotelDetail` | `tripcom-hotel-detail` | `GET /tripcom/hotels/{id}` | `id` (path String required)
`slug` (query String) | `ApiKeyAuth` | `TripComTripcomHotelDetailResponse` | | @@ -3058,6 +3295,13 @@ Total operations: `3275` | vox | `vox.headlines` | `vox-headlines` | `GET /vox/headlines` | `section` (query String required) | `ApiKeyAuth` | `VoxHeadlinesResponse` | | | vox | `vox.news` | `vox-news` | `GET /vox/news` | none | `ApiKeyAuth` | `VoxNewsResponse` | | | vox | `vox.sections` | `vox-sections` | `GET /vox/sections` | none | `ApiKeyAuth` | `VoxSectionsResponse` | | +| vrbo | `vrbo.locationSuggestions` | `vrbo-location-suggestions` | `GET /vrbo/locations/search` | `search_term` (query String required) | `ApiKeyAuth` | `VrboLocationSuggestionsResponse` | | +| vrbo | `vrbo.property` | `vrbo-property` | `GET /vrbo/properties/{property_id}` | `property_id` (path String required) | `ApiKeyAuth` | `VrboPropertyResponse` | | +| vrbo | `vrbo.rateCalendar` | `vrbo-rate-calendar` | `GET /vrbo/properties/{property_id}/rate-calendar` | `property_id` (path String required) | `ApiKeyAuth` | `VrboRateCalendarResponse` | | +| vrbo | `vrbo.propertyReviews` | `vrbo-property-reviews` | `GET /vrbo/properties/{property_id}/reviews` | `property_id` (path String required)
`start_index` (query Integer)
`size` (query Integer)
`sort_by` (query String)
`include_recent_reviews` (query Boolean)
`include_ratings_only_reviews` (query Boolean) | `ApiKeyAuth` | `VrboPropertyReviewsResponse` | | +| vrbo | `vrbo.search` | `vrbo-search` | `POST /vrbo/search` | `request` (body String required) | `ApiKeyAuth` | `VrboSearchResponse` | | +| vrbo | `vrbo.travelPages` | `vrbo-travel-pages` | `GET /vrbo/travel-pages` | none | `ApiKeyAuth` | `VrboTravelPagesResponse` | | +| vrbo | `vrbo.travelPageDetail` | `vrbo-travel-page-detail` | `GET /vrbo/travel-pages/{slug}` | `slug` (path String required) | `ApiKeyAuth` | `VrboTravelPageDetailResponse` | | | walesOnline | `walesOnline.walesonlineArticle` | `walesonline-article` | `GET /walesonline/article` | `url` (query String required) | `ApiKeyAuth` | `WalesOnlineWalesonlineArticleResponse` | | | walesOnline | `walesOnline.walesonlineAuthor` | `walesonline-author` | `GET /walesonline/author` | `slug` (query String)
`url` (query String)
`page` (query Integer) | `ApiKeyAuth` | `WalesOnlineWalesonlineAuthorResponse` | | | walesOnline | `walesOnline.walesonlineHeadlines` | `walesonline-headlines` | `GET /walesonline/headlines` | `section` (query String required) | `ApiKeyAuth` | `WalesOnlineWalesonlineHeadlinesResponse` | | @@ -3075,6 +3319,11 @@ Total operations: `3275` | wayfair | `wayfair.categories` | `wayfair-categories` | `GET /wayfair/categories` | `q` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `WayfairCategoriesResponse` | | | wayfair | `wayfair.category` | `wayfair-category` | `GET /wayfair/category` | `category` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `WayfairCategoryResponse` | | | wayfair | `wayfair.product` | `wayfair-product` | `GET /wayfair/product/{id}` | `id` (path String required) | `ApiKeyAuth` | `WayfairProductResponse` | | +| wccftech | `wccftech.article` | `wccftech-article` | `GET /wccftech/article` | `url` (query String required) | `ApiKeyAuth` | `WccftechArticleResponse` | | +| wccftech | `wccftech.author` | `wccftech-author` | `GET /wccftech/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `WccftechAuthorResponse` | | +| 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` | | | 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` | | @@ -3222,6 +3471,11 @@ Total operations: `3275` | 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` | | +| yardbarker | `yardbarker.article` | `yardbarker-article` | `GET /yardbarker/article` | `url` (query String required) | `ApiKeyAuth` | `YardbarkerArticleResponse` | | +| yardbarker | `yardbarker.author` | `yardbarker-author` | `GET /yardbarker/author` | `url` (query String required) | `ApiKeyAuth` | `YardbarkerAuthorResponse` | | +| yardbarker | `yardbarker.headlines` | `yardbarker-headlines` | `GET /yardbarker/headlines` | `section` (query String required) | `ApiKeyAuth` | `YardbarkerHeadlinesResponse` | | +| yardbarker | `yardbarker.news` | `yardbarker-news` | `GET /yardbarker/news` | none | `ApiKeyAuth` | `YardbarkerNewsResponse` | | +| yardbarker | `yardbarker.sections` | `yardbarker-sections` | `GET /yardbarker/sections` | none | `ApiKeyAuth` | `YardbarkerSectionsResponse` | | | yelp | `yelp.business` | `yelp-business` | `GET /yelp/business/{id}` | `id` (path String required) | `ApiKeyAuth` | `YelpBusinessResponse` | | | yelp | `yelp.businessMenu` | `yelp-business-menu` | `GET /yelp/business/{id}/menu` | `id` (path String required) | `ApiKeyAuth` | `YelpBusinessMenuResponse` | | | yelp | `yelp.businessPhotos` | `yelp-business-photos` | `GET /yelp/business/{id}/photos` | `id` (path String required)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `YelpBusinessPhotosResponse` | | diff --git a/openapi/public.json b/openapi/public.json index a86e5ba..a230acb 100644 --- a/openapi/public.json +++ b/openapi/public.json @@ -2954,6 +2954,387 @@ }, "type": "object" }, + "aliexpress.AppliedFilters": { + "properties": { + "attr": { + "example": [ + "3079-4148335" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "choice": { + "type": "boolean" + }, + "free_shipping": { + "type": "boolean" + }, + "max_price": { + "example": 30, + "type": "number" + }, + "min_price": { + "example": 20, + "type": "number" + }, + "sort": { + "example": "price_asc", + "type": "string" + } + }, + "type": "object" + }, + "aliexpress.AttributeGroup": { + "properties": { + "attribute_id": { + "example": "3079", + "type": "string" + }, + "title": { + "example": "Main color", + "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/aliexpress.AttributeValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "aliexpress.AttributeValue": { + "properties": { + "label": { + "example": "Black", + "type": "string" + }, + "value": { + "example": "3079-4148335", + "type": "string" + } + }, + "type": "object" + }, + "aliexpress.FiltersResponse": { + "properties": { + "attribute_groups": { + "items": { + "$ref": "#/definitions/aliexpress.AttributeGroup" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "query": { + "example": "wireless earbuds", + "type": "string" + }, + "sort_options": { + "items": { + "$ref": "#/definitions/aliexpress.SortOption" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "switches": { + "items": { + "$ref": "#/definitions/aliexpress.SwitchOption" + }, + "type": "array" + }, + "total_results": { + "example": 16912, + "type": "integer" + } + }, + "type": "object" + }, + "aliexpress.ProductSummary": { + "properties": { + "currency_code": { + "example": "USD", + "type": "string" + }, + "discount_percent": { + "example": 72, + "type": "integer" + }, + "image_url": { + "example": "https://ae-pic-a1.aliexpress-media.com/kf/example.jpg", + "type": "string" + }, + "original_price": { + "example": 18.33, + "type": "number" + }, + "price": { + "example": 2.18, + "type": "number" + }, + "product_id": { + "example": "3256812072210872", + "type": "string" + }, + "rating": { + "example": 4.9, + "type": "number" + }, + "ship_from": { + "example": "US", + "type": "string" + }, + "sku_id": { + "example": "12000056622341651", + "type": "string" + }, + "sold_text": { + "example": "3,000+ sold", + "type": "string" + }, + "store_name": { + "example": "PinZhen Store", + "type": "string" + }, + "title": { + "example": "Wireless Bluetooth Earbuds", + "type": "string" + }, + "url": { + "example": "https://www.aliexpress.com/item/3256812072210872.html", + "type": "string" + } + }, + "type": "object" + }, + "aliexpress.Review": { + "properties": { + "anonymous": { + "example": true, + "type": "boolean" + }, + "country": { + "example": "United States", + "type": "string" + }, + "date": { + "example": "2026-09-15", + "type": "string" + }, + "helpful": { + "example": 2, + "type": "integer" + }, + "not_helpful": { + "example": 0, + "type": "integer" + }, + "rating": { + "example": 5, + "type": "number" + }, + "text": { + "type": "string" + }, + "translation": { + "type": "string" + } + }, + "type": "object" + }, + "aliexpress.ReviewStats": { + "properties": { + "average_rating": { + "example": 4.9, + "type": "number" + }, + "five_star": { + "example": 45, + "type": "integer" + }, + "four_star": { + "example": 4, + "type": "integer" + }, + "one_star": { + "example": 1, + "type": "integer" + }, + "positive_rate_percent": { + "example": 94.2, + "type": "number" + }, + "three_star": { + "example": 1, + "type": "integer" + }, + "two_star": { + "example": 0, + "type": "integer" + } + }, + "type": "object" + }, + "aliexpress.ReviewsResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 20, + "type": "integer" + }, + "product_id": { + "example": "3256812072210872", + "type": "string" + }, + "reviews": { + "items": { + "$ref": "#/definitions/aliexpress.Review" + }, + "type": "array" + }, + "statistics": { + "$ref": "#/definitions/aliexpress.ReviewStats" + }, + "total": { + "example": 51, + "type": "integer" + }, + "total_pages": { + "example": 3, + "type": "integer" + } + }, + "type": "object" + }, + "aliexpress.SearchResponse": { + "properties": { + "count": { + "example": 60, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "filters": { + "$ref": "#/definitions/aliexpress.AppliedFilters" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 60, + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/aliexpress.ProductSummary" + }, + "type": "array" + }, + "query": { + "example": "wireless earbuds", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "example": 282, + "type": "integer" + }, + "total_results": { + "example": 16912, + "type": "integer" + } + }, + "type": "object" + }, + "aliexpress.SortOption": { + "properties": { + "label": { + "example": "Price (low to high)", + "type": "string" + }, + "value": { + "example": "price_asc", + "type": "string" + } + }, + "type": "object" + }, + "aliexpress.SwitchOption": { + "properties": { + "label": { + "example": "Free shipping", + "type": "string" + }, + "param": { + "example": "free_shipping", + "type": "string" + } + }, + "type": "object" + }, + "aliexpress.filtersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/aliexpress.FiltersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "aliexpress.reviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/aliexpress.ReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "aliexpress.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/aliexpress.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "aljazeera.ArticleResponse": { "properties": { "authors": { @@ -4593,6 +4974,38 @@ }, "type": "object" }, + "androidpolice.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" + }, "anime.AiringEntry": { "properties": { "airing_at": { @@ -9926,6 +10339,50 @@ }, "type": "object" }, + "appstore.AppStoreCollection": { + "properties": { + "id": { + "type": "string" + }, + "kind": { + "description": "room | eds", + "type": "string" + }, + "platform": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "appstore.AppStoreCollectionPage": { + "properties": { + "apps": { + "items": { + "$ref": "#/definitions/appstore.EditorialItem" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, "appstore.CategoriesResult": { "properties": { "categories": { @@ -10256,6 +10713,41 @@ }, "type": "object" }, + "appstore.collectionResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/appstore.AppStoreCollectionPage" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "appstore.collectionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/appstore.AppStoreCollection" + }, + "type": "array" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "appstore.developerResponseDoc": { "properties": { "code": { @@ -23632,6 +24124,117 @@ }, "type": "object" }, + "brisbanetimes.ArticleResponse": { + "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": { + "type": "boolean" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "brisbanetimes.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/brisbanetimes.HeadlineItem" + }, + "type": "array" + }, + "bio": { + "type": "string" + }, + "email": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "social_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "brisbanetimes.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" + }, "buildinfo.Info": { "properties": { "api": { @@ -35360,9 +35963,6 @@ }, "courtlistener.JudicialPerson": { "properties": { - "has_photo": { - "type": "boolean" - }, "id": { "type": "integer" }, @@ -39675,6 +40275,58 @@ }, "type": "object" }, + "datasets.DoorDashStoreFacetResponse": { + "properties": { + "dataset": { + "type": "string" + }, + "facet": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.DoorDashStoreDatasetFacetItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "datasets.DoorDashStoreSearchResponse": { + "properties": { + "dataset": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/es.DoorDashStoreDatasetItem" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "pagination": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, "datasets.FacebookPageFacetResponse": { "properties": { "dataset": { @@ -41561,6 +42213,54 @@ }, "type": "object" }, + "datasets.doorDashStoreResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/es.DoorDashStoreRecord" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "datasets.doorDashStoresFacetResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/datasets.DoorDashStoreFacetResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "datasets.doorDashStoresSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/datasets.DoorDashStoreSearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "datasets.facebookPageResponseDoc": { "properties": { "code": { @@ -43647,6 +44347,55 @@ }, "type": "object" }, + "denverpost.AuthorArticle": { + "properties": { + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "denverpost.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/denverpost.AuthorArticle" + }, + "type": "array" + }, + "bio": { + "type": "string" + }, + "email": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "twitter": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, "depop.Brand": { "properties": { "id": { @@ -51222,77 +51971,374 @@ }, "type": "object" }, - "es.FacebookPageCandidate": { + "es.DoorDashStoreDatasetFacetItem": { + "properties": { + "count": { + "type": "integer" + }, + "key": { + "type": "string" + } + }, + "type": "object" + }, + "es.DoorDashStoreDatasetItem": { "properties": { "address": { "type": "string" }, - "category": { + "asap_available": { + "type": "boolean" + }, + "average_rating": { + "type": "number" + }, + "city": { "type": "string" }, - "contact_observed_at": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "city_region": { + "type": "string" }, - "discovered_at": { + "country": { "type": "string" }, - "discovery_source": { + "cover_image_url": { "type": "string" }, - "email": { + "crawled_at": { "type": "string" }, - "hydrated_at": { + "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" }, - "identifier": { + "discovery_country": { "type": "string" }, - "likes": { + "discovery_state": { + "type": "string" + }, + "display_asap_time": { + "type": "string" + }, + "display_status": { + "type": "string" + }, + "distance_meters": { + "type": "number" + }, + "first_seen_at": { + "type": "string" + }, + "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" + }, + "number_of_ratings": { "type": "integer" }, - "page_id": { + "phone": { "type": "string" }, - "phones": { + "pickup_available": { + "type": "boolean" + }, + "postal_code": { + "type": "string" + }, + "price_range": { + "type": "integer" + }, + "run_id": { + "type": "string" + }, + "schema_version": { + "type": "integer" + }, + "search_text": { + "type": "string" + }, + "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": { "type": "string" }, "type": "array" }, - "source_url": { + "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" }, - "status": { + "website": { + "type": "string" + } + }, + "type": "object" + }, + "es.DoorDashStoreRecord": { + "properties": { + "address": { "type": "string" }, - "title": { + "asap_available": { + "type": "boolean" + }, + "average_rating": { + "type": "number" + }, + "city": { "type": "string" }, - "website": { + "city_region": { "type": "string" }, - "whatsapp": { + "country": { + "type": "string" + }, + "cover_image_url": { + "type": "string" + }, + "crawled_at": { + "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.", + "type": "string" + }, + "discovery_country": { + "type": "string" + }, + "discovery_state": { + "type": "string" + }, + "display_asap_time": { + "type": "string" + }, + "display_status": { + "type": "string" + }, + "first_seen_at": { + "type": "string" + }, + "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" + }, + "number_of_ratings": { + "type": "integer" + }, + "phone": { + "type": "string" + }, + "pickup_available": { + "type": "boolean" + }, + "postal_code": { + "type": "string" + }, + "price_range": { + "type": "integer" + }, + "run_id": { + "type": "string" + }, + "schema_version": { + "type": "integer" + }, + "search_text": { + "type": "string" + }, + "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": { + "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" }, - "es.FacebookPageDatasetFacetItem": { + "es.DoorDashStoreTopItem": { "properties": { - "count": { - "type": "integer" + "image_url": { + "type": "string" }, - "value": { + "item_id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { "type": "string" } }, "type": "object" }, - "es.FacebookPageDatasetItem": { + "es.FacebookPageCandidate": { + "properties": { + "address": { + "type": "string" + }, + "category": { + "type": "string" + }, + "contact_observed_at": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "discovered_at": { + "type": "string" + }, + "discovery_source": { + "type": "string" + }, + "email": { + "type": "string" + }, + "hydrated_at": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "page_id": { + "type": "string" + }, + "phones": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "website": { + "type": "string" + }, + "whatsapp": { + "type": "string" + } + }, + "type": "object" + }, + "es.FacebookPageDatasetFacetItem": { + "properties": { + "count": { + "type": "integer" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "es.FacebookPageDatasetItem": { "properties": { "address": { "type": "string" @@ -57907,6 +58953,29 @@ }, "type": "object" }, + "expresstribune.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "has_next_page": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, "extract.Option": { "properties": { "instructions": { @@ -71432,27 +72501,29 @@ }, "type": "object" }, - "google.JobItem": { + "goodrx.AnswerDrug": { "properties": { - "company": { - "type": "string" - }, - "employment": { + "info_url": { "type": "string" }, - "location": { + "name": { "type": "string" }, - "posted_at": { + "slug": { "type": "string" - }, - "snippet": { + } + }, + "type": "object" + }, + "goodrx.AnswerRef": { + "properties": { + "drug": { "type": "string" }, - "source": { + "question": { "type": "string" }, - "title": { + "slug": { "type": "string" }, "url": { @@ -71461,1907 +72532,1761 @@ }, "type": "object" }, - "google.JobsOption": { + "goodrx.AnswerResponse": { "properties": { - "location": { - "example": "San Francisco, CA", + "answer": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/goodrx.ArticleRef" + }, + "type": "array" }, - "query": { - "example": "software engineer", - "type": "string" - } - }, - "required": [ - "query" - ], - "type": "object" - }, - "google.JobsResponse": { - "properties": { - "location": { - "example": "San Francisco, CA", - "type": "string" + "drug": { + "$ref": "#/definitions/goodrx.AnswerDrug" }, - "page": { - "example": 1, - "type": "integer" + "more_questions": { + "items": { + "$ref": "#/definitions/goodrx.AnswerRef" + }, + "type": "array" }, - "query": { - "example": "software engineer", + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "question": { "type": "string" }, - "results": { + "related_drugs": { "items": { - "$ref": "#/definitions/google.JobItem" + "$ref": "#/definitions/goodrx.DrugLink" }, "type": "array" - } - }, - "type": "object" - }, - "google.MapSearchOption": { - "properties": { - "country": { - "example": "us", + }, + "slug": { "type": "string" }, - "keyword": { - "example": "hotel san francisco", + "source_url": { "type": "string" }, - "language": { - "example": "en", + "url": { "type": "string" } }, "type": "object" }, - "google.NewsResponse": { + "goodrx.AnswersResponse": { "properties": { - "pagination": { - "$ref": "#/definitions/google.VerticalPagination" + "questions": { + "items": { + "$ref": "#/definitions/goodrx.AnswerRef" + }, + "type": "array" }, - "results": { + "top_questions": { "items": { - "$ref": "#/definitions/google.NewsResult" + "$ref": "#/definitions/goodrx.AnswerRef" }, "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "google.NewsResult": { + "goodrx.ArticleRef": { "properties": { - "age": { - "example": "2 hours ago", - "type": "string" - }, - "description": { - "example": "OpenAI announced an update.", - "type": "string" - }, - "position": { - "example": 1, - "type": "integer" - }, - "source": { - "example": "Example News", - "type": "string" - }, - "thumbnail": { - "example": "https://example.com/thumb.jpg", - "type": "string" - }, "title": { - "example": "OpenAI announces update", "type": "string" }, "url": { - "example": "https://example.com/openai-news", "type": "string" } }, "type": "object" }, - "google.NewsSearchResp": { + "goodrx.BrandsResponse": { "properties": { - "result": { + "drugs": { "items": { - "$ref": "#/definitions/google.SearchItem" + "$ref": "#/definitions/goodrx.DrugLink" }, "type": "array" } }, "type": "object" }, - "google.Place": { + "goodrx.ClassRef": { "properties": { - "address": { - "example": "250 Beach St, San Francisco, CA 94133", + "name": { "type": "string" }, - "amenities": { - "example": [ - "['Free Wi-Fi'", - " 'Air-conditioned'", - " 'Wi-Fi'", - " 'Parking']" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "example": [ - "['hotel']" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "example": "A 3-minute walk from Pier 41 in the Fisherman's Wharf district...", + "slug": { "type": "string" }, - "image": { - "example": "https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp", + "url": { "type": "string" - }, - "latitude": { - "example": 37.8077617, - "type": "number" - }, - "locations": { - "example": [ - "['San Francisco'", - " 'Los Angeles']" - ], + } + }, + "type": "object" + }, + "goodrx.ClassResponse": { + "properties": { + "drugs": { "items": { - "type": "string" + "$ref": "#/definitions/goodrx.DrugLink" }, "type": "array" }, - "longitude": { - "example": -122.4132228, - "type": "number" - }, "name": { - "example": "Hotel Zephyr San Francisco", "type": "string" }, - "phone": { - "example": "14156176565", + "overview": { + "description": "Overview is the class description (\"Why are ... prescribed?\").", "type": "string" }, - "place_id": { - "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "slug": { "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": { - "example": 3213, - "type": "integer" - }, "url": { - "example": "https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ", - "type": "string" - }, - "website": { - "example": "https://www.hotelzephyrsf.com/", "type": "string" } }, "type": "object" }, - "google.PlacePhoto": { + "goodrx.ClassesResponse": { "properties": { - "height": { - "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" - }, - "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" + "classes": { + "items": { + "$ref": "#/definitions/goodrx.ClassRef" + }, + "type": "array" } }, "type": "object" }, - "google.PlaceReview": { + "goodrx.ComparisonDrug": { "properties": { - "author_id": { - "description": "AuthorID is the reviewer's stable Google contributor id.", - "example": "112997636113922766481", - "type": "string" - }, - "author_name": { - "description": "AuthorName is the reviewer's display name.", - "example": "Supisara Darnchaloemwong", - "type": "string" - }, - "author_photo": { - "description": "AuthorPhoto is the reviewer's avatar URL.", - "example": "https://lh3.googleusercontent.com/a-/ALV-UjWc6XFX9IKHJiQ4vZoY7o_EVCYkjMbWjGfdPZrLEw", - "type": "string" - }, - "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" - }, - "author_url": { - "description": "AuthorURL is the reviewer's public Google Maps contributor page.", - "example": "https://www.google.com/maps/contrib/112997636113922766481", - "type": "string" - }, - "id": { - "description": "ID is Google's opaque review identifier, stable across fetches.", - "example": "Ci9DQUlRQUNvZENodHljRjlvT201dFRHSk1aRU54T0U5cmRFVjNlbGRmU1RJNFkzYxAB", + "info_url": { "type": "string" }, - "photos": { - "description": "Photos are the images attached to this review, largest variant first.", - "items": { - "$ref": "#/definitions/google.PlacePhoto" - }, - "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", + "name": { "type": "string" }, - "rating": { - "description": "Rating is the star rating this reviewer gave, 1-5.", - "example": 5, - "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", + "prescription": { "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", + "slug": { "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.", + "url": { "type": "string" } }, "type": "object" }, - "google.SearchItem": { + "goodrx.ComparisonRef": { "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 ...", + "name": { "type": "string" }, - "icon": { + "slug": { "type": "string" }, - "link": { - "example": "https://www.coffeebean.com/", + "url": { "type": "string" + } + }, + "type": "object" + }, + "goodrx.ComparisonResponse": { + "properties": { + "drugs": { + "items": { + "$ref": "#/definitions/goodrx.ComparisonDrug" + }, + "type": "array" }, - "position": { - "example": 1, - "type": "integer" + "key_takeaways": { + "items": { + "type": "string" + }, + "type": "array" }, - "time": { - "example": "7 hours ago", + "slug": { "type": "string" }, "title": { - "example": "Home | The Coffee Bean & Tea Leaf", "type": "string" }, - "website_name": { - "example": "OpenAI", + "url": { "type": "string" } }, "type": "object" }, - "google.SearchOption": { + "goodrx.ComparisonTopic": { "properties": { - "country": { - "description": "Country code", - "example": "us", - "type": "string" - }, - "keyword": { - "example": "chatgpt", - "type": "string" + "comparisons": { + "items": { + "$ref": "#/definitions/goodrx.ComparisonRef" + }, + "type": "array" }, - "language": { - "description": "language code", - "example": "en", + "name": { "type": "string" - }, - "limit": { - "description": "Number of items, from 10 to 100, inclusive", - "example": 10, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" } }, - "required": [ - "country", - "keyword", - "language" - ], "type": "object" }, - "google.SuggestResponse": { + "goodrx.ComparisonsResponse": { "properties": { - "query": { - "example": "openai", - "type": "string" - }, - "suggestions": { + "topics": { "items": { - "$ref": "#/definitions/google.SuggestionResult" + "$ref": "#/definitions/goodrx.ComparisonTopic" }, "type": "array" } }, "type": "object" }, - "google.SuggestionResult": { + "goodrx.Condition": { "properties": { - "position": { - "example": 1, - "type": "integer" + "has_medications": { + "type": "boolean" }, - "query": { - "example": "openai api", + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "google.VerticalPagination": { + "goodrx.ConditionDrugsResponse": { "properties": { - "next_page": { - "example": 2, - "type": "integer" + "drugs": { + "items": { + "$ref": "#/definitions/goodrx.DrugLink" + }, + "type": "array" }, - "page": { - "example": 1, - "type": "integer" + "name": { + "type": "string" }, - "previous_page": { - "example": 1, - "type": "integer" + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "google.VideoResult": { + "goodrx.ConditionResponse": { "properties": { - "age": { - "example": "2 days ago", + "alternate_name": { "type": "string" }, - "description": { - "example": "Watch the OpenAI DevDay keynote.", + "articles": { + "items": { + "$ref": "#/definitions/goodrx.ArticleRef" + }, + "type": "array" + }, + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "date_modified": { "type": "string" }, - "duration": { - "example": "45:12", + "date_published": { "type": "string" }, - "platform": { - "example": "YouTube", + "description": { "type": "string" }, - "position": { - "example": 1, - "type": "integer" + "headline": { + "type": "string" }, - "thumbnail": { - "example": "https://example.com/thumb.jpg", + "medications_url": { "type": "string" }, - "title": { - "example": "OpenAI DevDay keynote - YouTube", + "name": { + "type": "string" + }, + "sections": { + "items": { + "$ref": "#/definitions/goodrx.InfoSection" + }, + "type": "array" + }, + "slug": { "type": "string" }, "url": { - "example": "https://www.youtube.com/watch?v=openai-devday", "type": "string" } }, "type": "object" }, - "google.VideosResponse": { + "goodrx.ConditionsResponse": { "properties": { - "pagination": { - "$ref": "#/definitions/google.VerticalPagination" - }, - "results": { + "conditions": { "items": { - "$ref": "#/definitions/google.VideoResult" + "$ref": "#/definitions/goodrx.Condition" }, "type": "array" } }, "type": "object" }, - "google.mapPlacePhotosResponseDoc": { + "goodrx.Configuration": { "properties": { - "code": { - "example": 200, - "type": "integer" + "dosage": { + "type": "string" }, - "data": { - "items": { - "$ref": "#/definitions/google.PlacePhoto" - }, - "type": "array" + "drug_id": { + "type": "string" }, - "msg": { - "example": "ok", + "form": { "type": "string" - } - }, - "type": "object" - }, - "google.mapPlaceResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/google.Place" + "label": { + "type": "string" }, - "msg": { - "example": "OK", + "quantity": { + "type": "integer" + }, + "summary": { "type": "string" } }, "type": "object" }, - "google.mapPlaceReviewsResponseDoc": { + "goodrx.DosageOption": { "properties": { - "code": { - "example": 200, + "default_quantity": { + "description": "DefaultQuantity is GoodRx's default quantity for this dosage.", "type": "integer" }, - "data": { - "items": { - "$ref": "#/definitions/google.PlaceReview" - }, - "type": "array" + "drug_id": { + "type": "string" }, - "msg": { - "example": "ok", + "name": { "type": "string" - } - }, - "type": "object" - }, - "google.mapSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { + "quantities": { "items": { - "$ref": "#/definitions/google.Place" + "type": "integer" }, "type": "array" }, - "msg": { - "example": "OK", + "slug": { "type": "string" } }, "type": "object" }, - "google.newsResponseDoc": { + "goodrx.DosagePriceRow": { "properties": { - "code": { - "example": 200, - "type": "integer" + "dosage": { + "type": "string" }, - "data": { - "$ref": "#/definitions/google.NewsResponse" + "price": { + "type": "number" }, - "msg": { - "example": "OK", + "price_url": { + "type": "string" + }, + "quantity": { "type": "string" + }, + "unit_price": { + "type": "number" } }, "type": "object" }, - "google.newsSearchResponseDoc": { + "goodrx.DosagePriceTable": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/google.NewsSearchResp" - }, - "msg": { - "example": "OK", + "form": { "type": "string" + }, + "rows": { + "items": { + "$ref": "#/definitions/goodrx.DosagePriceRow" + }, + "type": "array" } }, "type": "object" }, - "google.suggestResponseDoc": { + "goodrx.DrugGuideRef": { "properties": { - "code": { - "example": 200, - "type": "integer" + "last_modified": { + "type": "string" }, - "data": { - "$ref": "#/definitions/google.SuggestResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { "type": "string" - } - }, - "type": "object" - }, - "google.videosResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/google.VideosResponse" + "topic": { + "enum": [ + "side-effects", + "dosage", + "interactions" + ], + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "googlejobs.GoogleJob": { + "goodrx.DrugGuideResponse": { "properties": { - "apply_url": { - "type": "string" - }, - "company": { - "example": "Google", - "type": "string" - }, - "country": { - "example": "TW", + "drug": { "type": "string" }, - "description": { + "last_reviewed": { "type": "string" }, - "id": { - "example": "85207000467546822", - "type": "string" + "price_tables": { + "items": { + "$ref": "#/definitions/goodrx.DosagePriceTable" + }, + "type": "array" }, - "location": { - "example": "New Taipei, Banqiao District, New Taipei City, Taiwan", - "type": "string" + "related": { + "items": { + "$ref": "#/definitions/goodrx.DrugGuideRef" + }, + "type": "array" }, - "locations": { + "reviewed_by": { "items": { "type": "string" }, "type": "array" }, - "minimum_qualifications": { - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/goodrx.GuideSection" + }, + "type": "array" }, - "posted_at": { - "example": "2026-07-22T14:10:44Z", + "slug": { "type": "string" }, - "preferred_qualifications": { + "source_url": { "type": "string" }, - "responsibilities": { - "type": "string" + "summary": { + "items": { + "type": "string" + }, + "type": "array" }, "title": { - "example": "Software Engineer, Embedded Software, Silicon", + "type": "string" + }, + "topic": { + "enum": [ + "side-effects", + "dosage", + "interactions" + ], "type": "string" }, "url": { - "example": "https://www.google.com/about/careers/applications/jobs/results/85207000467546822-software-engineer-embedded-software-silicon", "type": "string" } }, "type": "object" }, - "googlejobs.SearchResponse": { + "goodrx.DrugGuidesResponse": { "properties": { - "jobs": { + "guides": { "items": { - "$ref": "#/definitions/googlejobs.GoogleJob" + "$ref": "#/definitions/goodrx.DrugGuideRef" }, "type": "array" }, - "location": { - "example": "Singapore", - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "query": { - "example": "software engineer", + "letter": { "type": "string" }, - "source_url": { + "topic": { "type": "string" }, "total": { - "example": 1722, "type": "integer" } }, "type": "object" }, - "googlejobs.jobResponseDoc": { + "goodrx.DrugInfo": { "properties": { - "code": { - "example": 200, - "type": "integer" + "administration_route": { + "type": "string" }, - "data": { - "$ref": "#/definitions/googlejobs.GoogleJob" + "alternate_name": { + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "googlejobs.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/googlejobs.SearchResponse" + "drug_class": { + "$ref": "#/definitions/goodrx.ClassRef" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "googlepatents.CitedPatent": { - "properties": { - "assignee": { - "example": "Netzsch Maschinenfabrik", + }, + "legal_status": { "type": "string" }, - "priority_date": { - "example": "1985-12-27", + "name": { "type": "string" }, - "publication_date": { - "example": "1987-05-19", + "non_proprietary_name": { "type": "string" }, - "publication_number": { - "example": "US4665582A", + "prescription_status": { "type": "string" }, - "title": { - "example": "Apparatus for shaking foundry moulds in a casting installation", + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "googlepatents.Classification": { + "goodrx.DrugInfoResponse": { "properties": { - "code": { - "example": "A47L9/00", + "alternatives": { + "items": { + "$ref": "#/definitions/goodrx.ComparisonRef" + }, + "type": "array" + }, + "audience": { + "enum": [ + "people", + "pets" + ], "type": "string" }, - "description": { - "example": "Details or accessories of suction cleaners", + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "date_modified": { "type": "string" }, - "is_cpc": { - "example": true, - "type": "boolean" + "date_published": { + "type": "string" + }, + "faqs": { + "items": { + "$ref": "#/definitions/goodrx.FAQ" + }, + "type": "array" + }, + "sections": { + "items": { + "$ref": "#/definitions/goodrx.InfoSection" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "googlepatents.ClassificationRelation": { + "goodrx.DrugLink": { "properties": { - "code": { - "example": "A61", + "description": { "type": "string" }, - "description": { + "info_url": { "type": "string" }, - "is_child": { - "type": "boolean" + "lowest_price": { + "type": "number" }, - "is_parent": { - "type": "boolean" + "name": { + "type": "string" }, - "is_related": { - "type": "boolean" + "slug": { + "type": "string" }, - "name": { - "example": "A61 - MEDICAL OR VETERINARY SCIENCE; HYGIENE", + "url": { "type": "string" } }, "type": "object" }, - "googlepatents.ClassificationResponse": { + "goodrx.DrugOptionsResponse": { "properties": { - "code": { - "example": "A61K31/00", - "type": "string" + "default": { + "$ref": "#/definitions/goodrx.Configuration" }, - "description": { + "drug": { + "$ref": "#/definitions/goodrx.DrugInfo" + }, + "options": { "items": { - "type": "string" + "$ref": "#/definitions/goodrx.LabelOption" }, "type": "array" + } + }, + "type": "object" + }, + "goodrx.DrugPricesResponse": { + "properties": { + "configuration": { + "$ref": "#/definitions/goodrx.Configuration" }, - "fetched_at": { - "type": "string" + "drug": { + "$ref": "#/definitions/goodrx.DrugInfo" }, - "name": { - "example": "A61K31/00 - Medicinal preparations containing organic active ingredients", - "type": "string" + "location": { + "$ref": "#/definitions/goodrx.Location" }, - "relations": { + "offers": { "items": { - "$ref": "#/definitions/googlepatents.ClassificationRelation" + "$ref": "#/definitions/goodrx.PharmacyOffer" }, "type": "array" }, - "source_url": { - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/goodrx.LabelOption" + }, + "type": "array" } }, "type": "object" }, - "googlepatents.CountryStatus": { + "goodrx.DrugsResponse": { "properties": { - "country_code": { - "example": "US", - "type": "string" + "drugs": { + "items": { + "$ref": "#/definitions/goodrx.DrugLink" + }, + "type": "array" }, - "state": { - "example": "ACTIVE", + "letter": { "type": "string" } }, "type": "object" }, - "googlepatents.CoverageCountry": { + "goodrx.FAQ": { "properties": { - "country_code": { - "example": "US", + "answer": { "type": "string" }, - "years": { - "items": { - "$ref": "#/definitions/googlepatents.CoverageYear" - }, - "type": "array" + "question": { + "type": "string" } }, "type": "object" }, - "googlepatents.CoverageResponse": { + "goodrx.FormOption": { "properties": { - "countries": { + "dosages": { "items": { - "$ref": "#/definitions/googlepatents.CoverageCountry" + "$ref": "#/definitions/goodrx.DosageOption" }, "type": "array" }, - "fetched_at": { + "name": { "type": "string" }, - "source_url": { + "slug": { "type": "string" } }, "type": "object" }, - "googlepatents.CoverageYear": { + "goodrx.GuideItem": { "properties": { - "applications": { - "example": "1712467", + "detail": { "type": "string" }, - "grants": { - "example": "2802408", + "frequency": { "type": "string" }, - "year": { - "example": 2025, - "type": "integer" + "name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "googlepatents.DetailResponse": { + "goodrx.GuideList": { "properties": { - "abstract": { - "example": "Battery-powered upright vacuum cleaners are disclosed.", - "type": "string" - }, - "application_number": { - "example": "US15/620,213", - "type": "string" - }, - "citations": { + "items": { "items": { - "$ref": "#/definitions/googlepatents.CitedPatent" + "$ref": "#/definitions/goodrx.GuideItem" }, "type": "array" }, - "cited_by": { + "label": { + "type": "string" + }, + "severity": { + "enum": [ + "not_recommended", + "usually_not_recommended", + "increased_risk" + ], + "type": "string" + } + }, + "type": "object" + }, + "goodrx.GuideSection": { + "properties": { + "lists": { "items": { - "$ref": "#/definitions/googlepatents.CitedPatent" + "$ref": "#/definitions/goodrx.GuideList" }, "type": "array" }, - "claims": { + "paragraphs": { "items": { "type": "string" }, "type": "array" }, - "claims_count": { - "example": 19, - "type": "integer" + "title": { + "type": "string" + } + }, + "type": "object" + }, + "goodrx.HealthArticleRef": { + "properties": { + "last_modified": { + "type": "string" }, - "classifications": { - "items": { - "$ref": "#/definitions/googlepatents.Classification" - }, - "type": "array" + "path": { + "type": "string" }, - "country_code": { - "example": "US", + "section": { "type": "string" }, - "country_name": { - "example": "United States", + "slug": { "type": "string" }, - "current_assignees": { - "items": { - "type": "string" - }, - "type": "array" + "topic": { + "type": "string" }, - "description": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "goodrx.HealthArticleResponse": { + "properties": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "expiration_date": { - "example": "2038-04-26", + "date_modified": { "type": "string" }, - "family_members": { + "date_published": { + "type": "string" + }, + "description": { + "type": "string" + }, + "faqs": { "items": { - "$ref": "#/definitions/googlepatents.FamilyMember" + "$ref": "#/definitions/goodrx.FAQ" }, "type": "array" }, - "fetched_at": { - "example": "2026-08-15T12:00:00Z", - "type": "string" - }, - "filing_date": { - "example": "2017-06-12", + "headline": { "type": "string" }, - "inventors": { + "key_takeaways": { "items": { "type": "string" }, "type": "array" }, - "kind_code": { - "example": "B2", - "type": "string" - }, - "legal_status": { - "example": "Active", + "path": { "type": "string" }, - "original_assignees": { + "references": { "items": { "type": "string" }, "type": "array" }, - "pdf_url": { - "example": "https://patentimages.storage.googleapis.com/ae/9f/51/f34dc3bf93426e/US10758101.pdf", - "type": "string" + "related_drugs": { + "items": { + "$ref": "#/definitions/goodrx.DrugLink" + }, + "type": "array" }, - "prior_art_keywords": { + "reviewed_by": { "items": { "type": "string" }, "type": "array" }, - "priority_date": { - "example": "2017-06-12", + "section": { "type": "string" }, - "publication_date": { - "example": "2020-09-01", - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/goodrx.GuideSection" + }, + "type": "array" }, - "publication_number": { - "example": "US10758101B2", + "slug": { "type": "string" }, - "similar_documents": { + "tags": { "items": { - "$ref": "#/definitions/googlepatents.SimilarDocument" + "type": "string" }, "type": "array" }, - "source_url": { - "example": "https://patents.google.com/patent/US10758101B2/en", + "topic": { "type": "string" }, - "title": { - "example": "Upright vacuum cleaner with battery support plate", + "url": { "type": "string" } }, "type": "object" }, - "googlepatents.FacetEntry": { + "goodrx.HealthArticlesResponse": { "properties": { - "key": { - "example": "Emerson Electric Co.", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/goodrx.HealthArticleRef" + }, + "type": "array" }, - "value": { - "example": 666, + "page": { "type": "integer" - } - }, - "type": "object" - }, - "googlepatents.FamilyMember": { - "properties": { - "publication_date": { - "example": "2018-12-13", + }, + "page_size": { + "type": "integer" + }, + "section": { "type": "string" }, - "publication_number": { - "example": "US20180353038A1", + "topic": { "type": "string" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "googlepatents.RecentEntry": { + "goodrx.HealthTopic": { "properties": { - "publication_number": { - "example": "US10758101B2", + "article_count": { + "type": "integer" + }, + "last_modified": { "type": "string" }, - "title": { - "example": "Adjustable venous cannula and method of treating a patient", + "section": { + "enum": [ + "conditions", + "health-topic", + "well-being", + "pet-health", + "insurance", + "classes", + "drugs", + "healthcare-access", + "corporate", + "hcp", + "drug" + ], "type": "string" }, - "url": { - "example": "https://patents.google.com/patent/US10758101B2/en", + "topic": { "type": "string" } }, "type": "object" }, - "googlepatents.RecentResponse": { + "goodrx.HealthTopicsResponse": { "properties": { - "count": { - "example": 329, - "type": "integer" - }, - "fetched_at": { + "section": { "type": "string" }, - "results": { + "topics": { "items": { - "$ref": "#/definitions/googlepatents.RecentEntry" + "$ref": "#/definitions/goodrx.HealthTopic" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "week": { - "example": "2026-W20", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "googlepatents.SearchResponse": { + "goodrx.InfoSection": { "properties": { - "fetched_at": { - "type": "string" - }, - "many_results": { - "example": false, - "type": "boolean" - }, - "page": { - "example": 0, - "type": "integer" - }, - "query": { - "example": "battery", + "id": { "type": "string" }, - "results": { + "items": { "items": { - "$ref": "#/definitions/googlepatents.SearchResult" + "type": "string" }, "type": "array" }, - "source_url": { + "title": { "type": "string" - }, - "top_assignees": { - "items": { - "$ref": "#/definitions/googlepatents.FacetEntry" - }, - "type": "array" - }, - "top_classifications": { + } + }, + "type": "object" + }, + "goodrx.LabelOption": { + "properties": { + "forms": { "items": { - "$ref": "#/definitions/googlepatents.FacetEntry" + "$ref": "#/definitions/goodrx.FormOption" }, "type": "array" }, - "top_inventors": { - "items": { - "$ref": "#/definitions/googlepatents.FacetEntry" - }, - "type": "array" + "name": { + "type": "string" }, - "total_pages": { - "example": 100, - "type": "integer" + "slug": { + "type": "string" }, - "total_results": { - "example": 112795, - "type": "integer" + "type": { + "type": "string" } }, "type": "object" }, - "googlepatents.SearchResult": { + "goodrx.Location": { "properties": { - "assignee": { - "example": "Emerson Electric Co", + "city": { "type": "string" }, - "country_status": { - "items": { - "$ref": "#/definitions/googlepatents.CountryStatus" - }, - "type": "array" + "latitude": { + "type": "number" }, - "detail_url": { - "example": "https://patents.google.com/patent/US10758101B2/en", - "type": "string" + "longitude": { + "type": "number" }, - "filing_date": { - "example": "2017-06-12", + "state": { "type": "string" }, - "grant_date": { - "example": "2020-09-01", + "zip_code": { + "type": "string" + } + }, + "type": "object" + }, + "goodrx.PetMedicationRef": { + "properties": { + "slug": { "type": "string" }, - "inventor": { - "example": "Thomas E. Fogarty, Jr.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "goodrx.PetMedicationsResponse": { + "properties": { + "drugs": { + "items": { + "$ref": "#/definitions/goodrx.PetMedicationRef" + }, + "type": "array" + } + }, + "type": "object" + }, + "goodrx.PharmacyOffer": { + "properties": { + "logo_url": { "type": "string" }, - "is_similar_document": { - "example": false, - "type": "boolean" + "lowest_price": { + "type": "number" }, - "language": { - "example": "en", + "membership": { + "description": "Membership names the paid program behind an UPSELL price, for example\n\"COMPANION\" (observed value; returned as data).", "type": "string" }, - "pdf_url": { + "order_url": { "type": "string" }, - "priority_date": { - "example": "2017-06-12", + "pharmacy_id": { "type": "string" }, - "publication_date": { - "example": "2020-09-01", + "pharmacy_name": { "type": "string" }, - "publication_number": { - "example": "US10758101B2", + "pharmacy_type": { + "description": "PharmacyType is \"PharmacyChain\" (retail) or \"PharmacyOnlineStore\"\n(mail order) as observed; returned as data.", "type": "string" }, - "snippet": { - "example": "a battery support plate adapted to support a battery...", - "type": "string" + "price": { + "type": "number" }, - "thumbnail_url": { + "pricing_type": { + "description": "PricingType is GoodRx's pricing kind, for example \"COUPON\",\n\"UPSELL\", or \"HOME_DELIVERY\" (observed values; returned as data).", "type": "string" }, - "title": { - "example": "Upright vacuum cleaner with battery support plate", - "type": "string" + "retail_price": { + "type": "number" } }, "type": "object" }, - "googlepatents.SimilarDocument": { + "goodrx.answerResponseDoc": { "properties": { - "publication_date": { - "example": "1990-06-26", - "type": "string" - }, - "publication_number": { - "example": "CA1270625A", - "type": "string" - }, - "title": { - "example": "Method and apparatus for setting pattern frame and press die", - "type": "string" + "data": { + "$ref": "#/definitions/goodrx.AnswerResponse" } }, "type": "object" }, - "googlepatents.SuggestEntry": { + "goodrx.answersResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "value": { - "example": "John Cronin", - "type": "string" + "data": { + "$ref": "#/definitions/goodrx.AnswersResponse" } }, "type": "object" }, - "googlepatents.SuggestResponse": { + "goodrx.brandsResponseDoc": { "properties": { - "fetched_at": { - "type": "string" - }, - "field": { - "example": "inventor", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/googlepatents.SuggestEntry" - }, - "type": "array" - }, - "value": { - "example": "John", - "type": "string" + "data": { + "$ref": "#/definitions/goodrx.BrandsResponse" } }, "type": "object" }, - "googlepatents.classificationResponseDoc": { + "goodrx.classResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/googlepatents.ClassificationResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/goodrx.ClassResponse" } }, "type": "object" }, - "googlepatents.coverageResponseDoc": { + "goodrx.classesResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/googlepatents.CoverageResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/goodrx.ClassesResponse" } }, "type": "object" }, - "googlepatents.detailResponseDoc": { + "goodrx.comparisonResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/googlepatents.DetailResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/goodrx.ComparisonResponse" } }, "type": "object" }, - "googlepatents.recentResponseDoc": { + "goodrx.comparisonsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/googlepatents.RecentResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/goodrx.ComparisonsResponse" } }, "type": "object" }, - "googlepatents.searchResponseDoc": { + "goodrx.conditionDrugsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/googlepatents.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/goodrx.ConditionDrugsResponse" } }, "type": "object" }, - "googlepatents.suggestResponseDoc": { + "goodrx.conditionResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/googlepatents.SuggestResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/goodrx.ConditionResponse" } }, "type": "object" }, - "googleplay.App": { + "goodrx.conditionsResponseDoc": { "properties": { - "ad_supported": { - "example": false, - "type": "boolean" - }, - "android_max_version": { - "example": "15", - "type": "string" - }, - "android_version": { - "example": "8.0", - "type": "string" - }, - "android_version_text": { - "example": "8.0 and up", - "type": "string" - }, - "app_id": { - "example": "com.openai.chatgpt", + "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": { "type": "string" }, - "available": { - "example": true, - "type": "boolean" - }, - "categories": { - "items": { - "$ref": "#/definitions/googleplay.Category" - }, - "type": "array" - }, - "comments": { - "example": [ - "[\"Great app\"", - "\"Very useful\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "content_rating": { - "example": "Teen", + "employment": { "type": "string" }, - "content_rating_description": { - "example": "Users Interact, In-App Purchases", + "location": { "type": "string" }, - "currency": { - "example": "USD", + "posted_at": { "type": "string" }, - "description": { - "example": "Introducing ChatGPT for Android: OpenAI's latest advancements at your fingertips.", + "snippet": { "type": "string" }, - "description_html": { - "example": "Introducing ChatGPT for Android: OpenAI's latest advancements at your fingertips.

This official app is free.", + "source": { "type": "string" }, - "developer": { - "example": "OpenAI", + "title": { "type": "string" }, - "developer_address": { - "example": "1455 3RD St, San Francisco, CA 94158-2210, United States", + "url": { "type": "string" - }, - "developer_email": { - "example": "support@openai.com", + } + }, + "type": "object" + }, + "google.JobsOption": { + "properties": { + "location": { + "example": "San Francisco, CA", "type": "string" }, - "developer_id": { - "example": "7577165439232992817", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "developer_internal_id": { - "example": "7577165439232992817", + "query": { + "example": "software engineer", "type": "string" - }, - "developer_legal_address": { - "example": "1455 3RD St, San Francisco, CA 94158-2210, United States", + } + }, + "required": [ + "query" + ], + "type": "object" + }, + "google.JobsResponse": { + "properties": { + "location": { + "example": "San Francisco, CA", "type": "string" }, - "developer_legal_email": { - "example": "support@openai.com", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "developer_legal_name": { - "example": "OpenAI Opco, LLC", + "query": { + "example": "software engineer", "type": "string" }, - "developer_legal_phone_number": { - "example": "+1 415-231-2395", + "results": { + "items": { + "$ref": "#/definitions/google.JobItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "google.MapSearchOption": { + "properties": { + "country": { + "example": "us", "type": "string" }, - "developer_website": { - "example": "https://help.openai.com", + "keyword": { + "example": "hotel san francisco", "type": "string" }, - "discount_end_date": { - "example": "2026-03-31T23:59:59Z", + "language": { + "example": "en", "type": "string" + } + }, + "type": "object" + }, + "google.NewsResponse": { + "properties": { + "pagination": { + "$ref": "#/definitions/google.VerticalPagination" }, - "early_access_enabled": { - "example": false, - "type": "boolean" - }, - "features": { + "results": { "items": { - "$ref": "#/definitions/googleplay.Feature" + "$ref": "#/definitions/google.NewsResult" }, "type": "array" - }, - "free": { - "example": true, - "type": "boolean" - }, - "genre": { - "example": "Productivity", - "type": "string" - }, - "genre_id": { - "example": "PRODUCTIVITY", + } + }, + "type": "object" + }, + "google.NewsResult": { + "properties": { + "age": { + "example": "2 hours ago", "type": "string" }, - "header_image": { - "example": "https://play-lh.googleusercontent.com/sample-header-image", + "description": { + "example": "OpenAI announced an update.", "type": "string" }, - "histogram": { - "type": "object" + "position": { + "example": 1, + "type": "integer" }, - "iap_range": { - "example": "$0.99 - $199.99 per item", + "source": { + "example": "Example News", "type": "string" }, - "icon": { - "example": "https://play-lh.googleusercontent.com/lmG9HlI0awHie0cyBieWXeNjpyXvHPwDBb8MNOVIyp0P8VEh95AiBHtUZSDVR3HLe3A", + "thumbnail": { + "example": "https://example.com/thumb.jpg", "type": "string" }, - "installs": { - "example": "100,000,000+", + "title": { + "example": "OpenAI announces update", "type": "string" }, - "is_available_in_play_pass": { - "example": false, - "type": "boolean" - }, - "max_installs": { - "example": 500000000, - "type": "integer" - }, - "min_installs": { - "example": 100000000, - "type": "integer" - }, - "more_by_developer": { + "url": { + "example": "https://example.com/openai-news", + "type": "string" + } + }, + "type": "object" + }, + "google.NewsSearchResp": { + "properties": { + "result": { "items": { - "$ref": "#/definitions/googleplay.ListApp" + "$ref": "#/definitions/google.SearchItem" }, "type": "array" + } + }, + "type": "object" + }, + "google.Place": { + "properties": { + "address": { + "example": "250 Beach St, San Francisco, CA 94133", + "type": "string" }, - "offers_iap": { - "example": true, - "type": "boolean" - }, - "original_price": { - "example": 4.99, - "type": "number" - }, - "platforms": { + "amenities": { "example": [ - "[\"phone\"", - "\"tablet\"", - "\"chromebook\"]" + "['Free Wi-Fi'", + " 'Air-conditioned'", + " 'Wi-Fi'", + " 'Parking']" ], "items": { "type": "string" }, "type": "array" }, - "preregister": { - "example": false, - "type": "boolean" - }, - "preview_video": { - "example": "https://play.google.com/preview/sample", - "type": "string" - }, - "price": { - "example": 0, - "type": "number" - }, - "price_text": { - "example": "Free", - "type": "string" - }, - "privacy_policy": { - "example": "https://openai.com/policies/privacy-policy", - "type": "string" - }, - "ratings": { - "example": 40123456, - "type": "integer" + "category": { + "example": [ + "['hotel']" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "recent_changes": { - "example": "Bug fixes and performance improvements.", + "description": { + "example": "A 3-minute walk from Pier 41 in the Fisherman's Wharf district...", "type": "string" }, - "released": { - "example": "2023-07-19", + "image": { + "example": "https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp", "type": "string" }, - "reviews": { - "example": 1234567, - "type": "integer" - }, - "score": { - "example": 4.8, + "latitude": { + "example": 37.8077617, "type": "number" }, - "score_text": { - "example": "4.8", - "type": "string" - }, - "screenshots": { + "locations": { "example": [ - "[\"https://play-lh.googleusercontent.com/sample-screenshot-1\"", - "\"https://play-lh.googleusercontent.com/sample-screenshot-2\"]" + "['San Francisco'", + " 'Los Angeles']" ], "items": { "type": "string" }, "type": "array" }, - "similar_apps": { - "items": { - "$ref": "#/definitions/googleplay.ListApp" - }, - "type": "array" + "longitude": { + "example": -122.4132228, + "type": "number" }, - "summary": { - "example": "The official app by OpenAI", + "name": { + "example": "Hotel Zephyr San Francisco", "type": "string" }, - "title": { - "example": "ChatGPT", + "phone": { + "example": "14156176565", "type": "string" }, - "updated": { - "example": 1736899200, - "type": "integer" - }, - "url": { - "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt&hl=en&gl=us", + "place_id": { + "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "type": "string" }, - "version": { - "example": "1.2026.056", - "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 }, - "video": { - "example": "https://play.google.com/video/sample", + "review_count": { + "example": 3213, + "type": "integer" + }, + "url": { + "example": "https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ", "type": "string" }, - "video_image": { - "example": "https://play-lh.googleusercontent.com/sample-video-cover", + "website": { + "example": "https://www.hotelzephyrsf.com/", "type": "string" } }, "type": "object" }, - "googleplay.AppDetailsResponse": { + "google.PlacePhoto": { "properties": { - "code": { - "example": 200, + "height": { + "example": 100, "type": "integer" }, - "data": { - "$ref": "#/definitions/googleplay.App" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "googleplay.Category": { - "properties": { - "id": { - "example": "PRODUCTIVITY", + "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" }, - "name": { - "example": "Productivity", - "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" }, - "googleplay.DataSafetyEntry": { + "google.PlaceReview": { "properties": { - "data": { - "example": "Email address", + "author_id": { + "description": "AuthorID is the reviewer's stable Google contributor id.", + "example": "112997636113922766481", "type": "string" }, - "optional": { - "example": false, - "type": "boolean" + "author_name": { + "description": "AuthorName is the reviewer's display name.", + "example": "Supisara Darnchaloemwong", + "type": "string" }, - "purpose": { - "example": "Analytics", + "author_photo": { + "description": "AuthorPhoto is the reviewer's avatar URL.", + "example": "https://lh3.googleusercontent.com/a-/ALV-UjWc6XFX9IKHJiQ4vZoY7o_EVCYkjMbWjGfdPZrLEw", "type": "string" }, - "type": { - "example": "Personal info", + "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" + }, + "author_url": { + "description": "AuthorURL is the reviewer's public Google Maps contributor page.", + "example": "https://www.google.com/maps/contrib/112997636113922766481", "type": "string" - } - }, - "type": "object" - }, - "googleplay.DataSafetyResult": { - "properties": { - "collected_data": { - "items": { - "$ref": "#/definitions/googleplay.DataSafetyEntry" - }, - "type": "array" }, - "privacy_policy_url": { - "example": "https://openai.com/policies/privacy-policy", + "id": { + "description": "ID is Google's opaque review identifier, stable across fetches.", + "example": "Ci9DQUlRQUNvZENodHljRjlvT201dFRHSk1aRU54T0U5cmRFVjNlbGRmU1RJNFkzYxAB", "type": "string" }, - "security_practices": { + "photos": { + "description": "Photos are the images attached to this review, largest variant first.", "items": { - "$ref": "#/definitions/googleplay.SecurityPractice" + "$ref": "#/definitions/google.PlacePhoto" }, "type": "array" }, - "shared_data": { - "items": { - "$ref": "#/definitions/googleplay.DataSafetyEntry" - }, - "type": "array" - } - }, - "type": "object" - }, - "googleplay.DeviceRating": { - "properties": { - "device": { - "example": "phone", + "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" }, - "histogram": { - "type": "object" - }, - "ratings": { - "example": 326809, - "type": "integer" - }, - "reviews": { - "example": 8946, + "rating": { + "description": "Rating is the star rating this reviewer gave, 1-5.", + "example": 5, "type": "integer" }, - "score": { - "example": 4.7, - "type": "number" - }, - "score_text": { - "example": "4.7", + "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" - } - }, - "type": "object" - }, - "googleplay.Feature": { - "properties": { - "description": { - "example": "Get answers, writing help, and image generation.", + }, + "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" }, - "title": { - "example": "AI assistant", + "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" }, - "googleplay.ListApp": { + "google.SearchItem": { "properties": { - "app_id": { - "example": "com.openai.chatgpt", - "type": "string" - }, - "currency": { - "example": "USD", + "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" }, - "developer": { - "example": "OpenAI", + "icon": { "type": "string" }, - "developer_id": { - "example": "7577165439232992817", + "link": { + "example": "https://www.coffeebean.com/", "type": "string" }, - "free": { - "example": true, - "type": "boolean" + "position": { + "example": 1, + "type": "integer" }, - "icon": { - "example": "https://play-lh.googleusercontent.com/lmG9HlI0awHie0cyBieWXeNjpyXvHPwDBb8MNOVIyp0P8VEh95AiBHtUZSDVR3HLe3A", + "time": { + "example": "7 hours ago", "type": "string" }, - "price": { - "example": 0, - "type": "number" - }, - "price_text": { - "example": "FREE", + "title": { + "example": "Home | The Coffee Bean & Tea Leaf", "type": "string" }, - "score": { - "example": 4.8, - "type": "number" - }, - "score_text": { - "example": "4.8", + "website_name": { + "example": "OpenAI", "type": "string" - }, - "summary": { - "example": "The official app by OpenAI", + } + }, + "type": "object" + }, + "google.SearchOption": { + "properties": { + "country": { + "description": "Country code", + "example": "us", "type": "string" }, - "title": { - "example": "ChatGPT", + "keyword": { + "example": "chatgpt", "type": "string" }, - "url": { - "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt", + "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" } }, + "required": [ + "country", + "keyword", + "language" + ], "type": "object" }, - "googleplay.Review": { + "google.SuggestResponse": { "properties": { - "criterias": { + "query": { + "example": "openai", + "type": "string" + }, + "suggestions": { "items": { - "$ref": "#/definitions/googleplay.ReviewCriteria" + "$ref": "#/definitions/google.SuggestionResult" }, "type": "array" + } + }, + "type": "object" + }, + "google.SuggestionResult": { + "properties": { + "position": { + "example": 1, + "type": "integer" }, - "date": { - "example": "2026-02-18T12:34:56Z", + "query": { + "example": "openai api", "type": "string" + } + }, + "type": "object" + }, + "google.VerticalPagination": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" }, - "id": { - "example": "5b4e4d89-ce22-4f13-b676-bb3a7aafe278", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "reply_date": { - "example": "2026-02-20T08:00:00Z", + "previous_page": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "google.VideoResult": { + "properties": { + "age": { + "example": "2 days ago", "type": "string" }, - "reply_text": { - "example": "Thanks for the feedback!", + "description": { + "example": "Watch the OpenAI DevDay keynote.", "type": "string" }, - "score": { - "example": 5, - "type": "integer" - }, - "score_text": { - "example": "5", + "duration": { + "example": "45:12", "type": "string" }, - "text": { - "example": "Very helpful for quick answers and brainstorming.", + "platform": { + "example": "YouTube", "type": "string" }, - "thumbs_up": { - "example": 124, + "position": { + "example": 1, "type": "integer" }, - "title": { - "example": "Great app", - "type": "string" - }, - "url": { - "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt&reviewId=5b4e4d89-ce22-4f13-b676-bb3a7aafe278", - "type": "string" - }, - "user_image": { - "example": "https://play-lh.googleusercontent.com/a-/ALV-UjVsample", + "thumbnail": { + "example": "https://example.com/thumb.jpg", "type": "string" }, - "user_name": { - "example": "Jane Doe", + "title": { + "example": "OpenAI DevDay keynote - YouTube", "type": "string" }, - "version": { - "example": "1.2026.056", + "url": { + "example": "https://www.youtube.com/watch?v=openai-devday", "type": "string" } }, "type": "object" }, - "googleplay.ReviewCriteria": { + "google.VideosResponse": { "properties": { - "criteria": { - "example": "Accuracy", - "type": "string" + "pagination": { + "$ref": "#/definitions/google.VerticalPagination" }, - "rating": { - "example": 5, - "type": "integer" + "results": { + "items": { + "$ref": "#/definitions/google.VideoResult" + }, + "type": "array" } }, "type": "object" }, - "googleplay.ReviewsResult": { + "google.mapPlacePhotosResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { "items": { - "$ref": "#/definitions/googleplay.Review" + "$ref": "#/definitions/google.PlacePhoto" }, "type": "array" }, - "next_pagination_token": { - "example": "CscBIr4BAb_yELvAqtSacgExc3y_bO88_b1Q", + "msg": { + "example": "ok", "type": "string" } }, "type": "object" }, - "googleplay.SecurityPractice": { + "google.mapPlaceResponseDoc": { "properties": { - "description": { - "example": "Your data is transferred over a secure connection", - "type": "string" - }, - "practice": { - "example": "Data is encrypted in transit", + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/google.Place" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "googleplay.Suggestion": { + "google.mapPlaceReviewsResponseDoc": { "properties": { - "term": { - "example": "chatgpt", + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/google.PlaceReview" + }, + "type": "array" + }, + "msg": { + "example": "ok", "type": "string" } }, "type": "object" }, - "googleplay.categoriesResponseDoc": { + "google.mapSearchResponseDoc": { "properties": { "code": { "example": 200, @@ -73369,7 +74294,7 @@ }, "data": { "items": { - "type": "string" + "$ref": "#/definitions/google.Place" }, "type": "array" }, @@ -73380,14 +74305,14 @@ }, "type": "object" }, - "googleplay.dataSafetyResponseDoc": { + "google.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googleplay.DataSafetyResult" + "$ref": "#/definitions/google.NewsResponse" }, "msg": { "example": "OK", @@ -73396,15 +74321,14 @@ }, "type": "object" }, - "googleplay.developerResultsResponseDoc": { + "google.newsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/google.NewsSearchResp" }, "msg": { "example": "OK", @@ -73413,15 +74337,14 @@ }, "type": "object" }, - "googleplay.listResultsResponseDoc": { + "google.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/google.SuggestResponse" }, "msg": { "example": "OK", @@ -73430,15 +74353,14 @@ }, "type": "object" }, - "googleplay.permissionsResultsResponseDoc": { + "google.videosResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/google.VideosResponse" }, "msg": { "example": "OK", @@ -73447,50 +74369,98 @@ }, "type": "object" }, - "googleplay.ratingsResponseDoc": { + "googlejobs.GoogleJob": { "properties": { - "code": { - "example": 200, - "type": "integer" + "apply_url": { + "type": "string" }, - "data": { + "company": { + "example": "Google", + "type": "string" + }, + "country": { + "example": "TW", + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "example": "85207000467546822", + "type": "string" + }, + "location": { + "example": "New Taipei, Banqiao District, New Taipei City, Taiwan", + "type": "string" + }, + "locations": { "items": { - "$ref": "#/definitions/googleplay.DeviceRating" + "type": "string" }, "type": "array" }, - "msg": { - "example": "OK", + "minimum_qualifications": { + "type": "string" + }, + "posted_at": { + "example": "2026-07-22T14:10:44Z", + "type": "string" + }, + "preferred_qualifications": { + "type": "string" + }, + "responsibilities": { + "type": "string" + }, + "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" }, - "googleplay.reviewsResponseDoc": { + "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/googleplay.ReviewsResult" + "query": { + "example": "software engineer", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "total": { + "example": 1722, + "type": "integer" } }, "type": "object" }, - "googleplay.searchResultsResponseDoc": { + "googlejobs.jobResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/googlejobs.GoogleJob" }, "msg": { "example": "OK", @@ -73499,15 +74469,14 @@ }, "type": "object" }, - "googleplay.similarResultsResponseDoc": { + "googlejobs.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/googlejobs.SearchResponse" }, "msg": { "example": "OK", @@ -73516,1005 +74485,1213 @@ }, "type": "object" }, - "googleplay.suggestResponseDoc": { + "googlepatents.CitedPatent": { "properties": { - "code": { - "example": 200, - "type": "integer" + "assignee": { + "example": "Netzsch Maschinenfabrik", + "type": "string" }, - "data": { - "items": { - "$ref": "#/definitions/googleplay.Suggestion" - }, - "type": "array" + "priority_date": { + "example": "1985-12-27", + "type": "string" }, - "msg": { - "example": "OK", + "publication_date": { + "example": "1987-05-19", + "type": "string" + }, + "publication_number": { + "example": "US4665582A", + "type": "string" + }, + "title": { + "example": "Apparatus for shaking foundry moulds in a casting installation", "type": "string" } }, "type": "object" }, - "gq.AuthorArticle": { + "googlepatents.Classification": { "properties": { - "image_url": { + "code": { + "example": "A47L9/00", "type": "string" }, - "published_at": { + "description": { + "example": "Details or accessories of suction cleaners", "type": "string" }, - "summary": { + "is_cpc": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "googlepatents.ClassificationRelation": { + "properties": { + "code": { + "example": "A61", "type": "string" }, - "title": { + "description": { "type": "string" }, - "url": { + "is_child": { + "type": "boolean" + }, + "is_parent": { + "type": "boolean" + }, + "is_related": { + "type": "boolean" + }, + "name": { + "example": "A61 - MEDICAL OR VETERINARY SCIENCE; HYGIENE", "type": "string" } }, "type": "object" }, - "gq.AuthorResponse": { + "googlepatents.ClassificationResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/gq.AuthorArticle" - }, - "type": "array" + "code": { + "example": "A61K31/00", + "type": "string" }, - "biography": { + "description": { "items": { "type": "string" }, "type": "array" }, - "has_next_page": { - "type": "boolean" - }, - "image_url": { - "type": "string" - }, - "job_title": { + "fetched_at": { "type": "string" }, "name": { + "example": "A61K31/00 - Medicinal preparations containing organic active ingredients", "type": "string" }, - "page": { - "type": "integer" + "relations": { + "items": { + "$ref": "#/definitions/googlepatents.ClassificationRelation" + }, + "type": "array" }, - "slug": { + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "googlepatents.CountryStatus": { + "properties": { + "country_code": { + "example": "US", "type": "string" }, - "social_links": { + "state": { + "example": "ACTIVE", + "type": "string" + } + }, + "type": "object" + }, + "googlepatents.CoverageCountry": { + "properties": { + "country_code": { + "example": "US", + "type": "string" + }, + "years": { "items": { - "type": "string" + "$ref": "#/definitions/googlepatents.CoverageYear" + }, + "type": "array" + } + }, + "type": "object" + }, + "googlepatents.CoverageResponse": { + "properties": { + "countries": { + "items": { + "$ref": "#/definitions/googlepatents.CoverageCountry" }, "type": "array" }, - "url": { + "fetched_at": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "grailed.CategoriesResponse": { + "googlepatents.CoverageYear": { "properties": { - "categories": { + "applications": { + "example": "1712467", + "type": "string" + }, + "grants": { + "example": "2802408", + "type": "string" + }, + "year": { + "example": 2025, + "type": "integer" + } + }, + "type": "object" + }, + "googlepatents.DetailResponse": { + "properties": { + "abstract": { + "example": "Battery-powered upright vacuum cleaners are disclosed.", + "type": "string" + }, + "application_number": { + "example": "US15/620,213", + "type": "string" + }, + "citations": { "items": { - "$ref": "#/definitions/grailed.FacetCount" + "$ref": "#/definitions/googlepatents.CitedPatent" }, "type": "array" }, - "category_paths": { + "cited_by": { "items": { - "$ref": "#/definitions/grailed.FacetCount" + "$ref": "#/definitions/googlepatents.CitedPatent" }, "type": "array" }, - "colors": { + "claims": { "items": { - "$ref": "#/definitions/grailed.FacetCount" + "type": "string" }, "type": "array" }, - "conditions": { + "claims_count": { + "example": 19, + "type": "integer" + }, + "classifications": { "items": { - "$ref": "#/definitions/grailed.FacetCount" + "$ref": "#/definitions/googlepatents.Classification" }, "type": "array" }, - "departments": { + "country_code": { + "example": "US", + "type": "string" + }, + "country_name": { + "example": "United States", + "type": "string" + }, + "current_assignees": { "items": { - "$ref": "#/definitions/grailed.FacetCount" + "type": "string" }, "type": "array" }, - "fetched_at": { + "description": { + "items": { + "type": "string" + }, + "type": "array" + }, + "expiration_date": { + "example": "2038-04-26", "type": "string" }, - "sizes": { + "family_members": { "items": { - "$ref": "#/definitions/grailed.FacetCount" + "$ref": "#/definitions/googlepatents.FamilyMember" }, "type": "array" - } - }, - "type": "object" - }, - "grailed.CollectionListing": { - "properties": { - "buy_now": { - "type": "boolean" }, - "category_path": { + "fetched_at": { + "example": "2026-08-15T12:00:00Z", "type": "string" }, - "condition": { + "filing_date": { + "example": "2017-06-12", "type": "string" }, - "cover_photo_url": { - "type": "string" + "inventors": { + "items": { + "type": "string" + }, + "type": "array" }, - "currency": { + "kind_code": { + "example": "B2", "type": "string" }, - "department": { + "legal_status": { + "example": "Active", "type": "string" }, - "designers": { + "original_assignees": { "items": { "type": "string" }, "type": "array" }, - "follower_count": { - "type": "integer" + "pdf_url": { + "example": "https://patentimages.storage.googleapis.com/ae/9f/51/f34dc3bf93426e/US10758101.pdf", + "type": "string" }, - "id": { - "type": "integer" + "prior_art_keywords": { + "items": { + "type": "string" + }, + "type": "array" }, - "make_offer": { - "type": "boolean" + "priority_date": { + "example": "2017-06-12", + "type": "string" }, - "price": { - "type": "number" + "publication_date": { + "example": "2020-09-01", + "type": "string" }, - "seller_id": { - "type": "integer" + "publication_number": { + "example": "US10758101B2", + "type": "string" }, - "seller_rating": { - "type": "number" + "similar_documents": { + "items": { + "$ref": "#/definitions/googlepatents.SimilarDocument" + }, + "type": "array" }, - "size": { + "source_url": { + "example": "https://patents.google.com/patent/US10758101B2/en", "type": "string" }, - "sold": { - "type": "boolean" + "title": { + "example": "Upright vacuum cleaner with battery support plate", + "type": "string" + } + }, + "type": "object" + }, + "googlepatents.FacetEntry": { + "properties": { + "key": { + "example": "Emerson Electric Co.", + "type": "string" }, - "sold_price": { - "type": "number" + "value": { + "example": 666, + "type": "integer" + } + }, + "type": "object" + }, + "googlepatents.FamilyMember": { + "properties": { + "publication_date": { + "example": "2018-12-13", + "type": "string" + }, + "publication_number": { + "example": "US20180353038A1", + "type": "string" + } + }, + "type": "object" + }, + "googlepatents.RecentEntry": { + "properties": { + "publication_number": { + "example": "US10758101B2", + "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" }, - "grailed.CollectionResponse": { + "googlepatents.RecentResponse": { "properties": { "count": { + "example": 329, "type": "integer" }, - "external_id": { - "type": "string" - }, "fetched_at": { "type": "string" }, - "id": { - "type": "integer" - }, - "last_refreshed_at": { - "type": "string" - }, - "listings": { + "results": { "items": { - "$ref": "#/definitions/grailed.CollectionListing" + "$ref": "#/definitions/googlepatents.RecentEntry" }, "type": "array" }, "source_url": { "type": "string" }, - "title": { + "week": { + "example": "2026-W20", "type": "string" } }, "type": "object" }, - "grailed.CollectionSummary": { + "googlepatents.SearchResponse": { "properties": { - "external_id": { + "fetched_at": { "type": "string" }, - "id": { + "many_results": { + "example": false, + "type": "boolean" + }, + "page": { + "example": 0, "type": "integer" }, - "last_refreshed_at": { + "query": { + "example": "battery", "type": "string" }, - "preview_photos": { + "results": { "items": { - "type": "string" + "$ref": "#/definitions/googlepatents.SearchResult" }, "type": "array" }, - "title": { + "source_url": { "type": "string" }, - "top_designers": { + "top_assignees": { "items": { - "type": "string" + "$ref": "#/definitions/googlepatents.FacetEntry" }, "type": "array" - } - }, - "type": "object" - }, - "grailed.CollectionsResponse": { - "properties": { - "collections": { + }, + "top_classifications": { "items": { - "$ref": "#/definitions/grailed.CollectionSummary" + "$ref": "#/definitions/googlepatents.FacetEntry" }, "type": "array" }, - "count": { - "type": "integer" + "top_inventors": { + "items": { + "$ref": "#/definitions/googlepatents.FacetEntry" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "total_pages": { + "example": 100, + "type": "integer" }, - "source_url": { - "type": "string" + "total_results": { + "example": 112795, + "type": "integer" } }, "type": "object" }, - "grailed.Designer": { + "googlepatents.SearchResult": { "properties": { - "departments": { + "assignee": { + "example": "Emerson Electric Co", + "type": "string" + }, + "country_status": { "items": { - "type": "string" + "$ref": "#/definitions/googlepatents.CountryStatus" }, "type": "array" }, - "id": { - "type": "integer" - }, - "listings_count": { - "type": "integer" + "detail_url": { + "example": "https://patents.google.com/patent/US10758101B2/en", + "type": "string" }, - "logo_url": { + "filing_date": { + "example": "2017-06-12", "type": "string" }, - "name": { + "grant_date": { + "example": "2020-09-01", "type": "string" }, - "slug": { + "inventor": { + "example": "Thomas E. Fogarty, Jr.", "type": "string" - } - }, - "type": "object" - }, - "grailed.DesignersResponse": { - "properties": { - "count": { - "type": "integer" }, - "designers": { - "items": { - "$ref": "#/definitions/grailed.Designer" - }, - "type": "array" + "is_similar_document": { + "example": false, + "type": "boolean" }, - "fetched_at": { + "language": { + "example": "en", "type": "string" }, - "limit": { - "type": "integer" + "pdf_url": { + "type": "string" }, - "page": { - "type": "integer" + "priority_date": { + "example": "2017-06-12", + "type": "string" }, - "query": { + "publication_date": { + "example": "2020-09-01", "type": "string" }, - "source_url": { + "publication_number": { + "example": "US10758101B2", "type": "string" }, - "total_pages": { - "type": "integer" + "snippet": { + "example": "a battery support plate adapted to support a battery...", + "type": "string" }, - "total_results": { - "type": "integer" - } - }, - "type": "object" - }, - "grailed.FacetCount": { - "properties": { - "count": { - "type": "integer" + "thumbnail_url": { + "type": "string" }, - "value": { + "title": { + "example": "Upright vacuum cleaner with battery support plate", "type": "string" } }, "type": "object" }, - "grailed.Listing": { + "googlepatents.SimilarDocument": { "properties": { - "bumped_at": { - "type": "string" - }, - "buy_now": { - "type": "boolean" - }, - "category": { + "publication_date": { + "example": "1990-06-26", "type": "string" }, - "category_path": { + "publication_number": { + "example": "CA1270625A", "type": "string" }, - "color": { + "title": { + "example": "Method and apparatus for setting pattern frame and press die", "type": "string" - }, - "condition": { + } + }, + "type": "object" + }, + "googlepatents.SuggestEntry": { + "properties": { + "description": { "type": "string" }, - "cover_photo_url": { + "value": { + "example": "John Cronin", "type": "string" - }, - "created_at": { + } + }, + "type": "object" + }, + "googlepatents.SuggestResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "currency": { + "field": { + "example": "inventor", "type": "string" }, - "department": { + "source_url": { "type": "string" }, - "designers": { + "suggestions": { "items": { - "type": "string" + "$ref": "#/definitions/googlepatents.SuggestEntry" }, "type": "array" }, - "follower_count": { + "value": { + "example": "John", + "type": "string" + } + }, + "type": "object" + }, + "googlepatents.classificationResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "id": { - "type": "integer" + "data": { + "$ref": "#/definitions/googlepatents.ClassificationResponse" }, - "location": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "googlepatents.coverageResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "make_offer": { - "type": "boolean" + "data": { + "$ref": "#/definitions/googlepatents.CoverageResponse" }, - "photo_count": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "googlepatents.detailResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "price": { - "type": "number" - }, - "seller": { - "$ref": "#/definitions/grailed.ListingSeller" + "data": { + "$ref": "#/definitions/googlepatents.DetailResponse" }, - "size": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "googlepatents.recentResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "sold": { - "type": "boolean" + "data": { + "$ref": "#/definitions/googlepatents.RecentResponse" }, - "sold_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "googlepatents.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "sold_price": { - "type": "number" + "data": { + "$ref": "#/definitions/googlepatents.SearchResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "googlepatents.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/googlepatents.SuggestResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "grailed.ListingDesigner": { + "googleplay.App": { "properties": { - "departments": { + "ad_supported": { + "example": false, + "type": "boolean" + }, + "android_max_version": { + "example": "15", + "type": "string" + }, + "android_version": { + "example": "8.0", + "type": "string" + }, + "android_version_text": { + "example": "8.0 and up", + "type": "string" + }, + "app_id": { + "example": "com.openai.chatgpt", + "type": "string" + }, + "available": { + "example": true, + "type": "boolean" + }, + "categories": { + "items": { + "$ref": "#/definitions/googleplay.Category" + }, + "type": "array" + }, + "comments": { + "example": [ + "[\"Great app\"", + "\"Very useful\"]" + ], "items": { "type": "string" }, "type": "array" }, - "id": { - "type": "integer" + "content_rating": { + "example": "Teen", + "type": "string" }, - "logo_url": { + "content_rating_description": { + "example": "Users Interact, In-App Purchases", "type": "string" }, - "name": { + "currency": { + "example": "USD", "type": "string" }, - "slug": { + "description": { + "example": "Introducing ChatGPT for Android: OpenAI's latest advancements at your fingertips.", "type": "string" - } - }, - "type": "object" - }, - "grailed.ListingResponse": { - "properties": { - "buy_now": { - "type": "boolean" }, - "category": { + "description_html": { + "example": "Introducing ChatGPT for Android: OpenAI's latest advancements at your fingertips.

This official app is free.", "type": "string" }, - "category_path": { + "developer": { + "example": "OpenAI", "type": "string" }, - "collaboration": { + "developer_address": { + "example": "1455 3RD St, San Francisco, CA 94158-2210, United States", "type": "string" }, - "condition": { + "developer_email": { + "example": "support@openai.com", "type": "string" }, - "created_at": { + "developer_id": { + "example": "7577165439232992817", "type": "string" }, - "currency": { + "developer_internal_id": { + "example": "7577165439232992817", "type": "string" }, - "deleted": { - "type": "boolean" + "developer_legal_address": { + "example": "1455 3RD St, San Francisco, CA 94158-2210, United States", + "type": "string" }, - "department": { + "developer_legal_email": { + "example": "support@openai.com", "type": "string" }, - "description": { + "developer_legal_name": { + "example": "OpenAI Opco, LLC", "type": "string" }, - "designers": { + "developer_legal_phone_number": { + "example": "+1 415-231-2395", + "type": "string" + }, + "developer_website": { + "example": "https://help.openai.com", + "type": "string" + }, + "discount_end_date": { + "example": "2026-03-31T23:59:59Z", + "type": "string" + }, + "early_access_enabled": { + "example": false, + "type": "boolean" + }, + "features": { "items": { - "$ref": "#/definitions/grailed.ListingDesigner" + "$ref": "#/definitions/googleplay.Feature" }, "type": "array" }, - "dropped": { + "free": { + "example": true, "type": "boolean" }, - "exact_size": { + "genre": { + "example": "Productivity", "type": "string" }, - "expired": { - "type": "boolean" + "genre_id": { + "example": "PRODUCTIVITY", + "type": "string" }, - "fetched_at": { + "header_image": { + "example": "https://play-lh.googleusercontent.com/sample-header-image", "type": "string" }, - "follower_count": { - "type": "integer" + "histogram": { + "type": "object" }, - "id": { - "type": "integer" + "iap_range": { + "example": "$0.99 - $199.99 per item", + "type": "string" }, - "make_offer": { + "icon": { + "example": "https://play-lh.googleusercontent.com/lmG9HlI0awHie0cyBieWXeNjpyXvHPwDBb8MNOVIyp0P8VEh95AiBHtUZSDVR3HLe3A", + "type": "string" + }, + "installs": { + "example": "100,000,000+", + "type": "string" + }, + "is_available_in_play_pass": { + "example": false, "type": "boolean" }, - "measurements": { + "max_installs": { + "example": 500000000, + "type": "integer" + }, + "min_installs": { + "example": 100000000, + "type": "integer" + }, + "more_by_developer": { "items": { - "$ref": "#/definitions/grailed.Measurement" + "$ref": "#/definitions/googleplay.ListApp" }, "type": "array" }, - "photos": { + "offers_iap": { + "example": true, + "type": "boolean" + }, + "original_price": { + "example": 4.99, + "type": "number" + }, + "platforms": { + "example": [ + "[\"phone\"", + "\"tablet\"", + "\"chromebook\"]" + ], "items": { "type": "string" }, "type": "array" }, - "pretty_size": { + "preregister": { + "example": false, + "type": "boolean" + }, + "preview_video": { + "example": "https://play.google.com/preview/sample", "type": "string" }, "price": { + "example": 0, "type": "number" }, - "price_updated_at": { + "price_text": { + "example": "Free", "type": "string" }, - "published": { - "type": "boolean" + "privacy_policy": { + "example": "https://openai.com/policies/privacy-policy", + "type": "string" }, - "seller": { - "$ref": "#/definitions/grailed.SellerProfile" + "ratings": { + "example": 40123456, + "type": "integer" }, - "size": { + "recent_changes": { + "example": "Bug fixes and performance improvements.", "type": "string" }, - "sold": { - "type": "boolean" - }, - "sold_at": { + "released": { + "example": "2023-07-19", "type": "string" }, - "sold_price": { - "type": "number" + "reviews": { + "example": 1234567, + "type": "integer" }, - "sold_shipping_price": { + "score": { + "example": 4.8, "type": "number" }, - "source_url": { + "score_text": { + "example": "4.8", "type": "string" }, - "styles": { + "screenshots": { + "example": [ + "[\"https://play-lh.googleusercontent.com/sample-screenshot-1\"", + "\"https://play-lh.googleusercontent.com/sample-screenshot-2\"]" + ], "items": { "type": "string" }, "type": "array" }, - "subcategory": { + "similar_apps": { + "items": { + "$ref": "#/definitions/googleplay.ListApp" + }, + "type": "array" + }, + "summary": { + "example": "The official app by OpenAI", "type": "string" }, "title": { + "example": "ChatGPT", "type": "string" }, - "traits": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "updated": { + "example": 1736899200, + "type": "integer" }, "url": { + "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt&hl=en&gl=us", "type": "string" - } - }, - "type": "object" - }, - "grailed.ListingSeller": { - "properties": { - "avatar_url": { - "type": "string" - }, - "id": { - "type": "integer" }, - "rating_average": { - "type": "number" - }, - "rating_count": { - "type": "integer" - }, - "total_bought_and_sold": { - "type": "integer" + "version": { + "example": "1.2026.056", + "type": "string" }, - "trusted_seller": { - "type": "boolean" + "video": { + "example": "https://play.google.com/video/sample", + "type": "string" }, - "username": { + "video_image": { + "example": "https://play-lh.googleusercontent.com/sample-video-cover", "type": "string" } }, "type": "object" }, - "grailed.Measurement": { + "googleplay.AppDetailsResponse": { "properties": { - "department_mapping_id": { + "code": { + "example": 200, "type": "integer" }, - "inches": { - "type": "number" + "data": { + "$ref": "#/definitions/googleplay.App" }, - "measurement_type_id": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "grailed.SearchResponse": { + "googleplay.Category": { "properties": { - "category": { - "type": "string" - }, - "color": { - "type": "string" - }, - "condition": { - "type": "string" - }, - "count": { - "type": "integer" - }, - "department": { - "type": "string" - }, - "designer": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "listings": { - "items": { - "$ref": "#/definitions/grailed.Listing" - }, - "type": "array" - }, - "max_price": { - "type": "number" - }, - "min_price": { - "type": "number" - }, - "page": { - "type": "integer" - }, - "query": { - "type": "string" - }, - "size": { - "type": "string" - }, - "sort": { + "id": { + "example": "PRODUCTIVITY", "type": "string" }, - "source_url": { + "name": { + "example": "Productivity", "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "grailed.SellerProfile": { + "googleplay.DataSafetyEntry": { "properties": { - "avatar_url": { + "data": { + "example": "Email address", "type": "string" }, - "banned": { - "type": "boolean" - }, - "confirmed": { + "optional": { + "example": false, "type": "boolean" }, - "created_at": { - "type": "string" - }, - "follower_count": { - "type": "integer" - }, - "following_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "listings_for_sale_count": { - "type": "integer" - }, - "location": { + "purpose": { + "example": "Analytics", "type": "string" }, - "quick_responder": { - "type": "boolean" - }, - "rating_average": { - "type": "number" - }, - "rating_count": { - "type": "integer" - }, - "sold_count": { - "type": "integer" - }, - "speedy_shipper": { - "type": "boolean" - }, - "tag_list": { - "items": { - "type": "string" - }, - "type": "array" - }, - "total_bought_and_sold": { - "type": "integer" - }, - "trusted_seller": { - "type": "boolean" - }, - "username": { + "type": { + "example": "Personal info", "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "grailed.SellerResponse": { + "googleplay.DataSafetyResult": { "properties": { - "active_listings_count": { - "type": "integer" - }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "listings": { + "collected_data": { "items": { - "$ref": "#/definitions/grailed.Listing" + "$ref": "#/definitions/googleplay.DataSafetyEntry" }, "type": "array" }, - "page": { - "type": "integer" - }, - "profile": { - "$ref": "#/definitions/grailed.SellerProfile" - }, - "source_url": { + "privacy_policy_url": { + "example": "https://openai.com/policies/privacy-policy", "type": "string" }, - "total_pages": { - "type": "integer" + "security_practices": { + "items": { + "$ref": "#/definitions/googleplay.SecurityPractice" + }, + "type": "array" }, - "username": { - "type": "string" + "shared_data": { + "items": { + "$ref": "#/definitions/googleplay.DataSafetyEntry" + }, + "type": "array" } }, "type": "object" }, - "grailed.SellerReview": { + "googleplay.DeviceRating": { "properties": { - "created_at": { + "device": { + "example": "phone", "type": "string" }, - "id": { - "type": "integer" + "histogram": { + "type": "object" }, - "listing": { - "$ref": "#/definitions/grailed.SellerReviewListing" + "ratings": { + "example": 326809, + "type": "integer" }, - "note": { - "type": "string" + "reviews": { + "example": 8946, + "type": "integer" }, - "rating": { + "score": { + "example": 4.7, "type": "number" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "score_text": { + "example": "4.7", + "type": "string" } }, "type": "object" }, - "grailed.SellerReviewListing": { + "googleplay.Feature": { "properties": { - "id": { - "type": "integer" - }, - "price": { - "type": "number" - }, - "sold": { - "type": "boolean" - }, - "title": { + "description": { + "example": "Get answers, writing help, and image generation.", "type": "string" }, - "url": { + "title": { + "example": "AI assistant", "type": "string" } }, "type": "object" }, - "grailed.SellerReviewsResponse": { + "googleplay.ListApp": { "properties": { - "count": { - "type": "integer" + "app_id": { + "example": "com.openai.chatgpt", + "type": "string" }, - "fetched_at": { + "currency": { + "example": "USD", "type": "string" }, - "has_more": { - "type": "boolean" + "developer": { + "example": "OpenAI", + "type": "string" }, - "page": { - "type": "integer" + "developer_id": { + "example": "7577165439232992817", + "type": "string" }, - "reviews": { - "items": { - "$ref": "#/definitions/grailed.SellerReview" - }, - "type": "array" + "free": { + "example": true, + "type": "boolean" }, - "source_url": { + "icon": { + "example": "https://play-lh.googleusercontent.com/lmG9HlI0awHie0cyBieWXeNjpyXvHPwDBb8MNOVIyp0P8VEh95AiBHtUZSDVR3HLe3A", "type": "string" }, - "user_id": { - "type": "integer" + "price": { + "example": 0, + "type": "number" }, - "username": { + "price_text": { + "example": "FREE", "type": "string" - } - }, - "type": "object" - }, - "grailed.SimilarListingsResponse": { - "properties": { - "count": { - "type": "integer" }, - "fetched_at": { - "type": "string" + "score": { + "example": 4.8, + "type": "number" }, - "id": { - "type": "integer" + "score_text": { + "example": "4.8", + "type": "string" }, - "limit": { - "type": "integer" + "summary": { + "example": "The official app by OpenAI", + "type": "string" }, - "listings": { - "items": { - "$ref": "#/definitions/grailed.Listing" - }, - "type": "array" + "title": { + "example": "ChatGPT", + "type": "string" }, - "source_url": { + "url": { + "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt", "type": "string" } }, "type": "object" }, - "grailed.SoldListingsResponse": { + "googleplay.Review": { "properties": { - "category": { - "type": "string" - }, - "color": { - "type": "string" + "criterias": { + "items": { + "$ref": "#/definitions/googleplay.ReviewCriteria" + }, + "type": "array" }, - "condition": { + "date": { + "example": "2026-02-18T12:34:56Z", "type": "string" }, - "count": { - "type": "integer" - }, - "department": { + "id": { + "example": "5b4e4d89-ce22-4f13-b676-bb3a7aafe278", "type": "string" }, - "designer": { + "reply_date": { + "example": "2026-02-20T08:00:00Z", "type": "string" }, - "fetched_at": { + "reply_text": { + "example": "Thanks for the feedback!", "type": "string" }, - "limit": { + "score": { + "example": 5, "type": "integer" }, - "listings": { - "items": { - "$ref": "#/definitions/grailed.Listing" - }, - "type": "array" - }, - "max_price": { - "type": "number" + "score_text": { + "example": "5", + "type": "string" }, - "min_price": { - "type": "number" + "text": { + "example": "Very helpful for quick answers and brainstorming.", + "type": "string" }, - "page": { + "thumbs_up": { + "example": 124, "type": "integer" }, - "query": { + "title": { + "example": "Great app", "type": "string" }, - "size": { + "url": { + "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt&reviewId=5b4e4d89-ce22-4f13-b676-bb3a7aafe278", "type": "string" }, - "sort": { + "user_image": { + "example": "https://play-lh.googleusercontent.com/a-/ALV-UjVsample", "type": "string" }, - "source_url": { + "user_name": { + "example": "Jane Doe", "type": "string" }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" + "version": { + "example": "1.2026.056", + "type": "string" } }, "type": "object" }, - "grailed.SuggestResponse": { + "googleplay.ReviewCriteria": { "properties": { - "fetched_at": { - "type": "string" - }, - "query": { + "criteria": { + "example": "Accuracy", "type": "string" }, - "suggestions": { + "rating": { + "example": 5, + "type": "integer" + } + }, + "type": "object" + }, + "googleplay.ReviewsResult": { + "properties": { + "data": { "items": { - "$ref": "#/definitions/grailed.Suggestion" + "$ref": "#/definitions/googleplay.Review" }, "type": "array" + }, + "next_pagination_token": { + "example": "CscBIr4BAb_yELvAqtSacgExc3y_bO88_b1Q", + "type": "string" } }, "type": "object" }, - "grailed.Suggestion": { + "googleplay.SecurityPractice": { "properties": { - "popularity": { - "type": "integer" - }, - "query": { + "description": { + "example": "Your data is transferred over a secure connection", "type": "string" }, - "total_results": { - "type": "integer" + "practice": { + "example": "Data is encrypted in transit", + "type": "string" } }, "type": "object" }, - "grailed.categoriesResponseDoc": { + "googleplay.Suggestion": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/grailed.CategoriesResponse" - }, - "msg": { - "example": "OK", + "term": { + "example": "chatgpt", "type": "string" } }, "type": "object" }, - "grailed.collectionResponseDoc": { + "googleplay.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.CollectionResponse" + "items": { + "type": "string" + }, + "type": "array" }, "msg": { "example": "OK", @@ -74523,14 +75700,14 @@ }, "type": "object" }, - "grailed.collectionsResponseDoc": { + "googleplay.dataSafetyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.CollectionsResponse" + "$ref": "#/definitions/googleplay.DataSafetyResult" }, "msg": { "example": "OK", @@ -74539,14 +75716,15 @@ }, "type": "object" }, - "grailed.designersResponseDoc": { + "googleplay.developerResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.DesignersResponse" + "items": {}, + "type": "array" }, "msg": { "example": "OK", @@ -74555,14 +75733,15 @@ }, "type": "object" }, - "grailed.listingResponseDoc": { + "googleplay.listResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.ListingResponse" + "items": {}, + "type": "array" }, "msg": { "example": "OK", @@ -74571,14 +75750,15 @@ }, "type": "object" }, - "grailed.searchResponseDoc": { + "googleplay.permissionsResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SearchResponse" + "items": {}, + "type": "array" }, "msg": { "example": "OK", @@ -74587,14 +75767,17 @@ }, "type": "object" }, - "grailed.sellerResponseDoc": { + "googleplay.ratingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SellerResponse" + "items": { + "$ref": "#/definitions/googleplay.DeviceRating" + }, + "type": "array" }, "msg": { "example": "OK", @@ -74603,14 +75786,14 @@ }, "type": "object" }, - "grailed.sellerReviewsResponseDoc": { + "googleplay.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SellerReviewsResponse" + "$ref": "#/definitions/googleplay.ReviewsResult" }, "msg": { "example": "OK", @@ -74619,14 +75802,15 @@ }, "type": "object" }, - "grailed.similarListingsResponseDoc": { + "googleplay.searchResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SimilarListingsResponse" + "items": {}, + "type": "array" }, "msg": { "example": "OK", @@ -74635,14 +75819,15 @@ }, "type": "object" }, - "grailed.soldListingsResponseDoc": { + "googleplay.similarResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SoldListingsResponse" + "items": {}, + "type": "array" }, "msg": { "example": "OK", @@ -74651,14 +75836,17 @@ }, "type": "object" }, - "grailed.suggestResponseDoc": { + "googleplay.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SuggestResponse" + "items": { + "$ref": "#/definitions/googleplay.Suggestion" + }, + "type": "array" }, "msg": { "example": "OK", @@ -74667,920 +75855,1168 @@ }, "type": "object" }, - "grubhub.AvailabilityResponse": { + "gq.AuthorArticle": { "properties": { - "count": { - "example": 2, - "type": "integer" + "image_url": { + "type": "string" }, - "fetched_at": { + "published_at": { "type": "string" }, - "requested": { - "description": "Requested is the id list as asked for, so a caller can tell which\nids Grubhub returned nothing for.", + "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" }, - "restaurants": { + "has_next_page": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/grubhub.RestaurantAvailability" + "type": "string" }, "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "grubhub.MenuCategory": { + "grailed.CategoriesResponse": { "properties": { - "available": { - "example": true, - "type": "boolean" + "categories": { + "items": { + "$ref": "#/definitions/grailed.FacetCount" + }, + "type": "array" }, - "category_id": { - "example": "275127198073", - "type": "string" + "category_paths": { + "items": { + "$ref": "#/definitions/grailed.FacetCount" + }, + "type": "array" }, - "items": { + "colors": { "items": { - "$ref": "#/definitions/grubhub.MenuItem" + "$ref": "#/definitions/grailed.FacetCount" }, "type": "array" }, - "name": { - "example": "Burgers", + "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" }, - "grubhub.MenuItem": { + "grailed.CollectionListing": { "properties": { - "available": { - "example": true, + "buy_now": { "type": "boolean" }, - "delivery_price": { - "$ref": "#/definitions/grubhub.Money" + "category_path": { + "type": "string" }, - "description": { + "condition": { "type": "string" }, - "image_url": { + "cover_photo_url": { "type": "string" }, - "item_id": { - "example": "275127198449", + "currency": { "type": "string" }, - "max_price": { - "$ref": "#/definitions/grubhub.Money" + "department": { + "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." + "designers": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { - "example": "Cheeseburger", - "type": "string" + "follower_count": { + "type": "integer" }, - "pickup_price": { - "$ref": "#/definitions/grubhub.Money" + "id": { + "type": "integer" }, - "popular": { - "example": true, + "make_offer": { "type": "boolean" }, "price": { - "$ref": "#/definitions/grubhub.Money" + "type": "number" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "seller_id": { + "type": "integer" + }, + "seller_rating": { + "type": "number" + }, + "size": { + "type": "string" + }, + "sold": { + "type": "boolean" + }, + "sold_price": { + "type": "number" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "grubhub.MenuResponse": { + "grailed.CollectionResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/grubhub.MenuCategory" - }, - "type": "array" + "count": { + "type": "integer" + }, + "external_id": { + "type": "string" }, "fetched_at": { "type": "string" }, - "item_count": { - "example": 8, + "id": { "type": "integer" }, - "name": { + "last_refreshed_at": { "type": "string" }, - "restaurant_id": { - "example": "6238960", - "type": "string" + "listings": { + "items": { + "$ref": "#/definitions/grailed.CollectionListing" + }, + "type": "array" }, "source_url": { "type": "string" - } - }, - "type": "object" - }, - "grubhub.Money": { - "properties": { - "amount": { - "example": 399, - "type": "integer" }, - "currency": { - "example": "USD", + "title": { "type": "string" - }, - "value": { - "example": 3.99, - "type": "number" } }, "type": "object" }, - "grubhub.Offer": { + "grailed.CollectionSummary": { "properties": { - "amount": { - "$ref": "#/definitions/grubhub.OfferAmount" - }, - "description": { - "description": "Description is the full offer copy, including its fine print --\nminimum order rules, exclusions, redemption limits.", + "external_id": { "type": "string" }, - "end_date": { - "type": "string" + "id": { + "type": "integer" }, - "entitlement_id": { + "last_refreshed_at": { "type": "string" }, - "entitlement_type": { - "example": "UNIFIED_REWARD", - "type": "string" + "preview_photos": { + "items": { + "type": "string" + }, + "type": "array" }, - "offer_type": { - "example": "ENTERPRISE_REWARD", + "title": { "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" + "top_designers": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "grailed.CollectionsResponse": { + "properties": { + "collections": { + "items": { + "$ref": "#/definitions/grailed.CollectionSummary" + }, + "type": "array" }, - "redeem_item_count": { - "example": 1, + "count": { "type": "integer" }, - "title": { - "example": "Free Double Cheeseburger", + "fetched_at": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "grubhub.OfferAmount": { + "grailed.Designer": { "properties": { - "amount_maximum": { - "example": 10, - "type": "number" + "departments": { + "items": { + "type": "string" + }, + "type": "array" }, - "currency": { - "example": "USD", - "type": "string" + "id": { + "type": "integer" }, - "order_minimum": { - "example": 20, - "type": "number" + "listings_count": { + "type": "integer" }, - "type": { - "example": "MENU_ITEM", + "logo_url": { "type": "string" }, - "value": { - "example": 0, - "type": "number" + "name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "grubhub.OffersResponse": { + "grailed.DesignersResponse": { "properties": { "count": { - "example": 1, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "offers": { + "designers": { "items": { - "$ref": "#/definitions/grubhub.Offer" + "$ref": "#/definitions/grailed.Designer" }, "type": "array" }, - "restaurant_id": { - "example": "1338141", + "fetched_at": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "query": { "type": "string" }, "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "grubhub.Rating": { + "grailed.FacetCount": { "properties": { "count": { - "example": 65, "type": "integer" }, "value": { - "example": 4.6, - "type": "number" + "type": "string" } }, "type": "object" }, - "grubhub.RestaurantAvailability": { + "grailed.Listing": { "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" + "bumped_at": { + "type": "string" }, - "available_for_pickup": { - "example": true, + "buy_now": { "type": "boolean" }, - "blacked_out": { - "example": false, - "type": "boolean" + "category": { + "type": "string" }, - "cuisines": { + "category_path": { + "type": "string" + }, + "color": { + "type": "string" + }, + "condition": { + "type": "string" + }, + "cover_photo_url": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "department": { + "type": "string" + }, + "designers": { "items": { "type": "string" }, "type": "array" }, - "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, + "follower_count": { "type": "integer" }, - "delivery_fee": { - "$ref": "#/definitions/grubhub.Money" + "id": { + "type": "integer" }, - "distance_miles": { - "example": 0.23, - "type": "number" + "location": { + "type": "string" }, - "inundated": { - "description": "Inundated marks a restaurant Grubhub flags as overloaded.", - "example": false, + "make_offer": { "type": "boolean" }, - "logo_url": { - "type": "string" + "photo_count": { + "type": "integer" }, - "next_delivery_time": { - "description": "NextDeliveryTime is when Grubhub says the next delivery order can be\nsent, useful when open_delivery is false.", - "type": "string" + "price": { + "type": "number" }, - "next_pickup_time": { - "type": "string" + "seller": { + "$ref": "#/definitions/grailed.ListingSeller" }, - "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" + "size": { + "type": "string" }, - "open_delivery": { - "example": false, + "sold": { "type": "boolean" }, - "open_pickup": { - "example": false, - "type": "boolean" + "sold_at": { + "type": "string" }, - "order_minimum": { - "$ref": "#/definitions/grubhub.Money" + "sold_price": { + "type": "number" }, - "pickup_estimate_minutes": { - "example": 10, - "type": "integer" + "title": { + "type": "string" }, - "restaurant_id": { - "example": "6238960", + "url": { "type": "string" } }, "type": "object" }, - "grubhub.RestaurantHours": { + "grailed.ListingDesigner": { "properties": { - "day_of_week": { - "example": "Monday", - "type": "string" + "departments": { + "items": { + "type": "string" + }, + "type": "array" }, - "end_time": { - "example": "23:59:59.000", + "id": { + "type": "integer" + }, + "logo_url": { "type": "string" }, - "hours": { - "description": "Hours is Grubhub's own human-readable window.", - "example": "12:00 AM - 12:00 AM", + "name": { "type": "string" }, - "start_time": { - "example": "00:00:00.000", + "slug": { "type": "string" } }, "type": "object" }, - "grubhub.RestaurantResponse": { + "grailed.ListingResponse": { "properties": { - "address": { + "buy_now": { + "type": "boolean" + }, + "category": { "type": "string" }, - "chain_name": { + "category_path": { "type": "string" }, - "city": { + "collaboration": { "type": "string" }, - "cuisines": { + "condition": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "deleted": { + "type": "boolean" + }, + "department": { + "type": "string" + }, + "description": { + "type": "string" + }, + "designers": { "items": { - "type": "string" + "$ref": "#/definitions/grailed.ListingDesigner" }, "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." + "dropped": { + "type": "boolean" + }, + "exact_size": { + "type": "string" + }, + "expired": { + "type": "boolean" }, "fetched_at": { "type": "string" }, - "has_coupons": { + "follower_count": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "make_offer": { "type": "boolean" }, - "hours": { + "measurements": { "items": { - "$ref": "#/definitions/grubhub.RestaurantHours" + "$ref": "#/definitions/grailed.Measurement" }, "type": "array" }, - "is_new": { - "type": "boolean" - }, - "latitude": { - "type": "number" + "photos": { + "items": { + "type": "string" + }, + "type": "array" }, - "logo_url": { + "pretty_size": { "type": "string" }, - "longitude": { + "price": { "type": "number" }, - "menu_path": { - "type": "string" - }, - "name": { - "example": "7th Street Burger Financial District", + "price_updated_at": { "type": "string" }, - "offers_delivery": { - "type": "boolean" - }, - "offers_pickup": { + "published": { "type": "boolean" }, - "online_ordering": { - "example": true, - "type": "boolean" + "seller": { + "$ref": "#/definitions/grailed.SellerProfile" }, - "phone_number": { + "size": { "type": "string" }, - "postal_code": { + "sold": { + "type": "boolean" + }, + "sold_at": { "type": "string" }, - "price_rating": { + "sold_price": { "type": "number" }, - "rating": { - "$ref": "#/definitions/grubhub.Rating" - }, - "restaurant_id": { - "example": "6238960", - "type": "string" + "sold_shipping_price": { + "type": "number" }, "source_url": { "type": "string" }, - "state": { - "type": "string" - }, - "tags": { + "styles": { "items": { "type": "string" }, "type": "array" }, - "timezone": { - "example": "America/New_York", + "subcategory": { + "type": "string" + }, + "title": { + "type": "string" + }, + "traits": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "url": { "type": "string" } }, "type": "object" }, - "grubhub.Review": { + "grailed.ListingSeller": { "properties": { - "author_name": { - "example": "Annie", + "avatar_url": { "type": "string" }, - "created_at": { - "description": "CreatedAt is RFC3339, converted from the upstream's epoch millis.", - "example": "2026-08-09T12:05:42Z", + "id": { + "type": "integer" + }, + "rating_average": { + "type": "number" + }, + "rating_count": { + "type": "integer" + }, + "total_bought_and_sold": { + "type": "integer" + }, + "trusted_seller": { + "type": "boolean" + }, + "username": { "type": "string" + } + }, + "type": "object" + }, + "grailed.Measurement": { + "properties": { + "department_mapping_id": { + "type": "integer" }, - "diner_type": { - "description": "DinerType distinguishes e.g. a Regular from a first-time diner.", - "example": "Regular", + "inches": { + "type": "number" + }, + "measurement_type_id": { + "type": "integer" + } + }, + "type": "object" + }, + "grailed.SearchResponse": { + "properties": { + "category": { "type": "string" }, - "items": { - "description": "Items are the menu items this review is attached to -- Grubhub ties\neach review to what the diner actually ordered.", + "color": { + "type": "string" + }, + "condition": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "department": { + "type": "string" + }, + "designer": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "listings": { "items": { - "$ref": "#/definitions/grubhub.ReviewedItem" + "$ref": "#/definitions/grailed.Listing" }, "type": "array" }, - "rating": { - "example": 5, + "max_price": { + "type": "number" + }, + "min_price": { + "type": "number" + }, + "page": { "type": "integer" }, - "review_id": { + "query": { "type": "string" }, - "reviewer_review_count": { - "description": "ReviewerReviewCount is how many reviews this diner has written.", - "example": 21, - "type": "integer" + "size": { + "type": "string" }, - "sentiment": { - "description": "Sentiment is Grubhub's own classification of the review.", - "example": "Positive", + "sort": { "type": "string" }, - "text": { - "example": "Staff are great and burgers are great!", + "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "grubhub.ReviewedItem": { + "grailed.SellerProfile": { "properties": { - "item_id": { - "example": "275127198449", + "avatar_url": { "type": "string" }, - "name": { - "example": "Cheeseburger", + "banned": { + "type": "boolean" + }, + "confirmed": { + "type": "boolean" + }, + "created_at": { + "type": "string" + }, + "follower_count": { + "type": "integer" + }, + "following_count": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "listings_for_sale_count": { + "type": "integer" + }, + "location": { + "type": "string" + }, + "quick_responder": { + "type": "boolean" + }, + "rating_average": { + "type": "number" + }, + "rating_count": { + "type": "integer" + }, + "sold_count": { + "type": "integer" + }, + "speedy_shipper": { + "type": "boolean" + }, + "tag_list": { + "items": { + "type": "string" + }, + "type": "array" + }, + "total_bought_and_sold": { + "type": "integer" + }, + "trusted_seller": { + "type": "boolean" + }, + "username": { "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "grubhub.ReviewsResponse": { + "grailed.SellerResponse": { "properties": { - "available_sorts": { + "active_listings_count": { + "type": "integer" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "listings": { "items": { - "type": "string" + "$ref": "#/definitions/grailed.Listing" }, "type": "array" }, - "fetched_at": { + "page": { + "type": "integer" + }, + "profile": { + "$ref": "#/definitions/grailed.SellerProfile" + }, + "source_url": { "type": "string" }, - "page": { - "example": 1, + "total_pages": { "type": "integer" }, - "rating_count": { + "username": { + "type": "string" + } + }, + "type": "object" + }, + "grailed.SellerReview": { + "properties": { + "created_at": { + "type": "string" + }, + "id": { "type": "integer" }, - "restaurant_id": { - "example": "6238960", + "listing": { + "$ref": "#/definitions/grailed.SellerReviewListing" + }, + "note": { "type": "string" }, - "restaurant_score": { + "rating": { "type": "number" }, - "reviews": { + "tags": { "items": { - "$ref": "#/definitions/grubhub.Review" + "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "grailed.SellerReviewListing": { + "properties": { + "id": { + "type": "integer" }, - "source_url": { - "type": "string" + "price": { + "type": "number" }, - "star_breakdown": { - "$ref": "#/definitions/grubhub.StarBreakdown" + "sold": { + "type": "boolean" }, - "total_count": { - "example": 0, - "type": "integer" + "title": { + "type": "string" }, - "total_pages": { - "example": 0, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "grubhub.SearchResponse": { + "grailed.SellerReviewsResponse": { "properties": { "count": { - "example": 20, "type": "integer" }, "fetched_at": { "type": "string" }, + "has_more": { + "type": "boolean" + }, "page": { - "example": 1, "type": "integer" }, - "restaurants": { + "reviews": { "items": { - "$ref": "#/definitions/grubhub.SearchRestaurant" + "$ref": "#/definitions/grailed.SellerReview" }, "type": "array" }, "source_url": { "type": "string" }, - "total_hits": { - "example": 1457, + "user_id": { "type": "integer" }, - "total_pages": { - "example": 73, - "type": "integer" + "username": { + "type": "string" } }, "type": "object" }, - "grubhub.SearchRestaurant": { + "grailed.SimilarListingsResponse": { "properties": { - "address": { - "example": "199 Water Street", - "type": "string" + "count": { + "type": "integer" }, - "chain_name": { + "fetched_at": { "type": "string" }, - "city": { - "example": "New York", - "type": "string" + "id": { + "type": "integer" }, - "coupons_available": { - "description": "CouponsAvailable and TotalOffers describe promotions without\nreproducing their (volatile) terms.", - "example": false, - "type": "boolean" + "limit": { + "type": "integer" }, - "cuisines": { + "listings": { "items": { - "type": "string" + "$ref": "#/definitions/grailed.Listing" }, "type": "array" }, - "delivery_fee": { - "allOf": [ - { - "$ref": "#/definitions/grubhub.Money" - } - ], - "description": "Delivery and pickup economics." - }, - "delivery_minimum": { - "$ref": "#/definitions/grubhub.Money" + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "grailed.SoldListingsResponse": { + "properties": { + "category": { + "type": "string" }, - "delivery_time_minutes": { - "example": 30, - "type": "integer" + "color": { + "type": "string" }, - "distance_miles": { - "description": "DistanceMiles is the distance from the search coordinate.", - "example": "0.4", + "condition": { "type": "string" }, - "latitude": { - "type": "number" + "count": { + "type": "integer" }, - "logo_url": { + "department": { "type": "string" }, - "longitude": { - "type": "number" - }, - "menu_path": { + "designer": { "type": "string" }, - "name": { - "example": "NYC Bagel and Coffee House", + "fetched_at": { "type": "string" }, - "offers_delivery": { - "example": true, - "type": "boolean" + "limit": { + "type": "integer" }, - "offers_pickup": { - "example": true, - "type": "boolean" + "listings": { + "items": { + "$ref": "#/definitions/grailed.Listing" + }, + "type": "array" }, - "open": { - "example": true, - "type": "boolean" + "max_price": { + "type": "number" }, - "phone_number": { - "type": "string" + "min_price": { + "type": "number" }, - "pickup_time_minutes": { - "example": 15, + "page": { "type": "integer" }, - "postal_code": { - "example": "10038", + "query": { "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", + "size": { "type": "string" }, - "service_fee": { - "$ref": "#/definitions/grubhub.Money" + "sort": { + "type": "string" }, - "state": { - "example": "NY", + "source_url": { "type": "string" }, - "total_menu_items": { + "total_pages": { "type": "integer" }, - "total_offers": { + "total_results": { "type": "integer" } }, "type": "object" }, - "grubhub.StarBreakdown": { + "grailed.SuggestResponse": { "properties": { - "1": { - "example": 0, - "type": "integer" + "fetched_at": { + "type": "string" }, - "2": { - "example": 1, - "type": "integer" + "query": { + "type": "string" }, - "3": { - "example": 0, + "suggestions": { + "items": { + "$ref": "#/definitions/grailed.Suggestion" + }, + "type": "array" + } + }, + "type": "object" + }, + "grailed.Suggestion": { + "properties": { + "popularity": { "type": "integer" }, - "4": { - "example": 5, - "type": "integer" + "query": { + "type": "string" }, - "5": { - "example": 94, + "total_results": { "type": "integer" } }, "type": "object" }, - "grubhub.TimeSlotDay": { + "grailed.categoriesResponseDoc": { "properties": { - "date": { - "example": "2026-09-01", - "type": "string" + "code": { + "example": 200, + "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" + "data": { + "$ref": "#/definitions/grailed.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "grubhub.TimepickerResponse": { + "grailed.collectionResponseDoc": { "properties": { - "days": { - "items": { - "$ref": "#/definitions/grubhub.TimeSlotDay" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "earliest_order_send_time": { - "description": "EarliestOrderSendTime is the very next moment Grubhub will accept an\norder for this restaurant, ASAP or scheduled.", - "type": "string" + "data": { + "$ref": "#/definitions/grailed.CollectionResponse" }, - "fetched_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "grailed.collectionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "location_mode": { - "example": "DELIVERY", - "type": "string" + "data": { + "$ref": "#/definitions/grailed.CollectionsResponse" }, - "restaurant_id": { - "example": "698307", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "grailed.designersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/grailed.DesignersResponse" }, - "time_zone": { - "example": "America/New_York", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "grubhub.availabilityResponseDoc": { + "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/grubhub.AvailabilityResponse" + "$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" }, - "grubhub.menuResponseDoc": { + "grailed.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/grubhub.MenuResponse" + "$ref": "#/definitions/grailed.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "grubhub.offersResponseDoc": { + "grailed.sellerResponseDoc": { "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/grubhub.OffersResponse" + "$ref": "#/definitions/grailed.SellerResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "grubhub.restaurantResponseDoc": { + "grailed.sellerReviewsResponseDoc": { "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/grubhub.RestaurantResponse" + "$ref": "#/definitions/grailed.SellerReviewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "grubhub.reviewsResponseDoc": { + "grailed.similarListingsResponseDoc": { "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/grubhub.ReviewsResponse" + "$ref": "#/definitions/grailed.SimilarListingsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "grubhub.searchResponseDoc": { + "grailed.soldListingsResponseDoc": { "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/grubhub.SearchResponse" + "$ref": "#/definitions/grailed.SoldListingsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "grubhub.timepickerResponseDoc": { + "grailed.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/grubhub.TimepickerResponse" + "$ref": "#/definitions/grailed.SuggestResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "guardian.ArticleResponse": { + "greystar.Article": { "properties": { - "authors": { + "blocks": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.ContentBlock" }, "type": "array" }, + "category": { + "type": "string" + }, "description": { "type": "string" }, "image_url": { "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, "published_at": { "type": "string" }, + "published_date": { + "type": "string" + }, "section": { "type": "string" }, - "title": { + "slug": { "type": "string" }, - "updated_at": { + "title": { "type": "string" }, "url": { @@ -75589,79 +77025,44 @@ }, "type": "object" }, - "guardian.AuthorArticle": { + "greystar.CityItem": { "properties": { - "image_url": { - "type": "string" - }, - "published_at": { + "city": { "type": "string" }, - "section": { - "type": "string" + "count": { + "type": "integer" }, - "title": { + "country_code": { "type": "string" }, - "url": { + "state": { "type": "string" } }, "type": "object" }, - "guardian.AuthorResponse": { + "greystar.ContentBlock": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/guardian.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "slug": { - "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" - }, - "twitter_handle": { + "text": { "type": "string" }, - "url": { + "type": { + "description": "heading, subheading, paragraph, list_item", "type": "string" } }, "type": "object" }, - "guardian.HeadlineItem": { + "greystar.ContentEntry": { "properties": { - "author": { - "type": "string" - }, - "published_at": { + "last_modified": { "type": "string" }, "section": { "type": "string" }, - "summary": { - "type": "string" - }, - "title": { + "slug": { "type": "string" }, "url": { @@ -75670,1105 +77071,1577 @@ }, "type": "object" }, - "guardian.HeadlinesResponse": { + "greystar.ContentList": { "properties": { - "items": { + "entries": { "items": { - "$ref": "#/definitions/guardian.HeadlineItem" + "$ref": "#/definitions/greystar.ContentEntry" }, "type": "array" }, - "section": { - "type": "string" - } - }, - "type": "object" - }, - "guardian.LiveBlock": { - "properties": { - "author": { - "type": "string" - }, - "id": { - "type": "string" + "page": { + "type": "integer" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "per_page": { + "type": "integer" }, - "published_at": { - "type": "string" + "total_count": { + "type": "integer" }, - "title": { - "type": "string" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "guardian.LiveKeyEvent": { + "greystar.CountryItem": { "properties": { - "published_at": { - "type": "string" + "count": { + "type": "integer" }, - "title": { + "country_code": { "type": "string" } }, "type": "object" }, - "guardian.LiveResponse": { + "greystar.FAQ": { "properties": { - "blocks": { - "items": { - "$ref": "#/definitions/guardian.LiveBlock" - }, - "type": "array" - }, - "key_events": { - "items": { - "$ref": "#/definitions/guardian.LiveKeyEvent" - }, - "type": "array" - }, - "last_updated": { - "type": "string" - }, - "title": { + "answer": { "type": "string" }, - "url": { + "question": { "type": "string" } }, "type": "object" }, - "guardian.TopicItem": { + "greystar.Fee": { "properties": { - "kicker": { - "description": "Kicker is the series or blog label Guardian shows above the headline.", - "type": "string" + "amount": { + "type": "number" }, - "published_at": { + "category": { "type": "string" }, - "section": { + "disclaimer": { "type": "string" }, - "summary": { + "due_at": { "type": "string" }, - "title": { + "frequency": { "type": "string" }, - "url": { + "group": { "type": "string" - } - }, - "type": "object" - }, - "guardian.TopicPagination": { - "properties": { - "has_next": { + }, + "is_included": { "type": "boolean" }, - "next_page": { - "type": "integer" + "is_per_applicant": { + "type": "boolean" }, - "page": { - "type": "integer" + "is_refundable": { + "type": "boolean" }, - "total_pages": { - "description": "TotalPages is the archive's last page (1 for a section front).", - "type": "integer" + "is_required": { + "type": "boolean" }, - "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.", + "is_taxable": { "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/guardian.TopicItem" - }, - "type": "array" + "label": { + "type": "string" }, - "pagination": { - "$ref": "#/definitions/guardian.TopicPagination" + "max_amount": { + "type": "number" }, - "resolved_topic": { - "description": "ResolvedTopic is the path Guardian actually served, which differs from\nTopic for edition-scoped fronts (technology -> uk/technology).", + "min_amount": { + "type": "number" + }, + "percentage_amount": { + "type": "number" + }, + "text_amount": { "type": "string" }, - "topic": { + "type": { + "type": "string" + }, + "value_type": { "type": "string" } }, "type": "object" }, - "guardian.articleResponseDoc": { + "greystar.Floorplan": { "properties": { - "code": { - "example": 200, + "bathrooms": { "type": "integer" }, - "data": { - "$ref": "#/definitions/guardian.ArticleResponse" + "bedrooms": { + "type": "integer" }, - "msg": { - "example": "OK", + "id": { "type": "string" - } - }, - "type": "object" - }, - "guardian.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/guardian.AuthorResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "label": { "type": "string" } }, "type": "object" }, - "guardian.headlinesResponseDoc": { + "greystar.Image": { "properties": { - "code": { - "example": 200, - "type": "integer" + "alt": { + "type": "string" }, - "data": { - "$ref": "#/definitions/guardian.HeadlinesResponse" + "height": { + "type": "integer" }, - "msg": { - "example": "OK", + "url": { "type": "string" + }, + "width": { + "type": "integer" } }, "type": "object" }, - "guardian.liveResponseDoc": { + "greystar.Location": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "type": "string" }, - "data": { - "$ref": "#/definitions/guardian.LiveResponse" + "city": { + "type": "string" }, - "msg": { - "example": "OK", + "country_code": { "type": "string" - } - }, - "type": "object" - }, - "guardian.topicResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/guardian.TopicResponse" + "latitude": { + "type": "number" }, - "msg": { - "example": "OK", + "longitude": { + "type": "number" + }, + "market_area": { "type": "string" - } - }, - "type": "object" - }, - "gucci.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/gucci.Category" - }, - "type": "array" }, - "country": { + "neighborhood": { "type": "string" }, - "departments": { - "items": { - "type": "string" - }, - "type": "array" + "postal_code": { + "type": "string" }, - "fetched_at": { + "slug": { "type": "string" }, - "language": { + "state": { "type": "string" }, - "source_url": { + "state_name": { "type": "string" } }, "type": "object" }, - "gucci.Category": { + "greystar.LocationCommunity": { "properties": { - "category": { + "address": { "type": "string" }, - "department": { + "id": { "type": "string" }, - "label": { + "name": { "type": "string" }, - "path": { + "price_text": { "type": "string" - } - }, - "type": "object" - }, - "gucci.CategoryFacet": { - "properties": { - "count": { - "type": "integer" }, - "path": { + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "gucci.CategoryProduct": { + "greystar.LocationDetail": { "properties": { - "colors": { + "blocks": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.ContentBlock" }, "type": "array" }, - "currency": { + "city": { "type": "string" }, - "images": { + "communities": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.LocationCommunity" }, "type": "array" }, - "in_stock": { - "type": "boolean" + "description": { + "type": "string" }, - "in_stock_online": { - "type": "boolean" + "faqs": { + "items": { + "$ref": "#/definitions/greystar.FAQ" + }, + "type": "array" }, - "in_stock_stores": { - "type": "boolean" + "level": { + "type": "string" }, - "name": { + "neighborhood": { "type": "string" }, - "price": { - "type": "number" + "path": { + "type": "string" }, - "style_code": { + "state": { "type": "string" }, - "url": { + "sub_locations": { + "items": { + "$ref": "#/definitions/greystar.SubLocation" + }, + "type": "array" + }, + "title": { "type": "string" }, - "variation_description": { + "url": { "type": "string" } }, "type": "object" }, - "gucci.CategoryResponse": { + "greystar.LocationEntry": { "properties": { - "category": { + "city": { "type": "string" }, - "country": { + "last_modified": { "type": "string" }, - "facets": { - "items": { - "$ref": "#/definitions/gucci.CategoryFacet" - }, - "type": "array" + "level": { + "description": "state, city, neighborhood", + "type": "string" }, - "fetched_at": { + "neighborhood": { "type": "string" }, - "language": { + "path": { + "type": "string" + }, + "state": { "type": "string" }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.LocationList": { + "properties": { + "locations": { + "items": { + "$ref": "#/definitions/greystar.LocationEntry" + }, + "type": "array" + }, "page": { "type": "integer" }, - "pages_count": { + "per_page": { "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/gucci.CategoryProduct" - }, - "type": "array" + "total_count": { + "type": "integer" }, - "products_count": { + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "greystar.MarketItem": { + "properties": { + "count": { "type": "integer" }, - "sort_options": { - "items": { - "type": "string" - }, - "type": "array" + "country_code": { + "type": "string" }, - "source_url": { + "market_area": { "type": "string" } }, "type": "object" }, - "gucci.Product": { + "greystar.Markets": { "properties": { - "brand": { - "type": "string" + "cities": { + "items": { + "$ref": "#/definitions/greystar.CityItem" + }, + "type": "array" }, - "categories": { + "countries": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.CountryItem" }, "type": "array" }, - "category_codes": { + "market_areas": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.MarketItem" }, "type": "array" }, - "colors": { + "neighborhoods": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.Neighborhood" }, "type": "array" }, - "currency": { - "type": "string" + "states": { + "items": { + "$ref": "#/definitions/greystar.StateItem" + }, + "type": "array" }, - "description": { + "total_properties": { + "type": "integer" + } + }, + "type": "object" + }, + "greystar.Neighborhood": { + "properties": { + "count": { + "type": "integer" + }, + "country_code": { "type": "string" }, - "gender": { + "market_area": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "neighborhood": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.OfficeHour": { + "properties": { + "close": { + "type": "string" }, - "in_stock": { - "type": "boolean" + "open": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.Property": { + "properties": { + "address": { + "type": "string" }, - "in_stock_online": { - "type": "boolean" + "city": { + "type": "string" }, - "in_stock_stores": { - "type": "boolean" + "country_code": { + "type": "string" }, - "line": { + "display_price": { + "type": "number" + }, + "id": { "type": "string" }, - "materials": { - "items": { - "type": "string" - }, - "type": "array" + "market_area": { + "type": "string" + }, + "min_base_rent_lease_term": { + "type": "integer" + }, + "min_price": { + "type": "number" }, "name": { "type": "string" }, - "price": { + "neighborhood": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "required_monthly_fees_max": { "type": "number" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "required_monthly_fees_min": { + "type": "number" }, - "sku": { + "state": { "type": "string" }, - "style_code": { + "state_name": { "type": "string" }, "thumbnail_url": { "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "gucci.ProductDetailResponse": { + "greystar.PropertyDetails": { "properties": { - "availability": { + "amenities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "available_units": { + "items": { + "$ref": "#/definitions/greystar.Unit" + }, + "type": "array" + }, + "bike_score": { + "type": "integer" + }, + "building_type": { "type": "string" }, - "brand": { + "email": { "type": "string" }, - "breadcrumbs": { + "facebook_url": { + "type": "string" + }, + "features": { "items": { "type": "string" }, "type": "array" }, - "categories": { + "fees": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.Fee" }, "type": "array" }, - "category_codes": { + "floorplans": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.Floorplan" }, "type": "array" }, - "colors": { - "items": { - "type": "string" + "highlights": { + "additionalProperties": { + "type": "boolean" }, - "type": "array" + "type": "object" }, - "currency": { + "id": { "type": "string" }, - "description": { + "image": { + "$ref": "#/definitions/greystar.Image" + }, + "instagram_url": { "type": "string" }, - "fetched_at": { + "location": { + "$ref": "#/definitions/greystar.Location" + }, + "long_description": { "type": "string" }, - "gender": { + "name": { "type": "string" }, - "images": { - "items": { - "type": "string" + "office_hours": { + "additionalProperties": { + "$ref": "#/definitions/greystar.OfficeHour" }, - "type": "array" + "type": "object" }, - "in_stock": { - "type": "boolean" + "phone": { + "type": "string" }, - "in_stock_online": { - "type": "boolean" + "required_monthly_fees_max": { + "type": "number" }, - "in_stock_stores": { - "type": "boolean" + "required_monthly_fees_min": { + "type": "number" }, - "line": { + "short_description": { "type": "string" }, - "materials": { + "tours": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.Tour" }, "type": "array" }, - "name": { + "transit_score": { + "type": "integer" + }, + "url": { "type": "string" }, - "price": { - "type": "number" + "walk_score": { + "type": "integer" }, - "sizes": { + "website_url": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.SearchResult": { + "properties": { + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "properties": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.Property" }, "type": "array" }, - "sku": { - "type": "string" + "total_count": { + "type": "integer" }, - "source_url": { + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "greystar.StateItem": { + "properties": { + "count": { + "type": "integer" + }, + "country_code": { "type": "string" }, - "style_code": { + "state": { "type": "string" }, - "url": { + "state_name": { "type": "string" } }, "type": "object" }, - "gucci.RecommendationsResponse": { + "greystar.SubLocation": { "properties": { - "count": { - "type": "integer" + "name": { + "type": "string" }, - "country": { + "path": { "type": "string" }, - "fetched_at": { + "slug": { "type": "string" }, - "model": { + "summary": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/gucci.RecommendedProduct" - }, - "type": "array" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.Tour": { + "properties": { + "provider": { + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "style_code": { + "url": { "type": "string" } }, "type": "object" }, - "gucci.RecommendedProduct": { + "greystar.Unit": { "properties": { - "currency": { + "area": { + "type": "integer" + }, + "available_on": { "type": "string" }, - "image_url": { + "building": { "type": "string" }, - "in_stock_online": { - "type": "boolean" + "floor": { + "type": "string" }, - "in_stock_stores": { - "type": "boolean" + "floorplan_id": { + "type": "string" }, - "name": { + "floorplan_label": { "type": "string" }, - "price": { + "max_price": { "type": "number" }, - "style_code": { + "min_base_rent_lease_term": { + "type": "integer" + }, + "min_price": { + "type": "number" + }, + "unit_id": { "type": "string" }, - "url": { + "unit_number": { "type": "string" } }, "type": "object" }, - "gucci.SearchResponse": { + "grubhub.AvailabilityResponse": { "properties": { "count": { + "example": 2, "type": "integer" }, - "country": { - "type": "string" - }, "fetched_at": { "type": "string" }, - "limit": { - "type": "integer" - }, - "page": { - "type": "integer" + "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" }, - "products": { + "restaurants": { "items": { - "$ref": "#/definitions/gucci.Product" + "$ref": "#/definitions/grubhub.RestaurantAvailability" }, "type": "array" }, - "query": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "grubhub.MenuCategory": { + "properties": { + "available": { + "example": true, + "type": "boolean" }, - "size": { + "category_id": { + "example": "275127198073", "type": "string" }, - "size_facets": { - "additionalProperties": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/grubhub.MenuItem" }, - "description": "SizeFacets is every size value present in this response's own result\nset (i.e. Query, and Size if also given), each with its own live\ncount of matching products -- pass one of these values as Size on a\nfollow-up call to filter to just that size. Omit Size on the first\ncall to see every size across the whole query before narrowing.", - "type": "object" + "type": "array" }, - "source_url": { + "name": { + "example": "Burgers", "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "gucci.SizeGuideResponse": { + "grubhub.MenuItem": { "properties": { "available": { + "example": true, "type": "boolean" }, - "fetched_at": { + "delivery_price": { + "$ref": "#/definitions/grubhub.Money" + }, + "description": { "type": "string" }, - "headers": { + "image_url": { + "type": "string" + }, + "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" - }, - "rows": { + } + }, + "type": "object" + }, + "grubhub.MenuResponse": { + "properties": { + "categories": { "items": { - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/definitions/grubhub.MenuCategory" }, "type": "array" }, + "fetched_at": { + "type": "string" + }, + "item_count": { + "example": 8, + "type": "integer" + }, + "name": { + "type": "string" + }, + "restaurant_id": { + "example": "6238960", + "type": "string" + }, "source_url": { "type": "string" + } + }, + "type": "object" + }, + "grubhub.Money": { + "properties": { + "amount": { + "example": 399, + "type": "integer" }, - "style_code": { + "currency": { + "example": "USD", + "type": "string" + }, + "value": { + "example": 3.99, + "type": "number" + } + }, + "type": "object" + }, + "grubhub.Offer": { + "properties": { + "amount": { + "$ref": "#/definitions/grubhub.OfferAmount" + }, + "description": { + "description": "Description is the full offer copy, including its fine print --\nminimum order rules, exclusions, redemption limits.", + "type": "string" + }, + "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" }, - "gucci.Store": { + "grubhub.OfferAmount": { "properties": { - "address": { + "amount_maximum": { + "example": 10, + "type": "number" + }, + "currency": { + "example": "USD", "type": "string" }, - "book_appointment_url": { + "order_minimum": { + "example": 20, + "type": "number" + }, + "type": { + "example": "MENU_ITEM", "type": "string" }, - "city": { + "value": { + "example": 0, + "type": "number" + } + }, + "type": "object" + }, + "grubhub.OffersResponse": { + "properties": { + "count": { + "example": 1, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "departments": { + "offers": { "items": { - "type": "string" + "$ref": "#/definitions/grubhub.Offer" }, "type": "array" }, - "latitude": { + "restaurant_id": { + "example": "1338141", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "grubhub.Rating": { + "properties": { + "count": { + "example": 65, + "type": "integer" + }, + "value": { + "example": 4.6, "type": "number" + } + }, + "type": "object" + }, + "grubhub.RestaurantAvailability": { + "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" }, - "longitude": { + "available_for_pickup": { + "example": true, + "type": "boolean" + }, + "blacked_out": { + "example": false, + "type": "boolean" + }, + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "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" }, - "name": { + "inundated": { + "description": "Inundated marks a restaurant Grubhub flags as overloaded.", + "example": false, + "type": "boolean" + }, + "logo_url": { "type": "string" }, - "phone": { + "next_delivery_time": { + "description": "NextDeliveryTime is when Grubhub says the next delivery order can be\nsent, useful when open_delivery is false.", "type": "string" }, - "slug": { + "next_pickup_time": { "type": "string" }, - "store_code": { + "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" + }, + "grubhub.RestaurantHours": { + "properties": { + "day_of_week": { + "example": "Monday", "type": "string" }, - "type": { + "end_time": { + "example": "23:59:59.000", "type": "string" }, - "url": { + "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" }, - "gucci.StoreDetailResponse": { + "grubhub.RestaurantResponse": { "properties": { - "city": { + "address": { "type": "string" }, - "country": { + "chain_name": { "type": "string" }, - "fetched_at": { + "city": { "type": "string" }, - "images": { + "cuisines": { "items": { "type": "string" }, "type": "array" }, - "name": { + "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" }, - "opening_hours": { + "has_coupons": { + "type": "boolean" + }, + "hours": { "items": { - "$ref": "#/definitions/gucci.StoreOpeningHours" + "$ref": "#/definitions/grubhub.RestaurantHours" }, "type": "array" }, - "phone": { + "is_new": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "logo_url": { "type": "string" }, - "postal_code": { + "longitude": { + "type": "number" + }, + "menu_path": { "type": "string" }, - "region": { + "name": { + "example": "7th Street Burger Financial District", "type": "string" }, - "slug": { + "offers_delivery": { + "type": "boolean" + }, + "offers_pickup": { + "type": "boolean" + }, + "online_ordering": { + "example": true, + "type": "boolean" + }, + "phone_number": { "type": "string" }, - "source_url": { + "postal_code": { "type": "string" }, - "street_address": { + "price_rating": { + "type": "number" + }, + "rating": { + "$ref": "#/definitions/grubhub.Rating" + }, + "restaurant_id": { + "example": "6238960", "type": "string" }, - "url": { + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "gucci.StoreOpeningHours": { - "properties": { - "closes": { + }, + "state": { "type": "string" }, - "days": { + "tags": { "items": { "type": "string" }, "type": "array" }, - "opens": { + "timezone": { + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "gucci.StoreSearchResponse": { + "grubhub.Review": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "language": { + "author_name": { + "example": "Annie", "type": "string" }, - "market": { + "created_at": { + "description": "CreatedAt is RFC3339, converted from the upstream's epoch millis.", + "example": "2026-08-09T12:05:42Z", "type": "string" }, - "source_url": { + "diner_type": { + "description": "DinerType distinguishes e.g. a Regular from a first-time diner.", + "example": "Regular", "type": "string" }, - "stores": { + "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/gucci.StoreSearchResult" + "$ref": "#/definitions/grubhub.ReviewedItem" }, "type": "array" + }, + "rating": { + "example": 5, + "type": "integer" + }, + "review_id": { + "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", + "type": "string" + }, + "text": { + "example": "Staff are great and burgers are great!", + "type": "string" } }, "type": "object" }, - "gucci.StoreSearchResult": { + "grubhub.ReviewedItem": { "properties": { - "active": { - "type": "boolean" - }, - "address": { + "item_id": { + "example": "275127198449", "type": "string" }, - "categories": { + "name": { + "example": "Cheeseburger", + "type": "string" + } + }, + "type": "object" + }, + "grubhub.ReviewsResponse": { + "properties": { + "available_sorts": { "items": { "type": "string" }, "type": "array" }, - "city": { + "fetched_at": { "type": "string" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "number": { + "rating_count": { "type": "integer" }, - "phone": { + "restaurant_id": { + "example": "6238960", "type": "string" }, - "services": { + "restaurant_score": { + "type": "number" + }, + "reviews": { "items": { - "type": "string" + "$ref": "#/definitions/grubhub.Review" }, "type": "array" }, - "type": { + "source_url": { "type": "string" + }, + "star_breakdown": { + "$ref": "#/definitions/grubhub.StarBreakdown" + }, + "total_count": { + "example": 0, + "type": "integer" + }, + "total_pages": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "gucci.StoresResponse": { + "grubhub.SearchResponse": { "properties": { "count": { + "example": 20, "type": "integer" }, - "country": { + "fetched_at": { "type": "string" }, - "departments": { + "page": { + "example": 1, + "type": "integer" + }, + "restaurants": { "items": { - "type": "string" + "$ref": "#/definitions/grubhub.SearchRestaurant" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, "source_url": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/gucci.Store" - }, - "type": "array" + "total_hits": { + "example": 1457, + "type": "integer" + }, + "total_pages": { + "example": 73, + "type": "integer" } }, "type": "object" }, - "gucci.SuggestResponse": { + "grubhub.SearchRestaurant": { "properties": { - "fetched_at": { + "address": { + "example": "199 Water Street", "type": "string" }, - "query": { + "chain_name": { "type": "string" }, - "source_url": { + "city": { + "example": "New York", "type": "string" }, - "suggestions": { + "coupons_available": { + "description": "CouponsAvailable and TotalOffers describe promotions without\nreproducing their (volatile) terms.", + "example": false, + "type": "boolean" + }, + "cuisines": { "items": { - "$ref": "#/definitions/gucci.SuggestedQuery" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "gucci.SuggestedQuery": { - "properties": { - "query": { + }, + "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" }, - "result_count": { + "latitude": { + "type": "number" + }, + "logo_url": { + "type": "string" + }, + "longitude": { + "type": "number" + }, + "menu_path": { + "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": { + "type": "string" + }, + "pickup_time_minutes": { + "example": 15, + "type": "integer" + }, + "postal_code": { + "example": "10038", + "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", + "type": "string" + }, + "service_fee": { + "$ref": "#/definitions/grubhub.Money" + }, + "state": { + "example": "NY", + "type": "string" + }, + "total_menu_items": { + "type": "integer" + }, + "total_offers": { "type": "integer" } }, "type": "object" }, - "gucci.categoriesResponseDoc": { + "grubhub.StarBreakdown": { "properties": { - "code": { - "example": 200, + "1": { + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/gucci.CategoriesResponse" + "2": { + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "3": { + "example": 0, + "type": "integer" + }, + "4": { + "example": 5, + "type": "integer" + }, + "5": { + "example": 94, + "type": "integer" } }, "type": "object" }, - "gucci.categoryResponseDoc": { + "grubhub.TimeSlotDay": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/gucci.CategoryResponse" - }, - "msg": { - "example": "OK", + "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.", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "gucci.productResponseDoc": { + "grubhub.TimepickerResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "days": { + "items": { + "$ref": "#/definitions/grubhub.TimeSlotDay" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/gucci.ProductDetailResponse" + "earliest_order_send_time": { + "description": "EarliestOrderSendTime is the very next moment Grubhub will accept an\norder for this restaurant, ASAP or scheduled.", + "type": "string" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "location_mode": { + "example": "DELIVERY", + "type": "string" + }, + "restaurant_id": { + "example": "698307", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "time_zone": { + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "gucci.recommendationsResponseDoc": { + "grubhub.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/gucci.RecommendationsResponse" + "$ref": "#/definitions/grubhub.AvailabilityResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "gucci.searchResponseDoc": { + "grubhub.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/gucci.SearchResponse" + "$ref": "#/definitions/grubhub.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "gucci.sizeGuideResponseDoc": { + "grubhub.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/gucci.SizeGuideResponse" + "$ref": "#/definitions/grubhub.OffersResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "gucci.storeResponseDoc": { + "grubhub.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/gucci.StoreDetailResponse" + "$ref": "#/definitions/grubhub.RestaurantResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "gucci.storeSearchResponseDoc": { + "grubhub.reviewsResponseDoc": { "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/gucci.StoreSearchResponse" + "$ref": "#/definitions/grubhub.ReviewsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "gucci.storesResponseDoc": { + "grubhub.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/gucci.StoresResponse" + "$ref": "#/definitions/grubhub.SearchResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "gucci.suggestResponseDoc": { + "grubhub.timepickerResponseDoc": { "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/gucci.SuggestResponse" + "$ref": "#/definitions/grubhub.TimepickerResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "gulfnews.AuthorArticle": { + "guardian.ArticleResponse": { "properties": { - "summary": { - "type": "string" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "title": { + "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": { @@ -76777,53 +78650,76 @@ }, "type": "object" }, - "gulfnews.AuthorResponse": { + "guardian.AuthorArticle": { + "properties": { + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "guardian.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/gulfnews.AuthorArticle" + "$ref": "#/definitions/guardian.AuthorArticle" }, "type": "array" }, "bio": { "type": "string" }, - "job_title": { + "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": { "type": "string" } }, "type": "object" }, - "hbr.ArticleResponse": { + "guardian.HeadlineItem": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "body": { + "author": { "type": "string" }, - "description": { + "published_at": { "type": "string" }, - "from_magazine": { - "type": "boolean" - }, - "image_url": { + "section": { "type": "string" }, - "published_at": { + "summary": { "type": "string" }, "title": { @@ -76835,63 +78731,96 @@ }, "type": "object" }, - "hbr.CategoriesResponse": { + "guardian.HeadlinesResponse": { "properties": { - "groups": { + "items": { "items": { - "$ref": "#/definitions/hbr.CategoryGroup" + "$ref": "#/definitions/guardian.HeadlineItem" }, "type": "array" + }, + "section": { + "type": "string" } }, "type": "object" }, - "hbr.Category": { + "guardian.LiveBlock": { "properties": { - "name": { + "author": { "type": "string" }, - "slug": { + "id": { + "type": "string" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "hbr.CategoryGroup": { + "guardian.LiveKeyEvent": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/hbr.Category" - }, - "type": "array" + "published_at": { + "type": "string" }, - "name": { + "title": { "type": "string" } }, "type": "object" }, - "hbr.HeadlineItem": { + "guardian.LiveResponse": { "properties": { - "authors": { + "blocks": { "items": { - "type": "string" + "$ref": "#/definitions/guardian.LiveBlock" }, "type": "array" }, - "content_type": { + "key_events": { + "items": { + "$ref": "#/definitions/guardian.LiveKeyEvent" + }, + "type": "array" + }, + "last_updated": { "type": "string" }, - "image_url": { + "title": { "type": "string" }, - "summary": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "guardian.TopicItem": { + "properties": { + "kicker": { + "description": "Kicker is the series or blog label Guardian shows above the headline.", "type": "string" }, - "title": { + "published_at": { "type": "string" }, - "topic": { + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { "type": "string" }, "url": { @@ -76900,62 +78829,77 @@ }, "type": "object" }, - "hbr.HeadlinesResponse": { + "guardian.TopicPagination": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/hbr.HeadlineItem" - }, - "type": "array" + "has_next": { + "type": "boolean" + }, + "next_page": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "total_pages": { + "description": "TotalPages is the archive's last page (1 for a section front).", + "type": "integer" + }, + "total_results": { + "description": "TotalResults is Guardian's article count for a tag archive.", + "type": "integer" } }, "type": "object" }, - "hbr.TopicItem": { + "guardian.TopicResponse": { "properties": { - "authors": { + "is_front": { + "description": "IsFront is true for a curated section front (no archive paging) and\nfalse for a paginated tag archive.", + "type": "boolean" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/guardian.TopicItem" }, "type": "array" }, - "description": { - "type": "string" - }, - "from_magazine": { - "type": "boolean" + "pagination": { + "$ref": "#/definitions/guardian.TopicPagination" }, - "title": { + "resolved_topic": { + "description": "ResolvedTopic is the path Guardian actually served, which differs from\nTopic for edition-scoped fronts (technology -> uk/technology).", "type": "string" }, - "url": { + "topic": { "type": "string" } }, "type": "object" }, - "hbr.TopicResponse": { + "guardian.articleResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/hbr.TopicItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "topic": { + "data": { + "$ref": "#/definitions/guardian.ArticleResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hbr.articleResponseDoc": { + "guardian.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hbr.ArticleResponse" + "$ref": "#/definitions/guardian.AuthorResponse" }, "msg": { "example": "OK", @@ -76964,14 +78908,14 @@ }, "type": "object" }, - "hbr.categoriesResponseDoc": { + "guardian.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hbr.CategoriesResponse" + "$ref": "#/definitions/guardian.HeadlinesResponse" }, "msg": { "example": "OK", @@ -76980,14 +78924,14 @@ }, "type": "object" }, - "hbr.headlinesResponseDoc": { + "guardian.liveResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hbr.HeadlinesResponse" + "$ref": "#/definitions/guardian.LiveResponse" }, "msg": { "example": "OK", @@ -76996,14 +78940,14 @@ }, "type": "object" }, - "hbr.topicResponseDoc": { + "guardian.topicResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hbr.TopicResponse" + "$ref": "#/definitions/guardian.TopicResponse" }, "msg": { "example": "OK", @@ -77012,166 +78956,184 @@ }, "type": "object" }, - "hermes.CatalogueProduct": { + "gucci.CategoriesResponse": { "properties": { - "last_modified": { + "categories": { + "items": { + "$ref": "#/definitions/gucci.Category" + }, + "type": "array" + }, + "country": { "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.", + "departments": { + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "slug": { + "language": { "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "hermes.CategoriesResponse": { + "gucci.Category": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/hermes.Category" - }, - "type": "array" + "category": { + "type": "string" }, - "locale": { + "department": { "type": "string" }, - "total": { - "type": "integer" + "label": { + "type": "string" + }, + "path": { + "type": "string" } }, "type": "object" }, - "hermes.Category": { + "gucci.CategoryFacet": { "properties": { - "children": { + "count": { "type": "integer" }, - "code": { + "path": { + "type": "string" + } + }, + "type": "object" + }, + "gucci.CategoryProduct": { + "properties": { + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "currency": { "type": "string" }, - "depth": { - "type": "integer" + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { + "type": "boolean" + }, + "in_stock_online": { + "type": "boolean" + }, + "in_stock_stores": { + "type": "boolean" }, "name": { "type": "string" }, - "parent_code": { - "type": "string" + "price": { + "type": "number" }, - "path": { + "style_code": { "type": "string" }, "url": { "type": "string" + }, + "variation_description": { + "type": "string" } }, "type": "object" }, - "hermes.CategoryResponse": { + "gucci.CategoryResponse": { "properties": { - "code": { + "category": { "type": "string" }, - "description": { + "country": { "type": "string" }, - "filters": { + "facets": { "items": { - "$ref": "#/definitions/hermes.Filter" + "$ref": "#/definitions/gucci.CategoryFacet" }, "type": "array" }, - "locale": { + "fetched_at": { "type": "string" }, - "name": { + "language": { "type": "string" }, "page": { "type": "integer" }, - "page_size": { + "pages_count": { "type": "integer" }, - "path": { - "type": "string" - }, "products": { "items": { - "$ref": "#/definitions/hermes.Product" + "$ref": "#/definitions/gucci.CategoryProduct" }, "type": "array" }, - "sort": { - "type": "string" - }, - "title": { - "type": "string" - }, - "total": { + "products_count": { "type": "integer" }, - "url": { + "sort_options": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "hermes.Filter": { + "gucci.Product": { "properties": { - "attribute": { - "type": "string" - }, - "name": { + "brand": { "type": "string" }, - "values": { + "categories": { "items": { - "$ref": "#/definitions/hermes.FilterValue" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "hermes.FilterValue": { - "properties": { - "count": { - "type": "integer" }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "hermes.Product": { - "properties": { - "color": { - "type": "string" + "category_codes": { + "items": { + "type": "string" + }, + "type": "array" }, - "colorless": { - "type": "boolean" + "colors": { + "items": { + "type": "string" + }, + "type": "array" }, "currency": { "type": "string" }, - "department_code": { - "type": "string" - }, - "division_code": { + "description": { "type": "string" }, - "family_code": { + "gender": { "type": "string" }, "images": { @@ -77183,34 +79145,40 @@ "in_stock": { "type": "boolean" }, - "in_store": { + "in_stock_online": { "type": "boolean" }, - "more_colors": { + "in_stock_stores": { "type": "boolean" }, - "personalizable": { - "type": "boolean" + "line": { + "type": "string" }, - "price": { - "type": "number" + "materials": { + "items": { + "type": "string" + }, + "type": "array" }, - "price_type": { + "name": { "type": "string" }, - "product_code": { - "type": "string" + "price": { + "type": "number" }, - "size": { - "type": "string" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" }, "sku": { "type": "string" }, - "slug": { + "style_code": { "type": "string" }, - "title": { + "thumbnail_url": { "type": "string" }, "url": { @@ -77219,20 +79187,31 @@ }, "type": "object" }, - "hermes.ProductResponse": { + "gucci.ProductDetailResponse": { "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.", + "availability": { + "type": "string" + }, + "brand": { "type": "string" }, + "breadcrumbs": { + "items": { + "type": "string" + }, + "type": "array" + }, "categories": { "items": { "type": "string" }, "type": "array" }, - "color_name": { - "type": "string" + "category_codes": { + "items": { + "type": "string" + }, + "type": "array" }, "colors": { "items": { @@ -77243,31 +79222,13 @@ "currency": { "type": "string" }, - "delivery_and_returns": { - "type": "string" - }, - "department_code": { - "type": "string" - }, "description": { "type": "string" }, - "dimensions": { - "type": "string" - }, - "division_code": { - "type": "string" - }, - "family_code": { + "fetched_at": { "type": "string" }, "gender": { - "items": { - "type": "string" - }, - "type": "array" - }, - "gift": { "type": "string" }, "images": { @@ -77279,13 +79240,13 @@ "in_stock": { "type": "boolean" }, - "in_store": { + "in_stock_online": { "type": "boolean" }, - "locale": { - "type": "string" + "in_stock_stores": { + "type": "boolean" }, - "made_in": { + "line": { "type": "string" }, "materials": { @@ -77294,153 +79255,186 @@ }, "type": "array" }, - "personalizable": { - "type": "boolean" + "name": { + "type": "string" }, "price": { "type": "number" }, - "price_type": { - "type": "string" - }, - "product_code": { - "type": "string" - }, - "size": { - "type": "string" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" }, "sku": { "type": "string" }, - "slug": { + "source_url": { "type": "string" }, - "title": { + "style_code": { "type": "string" }, "url": { "type": "string" - }, - "variants": { - "$ref": "#/definitions/hermes.Variants" } }, "type": "object" }, - "hermes.ProductsResponse": { + "gucci.RecommendationsResponse": { "properties": { - "limit": { + "count": { "type": "integer" }, - "locale": { + "country": { "type": "string" }, - "page": { - "type": "integer" + "fetched_at": { + "type": "string" + }, + "model": { + "type": "string" }, "products": { "items": { - "$ref": "#/definitions/hermes.CatalogueProduct" + "$ref": "#/definitions/gucci.RecommendedProduct" }, "type": "array" }, - "total": { - "type": "integer" + "source_url": { + "type": "string" + }, + "style_code": { + "type": "string" } }, "type": "object" }, - "hermes.RecommendationsResponse": { + "gucci.RecommendedProduct": { "properties": { - "locale": { + "currency": { "type": "string" }, - "shelves": { - "items": { - "$ref": "#/definitions/hermes.Shelf" - }, - "type": "array" + "image_url": { + "type": "string" }, - "sku": { + "in_stock_online": { + "type": "boolean" + }, + "in_stock_stores": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "style_code": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "hermes.SearchResponse": { + "gucci.SearchResponse": { "properties": { - "filters": { - "items": { - "$ref": "#/definitions/hermes.Filter" - }, - "type": "array" + "count": { + "type": "integer" }, - "locale": { + "country": { "type": "string" }, - "page": { + "fetched_at": { + "type": "string" + }, + "limit": { "type": "integer" }, - "page_size": { + "page": { "type": "integer" }, "products": { "items": { - "$ref": "#/definitions/hermes.Product" + "$ref": "#/definitions/gucci.Product" }, "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.", + "size": { "type": "string" }, - "total": { + "size_facets": { + "additionalProperties": { + "type": "integer" + }, + "description": "SizeFacets is every size value present in this response's own result\nset (i.e. Query, and Size if also given), each with its own live\ncount of matching products -- pass one of these values as Size on a\nfollow-up call to filter to just that size. Omit Size on the first\ncall to see every size across the whole query before narrowing.", + "type": "object" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { "type": "integer" } }, "type": "object" }, - "hermes.Shelf": { + "gucci.SizeGuideResponse": { "properties": { - "name": { + "available": { + "type": "boolean" + }, + "fetched_at": { "type": "string" }, - "products": { + "headers": { "items": { - "$ref": "#/definitions/hermes.Product" + "type": "string" }, "type": "array" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "hermes.Store": { - "properties": { - "appointment_in_store": { - "type": "boolean" + "rows": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" }, - "city": { + "source_url": { "type": "string" }, - "continent": { + "style_code": { "type": "string" }, - "country": { + "title": { + "type": "string" + } + }, + "type": "object" + }, + "gucci.Store": { + "properties": { + "address": { "type": "string" }, - "country_code": { + "book_appointment_url": { "type": "string" }, - "id": { + "city": { "type": "string" }, - "images": { + "departments": { "items": { "type": "string" }, @@ -77455,16 +79449,16 @@ "name": { "type": "string" }, - "opening_hours": { + "phone": { "type": "string" }, - "phone": { + "slug": { "type": "string" }, - "postal_code": { + "store_code": { "type": "string" }, - "street": { + "type": { "type": "string" }, "url": { @@ -77473,281 +79467,395 @@ }, "type": "object" }, - "hermes.StoresResponse": { + "gucci.StoreDetailResponse": { "properties": { - "locale": { + "city": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/hermes.Store" - }, - "type": "array" + "country": { + "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "hermes.SuggestResponse": { - "properties": { - "categories": { + "fetched_at": { + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/hermes.SuggestedCategory" + "type": "string" }, "type": "array" }, - "locale": { + "name": { "type": "string" }, - "products": { + "opening_hours": { "items": { - "$ref": "#/definitions/hermes.SuggestedProduct" + "$ref": "#/definitions/gucci.StoreOpeningHours" }, "type": "array" }, - "query": { + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "street_address": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "hermes.SuggestedCategory": { + "gucci.StoreOpeningHours": { "properties": { - "code": { + "closes": { "type": "string" }, - "label": { - "type": "string" + "days": { + "items": { + "type": "string" + }, + "type": "array" }, - "results": { - "type": "integer" + "opens": { + "type": "string" } }, "type": "object" }, - "hermes.SuggestedProduct": { + "gucci.StoreSearchResponse": { "properties": { - "image": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "label": { + "language": { "type": "string" }, - "sku": { + "market": { "type": "string" }, - "url": { + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/gucci.StoreSearchResult" + }, + "type": "array" } }, "type": "object" }, - "hermes.Variant": { + "gucci.StoreSearchResult": { "properties": { - "color": { + "active": { + "type": "boolean" + }, + "address": { "type": "string" }, - "image": { + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "city": { "type": "string" }, - "in_stock": { - "type": "boolean" + "latitude": { + "type": "number" }, - "price": { + "longitude": { "type": "number" }, - "size": { + "name": { "type": "string" }, - "sku": { - "type": "string" + "number": { + "type": "integer" }, - "title": { + "phone": { "type": "string" }, - "url": { + "services": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { "type": "string" } }, "type": "object" }, - "hermes.Variants": { + "gucci.StoresResponse": { "properties": { - "colors": { + "count": { + "type": "integer" + }, + "country": { + "type": "string" + }, + "departments": { "items": { - "$ref": "#/definitions/hermes.Variant" + "type": "string" }, "type": "array" }, - "sizes": { + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stores": { "items": { - "$ref": "#/definitions/hermes.Variant" + "$ref": "#/definitions/gucci.Store" }, "type": "array" } }, "type": "object" }, - "hermes.categoriesResponseDoc": { + "gucci.SuggestResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "query": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/gucci.SuggestedQuery" + }, + "type": "array" + } + }, + "type": "object" + }, + "gucci.SuggestedQuery": { + "properties": { + "query": { + "type": "string" + }, + "result_count": { + "type": "integer" + } + }, + "type": "object" + }, + "gucci.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.CategoriesResponse" + "$ref": "#/definitions/gucci.CategoriesResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.categoryResponseDoc": { + "gucci.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.CategoryResponse" + "$ref": "#/definitions/gucci.CategoryResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.productResponseDoc": { + "gucci.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.ProductResponse" + "$ref": "#/definitions/gucci.ProductDetailResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.productsResponseDoc": { + "gucci.recommendationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.ProductsResponse" + "$ref": "#/definitions/gucci.RecommendationsResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.recommendationsResponseDoc": { + "gucci.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.RecommendationsResponse" + "$ref": "#/definitions/gucci.SearchResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.searchResponseDoc": { + "gucci.sizeGuideResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.SearchResponse" + "$ref": "#/definitions/gucci.SizeGuideResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.storesResponseDoc": { + "gucci.storeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.StoresResponse" + "$ref": "#/definitions/gucci.StoreDetailResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.suggestResponseDoc": { + "gucci.storeSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.SuggestResponse" + "$ref": "#/definitions/gucci.StoreSearchResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hindustantimes.AuthorResponse": { + "gucci.storesResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/hindustantimes.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/gucci.StoresResponse" }, - "email": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "gucci.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "facebook_url": { + "data": { + "$ref": "#/definitions/gucci.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "gulfnews.AuthorArticle": { + "properties": { + "summary": { "type": "string" }, - "image_url": { + "title": { "type": "string" }, - "linkedin_url": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "gulfnews.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/gulfnews.AuthorArticle" + }, + "type": "array" + }, + "bio": { + "type": "string" + }, + "job_title": { "type": "string" }, "name": { "type": "string" }, - "twitter_url": { + "slug": { "type": "string" }, "url": { @@ -77756,24 +79864,30 @@ }, "type": "object" }, - "hindustantimes.HeadlineItem": { + "hbr.ArticleResponse": { "properties": { - "author": { - "type": "string" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "image_url": { + "body": { "type": "string" }, - "published_at": { + "description": { "type": "string" }, - "summary": { + "from_magazine": { + "type": "boolean" + }, + "image_url": { "type": "string" }, - "title": { + "published_at": { "type": "string" }, - "type": { + "title": { "type": "string" }, "url": { @@ -77782,55 +79896,63 @@ }, "type": "object" }, - "hm.CategoriesResponse": { + "hbr.CategoriesResponse": { "properties": { - "categories": { + "groups": { "items": { - "$ref": "#/definitions/hm.CategoryEntry" + "$ref": "#/definitions/hbr.CategoryGroup" }, "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "hm.CategoryEntry": { + "hbr.Category": { "properties": { - "category_id": { - "type": "string" - }, - "department": { - "type": "string" - }, "name": { "type": "string" }, - "section": { + "slug": { "type": "string" + } + }, + "type": "object" + }, + "hbr.CategoryGroup": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/hbr.Category" + }, + "type": "array" }, - "url": { + "name": { "type": "string" } }, "type": "object" }, - "hm.ColorSwatch": { + "hbr.HeadlineItem": { "properties": { - "article_id": { - "type": "string" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "color_code": { + "content_type": { "type": "string" }, "image_url": { "type": "string" }, - "name": { + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "topic": { "type": "string" }, "url": { @@ -77839,231 +79961,265 @@ }, "type": "object" }, - "hm.ListingResponse": { + "hbr.HeadlinesResponse": { "properties": { - "category_id": { - "type": "string" - }, - "count": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/hbr.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "hbr.TopicItem": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "fetched_at": { + "description": { "type": "string" }, - "is_new": { + "from_magazine": { "type": "boolean" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "title": { + "type": "string" }, - "products": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "hbr.TopicResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/hm.ProductSummary" + "$ref": "#/definitions/hbr.TopicItem" }, "type": "array" }, - "sort": { + "topic": { "type": "string" + } + }, + "type": "object" + }, + "hbr.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/hbr.ArticleResponse" }, - "total_hits": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "hbr.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "total_pages": { - "type": "integer" + "data": { + "$ref": "#/definitions/hbr.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "hm.ProductDetailColor": { + "hbr.headlinesResponseDoc": { "properties": { - "image_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/hbr.HeadlinesResponse" }, - "sizes": { - "items": { - "$ref": "#/definitions/hm.ProductDetailSize" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "hm.ProductDetailRating": { + "hbr.topicResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "value": { - "type": "number" + "data": { + "$ref": "#/definitions/hbr.TopicResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "hm.ProductDetailResponse": { + "healthgrades.AwardHospital": { "properties": { - "brand": { - "type": "string" + "address": { + "$ref": "#/definitions/healthgrades.FacilityAddress" }, - "colors": { + "awards": { "items": { - "$ref": "#/definitions/hm.ProductDetailColor" + "$ref": "#/definitions/healthgrades.HospitalAwardEntry" }, "type": "array" }, "description": { "type": "string" }, - "fetched_at": { - "type": "string" + "distance_miles": { + "type": "number" }, - "gender": { + "id": { "type": "string" }, - "material": { - "type": "string" + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" }, "name": { "type": "string" }, - "pattern": { + "phone": { "type": "string" }, - "product_id": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "healthgrades.CommunityAnswer": { + "properties": { + "no": { + "type": "integer" }, - "rating": { - "$ref": "#/definitions/hm.ProductDetailRating" - }, - "reviews": { - "items": { - "$ref": "#/definitions/hm.ProductDetailReview" - }, - "type": "array" - }, - "source_url": { + "question": { "type": "string" }, - "url": { - "type": "string" + "yes": { + "type": "integer" } }, "type": "object" }, - "hm.ProductDetailReview": { + "healthgrades.FacilityAddress": { "properties": { - "author": { + "city": { "type": "string" }, - "body": { + "postal_code": { "type": "string" }, - "date": { + "state": { "type": "string" }, - "dimensions": { - "items": { - "$ref": "#/definitions/hm.ProductDetailReviewDimension" - }, - "type": "array" - }, - "rating": { - "type": "number" + "street": { + "type": "string" } }, "type": "object" }, - "hm.ProductDetailReviewDimension": { + "healthgrades.FacilityFAQ": { "properties": { - "label": { + "answer": { "type": "string" }, - "value": { + "question": { "type": "string" } }, "type": "object" }, - "hm.ProductDetailSize": { + "healthgrades.FacilityFiltersResponse": { "properties": { - "availability": { - "type": "string" + "filters": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" + }, + "type": "array" }, - "currency": { + "query": { "type": "string" }, - "price": { - "type": "number" - }, - "size": { - "type": "string" + "sorts": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianSortOption" + }, + "type": "array" }, - "sku": { + "type": { "type": "string" }, - "url": { + "where": { "type": "string" } }, "type": "object" }, - "hm.ProductSummary": { + "healthgrades.FacilityHours": { "properties": { - "availability": { - "type": "string" - }, - "brand": { - "type": "string" - }, - "category_code": { + "day": { "type": "string" }, - "colors": { - "items": { - "$ref": "#/definitions/hm.ColorSwatch" - }, - "type": "array" - }, - "coming_soon": { - "type": "boolean" - }, - "currency": { + "hours": { "type": "string" - }, - "formatted_price": { + } + }, + "type": "object" + }, + "healthgrades.FacilityLocation": { + "properties": { + "address": { "type": "string" }, - "id": { + "name": { "type": "string" }, - "image_url": { + "phone": { "type": "string" }, - "model_image_url": { + "url": { "type": "string" - }, + } + }, + "type": "object" + }, + "healthgrades.FacilityProvider": { + "properties": { "name": { "type": "string" }, - "new_arrival": { - "type": "boolean" - }, - "price": { + "rating": { "type": "number" }, - "sizes": { - "items": { - "$ref": "#/definitions/hm.SizeStock" - }, - "type": "array" + "rating_count": { + "type": "integer" + }, + "specialty": { + "type": "string" }, "url": { "type": "string" @@ -78071,124 +80227,130 @@ }, "type": "object" }, - "hm.RelatedList": { + "healthgrades.FacilityResponse": { "properties": { - "label": { - "type": "string" + "address": { + "$ref": "#/definitions/healthgrades.FacilityAddress" }, - "products": { + "categories": { "items": { - "$ref": "#/definitions/hm.ProductSummary" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "hm.RelatedResponse": { - "properties": { - "fetched_at": { - "type": "string" }, - "lists": { + "community_answers": { "items": { - "$ref": "#/definitions/hm.RelatedList" + "$ref": "#/definitions/healthgrades.CommunityAnswer" }, "type": "array" }, - "product_id": { - "type": "string" - }, - "source_url": { + "description": { "type": "string" - } - }, - "type": "object" - }, - "hm.SearchMeta": { - "properties": { - "blocked": { - "type": "boolean" }, - "did_you_mean": { + "faqs": { "items": { - "type": "string" + "$ref": "#/definitions/healthgrades.FacilityFAQ" }, "type": "array" }, - "query": { - "type": "string" + "hours": { + "items": { + "$ref": "#/definitions/healthgrades.FacilityHours" + }, + "type": "array" }, - "related_searches": { + "languages": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "hm.SearchResponse": { - "properties": { - "count": { - "type": "integer" }, - "fetched_at": { - "type": "string" + "latitude": { + "type": "number" }, - "page": { - "type": "integer" + "locations": { + "items": { + "$ref": "#/definitions/healthgrades.FacilityLocation" + }, + "type": "array" }, - "page_size": { - "type": "integer" + "longitude": { + "type": "number" }, - "products": { + "medical_services": { "items": { - "$ref": "#/definitions/hm.ProductSummary" + "type": "string" }, "type": "array" }, - "query": { + "name": { "type": "string" }, - "search_meta": { - "$ref": "#/definitions/hm.SearchMeta" + "nearby": { + "items": { + "$ref": "#/definitions/healthgrades.NearbyFacility" + }, + "type": "array" }, - "source_url": { + "phone": { "type": "string" }, - "total_hits": { - "type": "integer" + "providers": { + "items": { + "$ref": "#/definitions/healthgrades.FacilityProvider" + }, + "type": "array" }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "hm.SizeStock": { - "properties": { - "id": { + "rating": { + "type": "number" + }, + "services": { + "items": { + "type": "string" + }, + "type": "array" + }, + "subtitle": { "type": "string" }, - "label": { + "type": { + "enum": [ + "pharmacy", + "urgent_care", + "group_practice" + ], "type": "string" }, - "stock": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "hm.Store": { + "healthgrades.FacilityResult": { "properties": { - "address": { + "about": { "type": "string" }, + "affiliated_provider_count": { + "type": "integer" + }, + "awards": { + "items": { + "type": "string" + }, + "type": "array" + }, "city": { "type": "string" }, - "country": { + "distance_miles": { + "type": "number" + }, + "five_star_ratings_count": { + "type": "integer" + }, + "id": { "type": "string" }, "latitude": { @@ -78206,110 +80368,163 @@ "postal_code": { "type": "string" }, + "ratings_count": { + "type": "integer" + }, "state": { "type": "string" }, - "store_class": { + "street": { "type": "string" }, - "store_code": { + "type": { + "type": "string" + }, + "type_code": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "hm.StoreResponse": { + "healthgrades.FacilitySearchResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" + "facilities": { + "items": { + "$ref": "#/definitions/healthgrades.FacilityResult" + }, + "type": "array" }, - "lat": { - "type": "number" + "filters": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" + }, + "type": "array" }, - "lng": { - "type": "number" + "page": { + "type": "integer" }, - "radius_meters": { + "page_size": { "type": "integer" }, - "search": { + "query": { "type": "string" }, - "source_url": { + "sort": { "type": "string" }, - "stores": { + "sorts": { "items": { - "$ref": "#/definitions/hm.Store" + "$ref": "#/definitions/healthgrades.PhysicianSortOption" }, "type": "array" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "where": { + "type": "string" } }, "type": "object" }, - "hm.SuggestResponse": { + "healthgrades.HealthArticleRef": { "properties": { - "blocked": { - "type": "boolean" + "last_modified": { + "type": "string" }, - "content_suggestions": { - "items": { - "$ref": "#/definitions/hm.SuggestionLink" - }, - "type": "array" + "slug": { + "type": "string" }, - "fetched_at": { + "topic": { "type": "string" }, - "phrase_suggestions": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "healthgrades.HealthArticleResponse": { + "properties": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "popular_searches": { + "conditions": { "items": { - "$ref": "#/definitions/hm.SuggestionLink" + "type": "string" }, "type": "array" }, - "query": { + "date_modified": { "type": "string" }, - "search_history": { + "date_published": { + "type": "string" + }, + "description": { + "type": "string" + }, + "headline": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "label": { + "type": "string" + }, + "reviewed_by": { "items": { "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "trending_searches": { + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/healthgrades.HealthArticleSection" }, "type": "array" - } - }, - "type": "object" - }, - "hm.SuggestionLink": { - "properties": { - "content_type": { - "type": "string" }, - "deep_link": { + "slug": { "type": "string" }, - "image_url": { + "topic": { "type": "string" }, - "link": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "healthgrades.HealthArticleSection": { + "properties": { + "lists": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, "title": { "type": "string" @@ -78317,160 +80532,243 @@ }, "type": "object" }, - "hm.categoriesResponseDoc": { + "healthgrades.HealthArticlesResponse": { "properties": { - "code": { - "example": 200, + "articles": { + "items": { + "$ref": "#/definitions/healthgrades.HealthArticleRef" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/hm.CategoriesResponse" + "page_size": { + "type": "integer" }, - "msg": { - "example": "OK", + "topic": { "type": "string" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "hm.listingResponseDoc": { + "healthgrades.HealthTopic": { "properties": { - "code": { - "example": 200, + "article_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/hm.ListingResponse" + "last_modified": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "hm.productDetailResponseDoc": { + "healthgrades.HealthTopicsResponse": { "properties": { - "code": { - "example": 200, + "topics": { + "items": { + "$ref": "#/definitions/healthgrades.HealthTopic" + }, + "type": "array" + }, + "total": { "type": "integer" + } + }, + "type": "object" + }, + "healthgrades.HospitalAward": { + "properties": { + "category": { + "type": "string" }, - "data": { - "$ref": "#/definitions/hm.ProductDetailResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "years": { + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "hm.relatedResponseDoc": { + "healthgrades.HospitalAwardEntry": { "properties": { "code": { - "example": 200, - "type": "integer" + "type": "string" }, - "data": { - "$ref": "#/definitions/hm.RelatedResponse" + "matched": { + "type": "boolean" }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "years": { + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "hm.searchResponseDoc": { + "healthgrades.HospitalAwardFiltersResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "award": { + "type": "string" }, - "data": { - "$ref": "#/definitions/hm.SearchResponse" + "filters": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "sorts": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianSortOption" + }, + "type": "array" } }, "type": "object" }, - "hm.storesResponseDoc": { + "healthgrades.HospitalAwardsResponse": { "properties": { - "code": { - "example": 200, + "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": { + "items": { + "$ref": "#/definitions/healthgrades.AwardHospital" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/hm.StoreResponse" + "page_size": { + "type": "integer" }, - "msg": { - "example": "OK", + "region": { + "type": "string" + }, + "sort": { + "enum": [ + "name", + "distance" + ], + "type": "string" + }, + "title": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "year": { "type": "string" } }, "type": "object" }, - "hm.suggestResponseDoc": { + "healthgrades.HospitalClinicalRating": { "properties": { - "code": { - "example": 200, - "type": "integer" + "measure": { + "type": "string" }, - "data": { - "$ref": "#/definitions/hm.SuggestResponse" + "procedure_or_condition": { + "type": "string" }, - "msg": { - "example": "OK", + "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" }, - "hollywoodreporter.AuthorArticle": { + "healthgrades.HospitalPatientExperience": { "properties": { - "title": { + "comparison": { "type": "string" }, - "url": { + "measure": { "type": "string" + }, + "percent": { + "type": "integer" } }, "type": "object" }, - "hollywoodreporter.AuthorResponse": { + "healthgrades.HospitalResponse": { "properties": { - "articles": { + "address": { + "type": "string" + }, + "awards": { "items": { - "$ref": "#/definitions/hollywoodreporter.AuthorArticle" + "$ref": "#/definitions/healthgrades.HospitalAward" }, "type": "array" }, - "biography": { + "clinical_ratings": { "items": { - "type": "string" + "$ref": "#/definitions/healthgrades.HospitalServiceLine" }, "type": "array" }, - "headshot_url": { - "type": "string" - }, - "job_title": { + "description": { "type": "string" }, "name": { "type": "string" }, - "page": { - "type": "integer" - }, - "social_links": { - "additionalProperties": { - "type": "string" + "patient_experience": { + "items": { + "$ref": "#/definitions/healthgrades.HospitalPatientExperience" }, - "type": "object" + "type": "array" + }, + "phone": { + "type": "string" }, "url": { "type": "string" @@ -78478,35 +80776,29 @@ }, "type": "object" }, - "homedepot.CategoriesResponse": { + "healthgrades.HospitalServiceLine": { "properties": { - "count": { - "example": 26, - "type": "integer" + "name": { + "type": "string" }, - "departments": { + "ratings": { "items": { - "$ref": "#/definitions/homedepot.Department" + "$ref": "#/definitions/healthgrades.HospitalClinicalRating" }, "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "homedepot.CategoryFacet": { + "healthgrades.NearbyFacility": { "properties": { + "address": { + "type": "string" + }, "name": { - "example": "Cordless", "type": "string" }, - "path": { - "example": "Cordless/N-5yc1vZc29xZ1z140i3", + "status": { "type": "string" }, "url": { @@ -78515,983 +80807,930 @@ }, "type": "object" }, - "homedepot.CategoryProduct": { + "healthgrades.PhysicianFilterGroup": { "properties": { - "id": { - "example": "320326875", - "type": "string" - }, - "image": { + "label": { "type": "string" }, - "model": { - "example": "2953-20", + "param": { "type": "string" }, - "original_price": { - "example": 199, - "type": "number" - }, - "price": { - "example": 179, - "type": "number" - }, - "rating": { - "example": 4.7, - "type": "number" - }, - "review_count": { - "example": 1542, - "type": "integer" - }, - "title": { - "example": "M18 FUEL 18V Lithium-Ion Brushless Cordless 1/4 in. Hex Impact Driver (Tool-Only)", + "values": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianFilterValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "healthgrades.PhysicianFilterPlan": { + "properties": { + "id": { "type": "string" }, - "url": { + "name": { "type": "string" } }, "type": "object" }, - "homedepot.CategoryResponse": { + "healthgrades.PhysicianFilterValue": { "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.", + "label": { + "type": "string" + }, + "plans": { "items": { - "$ref": "#/definitions/homedepot.CategoryFacet" + "$ref": "#/definitions/healthgrades.PhysicianFilterPlan" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "page": { - "description": "Page is the 1-indexed page this response carries.", - "example": 1, - "type": "integer" + "selected": { + "type": "boolean" }, - "path": { + "value": { "type": "string" - }, - "products": { + } + }, + "type": "object" + }, + "healthgrades.PhysicianFiltersResponse": { + "properties": { + "filters": { "items": { - "$ref": "#/definitions/homedepot.CategoryProduct" + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" }, "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": { + "query": { "type": "string" }, - "title": { + "where": { "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "homedepot.Department": { + "healthgrades.PhysicianOffice": { "properties": { + "city": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, "name": { - "example": "Tools", "type": "string" }, - "path": { - "example": "Tools/N-5yc1vZc1xy", + "phone": { "type": "string" }, - "url": { + "postal_code": { "type": "string" - } - }, - "type": "object" - }, - "homedepot.KeyFeature": { - "properties": { - "name": { - "example": "Motor Type", + }, + "state": { "type": "string" }, - "value": { - "example": "Brushed", + "street": { "type": "string" } }, "type": "object" }, - "homedepot.Product": { + "healthgrades.PhysicianPractice": { "properties": { - "brand": { - "example": "Milwaukee", + "city": { "type": "string" }, - "currency": { - "example": "USD", + "country": { "type": "string" }, - "description": { + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "fetched_at": { + "postal_code": { "type": "string" }, - "gtin": { - "example": "0045242637867", + "region": { "type": "string" }, - "id": { - "example": "320326875", + "street": { "type": "string" + } + }, + "type": "object" + }, + "healthgrades.PhysicianRating": { + "properties": { + "count": { + "type": "integer" }, - "images": { + "score": { + "type": "number" + } + }, + "type": "object" + }, + "healthgrades.PhysicianResponse": { + "properties": { + "awards": { "items": { "type": "string" }, "type": "array" }, - "key_features": { + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "npi": { + "type": "string" + }, + "practices": { "items": { - "$ref": "#/definitions/homedepot.KeyFeature" + "$ref": "#/definitions/healthgrades.PhysicianPractice" }, "type": "array" }, - "model": { - "example": "2953-20", + "profile_url": { "type": "string" }, - "price": { - "example": 179, - "type": "number" + "specialties": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "healthgrades.PhysicianSearchResponse": { + "properties": { + "filters": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" + }, + "type": "array" }, - "rating": { - "example": 4.7, - "type": "number" + "page": { + "type": "integer" }, - "review_count": { - "example": 1544, + "page_size": { "type": "integer" }, - "reviews": { + "physicians": { "items": { - "$ref": "#/definitions/homedepot.ProductReview" + "$ref": "#/definitions/healthgrades.PhysicianSearchResult" }, "type": "array" }, - "sku": { - "example": "1007901520", + "query": { "type": "string" }, - "source_url": { + "sort": { "type": "string" }, - "specifications": { + "sorts": { "items": { - "$ref": "#/definitions/homedepot.Specification" + "$ref": "#/definitions/healthgrades.PhysicianSortOption" }, "type": "array" }, - "title": { - "example": "Milwaukee M18 FUEL 18V Lithium-Ion Brushless Cordless 1/4 in. Hex Impact Driver (Tool-Only) 2953-20", - "type": "string" + "total_pages": { + "type": "integer" }, - "url": { + "total_results": { + "type": "integer" + }, + "where": { "type": "string" } }, "type": "object" }, - "homedepot.ProductQuestionsResponse": { + "healthgrades.PhysicianSearchResult": { "properties": { - "count": { - "example": 8, + "about": { + "type": "string" + }, + "accepts_new_patients": { + "type": "boolean" + }, + "affiliated_hospital_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "age": { "type": "integer" }, - "fetched_at": { + "distance_miles": { + "type": "number" + }, + "gender": { "type": "string" }, "id": { - "example": "328425526", "type": "string" }, - "questions": { + "image_url": { + "type": "string" + }, + "insurers": { "items": { - "$ref": "#/definitions/homedepot.Question" + "type": "string" }, "type": "array" }, - "source_url": { + "name": { "type": "string" }, - "total": { - "example": 575, - "type": "integer" - } - }, - "type": "object" - }, - "homedepot.ProductReview": { - "properties": { - "author": { - "example": "HomeDepotCustomer", + "npi": { "type": "string" }, - "body": { - "example": "The impact is just what I needed.", - "type": "string" + "office": { + "$ref": "#/definitions/healthgrades.PhysicianOffice" }, - "headline": { - "example": "Great tool", + "profile_url": { "type": "string" }, "rating": { - "example": 5, - "type": "number" - } - }, - "type": "object" - }, - "homedepot.Question": { - "properties": { - "answer_count": { - "type": "integer" + "$ref": "#/definitions/healthgrades.PhysicianRating" }, - "answers": { + "specialist_descriptions": { "items": { - "$ref": "#/definitions/homedepot.QuestionAnswer" + "type": "string" }, "type": "array" }, - "author": { + "specialty": { "type": "string" }, - "date": { - "type": "string" + "telehealth_available": { + "type": "boolean" }, - "id": { - "type": "string" + "telehealth_only": { + "type": "boolean" }, - "text": { - "type": "string" + "years_experience": { + "type": "integer" } }, "type": "object" }, - "homedepot.QuestionAnswer": { + "healthgrades.PhysicianSortOption": { "properties": { - "author": { - "type": "string" - }, - "date": { - "type": "string" - }, - "helpful_count": { - "type": "integer" - }, - "id": { + "key": { "type": "string" }, - "is_brand_answer": { - "type": "boolean" - }, - "text": { + "label": { "type": "string" } }, "type": "object" }, - "homedepot.SearchResponse": { + "healthgrades.SpecialtiesResponse": { "properties": { - "count": { - "example": 12, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "products": { + "specialties": { "items": { - "$ref": "#/definitions/homedepot.CategoryProduct" + "$ref": "#/definitions/healthgrades.Specialty" }, "type": "array" - }, - "query": { - "example": "impact driver", + } + }, + "type": "object" + }, + "healthgrades.Specialty": { + "properties": { + "name": { "type": "string" }, - "source_url": { + "url": { "type": "string" - }, - "total": { - "example": 1962, - "type": "integer" } }, "type": "object" }, - "homedepot.Specification": { + "healthgrades.Suggestion": { "properties": { - "name": { - "example": "Battery Power Type", + "label": { "type": "string" }, "value": { - "example": "Lithium Ion", "type": "string" } }, "type": "object" }, - "homedepot.SuggestResponse": { + "healthgrades.SuggestionGroup": { "properties": { - "count": { - "example": 10, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "category": { "type": "string" }, "suggestions": { "items": { - "$ref": "#/definitions/homedepot.Suggestion" + "$ref": "#/definitions/healthgrades.Suggestion" }, "type": "array" }, - "term": { - "example": "drill", + "title": { "type": "string" } }, "type": "object" }, - "homedepot.Suggestion": { + "healthgrades.SuggestionResponse": { "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" + "groups": { + "items": { + "$ref": "#/definitions/healthgrades.SuggestionGroup" + }, + "type": "array" } }, "type": "object" }, - "homedepot.categoriesResponseDoc": { + "healthgrades.facilityFiltersResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/homedepot.CategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.FacilityFiltersResponse" } }, "type": "object" }, - "homedepot.categoryResponseDoc": { + "healthgrades.facilityResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/homedepot.CategoryResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.FacilityResponse" } }, "type": "object" }, - "homedepot.productQuestionsResponseDoc": { + "healthgrades.facilitySearchResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/homedepot.ProductQuestionsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.FacilitySearchResponse" } }, "type": "object" }, - "homedepot.productResponseDoc": { + "healthgrades.healthArticleResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/homedepot.Product" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HealthArticleResponse" } }, "type": "object" }, - "homedepot.searchResponseDoc": { + "healthgrades.healthArticlesResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/homedepot.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HealthArticlesResponse" } }, "type": "object" }, - "homedepot.suggestResponseDoc": { + "healthgrades.healthTopicsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/homedepot.SuggestResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HealthTopicsResponse" } }, "type": "object" }, - "hotels.Address": { + "healthgrades.hospitalAwardFiltersResponseDoc": { "properties": { - "country": { - "type": "string" - }, - "locality": { + "data": { + "$ref": "#/definitions/healthgrades.HospitalAwardFiltersResponse" + } + }, + "type": "object" + }, + "healthgrades.hospitalAwardsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/healthgrades.HospitalAwardsResponse" + } + }, + "type": "object" + }, + "healthgrades.hospitalResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/healthgrades.HospitalResponse" + } + }, + "type": "object" + }, + "healthgrades.physicianFiltersResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/healthgrades.PhysicianFiltersResponse" + } + }, + "type": "object" + }, + "healthgrades.physicianResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/healthgrades.PhysicianResponse" + } + }, + "type": "object" + }, + "healthgrades.physicianSearchResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/healthgrades.PhysicianSearchResponse" + } + }, + "type": "object" + }, + "healthgrades.specialtiesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/healthgrades.SpecialtiesResponse" + } + }, + "type": "object" + }, + "healthgrades.suggestionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/healthgrades.SuggestionResponse" + } + }, + "type": "object" + }, + "hermes.CatalogueProduct": { + "properties": { + "last_modified": { "type": "string" }, - "postal_code": { + "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" }, - "region": { + "slug": { "type": "string" }, - "street_address": { + "url": { "type": "string" } }, "type": "object" }, - "hotels.AutocompleteResponse": { + "hermes.CategoriesResponse": { "properties": { - "query": { - "type": "string" - }, - "suggestions": { + "categories": { "items": { - "$ref": "#/definitions/hotels.Suggestion" + "$ref": "#/definitions/hermes.Category" }, "type": "array" + }, + "locale": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "hotels.OffersOption": { + "hermes.Category": { "properties": { - "adults": { - "example": 2, + "children": { "type": "integer" }, - "check_in": { - "example": "2026-09-10", + "code": { "type": "string" }, - "check_out": { - "example": "2026-09-11", + "depth": { + "type": "integer" + }, + "name": { "type": "string" }, - "currency": { - "example": "USD", + "parent_code": { "type": "string" }, - "locale": { - "example": "en_US", + "path": { "type": "string" }, - "property_id": { - "example": "19681371", + "url": { "type": "string" } }, - "required": [ - "check_in", - "check_out", - "property_id" - ], "type": "object" }, - "hotels.OffersResponse": { + "hermes.CategoryResponse": { "properties": { - "check_in": { - "type": "string" - }, - "check_out": { + "code": { "type": "string" }, - "header": { + "description": { "type": "string" }, - "offers": { + "filters": { "items": { - "$ref": "#/definitions/hotels.RoomOffer" + "$ref": "#/definitions/hermes.Filter" }, "type": "array" }, - "property_id": { + "locale": { "type": "string" - } - }, - "type": "object" - }, - "hotels.Property": { - "properties": { - "address": { - "$ref": "#/definitions/hotels.Address" }, - "amenities": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { + "name": { "type": "string" }, - "guest_rating": { - "type": "number" + "page": { + "type": "integer" }, - "id": { + "page_size": { + "type": "integer" + }, + "path": { "type": "string" }, - "images": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/hermes.Product" }, "type": "array" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "sort": { + "type": "string" }, - "name": { + "title": { "type": "string" }, - "review_count": { + "total": { "type": "integer" }, - "star_rating": { - "type": "number" - }, "url": { "type": "string" } }, "type": "object" }, - "hotels.PropertyOption": { + "hermes.Filter": { "properties": { - "url": { - "example": "https://www.hotels.com/ho107229/hilton-san-francisco-financial-district-san-francisco-united-states-of-america/", + "attribute": { "type": "string" + }, + "name": { + "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/hermes.FilterValue" + }, + "type": "array" } }, - "required": [ - "url" - ], "type": "object" }, - "hotels.PropertyResponse": { + "hermes.FilterValue": { "properties": { - "property": { - "$ref": "#/definitions/hotels.Property" + "count": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" } }, "type": "object" }, - "hotels.RatesOption": { + "hermes.Product": { "properties": { - "adults": { - "example": 2, - "type": "integer" - }, - "check_in": { - "example": "2026-09-10", + "color": { "type": "string" }, - "check_out": { - "example": "2026-09-11", - "type": "string" + "colorless": { + "type": "boolean" }, "currency": { - "example": "USD", "type": "string" }, - "locale": { - "example": "en_US", + "department_code": { "type": "string" }, - "property_id": { - "example": "19681371", - "type": "string" - } - }, - "required": [ - "check_in", - "check_out", - "property_id" - ], - "type": "object" - }, - "hotels.RatesResponse": { - "properties": { - "check_in": { + "division_code": { "type": "string" }, - "check_out": { + "family_code": { "type": "string" }, - "properties": { + "images": { "items": { - "$ref": "#/definitions/hotels.SearchProperty" + "type": "string" }, "type": "array" }, - "property_id": { - "type": "string" - } - }, - "type": "object" - }, - "hotels.Review": { - "properties": { - "date": { - "type": "string" - }, - "message": { - "type": "string" + "in_stock": { + "type": "boolean" }, - "rating_label": { - "type": "string" + "in_store": { + "type": "boolean" }, - "reviewer_name": { - "type": "string" + "more_colors": { + "type": "boolean" }, - "verified": { + "personalizable": { "type": "boolean" - } - }, - "type": "object" - }, - "hotels.ReviewArchive": { - "properties": { - "date": { + }, + "price": { + "type": "number" + }, + "price_type": { "type": "string" }, - "id": { + "product_code": { "type": "string" }, - "message": { + "size": { "type": "string" }, - "rating_label": { + "sku": { "type": "string" }, - "reviewer_name": { + "slug": { "type": "string" }, "title": { "type": "string" }, - "traveler_type": { + "url": { "type": "string" } }, "type": "object" }, - "hotels.ReviewCategory": { + "hermes.ProductResponse": { "properties": { - "name": { + "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" }, - "score": { + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "color_name": { "type": "string" - } - }, - "type": "object" - }, - "hotels.ReviewsArchiveOption": { - "properties": { - "adults": { - "example": 2, - "type": "integer" }, - "check_in": { - "example": "2026-09-10", + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "currency": { "type": "string" }, - "check_out": { - "example": "2026-09-11", + "delivery_and_returns": { "type": "string" }, - "currency": { - "example": "USD", + "department_code": { "type": "string" }, - "locale": { - "example": "en_US", + "description": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "dimensions": { + "type": "string" }, - "page_size": { - "example": 10, - "type": "integer" + "division_code": { + "type": "string" }, - "property_id": { - "example": "19681371", + "family_code": { "type": "string" - } - }, - "required": [ - "check_in", - "check_out", - "property_id" - ], - "type": "object" - }, - "hotels.ReviewsArchiveResponse": { - "properties": { - "has_more": { + }, + "gender": { + "items": { + "type": "string" + }, + "type": "array" + }, + "gift": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { "type": "boolean" }, - "page": { - "type": "integer" + "in_store": { + "type": "boolean" }, - "page_size": { - "type": "integer" + "locale": { + "type": "string" }, - "property_id": { + "made_in": { "type": "string" }, - "reviews": { + "materials": { "items": { - "$ref": "#/definitions/hotels.ReviewArchive" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "hotels.ReviewsOption": { - "properties": { - "adults": { - "example": 2, - "type": "integer" }, - "check_in": { - "example": "2026-09-10", + "personalizable": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "price_type": { "type": "string" }, - "check_out": { - "example": "2026-09-11", + "product_code": { "type": "string" }, - "currency": { - "example": "USD", + "size": { "type": "string" }, - "locale": { - "example": "en_US", + "sku": { "type": "string" }, - "property_id": { - "example": "19681371", + "slug": { + "type": "string" + }, + "title": { "type": "string" + }, + "url": { + "type": "string" + }, + "variants": { + "$ref": "#/definitions/hermes.Variants" } }, - "required": [ - "check_in", - "check_out", - "property_id" - ], "type": "object" }, - "hotels.ReviewsResponse": { + "hermes.ProductsResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/hotels.ReviewCategory" - }, - "type": "array" + "limit": { + "type": "integer" }, - "overall_rating": { + "locale": { "type": "string" }, - "property_id": { - "type": "string" + "page": { + "type": "integer" }, - "reviews": { + "products": { "items": { - "$ref": "#/definitions/hotels.Review" + "$ref": "#/definitions/hermes.CatalogueProduct" }, "type": "array" }, - "superlative": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "hotels.RoomOffer": { + "hermes.RecommendationsResponse": { "properties": { - "id": { + "locale": { "type": "string" }, - "messages": { + "shelves": { "items": { - "type": "string" + "$ref": "#/definitions/hermes.Shelf" }, "type": "array" }, - "name": { + "sku": { "type": "string" } }, "type": "object" }, - "hotels.SearchOption": { + "hermes.SearchResponse": { "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", - "type": "string" + "filters": { + "items": { + "$ref": "#/definitions/hermes.Filter" + }, + "type": "array" }, "locale": { - "example": "en_US", "type": "string" }, "page": { - "example": 1, "type": "integer" }, "page_size": { - "example": 20, "type": "integer" }, + "products": { + "items": { + "$ref": "#/definitions/hermes.Product" + }, + "type": "array" + }, "query": { - "example": "New York", "type": "string" }, - "region_id": { - "example": "2621", + "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" }, - "rooms": { - "example": 1, + "total": { "type": "integer" } }, - "required": [ - "check_in", - "check_out" - ], "type": "object" }, - "hotels.SearchProperty": { + "hermes.Shelf": { "properties": { - "amenities": { - "items": { - "type": "string" - }, - "type": "array" + "name": { + "type": "string" }, - "badges": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/hermes.Product" }, "type": "array" }, - "id": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "hermes.Store": { + "properties": { + "appointment_in_store": { + "type": "boolean" + }, + "city": { "type": "string" }, - "location": { + "continent": { "type": "string" }, - "name": { + "country": { "type": "string" }, - "nightly_price": { + "country_code": { "type": "string" }, - "price": { + "id": { "type": "string" }, - "review_count": { - "type": "integer" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "review_score": { + "latitude": { "type": "number" }, - "review_title": { + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "strikeout_price": { + "opening_hours": { "type": "string" }, - "thumbnail_url": { + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "street": { "type": "string" }, "url": { @@ -79500,187 +81739,256 @@ }, "type": "object" }, - "hotels.SearchResponse": { + "hermes.StoresResponse": { "properties": { - "check_in": { - "type": "string" - }, - "check_out": { + "locale": { "type": "string" }, - "destination": { - "type": "string" + "stores": { + "items": { + "$ref": "#/definitions/hermes.Store" + }, + "type": "array" }, - "page": { + "total": { "type": "integer" + } + }, + "type": "object" + }, + "hermes.SuggestResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/hermes.SuggestedCategory" + }, + "type": "array" }, - "properties": { + "locale": { + "type": "string" + }, + "products": { "items": { - "$ref": "#/definitions/hotels.SearchProperty" + "$ref": "#/definitions/hermes.SuggestedProduct" }, "type": "array" }, - "region_id": { + "query": { + "type": "string" + } + }, + "type": "object" + }, + "hermes.SuggestedCategory": { + "properties": { + "code": { "type": "string" }, - "results_label": { + "label": { "type": "string" + }, + "results": { + "type": "integer" } }, "type": "object" }, - "hotels.Suggestion": { + "hermes.SuggestedProduct": { "properties": { - "airport_code": { + "image": { "type": "string" }, - "geo_type": { + "label": { "type": "string" }, - "latitude": { - "type": "number" + "sku": { + "type": "string" }, - "location_full_name": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "hermes.Variant": { + "properties": { + "color": { "type": "string" }, - "longitude": { + "image": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "price": { "type": "number" }, - "primary_text": { + "size": { "type": "string" }, - "property_id": { + "sku": { "type": "string" }, - "region_id": { + "title": { "type": "string" }, - "secondary_text": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "hermes.Variants": { + "properties": { + "colors": { + "items": { + "$ref": "#/definitions/hermes.Variant" + }, + "type": "array" }, - "type": { + "sizes": { + "items": { + "$ref": "#/definitions/hermes.Variant" + }, + "type": "array" + } + }, + "type": "object" + }, + "hermes.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/hermes.CategoriesResponse" + }, + "msg": { + "example": "ok", "type": "string" } }, "type": "object" }, - "hotels.autocompleteResponseDoc": { + "hermes.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.AutocompleteResponse" + "$ref": "#/definitions/hermes.CategoryResponse" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "hotels.offersResponseDoc": { + "hermes.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.OffersResponse" + "$ref": "#/definitions/hermes.ProductResponse" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "hotels.propertyResponseDoc": { + "hermes.productsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.PropertyResponse" + "$ref": "#/definitions/hermes.ProductsResponse" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "hotels.ratesResponseDoc": { + "hermes.recommendationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.RatesResponse" + "$ref": "#/definitions/hermes.RecommendationsResponse" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "hotels.reviewsArchiveResponseDoc": { + "hermes.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.ReviewsArchiveResponse" + "$ref": "#/definitions/hermes.SearchResponse" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "hotels.reviewsResponseDoc": { + "hermes.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.ReviewsResponse" + "$ref": "#/definitions/hermes.StoresResponse" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "hotels.searchResponseDoc": { + "hermes.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.SearchResponse" + "$ref": "#/definitions/hermes.SuggestResponse" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "huffpost.AuthorResponse": { + "hindustantimes.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/huffpost.HeadlineItem" + "$ref": "#/definitions/hindustantimes.HeadlineItem" }, "type": "array" }, @@ -79690,30 +81998,22 @@ }, "type": "array" }, - "image_url": { + "email": { "type": "string" }, - "job_title": { + "facebook_url": { "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/huffpost.AuthorSocialLink" - }, - "type": "array" + "linkedin_url": { + "type": "string" }, - "url": { + "name": { "type": "string" - } - }, - "type": "object" - }, - "huffpost.AuthorSocialLink": { - "properties": { - "platform": { + }, + "twitter_url": { "type": "string" }, "url": { @@ -79722,7 +82022,7 @@ }, "type": "object" }, - "huffpost.HeadlineItem": { + "hindustantimes.HeadlineItem": { "properties": { "author": { "type": "string" @@ -79748,76 +82048,35 @@ }, "type": "object" }, - "ign.AuthorResponse": { + "hm.CategoriesResponse": { "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" - }, - "social_links": { + "categories": { "items": { - "$ref": "#/definitions/ign.AuthorSocialLink" + "$ref": "#/definitions/hm.CategoryEntry" }, "type": "array" }, - "url": { - "type": "string" - }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "ign.AuthorSocialLink": { - "properties": { - "platform": { + "fetched_at": { "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "ign.HeadlineItem": { + "hm.CategoryEntry": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { + "category_id": { "type": "string" }, - "summary": { + "department": { "type": "string" }, - "title": { + "name": { "type": "string" }, - "type": { + "section": { "type": "string" }, "url": { @@ -79826,732 +82085,423 @@ }, "type": "object" }, - "ikea.AvailabilityResponse": { + "hm.ColorSwatch": { "properties": { - "available_for_click_collect": { - "type": "boolean" - }, - "available_for_home_delivery": { - "type": "boolean" - }, - "click_collect": { - "$ref": "#/definitions/ikea.PickupAvailability" - }, - "country": { - "example": "us", + "article_id": { "type": "string" }, - "fetched_at": { + "color_code": { "type": "string" }, - "home_delivery": { - "$ref": "#/definitions/ikea.DeliveryAvailability" + "image_url": { + "type": "string" }, - "item_no": { - "example": "80213074", + "name": { "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "ikea.CategoriesResponse": { + "hm.ListingResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/ikea.CategoryEntry" - }, - "type": "array" - }, - "country": { - "example": "us", + "category_id": { "type": "string" }, + "count": { + "type": "integer" + }, "fetched_at": { "type": "string" }, - "has_next": { - "example": true, + "is_new": { "type": "boolean" }, - "language": { - "example": "en", - "type": "string" - }, "page": { - "example": 1, "type": "integer" }, "page_size": { - "example": 100, "type": "integer" }, + "products": { + "items": { + "$ref": "#/definitions/hm.ProductSummary" + }, + "type": "array" + }, + "sort": { + "type": "string" + }, "source_url": { "type": "string" }, - "total": { - "example": 929, + "total_hits": { + "type": "integer" + }, + "total_pages": { "type": "integer" } }, "type": "object" }, - "ikea.CategoryEntry": { + "hm.ProductDetailColor": { "properties": { - "key": { - "example": "20649", + "image_url": { "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, - "type": "integer" - }, "name": { - "example": "Desks & computer desks", - "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", "type": "string" }, - "url": { - "type": "string" + "sizes": { + "items": { + "$ref": "#/definitions/hm.ProductDetailSize" + }, + "type": "array" } }, "type": "object" }, - "ikea.CategoryRef": { + "hm.ProductDetailRating": { "properties": { - "key": { - "example": "20649", - "type": "string" + "count": { + "type": "integer" }, - "name": { - "example": "Desks & computer desks", - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "ikea.CategoryResponse": { + "hm.ProductDetailResponse": { "properties": { - "category_key": { - "example": "20649", + "brand": { "type": "string" }, - "category_name": { - "example": "Desks & computer desks", + "colors": { + "items": { + "$ref": "#/definitions/hm.ProductDetailColor" + }, + "type": "array" + }, + "description": { "type": "string" }, - "category_url": { + "fetched_at": { "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, - "type": "integer" + "gender": { + "type": "string" }, - "country": { - "example": "us", + "material": { "type": "string" }, - "fetched_at": { + "name": { "type": "string" }, - "language": { - "example": "en", + "pattern": { "type": "string" }, - "offset": { - "example": 0, - "type": "integer" + "product_id": { + "type": "string" }, - "products": { + "rating": { + "$ref": "#/definitions/hm.ProductDetailRating" + }, + "reviews": { "items": { - "$ref": "#/definitions/ikea.ProductSummary" + "$ref": "#/definitions/hm.ProductDetailReview" }, "type": "array" }, - "sort": { - "example": "relevance", - "type": "string" - }, "source_url": { "type": "string" }, - "total": { - "example": 263, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "ikea.Color": { + "hm.ProductDetailReview": { "properties": { - "hex": { - "example": "ffffff", + "author": { "type": "string" }, - "id": { - "example": "10156", + "body": { "type": "string" }, - "name": { - "example": "white", + "date": { "type": "string" - } - }, - "type": "object" - }, - "ikea.DeliveryAvailability": { - "properties": { - "in_range": { - "type": "boolean" }, - "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" + "dimensions": { + "items": { + "$ref": "#/definitions/hm.ProductDetailReviewDimension" + }, + "type": "array" }, - "updated_at": { - "type": "string" - } - }, - "type": "object" - }, - "ikea.PickupAvailability": { - "properties": { - "in_range": { - "type": "boolean" + "rating": { + "type": "number" } }, "type": "object" }, - "ikea.Price": { + "hm.ProductDetailReviewDimension": { "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", - "type": "string" - }, - "valid_from": { - "example": "2026-08-03", + "label": { "type": "string" }, - "valid_to": { - "example": "2026-09-07", + "value": { "type": "string" } }, "type": "object" }, - "ikea.Product": { + "hm.ProductDetailSize": { "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 \"", + "availability": { "type": "string" }, - "name": { - "example": "MICKE", + "currency": { "type": "string" }, "price": { - "$ref": "#/definitions/ikea.Price" + "type": "number" }, - "product_url": { + "size": { "type": "string" }, - "quick_facts": { - "items": { - "$ref": "#/definitions/ikea.QuickFact" - }, - "type": "array" - }, - "rating": { - "$ref": "#/definitions/ikea.Rating" - }, - "type_name": { - "example": "Desk", + "sku": { "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", + "url": { "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/ikea.Variant" - }, - "type": "array" } }, "type": "object" }, - "ikea.ProductImage": { + "hm.ProductSummary": { "properties": { - "alt_text": { + "availability": { "type": "string" }, - "type": { - "example": "MAIN_PRODUCT_IMAGE", + "brand": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ikea.ProductResponse": { - "properties": { - "fetched_at": { + "category_code": { "type": "string" }, - "product": { - "$ref": "#/definitions/ikea.Product" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "ikea.ProductSummary": { - "properties": { "colors": { "items": { - "$ref": "#/definitions/ikea.Color" + "$ref": "#/definitions/hm.ColorSwatch" }, "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" + "coming_soon": { + "type": "boolean" }, - "image_url": { + "currency": { "type": "string" }, - "item_no": { - "example": "80213074", + "formatted_price": { "type": "string" }, - "measure_text": { - "example": "41 3/8x19 5/8 \"", + "id": { "type": "string" }, - "name": { - "example": "MICKE", + "image_url": { "type": "string" }, - "price": { - "$ref": "#/definitions/ikea.Price" - }, - "product_url": { + "model_image_url": { "type": "string" }, - "rating": { - "$ref": "#/definitions/ikea.Rating" - }, - "type_name": { - "example": "Desk", + "name": { "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", - "type": "string" + "new_arrival": { + "type": "boolean" }, - "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" + "price": { + "type": "number" }, - "variants": { + "sizes": { "items": { - "$ref": "#/definitions/ikea.Variant" + "$ref": "#/definitions/hm.SizeStock" }, "type": "array" - } - }, - "type": "object" - }, - "ikea.QuickFact": { - "properties": { - "name": { - "example": "Firm", - "type": "string" }, - "type_name": { - "example": "Firmness", + "url": { "type": "string" } }, "type": "object" }, - "ikea.Rating": { - "properties": { - "count": { - "example": 6367, - "type": "integer" - }, - "value": { - "example": 4.5, - "type": "number" - } - }, - "type": "object" - }, - "ikea.RelatedSearch": { + "hm.RelatedList": { "properties": { - "count": { - "example": 48, - "type": "integer" - }, - "text": { - "example": "desk chair", + "label": { "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/hm.ProductSummary" + }, + "type": "array" } }, "type": "object" }, - "ikea.Review": { + "hm.RelatedResponse": { "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", + "fetched_at": { "type": "string" }, - "rating": { - "example": 5, - "type": "integer" + "lists": { + "items": { + "$ref": "#/definitions/hm.RelatedList" + }, + "type": "array" }, - "text": { + "product_id": { "type": "string" }, - "title": { - "example": "Great buy", + "source_url": { "type": "string" } }, "type": "object" }, - "ikea.ReviewsResponse": { + "hm.SearchMeta": { "properties": { - "average_rating": { - "example": 4.5, - "type": "number" - }, - "count": { - "example": 3, - "type": "integer" + "blocked": { + "type": "boolean" }, - "fetched_at": { - "type": "string" + "did_you_mean": { + "items": { + "type": "string" + }, + "type": "array" }, - "item_no": { - "example": "80213074", + "query": { "type": "string" }, - "rating_count": { - "example": 6367, - "type": "integer" - }, - "reviews": { + "related_searches": { "items": { - "$ref": "#/definitions/ikea.Review" + "type": "string" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "ikea.SearchResponse": { + "hm.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, "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", - "type": "string" + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" }, "products": { "items": { - "$ref": "#/definitions/ikea.ProductSummary" + "$ref": "#/definitions/hm.ProductSummary" }, "type": "array" }, "query": { - "example": "desk", "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" + "search_meta": { + "$ref": "#/definitions/hm.SearchMeta" }, "source_url": { "type": "string" }, - "total": { - "example": 203, + "total_hits": { + "type": "integer" + }, + "total_pages": { "type": "integer" } }, "type": "object" }, - "ikea.StoreAddress": { + "hm.SizeStock": { "properties": { - "city": { - "example": "Burbank", - "type": "string" - }, - "country": { - "example": "US", - "type": "string" - }, - "postal_code": { - "example": "91502", + "id": { "type": "string" }, - "state": { - "example": "CA", + "label": { "type": "string" }, - "street": { - "example": "600 South IKEA Way", - "type": "string" + "stock": { + "type": "integer" } }, "type": "object" }, - "ikea.StoreAndDetail": { + "hm.Store": { "properties": { "address": { - "$ref": "#/definitions/ikea.StoreAddress" - }, - "geo": { - "$ref": "#/definitions/ikea.StoreGeo" - }, - "hours": { - "items": { - "$ref": "#/definitions/ikea.StoreHours" - }, - "type": "array" - }, - "location_type": { - "example": "Store", - "type": "string" - }, - "name": { - "example": "IKEA Burbank", "type": "string" }, - "price_range": { - "example": "$$", + "city": { "type": "string" }, - "slug": { - "example": "burbank", + "country": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ikea.StoreGeo": { - "properties": { "latitude": { - "example": 34.1745, "type": "number" }, "longitude": { - "example": -118.3032, "type": "number" - } - }, - "type": "object" - }, - "ikea.StoreHours": { - "properties": { - "closes": { - "example": "21:00", - "type": "string" - }, - "days": { - "example": [ - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Sunday" - ], - "items": { - "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" }, - "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", + "phone": { "type": "string" }, - "slug": { - "example": "burbank", + "postal_code": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ikea.StoreResponse": { - "properties": { - "fetched_at": { + "state": { "type": "string" }, - "source_url": { + "store_class": { "type": "string" }, - "store": { - "$ref": "#/definitions/ikea.StoreAndDetail" + "store_code": { + "type": "string" } }, "type": "object" }, - "ikea.StoresResponse": { + "hm.StoreResponse": { "properties": { "count": { - "example": 84, "type": "integer" }, - "country": { - "example": "us", - "type": "string" - }, "fetched_at": { "type": "string" }, - "language": { - "example": "en", + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "radius_meters": { + "type": "integer" + }, + "search": { "type": "string" }, "source_url": { @@ -80559,93 +82509,88 @@ }, "stores": { "items": { - "$ref": "#/definitions/ikea.StoreRef" + "$ref": "#/definitions/hm.Store" }, "type": "array" } }, "type": "object" }, - "ikea.SuggestResponse": { + "hm.SuggestResponse": { "properties": { - "count": { - "example": 5, - "type": "integer" + "blocked": { + "type": "boolean" }, - "country": { - "example": "us", - "type": "string" + "content_suggestions": { + "items": { + "$ref": "#/definitions/hm.SuggestionLink" + }, + "type": "array" }, "fetched_at": { "type": "string" }, - "language": { - "example": "en", - "type": "string" + "phrase_suggestions": { + "items": { + "type": "string" + }, + "type": "array" }, - "products": { + "popular_searches": { "items": { - "$ref": "#/definitions/ikea.ProductSummary" + "$ref": "#/definitions/hm.SuggestionLink" }, "type": "array" }, "query": { - "example": "des", "type": "string" }, + "search_history": { + "items": { + "type": "string" + }, + "type": "array" + }, "source_url": { "type": "string" }, - "suggestions": { + "trending_searches": { "items": { - "$ref": "#/definitions/ikea.RelatedSearch" + "type": "string" }, "type": "array" } }, "type": "object" }, - "ikea.Variant": { + "hm.SuggestionLink": { "properties": { - "image_url": { - "type": "string" - }, - "item_no": { - "example": "10244743", + "content_type": { "type": "string" }, - "name": { - "example": "MICKE", + "deep_link": { "type": "string" }, - "price": { - "$ref": "#/definitions/ikea.Price" - }, - "product_url": { + "image_url": { "type": "string" }, - "rating": { - "$ref": "#/definitions/ikea.Rating" - }, - "type_name": { - "example": "Desk", + "link": { "type": "string" }, - "valid_design": { - "example": "black-brown", + "title": { "type": "string" } }, "type": "object" }, - "ikea.availabilityResponseDoc": { + "hm.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.AvailabilityResponse" + "$ref": "#/definitions/hm.CategoriesResponse" }, "msg": { "example": "OK", @@ -80654,14 +82599,14 @@ }, "type": "object" }, - "ikea.categoriesResponseDoc": { + "hm.listingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.CategoriesResponse" + "$ref": "#/definitions/hm.ListingResponse" }, "msg": { "example": "OK", @@ -80670,14 +82615,14 @@ }, "type": "object" }, - "ikea.categoryResponseDoc": { + "hm.productDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.CategoryResponse" + "$ref": "#/definitions/hm.ProductDetailResponse" }, "msg": { "example": "OK", @@ -80686,14 +82631,14 @@ }, "type": "object" }, - "ikea.productResponseDoc": { + "hm.relatedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.ProductResponse" + "$ref": "#/definitions/hm.RelatedResponse" }, "msg": { "example": "OK", @@ -80702,14 +82647,14 @@ }, "type": "object" }, - "ikea.reviewsResponseDoc": { + "hm.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.ReviewsResponse" + "$ref": "#/definitions/hm.SearchResponse" }, "msg": { "example": "OK", @@ -80718,14 +82663,14 @@ }, "type": "object" }, - "ikea.searchResponseDoc": { + "hm.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.SearchResponse" + "$ref": "#/definitions/hm.StoreResponse" }, "msg": { "example": "OK", @@ -80734,14 +82679,14 @@ }, "type": "object" }, - "ikea.storeResponseDoc": { + "hm.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.StoreResponse" + "$ref": "#/definitions/hm.SuggestResponse" }, "msg": { "example": "OK", @@ -80750,1571 +82695,1328 @@ }, "type": "object" }, - "ikea.storesResponseDoc": { + "hollywoodreporter.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/ikea.StoresResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "ikea.suggestResponseDoc": { + "hollywoodreporter.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/hollywoodreporter.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/ikea.SuggestResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "headshot_url": { "type": "string" - } - }, - "type": "object" - }, - "imdb.AlternateTitle": { - "properties": { - "country": { - "example": "United States", + }, + "job_title": { "type": "string" }, - "title": { - "example": "Inception", + "name": { "type": "string" }, - "type": { - "example": "original title", + "page": { + "type": "integer" + }, + "social_links": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "url": { "type": "string" } }, "type": "object" }, - "imdb.AwardItem": { + "homedepot.CategoriesResponse": { "properties": { - "award": { - "example": "Oscar", - "type": "string" - }, - "category": { - "example": "Best Motion Picture of the Year", - "type": "string" - }, - "event": { - "example": "Academy Awards, USA", - "type": "string" - }, - "notes": { - "type": "string" - }, - "public_signals": { - "example": 6, + "count": { + "example": 26, "type": "integer" }, - "recipients": { + "departments": { "items": { - "$ref": "#/definitions/imdb.Person" + "$ref": "#/definitions/homedepot.Department" }, "type": "array" }, - "result": { - "example": "nomination", + "fetched_at": { "type": "string" }, - "titles": { - "items": { - "$ref": "#/definitions/imdb.AwardTitle" - }, - "type": "array" - }, - "year": { - "example": "2011", + "source_url": { "type": "string" } }, "type": "object" }, - "imdb.AwardTitle": { + "homedepot.CategoryFacet": { "properties": { - "id": { - "example": "tt1375666", + "name": { + "example": "Cordless", "type": "string" }, - "title": { - "example": "Inception", + "path": { + "example": "Cordless/N-5yc1vZc29xZ1z140i3", "type": "string" }, "url": { - "example": "https://www.imdb.com/title/tt1375666/", "type": "string" } }, "type": "object" }, - "imdb.ChartResponse": { + "homedepot.CategoryProduct": { "properties": { - "chart": { - "example": "top_rated_movies", + "id": { + "example": "320326875", "type": "string" }, - "fetched_at": { - "example": "2026-08-22T14:46:16Z", + "image": { "type": "string" }, - "limit": { - "example": 25, + "model": { + "example": "2953-20", + "type": "string" + }, + "original_price": { + "example": 199, + "type": "number" + }, + "price": { + "example": 179, + "type": "number" + }, + "rating": { + "example": 4.7, + "type": "number" + }, + "review_count": { + "example": 1542, "type": "integer" }, - "source_url": { - "example": "https://www.imdb.com/chart/top/", + "title": { + "example": "M18 FUEL 18V Lithium-Ion Brushless Cordless 1/4 in. Hex Impact Driver (Tool-Only)", "type": "string" }, - "titles": { - "items": { - "$ref": "#/definitions/imdb.ChartTitle" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "imdb.ChartTitle": { + "homedepot.CategoryResponse": { "properties": { - "cast": { - "items": { - "$ref": "#/definitions/imdb.Person" - }, - "type": "array" + "count": { + "type": "integer" }, - "directors": { + "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/imdb.Person" + "$ref": "#/definitions/homedepot.CategoryFacet" }, "type": "array" }, - "id": { - "example": "tt0111161", + "fetched_at": { "type": "string" }, - "rank": { + "page": { + "description": "Page is the 1-indexed page this response carries.", "example": 1, "type": "integer" }, - "rating_count": { - "example": 3227390, - "type": "integer" + "path": { + "type": "string" }, - "rating_value": { - "example": 9.3, - "type": "number" + "products": { + "items": { + "$ref": "#/definitions/homedepot.CategoryProduct" + }, + "type": "array" }, - "title": { - "example": "The Shawshank Redemption", + "sort": { + "description": "Sort echoes the requested sort value, or \"\" when the upstream default\nordering was used.", + "example": "top_sellers", "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt0111161/", + "source_url": { "type": "string" }, - "writers": { - "items": { - "$ref": "#/definitions/imdb.Person" - }, - "type": "array" + "title": { + "type": "string" }, - "year": { - "example": 1994, + "total": { "type": "integer" } }, "type": "object" }, - "imdb.CompanyItem": { + "homedepot.Department": { "properties": { "name": { - "example": "Warner Bros.", + "example": "Tools", "type": "string" }, - "note": { - "example": "presents", + "path": { + "example": "Tools/N-5yc1vZc1xy", "type": "string" }, - "public_signals": { - "example": 2, - "type": "integer" - }, "url": { - "example": "https://www.imdb.com/company/co0002663/", "type": "string" } }, "type": "object" }, - "imdb.CompanySection": { + "homedepot.KeyFeature": { "properties": { - "companies": { - "items": { - "$ref": "#/definitions/imdb.CompanyItem" - }, - "type": "array" - }, "name": { - "example": "Production Companies", + "example": "Motor Type", "type": "string" }, - "slug": { - "example": "production-companies", + "value": { + "example": "Brushed", "type": "string" } }, "type": "object" }, - "imdb.ConnectionAssociatedTitle": { + "homedepot.Product": { "properties": { - "id": { - "example": "tt1936736", + "brand": { + "example": "Milwaukee", "type": "string" }, - "title": { - "example": "Why Gump? Why Now?", + "currency": { + "example": "USD", "type": "string" }, - "title_type": { - "example": "TV Episode", + "description": { "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt1936736/", + "fetched_at": { "type": "string" }, - "year": { - "example": 1994, - "type": "integer" - } - }, - "type": "object" - }, - "imdb.ConnectionItem": { - "properties": { - "associated_title": { - "$ref": "#/definitions/imdb.ConnectionAssociatedTitle" - }, - "category": { - "example": "Featured in", + "gtin": { + "example": "0045242637867", "type": "string" }, - "note": { - "example": "Clips appear in the teaser for next week's show.", - "type": "string" - } - }, - "type": "object" - }, - "imdb.CreditItem": { - "properties": { - "character": { - "example": "Dom Cobb", + "id": { + "example": "320326875", "type": "string" }, - "name": { - "example": "Christopher Nolan", - "type": "string" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "role": { - "example": "written by", - "type": "string" + "key_features": { + "items": { + "$ref": "#/definitions/homedepot.KeyFeature" + }, + "type": "array" }, - "url": { - "example": "https://www.imdb.com/name/nm0634240/", + "model": { + "example": "2953-20", "type": "string" - } - }, - "type": "object" - }, - "imdb.CreditSection": { - "properties": { - "credits": { + }, + "price": { + "example": 179, + "type": "number" + }, + "rating": { + "example": 4.7, + "type": "number" + }, + "review_count": { + "example": 1544, + "type": "integer" + }, + "reviews": { "items": { - "$ref": "#/definitions/imdb.CreditItem" + "$ref": "#/definitions/homedepot.ProductReview" }, "type": "array" }, - "has_more": { - "example": true, - "type": "boolean" + "sku": { + "example": "1007901520", + "type": "string" }, - "name": { - "example": "Directed by", + "source_url": { "type": "string" }, - "slug": { - "example": "directed-by", + "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" }, - "total": { - "example": 145, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "imdb.CreditsResponse": { + "homedepot.ProductQuestionsResponse": { "properties": { + "count": { + "example": 8, + "type": "integer" + }, "fetched_at": { - "example": "2026-06-07T14:46:16Z", "type": "string" }, "id": { - "example": "tt1375666", + "example": "328425526", "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "sections": { + "questions": { "items": { - "$ref": "#/definitions/imdb.CreditSection" + "$ref": "#/definitions/homedepot.Question" }, "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" + "total": { + "example": 575, + "type": "integer" } }, "type": "object" }, - "imdb.EpisodeItem": { + "homedepot.ProductReview": { "properties": { - "air_date": { - "example": "17 Apr 2011", + "author": { + "example": "HomeDepotCustomer", "type": "string" }, - "episode": { - "example": 1, - "type": "integer" - }, - "id": { - "example": "tt1480055", + "body": { + "example": "The impact is just what I needed.", "type": "string" }, - "plot": { + "headline": { + "example": "Great tool", "type": "string" }, - "public_signals": { - "example": 6, - "type": "integer" - }, - "rating_count": { - "example": 52000, - "type": "integer" - }, - "rating_value": { - "example": 8.9, + "rating": { + "example": 5, "type": "number" - }, - "season": { - "example": 1, - "type": "integer" - }, - "title": { - "example": "Winter Is Coming", - "type": "string" - }, - "url": { - "example": "https://www.imdb.com/title/tt1480055/", - "type": "string" } }, "type": "object" }, - "imdb.EpisodesResponse": { + "homedepot.Question": { "properties": { - "episodes": { + "answer_count": { + "type": "integer" + }, + "answers": { "items": { - "$ref": "#/definitions/imdb.EpisodeItem" + "$ref": "#/definitions/homedepot.QuestionAnswer" }, "type": "array" }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", + "author": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "tt0944947", + "date": { "type": "string" }, - "limit": { - "example": 10, - "type": "integer" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "season": { - "example": 1, - "type": "integer" - }, - "source_url": { - "example": "https://www.imdb.com/title/tt0944947/episodes/?season=1", + "id": { "type": "string" }, - "total": { - "example": 11, - "type": "integer" - }, - "url": { - "example": "https://www.imdb.com/title/tt0944947/episodes/", + "text": { "type": "string" } }, "type": "object" }, - "imdb.ImageItem": { + "homedepot.QuestionAnswer": { "properties": { - "caption": { - "example": "Elisabeth Wiedemann in Holly - The Movie (1984)", + "author": { "type": "string" }, - "copyright": { - "example": "2013 Getty Images", + "date": { "type": "string" }, - "countries": { - "items": { - "$ref": "#/definitions/imdb.ImageLocale" - }, - "type": "array" + "helpful_count": { + "type": "integer" }, - "created_by": { - "example": "Stanley Bielecki Movie Collection", + "id": { "type": "string" }, - "created_on": { - "example": "February 16, 2026", - "type": "string" + "is_brand_answer": { + "type": "boolean" }, - "height": { - "example": 3024, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "homedepot.SearchResponse": { + "properties": { + "count": { + "example": 12, "type": "integer" }, - "id": { - "example": "rm1894298369", + "fetched_at": { "type": "string" }, - "languages": { - "items": { - "$ref": "#/definitions/imdb.ImageLocale" - }, - "type": "array" - }, - "names": { - "items": { - "$ref": "#/definitions/imdb.ImageName" - }, - "type": "array" - }, - "position": { + "page": { "example": 1, "type": "integer" }, - "source": { - "example": "gettyimages.com", - "type": "string" - }, - "titles": { + "products": { "items": { - "$ref": "#/definitions/imdb.ImageTitle" + "$ref": "#/definitions/homedepot.CategoryProduct" }, "type": "array" }, - "type": { - "example": "still_frame", + "query": { + "example": "impact driver", "type": "string" }, - "url": { - "example": "https://m.media-amazon.com/images/M/MV5BZjczNmIzMjEtYmM4MC00ZjQxLTk4NjctMTA2MzEzOWI3NWRhXkEyXkFqcGc@._V1_.jpg", + "source_url": { "type": "string" }, - "width": { - "example": 4032, + "total": { + "example": 1962, "type": "integer" } }, "type": "object" }, - "imdb.ImageLocale": { + "homedepot.Specification": { "properties": { - "code": { - "example": "SE", + "name": { + "example": "Battery Power Type", "type": "string" }, - "name": { - "example": "Sweden", + "value": { + "example": "Lithium Ion", "type": "string" } }, "type": "object" }, - "imdb.ImageName": { + "homedepot.SuggestResponse": { "properties": { - "id": { - "example": "nm0000151", + "count": { + "example": 10, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "name": { - "example": "Morgan Freeman", + "source_url": { "type": "string" }, - "url": { - "example": "https://www.imdb.com/name/nm0000151/", + "suggestions": { + "items": { + "$ref": "#/definitions/homedepot.Suggestion" + }, + "type": "array" + }, + "term": { + "example": "drill", "type": "string" } }, "type": "object" }, - "imdb.ImageTitle": { + "homedepot.Suggestion": { "properties": { - "id": { - "example": "tt0068646", - "type": "string" - }, - "title": { - "example": "The Godfather", - "type": "string" + "position": { + "description": "Position is the suggestion's 1-indexed rank in Home Depot's own\ntypeahead ordering.", + "example": 2, + "type": "integer" }, - "url": { - "example": "https://www.imdb.com/title/tt0068646/", + "term": { + "example": "drill bits", "type": "string" - }, - "year": { - "example": 1972, - "type": "integer" } }, "type": "object" }, - "imdb.ImageType": { + "homedepot.categoriesResponseDoc": { "properties": { - "description": { - "example": "A frame captured from the production itself.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "label": { - "example": "Still Frame", - "type": "string" + "data": { + "$ref": "#/definitions/homedepot.CategoriesResponse" }, - "type": { - "example": "still_frame", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "imdb.ImageTypeCount": { + "homedepot.categoryResponseDoc": { "properties": { - "label": { - "example": "Still Frame", - "type": "string" - }, - "total": { - "example": 381, + "code": { + "example": 200, "type": "integer" }, - "type": { - "example": "still_frame", + "data": { + "$ref": "#/definitions/homedepot.CategoryResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "imdb.ImageTypesResponse": { + "homedepot.productQuestionsResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-09T14:46:16Z", - "type": "string" - }, - "total": { - "example": 8, + "code": { + "example": 200, "type": "integer" }, - "types": { - "items": { - "$ref": "#/definitions/imdb.ImageType" - }, - "type": "array" + "data": { + "$ref": "#/definitions/homedepot.ProductQuestionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "imdb.KeywordItem": { + "homedepot.productResponseDoc": { "properties": { - "keyword": { - "example": "dream", - "type": "string" - }, - "public_signals": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "url": { - "example": "https://www.imdb.com/search/keyword/?keywords=dream", + "data": { + "$ref": "#/definitions/homedepot.Product" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "imdb.LifetimeGross": { + "homedepot.searchResponseDoc": { "properties": { - "domestic": { - "$ref": "#/definitions/imdb.Money" + "code": { + "example": 200, + "type": "integer" }, - "international": { - "$ref": "#/definitions/imdb.Money" + "data": { + "$ref": "#/definitions/homedepot.SearchResponse" }, - "worldwide": { - "$ref": "#/definitions/imdb.Money" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "imdb.LocationItem": { + "homedepot.suggestResponseDoc": { "properties": { - "location": { - "example": "Paris, France", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "note": { - "example": "Ariadne learns to build dreams", - "type": "string" + "data": { + "$ref": "#/definitions/homedepot.SuggestResponse" }, - "public_signals": { - "example": 2, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "imdb.Money": { + "hotels.Address": { "properties": { - "amount": { - "example": 28767189, - "type": "integer" + "country": { + "type": "string" }, - "currency": { - "example": "USD", + "locality": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "street_address": { "type": "string" } }, "type": "object" }, - "imdb.NameAwardsResponse": { + "hotels.AutocompleteResponse": { "properties": { - "awards": { + "query": { + "type": "string" + }, + "suggestions": { "items": { - "$ref": "#/definitions/imdb.AwardItem" + "$ref": "#/definitions/hotels.Suggestion" }, "type": "array" + } + }, + "type": "object" + }, + "hotels.OffersOption": { + "properties": { + "adults": { + "example": 2, + "type": "integer" }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", + "check_in": { + "example": "2026-09-10", "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "nm0634240", + "check_out": { + "example": "2026-09-11", "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "source_url": { - "example": "https://www.imdb.com/name/nm0634240/awards/", + "currency": { + "example": "USD", "type": "string" }, - "total": { - "example": 64, - "type": "integer" + "locale": { + "example": "en_US", + "type": "string" }, - "url": { - "example": "https://www.imdb.com/name/nm0634240/awards/", + "property_id": { + "example": "19681371", "type": "string" } }, + "required": [ + "check_in", + "check_out", + "property_id" + ], "type": "object" }, - "imdb.NameCreditItem": { + "hotels.OffersResponse": { "properties": { - "episodes": { - "example": "3 episodes", - "type": "string" - }, - "id": { - "example": "tt1375666", + "check_in": { "type": "string" }, - "role": { - "example": "directed by", + "check_out": { "type": "string" }, - "title": { - "example": "Inception", + "header": { "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/", - "type": "string" + "offers": { + "items": { + "$ref": "#/definitions/hotels.RoomOffer" + }, + "type": "array" }, - "year": { - "example": "2010", + "property_id": { "type": "string" } }, "type": "object" }, - "imdb.NameCreditSection": { + "hotels.Property": { "properties": { - "credits": { + "address": { + "$ref": "#/definitions/hotels.Address" + }, + "amenities": { "items": { - "$ref": "#/definitions/imdb.NameCreditItem" + "type": "string" }, "type": "array" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "name": { - "example": "Director", - "type": "string" - }, - "slug": { - "example": "director", + "description": { "type": "string" }, - "total": { - "example": 152, - "type": "integer" - } - }, - "type": "object" - }, - "imdb.NameCreditsResponse": { - "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" + "guest_rating": { + "type": "number" }, "id": { - "example": "nm0634240", "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "sections": { + "images": { "items": { - "$ref": "#/definitions/imdb.NameCreditSection" + "type": "string" }, "type": "array" }, - "source_url": { - "example": "https://www.imdb.com/name/nm0634240/", + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, + "review_count": { + "type": "integer" + }, + "star_rating": { + "type": "number" + }, "url": { - "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "imdb.NameImagesResponse": { + "hotels.PropertyOption": { "properties": { - "fetched_at": { - "example": "2026-09-09T14:46:16Z", + "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" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "nm0000151", + "check_in": { + "example": "2026-09-10", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/imdb.ImageItem" - }, - "type": "array" - }, - "limit": { - "example": 50, - "type": "integer" + "check_out": { + "example": "2026-09-11", + "type": "string" }, - "name": { - "example": "Morgan Freeman", + "currency": { + "example": "USD", "type": "string" }, - "source_url": { - "example": "https://www.imdb.com/name/nm0000151/mediaindex/", + "locale": { + "example": "en_US", "type": "string" }, - "total": { - "example": 1262, - "type": "integer" + "property_id": { + "example": "19681371", + "type": "string" + } + }, + "required": [ + "check_in", + "check_out", + "property_id" + ], + "type": "object" + }, + "hotels.RatesResponse": { + "properties": { + "check_in": { + "type": "string" }, - "type_counts": { - "items": { - "$ref": "#/definitions/imdb.ImageTypeCount" - }, - "type": "array" + "check_out": { + "type": "string" }, - "types": { + "properties": { "items": { - "type": "string" + "$ref": "#/definitions/hotels.SearchProperty" }, "type": "array" }, - "url": { - "example": "https://www.imdb.com/name/nm0000151/mediaindex/", + "property_id": { "type": "string" } }, "type": "object" }, - "imdb.NameKnownForItem": { + "hotels.Review": { "properties": { - "category": { - "example": "Director", + "date": { "type": "string" }, - "id": { - "example": "tt1375666", + "message": { "type": "string" }, - "title": { - "example": "Inception", + "rating_label": { "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/", + "reviewer_name": { "type": "string" }, - "year": { - "example": "2010", - "type": "string" + "verified": { + "type": "boolean" } }, "type": "object" }, - "imdb.NameResponse": { + "hotels.ReviewArchive": { "properties": { - "bio": { + "date": { "type": "string" }, - "birth_date": { - "example": "1970-07-30", + "id": { "type": "string" }, - "birth_place": { - "example": "London, England, UK", + "message": { "type": "string" }, - "death_date": { + "rating_label": { "type": "string" }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", + "reviewer_name": { "type": "string" }, - "id": { - "example": "nm0634240", + "title": { "type": "string" }, - "image_url": { + "traveler_type": { "type": "string" - }, - "known_for": { - "items": { - "$ref": "#/definitions/imdb.NameKnownForItem" - }, - "type": "array" - }, + } + }, + "type": "object" + }, + "hotels.ReviewCategory": { + "properties": { "name": { - "example": "Christopher Nolan", - "type": "string" - }, - "professions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "source_url": { - "example": "https://www.imdb.com/name/nm0634240/", "type": "string" }, - "url": { - "example": "https://www.imdb.com/name/nm0634240/", + "score": { "type": "string" } }, "type": "object" }, - "imdb.NameVideosResponse": { + "hotels.ReviewsArchiveOption": { "properties": { - "fetched_at": { - "example": "2026-09-14T14:46:16Z", + "adults": { + "example": 2, + "type": "integer" + }, + "check_in": { + "example": "2026-09-10", "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "check_out": { + "example": "2026-09-11", + "type": "string" }, - "id": { - "example": "nm0000151", + "currency": { + "example": "USD", "type": "string" }, - "limit": { - "example": 50, + "locale": { + "example": "en_US", + "type": "string" + }, + "page": { + "example": 1, "type": "integer" }, - "name": { - "example": "Morgan Freeman", - "type": "string" + "page_size": { + "example": 10, + "type": "integer" }, - "source_url": { - "example": "https://www.imdb.com/name/nm0000151/videogallery/", + "property_id": { + "example": "19681371", "type": "string" + } + }, + "required": [ + "check_in", + "check_out", + "property_id" + ], + "type": "object" + }, + "hotels.ReviewsArchiveResponse": { + "properties": { + "has_more": { + "type": "boolean" }, - "total": { - "example": 214, + "page": { "type": "integer" }, - "url": { - "example": "https://www.imdb.com/name/nm0000151/videogallery/", + "page_size": { + "type": "integer" + }, + "property_id": { "type": "string" }, - "videos": { + "reviews": { "items": { - "$ref": "#/definitions/imdb.VideoItem" + "$ref": "#/definitions/hotels.ReviewArchive" }, "type": "array" } }, "type": "object" }, - "imdb.OpeningWeekend": { + "hotels.ReviewsOption": { "properties": { - "gross": { - "$ref": "#/definitions/imdb.Money" - }, - "theater_count": { - "example": 3, + "adults": { + "example": 2, "type": "integer" }, - "weekend_end_date": { - "example": "1994-09-25", + "check_in": { + "example": "2026-09-10", "type": "string" }, - "weekend_start_date": { - "example": "1994-09-23", + "check_out": { + "example": "2026-09-11", "type": "string" - } - }, - "type": "object" - }, - "imdb.ParentalGuideCategory": { - "properties": { - "items": { - "items": { - "type": "string" - }, - "type": "array" }, - "name": { - "example": "Violence & Gore", + "currency": { + "example": "USD", "type": "string" }, - "severity": { - "example": "moderate", + "locale": { + "example": "en_US", "type": "string" }, - "slug": { - "example": "violence-gore", + "property_id": { + "example": "19681371", "type": "string" } }, + "required": [ + "check_in", + "check_out", + "property_id" + ], "type": "object" }, - "imdb.ParentalGuideResponse": { + "hotels.ReviewsResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/imdb.ParentalGuideCategory" + "$ref": "#/definitions/hotels.ReviewCategory" }, "type": "array" }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "id": { - "example": "tt1375666", + "overall_rating": { "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/parentalguide/", + "property_id": { "type": "string" }, - "summary": { - "$ref": "#/definitions/imdb.ParentalGuideSummary" + "reviews": { + "items": { + "$ref": "#/definitions/hotels.Review" + }, + "type": "array" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/parentalguide/", + "superlative": { "type": "string" } }, "type": "object" }, - "imdb.ParentalGuideSummary": { + "hotels.RoomOffer": { "properties": { - "categories_count": { - "example": 5, - "type": "integer" - }, - "highest_severity": { - "example": "severe", + "id": { "type": "string" }, - "item_count": { - "example": 24, - "type": "integer" - }, - "present_categories": { + "messages": { "items": { "type": "string" }, "type": "array" }, - "public_page_signals": { - "example": 12, - "type": "integer" - }, - "severity_counts": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - } - }, - "type": "object" - }, - "imdb.Person": { - "properties": { "name": { - "example": "Christopher Nolan", - "type": "string" - }, - "url": { - "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "imdb.PublicFactItem": { + "hotels.SearchOption": { "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" - }, - "public_signals": { - "example": 1, + "adults": { + "example": 2, "type": "integer" }, - "spoiler": { - "example": false, - "type": "boolean" + "check_in": { + "example": "2026-09-10", + "type": "string" }, - "text": { - "example": "The hallway fight was filmed with a rotating set.", + "check_out": { + "example": "2026-09-11", "type": "string" - } - }, - "type": "object" - }, - "imdb.PublicFactsAnalysisSummary": { - "properties": { - "company_count": { - "example": 9, - "type": "integer" }, - "company_section_count": { - "example": 3, - "type": "integer" + "currency": { + "example": "USD", + "type": "string" }, - "filming_location_count": { - "example": 6, - "type": "integer" + "locale": { + "example": "en_US", + "type": "string" }, - "goof_count": { - "example": 4, + "page": { + "example": 1, "type": "integer" }, - "keyword_count": { + "page_size": { "example": 20, "type": "integer" }, - "public_fact_coverage_pages": { - "example": 6, - "type": "integer" - }, - "public_page_signals": { - "example": 64, - "type": "integer" - }, - "quote_count": { - "example": 8, - "type": "integer" - }, - "spoiler_fact_count": { - "example": 2, - "type": "integer" - }, - "trivia_count": { - "example": 12, - "type": "integer" - } - }, - "type": "object" - }, - "imdb.RatingCountrySummary": { - "properties": { - "aggregate": { - "type": "number" - }, - "country": { + "query": { + "example": "New York", "type": "string" }, - "vote_count": { - "type": "integer" - } - }, - "type": "object" - }, - "imdb.RatingHistogramBucket": { - "properties": { - "rating": { - "type": "integer" + "region_id": { + "example": "2621", + "type": "string" }, - "vote_count": { + "rooms": { + "example": 1, "type": "integer" } }, + "required": [ + "check_in", + "check_out" + ], "type": "object" }, - "imdb.RatingsResponse": { + "hotels.SearchProperty": { "properties": { - "countries": { + "amenities": { "items": { - "$ref": "#/definitions/imdb.RatingCountrySummary" + "type": "string" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "histogram": { + "badges": { "items": { - "$ref": "#/definitions/imdb.RatingHistogramBucket" + "type": "string" }, "type": "array" }, "id": { "type": "string" }, - "rating_count": { - "type": "integer" + "location": { + "type": "string" }, - "rating_value": { - "type": "number" + "name": { + "type": "string" }, - "source_url": { + "nightly_price": { "type": "string" }, - "title": { + "price": { "type": "string" }, - "url": { + "review_count": { + "type": "integer" + }, + "review_score": { + "type": "number" + }, + "review_title": { "type": "string" - } - }, - "type": "object" - }, - "imdb.ReleaseInfoItem": { - "properties": { - "country": { - "example": "United States", + }, + "strikeout_price": { "type": "string" }, - "date": { - "example": "16 July 2010", + "thumbnail_url": { "type": "string" }, - "note": { - "example": "theatrical", + "url": { "type": "string" } }, "type": "object" }, - "imdb.ReleaseInfoResponse": { + "hotels.SearchResponse": { "properties": { - "alternate_titles": { - "items": { - "$ref": "#/definitions/imdb.AlternateTitle" - }, - "type": "array" - }, - "alternate_titles_total": { - "example": 82, - "type": "integer" - }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", + "check_in": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "check_out": { + "type": "string" }, - "id": { - "example": "tt1375666", + "destination": { "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" + "page": { + "type": "integer" }, - "releases": { + "properties": { "items": { - "$ref": "#/definitions/imdb.ReleaseInfoItem" + "$ref": "#/definitions/hotels.SearchProperty" }, "type": "array" }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/releaseinfo/", + "region_id": { "type": "string" }, - "total": { - "example": 71, - "type": "integer" - }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/releaseinfo/", + "results_label": { "type": "string" } }, "type": "object" }, - "imdb.ReviewItem": { + "hotels.Suggestion": { "properties": { - "author": { - "example": "movie_fan", + "airport_code": { "type": "string" }, - "date": { - "example": "2024-01-02", + "geo_type": { "type": "string" }, - "helpful_votes": { - "example": 123, - "type": "integer" - }, - "helpfulness": { - "example": "82%", - "type": "string" + "latitude": { + "type": "number" }, - "id": { - "example": "rw1234567", + "location_full_name": { "type": "string" }, - "public_signals": { - "example": 5, - "type": "integer" - }, - "rating": { - "example": 9, - "type": "integer" + "longitude": { + "type": "number" }, - "spoiler": { - "example": false, - "type": "boolean" + "primary_text": { + "type": "string" }, - "text": { + "property_id": { "type": "string" }, - "title": { - "example": "A smart blockbuster", + "region_id": { "type": "string" }, - "total_votes": { - "example": 150, - "type": "integer" + "secondary_text": { + "type": "string" }, - "url": { - "example": "https://www.imdb.com/review/rw1234567/", + "type": { "type": "string" } }, "type": "object" }, - "imdb.ReviewsResponse": { + "hotels.autocompleteResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "has_more": { - "example": true, - "type": "boolean" + "data": { + "$ref": "#/definitions/hotels.AutocompleteResponse" }, - "id": { - "example": "tt1375666", + "msg": { + "example": "OK", "type": "string" - }, - "limit": { - "example": 10, + } + }, + "type": "object" + }, + "hotels.offersResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "reviews": { - "items": { - "$ref": "#/definitions/imdb.ReviewItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/hotels.OffersResponse" }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/reviews/", + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "example": 11940, + } + }, + "type": "object" + }, + "hotels.propertyResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/reviews/", + "data": { + "$ref": "#/definitions/hotels.PropertyResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "imdb.SearchItem": { + "hotels.ratesResponseDoc": { "properties": { - "description": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "example": "tt1375666", - "type": "string" + "data": { + "$ref": "#/definitions/hotels.RatesResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "hotels.reviewsArchiveResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "example": "Inception", - "type": "string" + "data": { + "$ref": "#/definitions/hotels.ReviewsArchiveResponse" }, - "title_type": { - "example": "Movie", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "hotels.reviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/", - "type": "string" + "data": { + "$ref": "#/definitions/hotels.ReviewsResponse" }, - "year": { - "example": "2010", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "imdb.SearchResponse": { + "hotels.searchResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "limit": { - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "query": { - "example": "inception", + "data": { + "$ref": "#/definitions/hotels.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "houstonchronicle.AuthorArticle": { + "properties": { + "summary": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/imdb.SearchItem" - }, - "type": "array" + "title": { + "type": "string" }, - "source_url": { - "example": "https://www.imdb.com/find/?q=inception&s=tt", + "url": { "type": "string" } }, "type": "object" }, - "imdb.SearchTitleItem": { + "houstonchronicle.AuthorResponse": { "properties": { - "certificate": { - "example": "PG-13", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/houstonchronicle.AuthorArticle" + }, + "type": "array" }, - "genres": { - "example": [ - "Action" - ], + "biography": { "items": { "type": "string" }, "type": "array" }, - "id": { - "example": "tt1375666", - "type": "string" - }, "image_url": { "type": "string" }, - "metascore": { - "example": 74, - "type": "integer" - }, - "plot": { - "type": "string" - }, - "rating_count": { - "example": 2600000, - "type": "integer" - }, - "rating_value": { - "example": 8.8, - "type": "number" - }, - "release_date": { - "example": "2010-07-16", + "job_title": { "type": "string" }, - "runtime_minutes": { - "example": 148, - "type": "integer" - }, - "title": { - "example": "Inception", + "name": { "type": "string" }, - "title_type": { - "example": "movie", - "type": "string" + "same_as": { + "items": { + "type": "string" + }, + "type": "array" }, "url": { - "example": "https://www.imdb.com/title/tt1375666/", "type": "string" - }, - "year": { - "example": 2010, - "type": "integer" } }, "type": "object" }, - "imdb.SearchTitleResponse": { + "huffpost.AuthorResponse": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "limit": { - "example": 25, - "type": "integer" - }, - "results": { + "articles": { "items": { - "$ref": "#/definitions/imdb.SearchTitleItem" + "$ref": "#/definitions/huffpost.HeadlineItem" }, "type": "array" }, - "source_url": { - "example": "https://www.imdb.com/search/title/?genres=Action&title_type=feature", - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "total": { - "example": 1968, - "type": "integer" - } - }, - "type": "object" - }, - "imdb.SimilarResponse": { - "properties": { - "fetched_at": { + "image_url": { "type": "string" }, - "id": { + "job_title": { "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "titles": { + "social_links": { "items": { - "$ref": "#/definitions/imdb.SimilarTitle" + "$ref": "#/definitions/huffpost.AuthorSocialLink" }, "type": "array" }, @@ -82324,833 +84026,941 @@ }, "type": "object" }, - "imdb.SimilarTitle": { + "huffpost.AuthorSocialLink": { "properties": { - "content_rating": { + "platform": { "type": "string" }, - "id": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "huffpost.HeadlineItem": { + "properties": { + "author": { "type": "string" }, "image_url": { "type": "string" }, - "rating_count": { - "type": "integer" - }, - "rating_value": { - "type": "number" + "published_at": { + "type": "string" }, - "runtime_minutes": { - "type": "integer" + "summary": { + "type": "string" }, "title": { "type": "string" }, - "title_type": { + "type": { "type": "string" }, "url": { "type": "string" - }, - "year": { - "type": "integer" } }, "type": "object" }, - "imdb.TechnicalSpecItem": { + "ign.AuthorResponse": { "properties": { - "name": { - "example": "Runtime", - "type": "string" - }, - "slug": { - "example": "runtime", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/ign.HeadlineItem" + }, + "type": "array" }, - "values": { + "biography": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "imdb.TechnicalSpecsResponse": { - "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", + }, + "image_url": { "type": "string" }, - "id": { - "example": "tt1375666", + "job_title": { "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" + "location": { + "type": "string" }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/technical/", + "name": { "type": "string" }, - "specs": { + "social_links": { "items": { - "$ref": "#/definitions/imdb.TechnicalSpecItem" + "$ref": "#/definitions/ign.AuthorSocialLink" }, "type": "array" }, "url": { - "example": "https://www.imdb.com/title/tt1375666/technical/", + "type": "string" + }, + "username": { "type": "string" } }, "type": "object" }, - "imdb.TitleAwardsResponse": { + "ign.AuthorSocialLink": { "properties": { - "awards": { - "items": { - "$ref": "#/definitions/imdb.AwardItem" - }, - "type": "array" + "platform": { + "type": "string" }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ign.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "image_url": { + "type": "string" }, - "id": { - "example": "tt1375666", + "published_at": { "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" + "summary": { + "type": "string" }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/awards/", + "title": { "type": "string" }, - "total": { - "example": 64, - "type": "integer" + "type": { + "type": "string" }, "url": { - "example": "https://www.imdb.com/title/tt1375666/awards/", "type": "string" } }, "type": "object" }, - "imdb.TitleBoxOfficeResponse": { + "ikea.AvailabilityResponse": { "properties": { - "fetched_at": { - "example": "2026-09-17T14:46:16Z", - "type": "string" - }, - "has_box_office": { - "example": true, + "available_for_click_collect": { "type": "boolean" }, - "id": { - "example": "tt0111161", - "type": "string" - }, - "lifetime_gross": { - "$ref": "#/definitions/imdb.LifetimeGross" + "available_for_home_delivery": { + "type": "boolean" }, - "opening_weekend": { - "$ref": "#/definitions/imdb.OpeningWeekend" + "click_collect": { + "$ref": "#/definitions/ikea.PickupAvailability" }, - "production_budget": { - "$ref": "#/definitions/imdb.Money" + "country": { + "example": "us", + "type": "string" }, - "source_url": { - "example": "https://www.imdb.com/title/tt0111161/", + "fetched_at": { "type": "string" }, - "title": { - "example": "The Shawshank Redemption", + "home_delivery": { + "$ref": "#/definitions/ikea.DeliveryAvailability" + }, + "item_no": { + "example": "80213074", "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt0111161/", + "source_url": { "type": "string" } }, "type": "object" }, - "imdb.TitleConnectionsResponse": { + "ikea.CategoriesResponse": { "properties": { - "connections": { + "categories": { "items": { - "$ref": "#/definitions/imdb.ConnectionItem" + "$ref": "#/definitions/ikea.CategoryEntry" }, "type": "array" }, + "country": { + "example": "us", + "type": "string" + }, "fetched_at": { - "example": "2026-09-17T14:46:16Z", "type": "string" }, - "has_more": { + "has_next": { "example": true, "type": "boolean" }, - "id": { - "example": "tt0111161", + "language": { + "example": "en", "type": "string" }, - "limit": { - "example": 50, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 100, "type": "integer" }, "source_url": { - "example": "https://www.imdb.com/title/tt0111161/", "type": "string" }, - "title": { - "example": "The Shawshank Redemption", + "total": { + "example": 929, + "type": "integer" + } + }, + "type": "object" + }, + "ikea.CategoryEntry": { + "properties": { + "key": { + "example": "20649", "type": "string" }, - "total": { - "example": 999, + "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" }, + "name": { + "example": "Desks & computer desks", + "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", + "type": "string" + }, "url": { - "example": "https://www.imdb.com/title/tt0111161/", "type": "string" } }, "type": "object" }, - "imdb.TitleImagesResponse": { + "ikea.CategoryRef": { "properties": { - "fetched_at": { - "example": "2026-09-09T14:46:16Z", + "key": { + "example": "20649", "type": "string" }, - "has_more": { - "example": false, - "type": "boolean" + "name": { + "example": "Desks & computer desks", + "type": "string" + } + }, + "type": "object" + }, + "ikea.CategoryResponse": { + "properties": { + "category_key": { + "example": "20649", + "type": "string" }, - "id": { - "example": "tt0089753", + "category_name": { + "example": "Desks & computer desks", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/imdb.ImageItem" - }, - "type": "array" + "category_url": { + "type": "string" }, - "limit": { - "example": 50, + "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" }, - "source_url": { - "example": "https://www.imdb.com/title/tt0089753/mediaindex/", + "country": { + "example": "us", "type": "string" }, - "title": { - "example": "Holly - The Movie", + "fetched_at": { "type": "string" }, - "total": { - "example": 38, + "language": { + "example": "en", + "type": "string" + }, + "offset": { + "example": 0, "type": "integer" }, - "type_counts": { + "products": { "items": { - "$ref": "#/definitions/imdb.ImageTypeCount" + "$ref": "#/definitions/ikea.ProductSummary" }, "type": "array" }, - "types": { - "items": { - "type": "string" - }, - "type": "array" + "sort": { + "example": "relevance", + "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt0089753/mediaindex/", + "source_url": { "type": "string" + }, + "total": { + "example": 263, + "type": "integer" } }, "type": "object" }, - "imdb.TitlePublicFactsAnalysisResponse": { + "ikea.Color": { "properties": { - "company_credits": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" - }, - "filming_locations": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" - }, - "goofs": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" - }, - "keywords": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" + "hex": { + "example": "ffffff", + "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).", - "items": { - "type": "string" - }, - "type": "array" + "id": { + "example": "10156", + "type": "string" }, - "not_viewing_advice": { - "example": true, + "name": { + "example": "white", + "type": "string" + } + }, + "type": "object" + }, + "ikea.DeliveryAvailability": { + "properties": { + "in_range": { "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" + "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" }, - "public_page_derived": { - "example": true, + "updated_at": { + "type": "string" + } + }, + "type": "object" + }, + "ikea.PickupAvailability": { + "properties": { + "in_range": { "type": "boolean" - }, - "quotes": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" - }, - "summary": { - "$ref": "#/definitions/imdb.PublicFactsAnalysisSummary" - }, - "trivia": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" } }, "type": "object" }, - "imdb.TitlePublicFactsResponse": { + "ikea.Price": { "properties": { - "company_credits": { - "items": { - "$ref": "#/definitions/imdb.CompanySection" - }, - "type": "array" + "currency_code": { + "example": "USD", + "type": "string" }, - "facts": { - "items": { - "$ref": "#/definitions/imdb.PublicFactItem" - }, - "type": "array" + "current": { + "example": 99.99, + "type": "number" }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" + "discount_amount": { + "example": 15.01, + "type": "number" }, - "has_more": { - "example": true, - "type": "boolean" + "discount_percentage": { + "example": 15, + "type": "number" }, - "id": { - "example": "tt1375666", + "formatted": { + "example": "$99.99", "type": "string" }, - "keywords": { - "items": { - "$ref": "#/definitions/imdb.KeywordItem" - }, - "type": "array" - }, - "locations": { - "items": { - "$ref": "#/definitions/imdb.LocationItem" - }, - "type": "array" + "previous": { + "example": 95, + "type": "number" }, - "public_page_derived": { - "example": true, - "type": "boolean" + "previous_formatted": { + "example": "$95.00", + "type": "string" }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/trivia/", + "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" }, - "total": { - "example": 21, - "type": "integer" + "tag_text": { + "example": "IKEA Family price", + "type": "string" }, - "type": { - "example": "trivia", + "valid_from": { + "example": "2026-08-03", "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/trivia/", + "valid_to": { + "example": "2026-09-07", "type": "string" } }, "type": "object" }, - "imdb.TitleResponse": { + "ikea.Product": { "properties": { - "cast": { + "category_path": { "items": { - "$ref": "#/definitions/imdb.Person" + "$ref": "#/definitions/ikea.CategoryRef" }, "type": "array" }, - "content_rating": { - "example": "PG-13", - "type": "string" - }, - "directors": { + "colors": { "items": { - "$ref": "#/definitions/imdb.Person" + "$ref": "#/definitions/ikea.Color" }, "type": "array" }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", + "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" }, - "genres": { - "example": [ - "Action" - ], + "image_url": { + "type": "string" + }, + "images": { "items": { - "type": "string" + "$ref": "#/definitions/ikea.ProductImage" }, "type": "array" }, - "id": { - "example": "tt1375666", + "item_no": { + "example": "80213074", "type": "string" }, - "image_url": { + "measure_text": { + "example": "41 3/8x19 5/8 \"", "type": "string" }, - "plot": { + "name": { + "example": "MICKE", "type": "string" }, - "popularity_rank": { - "example": 82, - "type": "integer" + "price": { + "$ref": "#/definitions/ikea.Price" }, - "public_page_derived": { - "example": true, - "type": "boolean" + "product_url": { + "type": "string" }, - "rating_count": { - "example": 2600000, - "type": "integer" + "quick_facts": { + "items": { + "$ref": "#/definitions/ikea.QuickFact" + }, + "type": "array" }, - "rating_value": { - "example": 8.8, - "type": "number" + "rating": { + "$ref": "#/definitions/ikea.Rating" }, - "release_date": { - "example": "2010-07-16", + "type_name": { + "example": "Desk", "type": "string" }, - "runtime_minutes": { - "example": 148, - "type": "integer" - }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/", + "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" }, - "title": { - "example": "Inception", - "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" }, - "title_type": { - "example": "Movie", + "variants": { + "items": { + "$ref": "#/definitions/ikea.Variant" + }, + "type": "array" + } + }, + "type": "object" + }, + "ikea.ProductImage": { + "properties": { + "alt_text": { "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/", + "type": { + "example": "MAIN_PRODUCT_IMAGE", "type": "string" }, - "year": { - "example": "2010", + "url": { "type": "string" } }, "type": "object" }, - "imdb.TitleVideosResponse": { + "ikea.ProductResponse": { "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" + "product": { + "$ref": "#/definitions/ikea.Product" }, "source_url": { - "example": "https://www.imdb.com/title/tt1375666/videogallery/", - "type": "string" - }, - "title": { - "example": "Inception", - "type": "string" - }, - "total": { - "example": 35, - "type": "integer" - }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/videogallery/", "type": "string" - }, - "videos": { - "items": { - "$ref": "#/definitions/imdb.VideoItem" - }, - "type": "array" } }, "type": "object" }, - "imdb.VideoItem": { + "ikea.ProductSummary": { "properties": { - "content_type": { - "example": "Trailer", + "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" }, - "duration_seconds": { - "example": 105, - "type": "integer" + "image_url": { + "type": "string" }, - "id": { - "example": "vi2959588889", + "item_no": { + "example": "80213074", "type": "string" }, - "position": { - "example": 1, - "type": "integer" + "measure_text": { + "example": "41 3/8x19 5/8 \"", + "type": "string" }, - "primary_title": { - "$ref": "#/definitions/imdb.VideoPrimaryTitle" + "name": { + "example": "MICKE", + "type": "string" }, - "thumbnail": { - "$ref": "#/definitions/imdb.VideoThumbnail" + "price": { + "$ref": "#/definitions/ikea.Price" }, - "title": { - "example": "10th Anniversary Dream Trailer", - "type": "string" - } - }, - "type": "object" - }, - "imdb.VideoPrimaryTitle": { - "properties": { - "id": { - "example": "tt1375666", + "product_url": { "type": "string" }, - "title": { - "example": "Inception", - "type": "string" + "rating": { + "$ref": "#/definitions/ikea.Rating" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/", + "type_name": { + "example": "Desk", "type": "string" - } - }, - "type": "object" - }, - "imdb.VideoThumbnail": { - "properties": { - "height": { - "example": 1071, - "type": "integer" }, - "url": { - "example": "https://m.media-amazon.com/images/M/MV5BMTQ1ZmIzOTAtNDcwZi00NDVkLWE4NWItYWNhZGY1MmVlZGU0XkEyXkFqcGdeQWRvb2xpbmhk._V1_.jpg", + "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" }, - "width": { - "example": 1905, + "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/ikea.Variant" + }, + "type": "array" } }, "type": "object" }, - "imdb.chartsResponseDoc": { + "ikea.QuickFact": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/imdb.ChartResponse" + "name": { + "example": "Firm", + "type": "string" }, - "msg": { - "example": "OK", + "type_name": { + "example": "Firmness", "type": "string" } }, "type": "object" }, - "imdb.creditsResponseDoc": { + "ikea.Rating": { "properties": { - "code": { - "example": 200, + "count": { + "example": 6367, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.CreditsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "value": { + "example": 4.5, + "type": "number" } }, "type": "object" }, - "imdb.episodesResponseDoc": { + "ikea.RelatedSearch": { "properties": { - "code": { - "example": 200, + "count": { + "example": 48, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.EpisodesResponse" - }, - "msg": { - "example": "OK", + "text": { + "example": "desk chair", "type": "string" } }, "type": "object" }, - "imdb.imageTypesResponseDoc": { + "ikea.Review": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/imdb.ImageTypesResponse" + "author": { + "example": "Alexis", + "type": "string" }, - "msg": { - "example": "OK", + "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" - } - }, - "type": "object" - }, - "imdb.nameAwardsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "rating": { + "example": 5, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.NameAwardsResponse" + "text": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "Great buy", "type": "string" } }, "type": "object" }, - "imdb.nameCreditsResponseDoc": { + "ikea.ReviewsResponse": { "properties": { - "code": { - "example": 200, + "average_rating": { + "example": 4.5, + "type": "number" + }, + "count": { + "example": 3, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.NameCreditsResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "item_no": { + "example": "80213074", "type": "string" - } - }, - "type": "object" - }, - "imdb.nameImagesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "rating_count": { + "example": 6367, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.NameImagesResponse" + "reviews": { + "items": { + "$ref": "#/definitions/ikea.Review" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "imdb.nameResponseDoc": { + "ikea.SearchResponse": { "properties": { - "code": { - "example": 200, + "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, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.NameResponse" - }, - "msg": { - "example": "OK", + "country": { + "example": "us", "type": "string" - } - }, - "type": "object" - }, - "imdb.nameVideosResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.NameVideosResponse" + "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" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" + }, + "language": { + "example": "en", + "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/ikea.ProductSummary" + }, + "type": "array" + }, + "query": { + "example": "desk", + "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": { + "type": "string" + }, + "total": { + "example": 203, + "type": "integer" } }, "type": "object" }, - "imdb.parentalGuideResponseDoc": { + "ikea.StoreAddress": { "properties": { - "code": { - "example": 200, - "type": "integer" + "city": { + "example": "Burbank", + "type": "string" }, - "data": { - "$ref": "#/definitions/imdb.ParentalGuideResponse" + "country": { + "example": "US", + "type": "string" }, - "msg": { - "example": "OK", + "postal_code": { + "example": "91502", + "type": "string" + }, + "state": { + "example": "CA", + "type": "string" + }, + "street": { + "example": "600 South IKEA Way", "type": "string" } }, "type": "object" }, - "imdb.ratingsResponseDoc": { + "ikea.StoreAndDetail": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "$ref": "#/definitions/ikea.StoreAddress" }, - "data": { - "$ref": "#/definitions/imdb.RatingsResponse" + "geo": { + "$ref": "#/definitions/ikea.StoreGeo" }, - "msg": { - "example": "OK", + "hours": { + "items": { + "$ref": "#/definitions/ikea.StoreHours" + }, + "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": { "type": "string" } }, "type": "object" }, - "imdb.releaseInfoResponseDoc": { + "ikea.StoreGeo": { "properties": { - "code": { - "example": 200, - "type": "integer" + "latitude": { + "example": 34.1745, + "type": "number" }, - "data": { - "$ref": "#/definitions/imdb.ReleaseInfoResponse" + "longitude": { + "example": -118.3032, + "type": "number" + } + }, + "type": "object" + }, + "ikea.StoreHours": { + "properties": { + "closes": { + "example": "21:00", + "type": "string" }, - "msg": { - "example": "OK", + "days": { + "example": [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Sunday" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "opens": { + "example": "10:00", "type": "string" } }, "type": "object" }, - "imdb.reviewsResponseDoc": { + "ikea.StoreRef": { "properties": { - "code": { - "example": 200, - "type": "integer" + "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" }, - "data": { - "$ref": "#/definitions/imdb.ReviewsResponse" + "name": { + "example": "IKEA Burbank, CA", + "type": "string" }, - "msg": { - "example": "OK", + "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" + }, + "url": { "type": "string" } }, "type": "object" }, - "imdb.searchResponseDoc": { + "ikea.StoreResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store": { + "$ref": "#/definitions/ikea.StoreAndDetail" + } + }, + "type": "object" + }, + "ikea.StoresResponse": { + "properties": { + "count": { + "example": 84, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.SearchResponse" + "country": { + "example": "us", + "type": "string" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "language": { + "example": "en", + "type": "string" + }, + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/ikea.StoreRef" + }, + "type": "array" } }, "type": "object" }, - "imdb.searchTitleResponseDoc": { + "ikea.SuggestResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 5, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.SearchTitleResponse" + "country": { + "example": "us", + "type": "string" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "language": { + "example": "en", + "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/ikea.ProductSummary" + }, + "type": "array" + }, + "query": { + "example": "des", + "type": "string" + }, + "source_url": { "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/ikea.RelatedSearch" + }, + "type": "array" } }, "type": "object" }, - "imdb.similarResponseDoc": { + "ikea.Variant": { "properties": { - "code": { - "example": 200, - "type": "integer" + "image_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/imdb.SimilarResponse" + "item_no": { + "example": "10244743", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "MICKE", + "type": "string" + }, + "price": { + "$ref": "#/definitions/ikea.Price" + }, + "product_url": { + "type": "string" + }, + "rating": { + "$ref": "#/definitions/ikea.Rating" + }, + "type_name": { + "example": "Desk", + "type": "string" + }, + "valid_design": { + "example": "black-brown", "type": "string" } }, "type": "object" }, - "imdb.technicalSpecsResponseDoc": { + "ikea.availabilityResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TechnicalSpecsResponse" + "$ref": "#/definitions/ikea.AvailabilityResponse" }, "msg": { "example": "OK", @@ -83159,14 +84969,14 @@ }, "type": "object" }, - "imdb.titleAwardsResponseDoc": { + "ikea.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TitleAwardsResponse" + "$ref": "#/definitions/ikea.CategoriesResponse" }, "msg": { "example": "OK", @@ -83175,14 +84985,14 @@ }, "type": "object" }, - "imdb.titleBoxOfficeResponseDoc": { + "ikea.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TitleBoxOfficeResponse" + "$ref": "#/definitions/ikea.CategoryResponse" }, "msg": { "example": "OK", @@ -83191,14 +85001,14 @@ }, "type": "object" }, - "imdb.titleConnectionsResponseDoc": { + "ikea.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TitleConnectionsResponse" + "$ref": "#/definitions/ikea.ProductResponse" }, "msg": { "example": "OK", @@ -83207,14 +85017,14 @@ }, "type": "object" }, - "imdb.titleImagesResponseDoc": { + "ikea.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TitleImagesResponse" + "$ref": "#/definitions/ikea.ReviewsResponse" }, "msg": { "example": "OK", @@ -83223,14 +85033,14 @@ }, "type": "object" }, - "imdb.titlePublicFactsAnalysisResponseDoc": { + "ikea.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TitlePublicFactsAnalysisResponse" + "$ref": "#/definitions/ikea.SearchResponse" }, "msg": { "example": "OK", @@ -83239,14 +85049,14 @@ }, "type": "object" }, - "imdb.titlePublicFactsResponseDoc": { + "ikea.storeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" + "$ref": "#/definitions/ikea.StoreResponse" }, "msg": { "example": "OK", @@ -83255,14 +85065,14 @@ }, "type": "object" }, - "imdb.titleResponseDoc": { + "ikea.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TitleResponse" + "$ref": "#/definitions/ikea.StoresResponse" }, "msg": { "example": "OK", @@ -83271,14 +85081,14 @@ }, "type": "object" }, - "imdb.titleVideosResponseDoc": { + "ikea.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.TitleVideosResponse" + "$ref": "#/definitions/ikea.SuggestResponse" }, "msg": { "example": "OK", @@ -83287,1822 +85097,2119 @@ }, "type": "object" }, - "importyeti.Company": { + "imdb.AlternateTitle": { "properties": { - "address": { - "example": "Minneapolis, Mn 55402, Us", + "country": { + "example": "United States", "type": "string" }, - "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", + "title": { + "example": "Inception", "type": "string" }, - "hs_codes": { - "items": { - "$ref": "#/definitions/importyeti.HSCode" - }, - "type": "array" + "type": { + "example": "original title", + "type": "string" + } + }, + "type": "object" + }, + "imdb.AwardItem": { + "properties": { + "award": { + "example": "Oscar", + "type": "string" }, - "last_shipment_date": { - "example": "07/16/2026", + "category": { + "example": "Best Motion Picture of the Year", "type": "string" }, - "name": { - "example": "Target 33 South 6Th Street Cc", + "event": { + "example": "Academy Awards, USA", "type": "string" }, - "phone": { - "example": "XXX-XXX-X296", + "notes": { "type": "string" }, - "recent_shipments": { - "items": { - "$ref": "#/definitions/importyeti.Shipment" - }, - "type": "array" + "public_signals": { + "example": 6, + "type": "integer" }, - "region_breakdown": { + "recipients": { "items": { - "$ref": "#/definitions/importyeti.RegionBreakdown" + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "slug": { - "example": "target-33-south-6th-street-cc", - "type": "string" - }, - "source_url": { - "example": "https://www.importyeti.com/company/target", + "result": { + "example": "nomination", "type": "string" }, - "suppliers": { + "titles": { "items": { - "$ref": "#/definitions/importyeti.Supplier" + "$ref": "#/definitions/imdb.AwardTitle" }, "type": "array" }, - "total_shipments": { - "example": 9123, - "type": "integer" - }, - "url": { - "example": "https://www.importyeti.com/company/target-33-south-6th-street-cc", - "type": "string" - }, - "website": { - "example": "www.target.com", + "year": { + "example": "2011", "type": "string" } }, "type": "object" }, - "importyeti.CountryShipments": { + "imdb.AwardTitle": { "properties": { - "country": { - "example": "China", + "id": { + "example": "tt1375666", "type": "string" }, - "shipments": { - "example": 4267, - "type": "integer" + "title": { + "example": "Inception", + "type": "string" + }, + "url": { + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" } }, "type": "object" }, - "importyeti.HSCode": { + "imdb.ChartResponse": { "properties": { - "code": { - "example": "6404.19.9092", + "chart": { + "example": "top_rated_movies", "type": "string" }, - "description": { - "example": "Valued over $12/pair", + "fetched_at": { + "example": "2026-08-22T14:46:16Z", "type": "string" }, - "product_description": { - "example": "Footwear Po- 1101064043 Hs Code-6404199092", - "type": "string" + "limit": { + "example": 25, + "type": "integer" }, - "sample_bill_of_lading": { - "example": "APLU050437011", + "source_url": { + "example": "https://www.imdb.com/chart/top/", "type": "string" + }, + "titles": { + "items": { + "$ref": "#/definitions/imdb.ChartTitle" + }, + "type": "array" } }, "type": "object" }, - "importyeti.RegionBreakdown": { + "imdb.ChartTitle": { "properties": { - "countries": { + "cast": { "items": { - "$ref": "#/definitions/importyeti.CountryShipments" + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "percent": { - "example": 80.3, - "type": "number" + "directors": { + "items": { + "$ref": "#/definitions/imdb.Person" + }, + "type": "array" }, - "region": { - "example": "Asia", + "id": { + "example": "tt0111161", "type": "string" - } - }, - "type": "object" - }, - "importyeti.SearchResponse": { - "properties": { - "page": { + }, + "rank": { "example": 1, "type": "integer" }, - "query": { - "example": "nike", + "rating_count": { + "example": 3227390, + "type": "integer" + }, + "rating_value": { + "example": 9.3, + "type": "number" + }, + "title": { + "example": "The Shawshank Redemption", "type": "string" }, - "results": { + "url": { + "example": "https://www.imdb.com/title/tt0111161/", + "type": "string" + }, + "writers": { "items": { - "$ref": "#/definitions/importyeti.SearchResult" + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "total_hits": { - "example": 135, - "type": "integer" - }, - "total_pages": { - "example": 14, + "year": { + "example": 1994, "type": "integer" } }, "type": "object" }, - "importyeti.SearchResult": { + "imdb.CompanyItem": { "properties": { - "address": { - "example": "1 Bowerman Dr, Beaverton, Or 97005, Us", - "type": "string" - }, - "country_code": { - "example": "US", - "type": "string" - }, - "kind": { - "example": "company", + "name": { + "example": "Warner Bros.", "type": "string" }, - "most_recent_shipment": { - "example": "23/11/2024", + "note": { + "example": "presents", "type": "string" }, - "other_addresses_count": { - "example": 27, - "type": "integer" - }, - "other_names_count": { - "example": 17, + "public_signals": { + "example": 2, "type": "integer" }, - "slug": { - "example": "nike", - "type": "string" - }, - "title": { - "example": "Nike", + "url": { + "example": "https://www.imdb.com/company/co0002663/", "type": "string" - }, - "total_shipments": { - "example": 560, - "type": "integer" } }, "type": "object" }, - "importyeti.Shipment": { + "imdb.CompanySection": { "properties": { - "bill_of_lading": { - "example": "MOSJMK0H2607003", - "type": "string" - }, - "containers": { - "example": "1", - "type": "string" - }, - "date": { - "example": "07/16/2026", - "type": "string" - }, - "description": { - "example": "Kart Chains", - "type": "string" - }, - "estimated_freight_cost": { - "example": "$ 2,563.26", - "type": "string" - }, - "quantity": { - "example": "2 ctn", - "type": "string" - }, - "route": { - "example": "Asia US Pacific", - "type": "string" - }, - "supplier_location": { - "example": "Kaga Shi, Japan", - "type": "string" - }, - "supplier_name": { - "example": "Enuma Chain Mfg Co Ltd", - "type": "string" + "companies": { + "items": { + "$ref": "#/definitions/imdb.CompanyItem" + }, + "type": "array" }, - "supplier_slug": { - "example": "enuma-chain-mfg", + "name": { + "example": "Production Companies", "type": "string" }, - "weight": { - "example": "959 kg", + "slug": { + "example": "production-companies", "type": "string" } }, "type": "object" }, - "importyeti.Supplier": { + "imdb.ConnectionAssociatedTitle": { "properties": { - "city": { - "example": "Maria Fe", - "type": "string" - }, - "country": { - "example": "Philippines", + "id": { + "example": "tt1936736", "type": "string" }, - "description": { + "title": { + "example": "Why Gump? Why Now?", "type": "string" }, - "hs_codes": { - "example": [ - "4602.19", - "8504.40" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "example": "Durus Industries", + "title_type": { + "example": "TV Episode", "type": "string" }, - "product_categories": { - "example": [ - "Furnitures", - "Toys" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "slug": { - "example": "durus-industries", + "url": { + "example": "https://www.imdb.com/title/tt1936736/", "type": "string" }, - "total_shipments": { - "example": 308, + "year": { + "example": 1994, "type": "integer" } }, "type": "object" }, - "importyeti.companyResponseDoc": { + "imdb.ConnectionItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "associated_title": { + "$ref": "#/definitions/imdb.ConnectionAssociatedTitle" }, - "data": { - "$ref": "#/definitions/importyeti.Company" + "category": { + "example": "Featured in", + "type": "string" }, - "msg": { - "example": "OK", + "note": { + "example": "Clips appear in the teaser for next week's show.", "type": "string" } }, "type": "object" }, - "importyeti.searchResponseDoc": { + "imdb.CreditItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "character": { + "example": "Dom Cobb", + "type": "string" }, - "data": { - "$ref": "#/definitions/importyeti.SearchResponse" + "name": { + "example": "Christopher Nolan", + "type": "string" }, - "msg": { - "example": "OK", + "role": { + "example": "written by", + "type": "string" + }, + "url": { + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "indeed.Job": { + "imdb.CreditSection": { "properties": { - "benefits": { + "credits": { "items": { - "type": "string" + "$ref": "#/definitions/imdb.CreditItem" }, "type": "array" }, - "city": { - "example": "New York", - "type": "string" - }, - "company": { - "example": "dv01", - "type": "string" - }, - "company_rating": { - "example": 3.5, - "type": "number" - }, - "company_review_count": { - "example": 20, - "type": "integer" + "has_more": { + "example": true, + "type": "boolean" }, - "company_url": { - "example": "https://www.indeed.com/cmp/Dv01", + "name": { + "example": "Directed by", "type": "string" }, - "country": { - "example": "US", + "slug": { + "example": "directed-by", "type": "string" }, - "description_html": { + "total": { + "example": 145, + "type": "integer" + } + }, + "type": "object" + }, + "imdb.CreditsResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "description_text": { + "id": { + "example": "tt1375666", "type": "string" }, - "direct_apply": { + "public_page_derived": { "example": true, "type": "boolean" }, - "employment_type": { + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/imdb.CreditSection" }, "type": "array" }, - "job_key": { - "example": "a055dc6ab3a91a3b", - "type": "string" - }, - "location": { - "example": "New York, NY 10003", + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/fullcredits/", "type": "string" }, - "postal_code": { - "example": "10003", + "url": { + "example": "https://www.imdb.com/title/tt1375666/fullcredits/", "type": "string" - }, - "posted_at": { - "example": "2026-06-29T16:52:09Z", + } + }, + "type": "object" + }, + "imdb.EpisodeItem": { + "properties": { + "air_date": { + "example": "17 Apr 2011", "type": "string" }, - "remote": { - "example": false, - "type": "boolean" + "episode": { + "example": 1, + "type": "integer" }, - "salary_currency": { - "example": "USD", + "id": { + "example": "tt1480055", "type": "string" }, - "salary_max": { - "example": 160000, - "type": "number" + "plot": { + "type": "string" }, - "salary_min": { - "example": 140000, - "type": "number" + "public_signals": { + "example": 6, + "type": "integer" }, - "salary_period": { - "example": "yearly", - "type": "string" + "rating_count": { + "example": 52000, + "type": "integer" }, - "salary_text": { - "example": "$140,000 - $160,000 a year", - "type": "string" + "rating_value": { + "example": 8.9, + "type": "number" }, - "state": { - "example": "NY", - "type": "string" + "season": { + "example": 1, + "type": "integer" }, "title": { - "example": "Senior Backend Engineer", + "example": "Winter Is Coming", "type": "string" }, "url": { - "example": "https://www.indeed.com/viewjob?jk=a055dc6ab3a91a3b", - "type": "string" - }, - "valid_through": { - "example": "2026-11-10T07:28:05Z", + "example": "https://www.imdb.com/title/tt1480055/", "type": "string" } }, "type": "object" }, - "indeed.JobCard": { + "imdb.EpisodesResponse": { "properties": { - "city": { - "example": "New York", - "type": "string" + "episodes": { + "items": { + "$ref": "#/definitions/imdb.EpisodeItem" + }, + "type": "array" }, - "company": { - "example": "dv01", + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "company_rating": { - "example": 3.6, - "type": "number" + "has_more": { + "example": true, + "type": "boolean" }, - "company_review_count": { - "example": 20, + "id": { + "example": "tt0944947", + "type": "string" + }, + "limit": { + "example": 10, "type": "integer" }, - "indeed_applyable": { + "public_page_derived": { "example": true, "type": "boolean" }, - "job_key": { - "example": "a055dc6ab3a91a3b", - "type": "string" - }, - "job_types": { - "items": { - "type": "string" - }, - "type": "array" + "season": { + "example": 1, + "type": "integer" }, - "location": { - "example": "New York, NY 10003", + "source_url": { + "example": "https://www.imdb.com/title/tt0944947/episodes/?season=1", "type": "string" }, - "new_job": { - "example": false, - "type": "boolean" + "total": { + "example": 11, + "type": "integer" }, - "postal_code": { - "example": "10003", + "url": { + "example": "https://www.imdb.com/title/tt0944947/episodes/", "type": "string" - }, - "posted_at": { - "example": "2026-06-29T16:52:09Z", + } + }, + "type": "object" + }, + "imdb.ImageItem": { + "properties": { + "caption": { + "example": "Elisabeth Wiedemann in Holly - The Movie (1984)", "type": "string" }, - "posted_relative": { - "example": "13 days ago", + "copyright": { + "example": "2013 Getty Images", "type": "string" }, - "remote": { - "example": false, - "type": "boolean" + "countries": { + "items": { + "$ref": "#/definitions/imdb.ImageLocale" + }, + "type": "array" }, - "salary_currency": { - "example": "USD", + "created_by": { + "example": "Stanley Bielecki Movie Collection", "type": "string" }, - "salary_max": { - "example": 160000, - "type": "number" + "created_on": { + "example": "February 16, 2026", + "type": "string" }, - "salary_min": { - "example": 140000, - "type": "number" + "height": { + "example": 3024, + "type": "integer" }, - "salary_period": { - "example": "yearly", + "id": { + "example": "rm1894298369", "type": "string" }, - "salary_text": { - "example": "$140,000 - $160,000 a year", - "type": "string" + "languages": { + "items": { + "$ref": "#/definitions/imdb.ImageLocale" + }, + "type": "array" }, - "snippet": { - "example": "Interact with a diverse team...", - "type": "string" + "names": { + "items": { + "$ref": "#/definitions/imdb.ImageName" + }, + "type": "array" }, - "sponsored": { - "example": true, - "type": "boolean" + "position": { + "example": 1, + "type": "integer" }, - "state": { - "example": "NY", + "source": { + "example": "gettyimages.com", "type": "string" }, - "title": { - "example": "Senior Backend Engineer", - "type": "string" + "titles": { + "items": { + "$ref": "#/definitions/imdb.ImageTitle" + }, + "type": "array" }, - "urgently_hiring": { - "example": false, - "type": "boolean" + "type": { + "example": "still_frame", + "type": "string" }, "url": { - "example": "https://www.indeed.com/viewjob?jk=a055dc6ab3a91a3b", + "example": "https://m.media-amazon.com/images/M/MV5BZjczNmIzMjEtYmM4MC00ZjQxLTk4NjctMTA2MzEzOWI3NWRhXkEyXkFqcGc@._V1_.jpg", "type": "string" + }, + "width": { + "example": 4032, + "type": "integer" } }, "type": "object" }, - "indeed.LocationSuggestResponse": { + "imdb.ImageLocale": { "properties": { - "query": { - "example": "Austin", + "code": { + "example": "SE", "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/indeed.LocationSuggestion" - }, - "type": "array" + "name": { + "example": "Sweden", + "type": "string" } }, "type": "object" }, - "indeed.LocationSuggestion": { + "imdb.ImageName": { "properties": { + "id": { + "example": "nm0000151", + "type": "string" + }, "name": { - "example": "Austin, TX (Travis County)", + "example": "Morgan Freeman", "type": "string" }, - "source": { - "example": "PRECISELY", + "url": { + "example": "https://www.imdb.com/name/nm0000151/", "type": "string" } }, "type": "object" }, - "indeed.SearchResponse": { + "imdb.ImageTitle": { "properties": { - "jobs": { - "items": { - "$ref": "#/definitions/indeed.JobCard" - }, - "type": "array" - }, - "location": { - "example": "New York, NY", + "id": { + "example": "tt0068646", "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "title": { + "example": "The Godfather", + "type": "string" }, - "query": { - "example": "software engineer", + "url": { + "example": "https://www.imdb.com/title/tt0068646/", "type": "string" }, - "total": { - "example": 3040, + "year": { + "example": 1972, "type": "integer" } }, "type": "object" }, - "indeed.jobResponseDoc": { + "imdb.ImageType": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "example": "A frame captured from the production itself.", + "type": "string" }, - "data": { - "$ref": "#/definitions/indeed.Job" + "label": { + "example": "Still Frame", + "type": "string" }, - "msg": { - "example": "OK", + "type": { + "example": "still_frame", "type": "string" } }, "type": "object" }, - "indeed.locationSuggestResponseDoc": { + "imdb.ImageTypeCount": { "properties": { - "code": { - "example": 200, - "type": "integer" + "label": { + "example": "Still Frame", + "type": "string" }, - "data": { - "$ref": "#/definitions/indeed.LocationSuggestResponse" + "total": { + "example": 381, + "type": "integer" }, - "msg": { - "example": "OK", + "type": { + "example": "still_frame", "type": "string" } }, "type": "object" }, - "indeed.searchResponseDoc": { + "imdb.ImageTypesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "fetched_at": { + "example": "2026-09-09T14:46:16Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/indeed.SearchResponse" + "total": { + "example": 8, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "types": { + "items": { + "$ref": "#/definitions/imdb.ImageType" + }, + "type": "array" } }, "type": "object" }, - "independent.AuthorArticle": { + "imdb.KeywordItem": { "properties": { - "section": { + "keyword": { + "example": "dream", "type": "string" }, - "section_url": { + "public_signals": { + "example": 2, + "type": "integer" + }, + "url": { + "example": "https://www.imdb.com/search/keyword/?keywords=dream", "type": "string" + } + }, + "type": "object" + }, + "imdb.LifetimeGross": { + "properties": { + "domestic": { + "$ref": "#/definitions/imdb.Money" }, - "title": { + "international": { + "$ref": "#/definitions/imdb.Money" + }, + "worldwide": { + "$ref": "#/definitions/imdb.Money" + } + }, + "type": "object" + }, + "imdb.LocationItem": { + "properties": { + "location": { + "example": "Paris, France", "type": "string" }, - "url": { + "note": { + "example": "Ariadne learns to build dreams", "type": "string" + }, + "public_signals": { + "example": 2, + "type": "integer" } }, "type": "object" }, - "independent.AuthorResponse": { + "imdb.Money": { "properties": { - "articles": { + "amount": { + "example": 28767189, + "type": "integer" + }, + "currency": { + "example": "USD", + "type": "string" + } + }, + "type": "object" + }, + "imdb.NameAwardsResponse": { + "properties": { + "awards": { "items": { - "$ref": "#/definitions/independent.AuthorArticle" + "$ref": "#/definitions/imdb.AwardItem" }, "type": "array" }, - "bio": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "job_title": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "name": { + "id": { + "example": "nm0634240", "type": "string" }, - "slug": { - "type": "string" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "twitter": { + "source_url": { + "example": "https://www.imdb.com/name/nm0634240/awards/", "type": "string" }, + "total": { + "example": 64, + "type": "integer" + }, "url": { + "example": "https://www.imdb.com/name/nm0634240/awards/", "type": "string" } }, "type": "object" }, - "indianexpress.AuthorArticle": { + "imdb.NameCreditItem": { "properties": { - "image_url": { + "episodes": { + "example": "3 episodes", "type": "string" }, - "published_at": { + "id": { + "example": "tt1375666", "type": "string" }, - "summary": { + "role": { + "example": "directed by", "type": "string" }, "title": { + "example": "Inception", "type": "string" }, "url": { + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" + }, + "year": { + "example": "2010", "type": "string" } }, "type": "object" }, - "indianexpress.AuthorResponse": { + "imdb.NameCreditSection": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/indianexpress.AuthorArticle" - }, - "type": "array" - }, - "biography": { + "credits": { "items": { - "type": "string" + "$ref": "#/definitions/imdb.NameCreditItem" }, "type": "array" }, - "image_url": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, "name": { + "example": "Director", "type": "string" }, - "url": { + "slug": { + "example": "director", "type": "string" + }, + "total": { + "example": 152, + "type": "integer" } }, "type": "object" }, - "indiatoday.AuthorArticle": { + "imdb.NameCreditsResponse": { "properties": { - "image_url": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "section": { + "id": { + "example": "nm0634240", "type": "string" }, - "summary": { - "type": "string" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "title": { + "sections": { + "items": { + "$ref": "#/definitions/imdb.NameCreditSection" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" }, "url": { + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "indiatoday.AuthorResponse": { + "imdb.NameImagesResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/indiatoday.AuthorArticle" - }, - "type": "array" + "fetched_at": { + "example": "2026-09-09T14:46:16Z", + "type": "string" }, - "biography": { + "has_more": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "nm0000151", + "type": "string" + }, + "images": { "items": { - "type": "string" + "$ref": "#/definitions/imdb.ImageItem" }, "type": "array" }, - "image_url": { - "type": "string" + "limit": { + "example": 50, + "type": "integer" }, "name": { + "example": "Morgan Freeman", "type": "string" }, - "title": { + "source_url": { + "example": "https://www.imdb.com/name/nm0000151/mediaindex/", "type": "string" }, + "total": { + "example": 1262, + "type": "integer" + }, + "type_counts": { + "items": { + "$ref": "#/definitions/imdb.ImageTypeCount" + }, + "type": "array" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array" + }, "url": { + "example": "https://www.imdb.com/name/nm0000151/mediaindex/", "type": "string" } }, "type": "object" }, - "indiewire.AuthorArticle": { + "imdb.NameKnownForItem": { "properties": { - "published_at": { - "type": "string" - }, - "section": { + "category": { + "example": "Director", "type": "string" }, - "summary": { + "id": { + "example": "tt1375666", "type": "string" }, "title": { + "example": "Inception", "type": "string" }, "url": { + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" + }, + "year": { + "example": "2010", "type": "string" } }, "type": "object" }, - "indiewire.AuthorResponse": { + "imdb.NameResponse": { "properties": { - "articles": { + "bio": { + "type": "string" + }, + "birth_date": { + "example": "1970-07-30", + "type": "string" + }, + "birth_place": { + "example": "London, England, UK", + "type": "string" + }, + "death_date": { + "type": "string" + }, + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "id": { + "example": "nm0634240", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "known_for": { "items": { - "$ref": "#/definitions/indiewire.AuthorArticle" + "$ref": "#/definitions/imdb.NameKnownForItem" }, "type": "array" }, - "biography": { + "name": { + "example": "Christopher Nolan", + "type": "string" + }, + "professions": { "items": { "type": "string" }, "type": "array" }, - "has_next_page": { + "public_page_derived": { + "example": true, "type": "boolean" }, - "headshot_url": { - "type": "string" - }, - "name": { + "source_url": { + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" }, - "page": { - "type": "integer" - }, - "social_links": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, "url": { + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "inews.AuthorArticle": { + "imdb.NameVideosResponse": { "properties": { - "image_url": { + "fetched_at": { + "example": "2026-09-14T14:46:16Z", "type": "string" }, - "published_at": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "section": { + "id": { + "example": "nm0000151", "type": "string" }, - "summary": { + "limit": { + "example": 50, + "type": "integer" + }, + "name": { + "example": "Morgan Freeman", "type": "string" }, - "title": { + "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/", "type": "string" + }, + "videos": { + "items": { + "$ref": "#/definitions/imdb.VideoItem" + }, + "type": "array" } }, "type": "object" }, - "inews.AuthorResponse": { + "imdb.OpeningWeekend": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/inews.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" + "gross": { + "$ref": "#/definitions/imdb.Money" }, - "image_url": { - "type": "string" + "theater_count": { + "example": 3, + "type": "integer" }, - "name": { + "weekend_end_date": { + "example": "1994-09-25", "type": "string" }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { + "weekend_start_date": { + "example": "1994-09-23", "type": "string" } }, "type": "object" }, - "inquirer.AuthorArticle": { + "imdb.ParentalGuideCategory": { "properties": { - "category": { - "type": "string" + "items": { + "items": { + "type": "string" + }, + "type": "array" }, - "published_at": { + "name": { + "example": "Violence & Gore", "type": "string" }, - "title": { + "severity": { + "example": "moderate", "type": "string" }, - "url": { + "slug": { + "example": "violence-gore", "type": "string" } }, "type": "object" }, - "inquirer.AuthorResponse": { + "imdb.ParentalGuideResponse": { "properties": { - "articles": { + "categories": { "items": { - "$ref": "#/definitions/inquirer.AuthorArticle" + "$ref": "#/definitions/imdb.ParentalGuideCategory" }, "type": "array" }, - "name": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "page": { - "type": "integer" + "id": { + "example": "tt1375666", + "type": "string" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/parentalguide/", + "type": "string" + }, + "summary": { + "$ref": "#/definitions/imdb.ParentalGuideSummary" }, "url": { + "example": "https://www.imdb.com/title/tt1375666/parentalguide/", "type": "string" } }, "type": "object" }, - "instacart.Department": { + "imdb.ParentalGuideSummary": { "properties": { - "id": { - "type": "string" + "categories_count": { + "example": 5, + "type": "integer" }, - "name": { + "highest_severity": { + "example": "severe", "type": "string" }, - "slug": { - "type": "string" + "item_count": { + "example": 24, + "type": "integer" }, - "subcategories": { + "present_categories": { "items": { - "$ref": "#/definitions/instacart.Subcategory" + "type": "string" }, "type": "array" + }, + "public_page_signals": { + "example": 12, + "type": "integer" + }, + "severity_counts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" } }, "type": "object" }, - "instacart.DepartmentsResponse": { + "imdb.Person": { "properties": { - "departments": { - "items": { - "$ref": "#/definitions/instacart.Department" - }, - "type": "array" + "name": { + "example": "Christopher Nolan", + "type": "string" }, - "shop_id": { + "url": { + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "instacart.ItemNutrition": { + "imdb.PublicFactItem": { "properties": { - "label": { + "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" }, - "unit": { - "type": "string" + "public_signals": { + "example": 1, + "type": "integer" }, - "value": { + "spoiler": { + "example": false, + "type": "boolean" + }, + "text": { + "example": "The hallway fight was filmed with a rotating set.", "type": "string" } }, "type": "object" }, - "instacart.ItemPrice": { + "imdb.PublicFactsAnalysisSummary": { "properties": { - "current_price": { - "type": "number" + "company_count": { + "example": 9, + "type": "integer" }, - "offer_label": { - "type": "string" + "company_section_count": { + "example": 3, + "type": "integer" }, - "on_sale": { - "type": "boolean" + "filming_location_count": { + "example": 6, + "type": "integer" }, - "pricing_unit": { - "type": "string" + "goof_count": { + "example": 4, + "type": "integer" }, - "regular_price": { - "type": "number" + "keyword_count": { + "example": 20, + "type": "integer" + }, + "public_fact_coverage_pages": { + "example": 6, + "type": "integer" + }, + "public_page_signals": { + "example": 64, + "type": "integer" + }, + "quote_count": { + "example": 8, + "type": "integer" + }, + "spoiler_fact_count": { + "example": 2, + "type": "integer" + }, + "trivia_count": { + "example": 12, + "type": "integer" } }, "type": "object" }, - "instacart.ItemResponse": { + "imdb.RatingCountrySummary": { "properties": { - "available": { - "type": "boolean" + "aggregate": { + "type": "number" }, - "brand_name": { + "country": { "type": "string" }, - "dietary_labels": { + "vote_count": { + "type": "integer" + } + }, + "type": "object" + }, + "imdb.RatingHistogramBucket": { + "properties": { + "rating": { + "type": "integer" + }, + "vote_count": { + "type": "integer" + } + }, + "type": "object" + }, + "imdb.RatingsResponse": { + "properties": { + "countries": { "items": { - "type": "string" + "$ref": "#/definitions/imdb.RatingCountrySummary" }, "type": "array" }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { + "fetched_at": { "type": "string" }, - "nutrition": { + "histogram": { "items": { - "$ref": "#/definitions/instacart.ItemNutrition" + "$ref": "#/definitions/imdb.RatingHistogramBucket" }, "type": "array" }, - "price": { - "$ref": "#/definitions/instacart.ItemPrice" - }, - "product_id": { + "id": { "type": "string" }, - "size": { + "rating_count": { + "type": "integer" + }, + "rating_value": { + "type": "number" + }, + "source_url": { "type": "string" }, - "stock_level": { + "title": { "type": "string" }, - "variant_options_summary": { + "url": { "type": "string" } }, "type": "object" }, - "instacart.SearchNearbyResponse": { + "imdb.ReleaseInfoItem": { "properties": { - "postal_code": { + "country": { + "example": "United States", "type": "string" }, - "query": { + "date": { + "example": "16 July 2010", "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/instacart.SearchSuggestion" - }, - "type": "array" + "note": { + "example": "theatrical", + "type": "string" } }, "type": "object" }, - "instacart.SearchResponse": { + "imdb.ReleaseInfoResponse": { "properties": { - "query": { + "alternate_titles": { + "items": { + "$ref": "#/definitions/imdb.AlternateTitle" + }, + "type": "array" + }, + "alternate_titles_total": { + "example": 82, + "type": "integer" + }, + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "shop_id": { + "has_more": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "tt1375666", "type": "string" }, - "suggestions": { + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "releases": { "items": { - "$ref": "#/definitions/instacart.SearchSuggestion" + "$ref": "#/definitions/imdb.ReleaseInfoItem" }, "type": "array" - } - }, - "type": "object" - }, - "instacart.SearchSuggestion": { - "properties": { - "relative_url": { - "type": "string" }, - "term": { + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/releaseinfo/", "type": "string" }, - "thumbnail_url": { + "total": { + "example": 71, + "type": "integer" + }, + "url": { + "example": "https://www.imdb.com/title/tt1375666/releaseinfo/", "type": "string" } }, "type": "object" }, - "instacart.Store": { + "imdb.ReviewItem": { "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": { + "author": { + "example": "movie_fan", "type": "string" }, - "logo_url": { + "date": { + "example": "2024-01-02", "type": "string" }, - "name": { - "type": "string" + "helpful_votes": { + "example": 123, + "type": "integer" }, - "retailer_id": { + "helpfulness": { + "example": "82%", "type": "string" }, - "retailer_location_id": { + "id": { + "example": "rw1234567", "type": "string" }, - "retailer_type": { - "type": "string" + "public_signals": { + "example": 5, + "type": "integer" }, - "saver_store": { + "rating": { + "example": 9, + "type": "integer" + }, + "spoiler": { + "example": false, "type": "boolean" }, - "service_type": { + "text": { "type": "string" }, - "shop_id": { + "title": { + "example": "A smart blockbuster", "type": "string" }, - "slug": { + "total_votes": { + "example": 150, + "type": "integer" + }, + "url": { + "example": "https://www.imdb.com/review/rw1234567/", "type": "string" } }, "type": "object" }, - "instacart.StoreSearchResponse": { + "imdb.ReviewsResponse": { "properties": { - "postal_code": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "stores": { + "has_more": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "tt1375666", + "type": "string" + }, + "limit": { + "example": 10, + "type": "integer" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "reviews": { "items": { - "$ref": "#/definitions/instacart.Store" + "$ref": "#/definitions/imdb.ReviewItem" }, "type": "array" + }, + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/reviews/", + "type": "string" + }, + "total": { + "example": 11940, + "type": "integer" + }, + "url": { + "example": "https://www.imdb.com/title/tt1375666/reviews/", + "type": "string" } }, "type": "object" }, - "instacart.Subcategory": { + "imdb.SearchItem": { "properties": { + "description": { + "type": "string" + }, "id": { + "example": "tt1375666", "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "slug": { + "title": { + "example": "Inception", + "type": "string" + }, + "title_type": { + "example": "Movie", + "type": "string" + }, + "url": { + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" + }, + "year": { + "example": "2010", "type": "string" } }, "type": "object" }, - "instacart.TrendingResponse": { + "imdb.SearchResponse": { "properties": { - "postal_code": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "terms": { + "limit": { + "example": 10, + "type": "integer" + }, + "query": { + "example": "inception", + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/instacart.SearchSuggestion" + "$ref": "#/definitions/imdb.SearchItem" }, "type": "array" - } - }, - "type": "object" - }, - "instacart.departmentsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/instacart.DepartmentsResponse" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.imdb.com/find/?q=inception&s=tt", "type": "string" } }, "type": "object" }, - "instacart.itemResponseDoc": { + "imdb.SearchTitleItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "certificate": { + "example": "PG-13", + "type": "string" }, - "data": { - "$ref": "#/definitions/instacart.ItemResponse" + "genres": { + "example": [ + "Action" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "id": { + "example": "tt1375666", "type": "string" - } - }, - "type": "object" - }, - "instacart.searchNearbyResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/instacart.SearchNearbyResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "metascore": { + "example": 74, + "type": "integer" + }, + "plot": { "type": "string" - } - }, - "type": "object" - }, - "instacart.searchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "rating_count": { + "example": 2600000, "type": "integer" }, - "data": { - "$ref": "#/definitions/instacart.SearchResponse" + "rating_value": { + "example": 8.8, + "type": "number" }, - "msg": { - "example": "OK", + "release_date": { + "example": "2010-07-16", "type": "string" - } - }, - "type": "object" - }, - "instacart.storesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "runtime_minutes": { + "example": 148, "type": "integer" }, - "data": { - "$ref": "#/definitions/instacart.StoreSearchResponse" + "title": { + "example": "Inception", + "type": "string" }, - "msg": { - "example": "OK", + "title_type": { + "example": "movie", + "type": "string" + }, + "url": { + "example": "https://www.imdb.com/title/tt1375666/", "type": "string" + }, + "year": { + "example": 2010, + "type": "integer" } }, "type": "object" }, - "instacart.trendingResponseDoc": { + "imdb.SearchTitleResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "limit": { + "example": 25, "type": "integer" }, - "data": { - "$ref": "#/definitions/instacart.TrendingResponse" + "results": { + "items": { + "$ref": "#/definitions/imdb.SearchTitleItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.imdb.com/search/title/?genres=Action&title_type=feature", "type": "string" + }, + "total": { + "example": 1968, + "type": "integer" } }, "type": "object" }, - "instagram.BusinessAddress": { + "imdb.SimilarResponse": { "properties": { - "city_name": { - "example": "Mountain View, California", + "fetched_at": { "type": "string" }, - "latitude": { - "example": 37.4221, - "type": "number" - }, - "longitude": { - "example": -122.08432, - "type": "number" + "id": { + "type": "string" }, - "street_address": { - "example": "1600 Amphitheatre Pkwy", + "source_url": { "type": "string" }, - "zip_code": { - "example": "94043", + "titles": { + "items": { + "$ref": "#/definitions/imdb.SimilarTitle" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "instagram.Caption": { + "imdb.SimilarTitle": { "properties": { - "text": { + "content_rating": { "type": "string" }, - "user": { - "$ref": "#/definitions/instagram.User" - } - }, - "type": "object" - }, - "instagram.ClipsMetadata": { - "properties": { - "audio_type": { + "id": { "type": "string" }, - "is_shared_to_fb": { - "type": "boolean" + "image_url": { + "type": "string" }, - "original_sound_info": { - "$ref": "#/definitions/instagram.OriginalSoundInfo" - } - }, - "type": "object" - }, - "instagram.IGArtist": { - "properties": { - "id": { + "rating_count": { + "type": "integer" + }, + "rating_value": { + "type": "number" + }, + "runtime_minutes": { + "type": "integer" + }, + "title": { "type": "string" }, - "username": { + "title_type": { "type": "string" + }, + "url": { + "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "instagram.IGCaption": { + "imdb.TechnicalSpecItem": { "properties": { - "created_at": { - "type": "integer" - }, - "pk": { + "name": { + "example": "Runtime", "type": "string" }, - "text": { + "slug": { + "example": "runtime", "type": "string" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "instagram.IGOwner": { + "imdb.TechnicalSpecsResponse": { "properties": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, "id": { + "example": "tt1375666", "type": "string" }, - "is_private": { + "public_page_derived": { + "example": true, "type": "boolean" }, - "pk": { + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/technical/", "type": "string" }, - "profile_pic_url": { - "type": "string" + "specs": { + "items": { + "$ref": "#/definitions/imdb.TechnicalSpecItem" + }, + "type": "array" }, - "username": { + "url": { + "example": "https://www.imdb.com/title/tt1375666/technical/", "type": "string" } }, "type": "object" }, - "instagram.IGUser": { + "imdb.TitleAwardsResponse": { "properties": { - "full_name": { - "type": "string" + "awards": { + "items": { + "$ref": "#/definitions/imdb.AwardItem" + }, + "type": "array" }, - "id": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "is_private": { + "has_more": { + "example": true, "type": "boolean" }, - "is_verified": { + "id": { + "example": "tt1375666", + "type": "string" + }, + "public_page_derived": { + "example": true, "type": "boolean" }, - "pk": { + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/awards/", "type": "string" }, - "profile_pic_url": { - "type": "string" + "total": { + "example": 64, + "type": "integer" }, - "username": { + "url": { + "example": "https://www.imdb.com/title/tt1375666/awards/", "type": "string" } }, "type": "object" }, - "instagram.ImageCandidate": { + "imdb.TitleBoxOfficeResponse": { "properties": { - "height": { - "type": "integer" + "fetched_at": { + "example": "2026-09-17T14:46:16Z", + "type": "string" }, - "url": { + "has_box_office": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "tt0111161", "type": "string" }, - "width": { - "type": "integer" - } - }, - "type": "object" - }, - "instagram.ImageVersions": { - "properties": { - "candidates": { - "items": { - "$ref": "#/definitions/instagram.ImageCandidate" - }, - "type": "array" + "lifetime_gross": { + "$ref": "#/definitions/imdb.LifetimeGross" + }, + "opening_weekend": { + "$ref": "#/definitions/imdb.OpeningWeekend" + }, + "production_budget": { + "$ref": "#/definitions/imdb.Money" + }, + "source_url": { + "example": "https://www.imdb.com/title/tt0111161/", + "type": "string" + }, + "title": { + "example": "The Shawshank Redemption", + "type": "string" + }, + "url": { + "example": "https://www.imdb.com/title/tt0111161/", + "type": "string" } }, "type": "object" }, - "instagram.ImageVersions2": { + "imdb.TitleConnectionsResponse": { "properties": { - "candidates": { + "connections": { "items": { - "$ref": "#/definitions/instagram.ImageCandidate" + "$ref": "#/definitions/imdb.ConnectionItem" }, "type": "array" - } - }, - "type": "object" - }, - "instagram.Item": { - "properties": { - "media": { - "$ref": "#/definitions/instagram.Media" - } - }, - "type": "object" - }, - "instagram.Media": { - "properties": { - "caption": { - "allOf": [ - { - "$ref": "#/definitions/instagram.Caption" - } - ], - "description": "pointer so it can be nil" }, - "code": { + "fetched_at": { + "example": "2026-09-17T14:46:16Z", "type": "string" }, - "comment_count": { - "type": "integer" - }, - "display_uri": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, "id": { + "example": "tt0111161", "type": "string" }, - "image_versions2": { - "$ref": "#/definitions/instagram.ImageVersions" - }, - "like_count": { + "limit": { + "example": 50, "type": "integer" }, - "media_type": { - "description": "1=Image 2=Video 8=Album", - "type": "integer" + "source_url": { + "example": "https://www.imdb.com/title/tt0111161/", + "type": "string" }, - "play_count": { - "type": "integer" + "title": { + "example": "The Shawshank Redemption", + "type": "string" }, - "taken_at": { + "total": { + "example": 999, "type": "integer" + }, + "url": { + "example": "https://www.imdb.com/title/tt0111161/", + "type": "string" } }, "type": "object" }, - "instagram.MediaItem": { + "imdb.TitleImagesResponse": { "properties": { - "accessibility_caption": { - "type": "string" - }, - "caption": { - "$ref": "#/definitions/instagram.IGCaption" - }, - "clips_metadata": { - "$ref": "#/definitions/instagram.ClipsMetadata" - }, - "code": { - "type": "string" - }, - "comment_count": { - "type": "integer" - }, - "display_uri": { + "fetched_at": { + "example": "2026-09-09T14:46:16Z", "type": "string" }, - "has_audio": { + "has_more": { + "example": false, "type": "boolean" }, "id": { + "example": "tt0089753", "type": "string" }, - "image_versions2": { - "$ref": "#/definitions/instagram.ImageVersions2" - }, - "like_count": { - "type": "integer" - }, - "link": { - "type": "string" - }, - "media_type": { - "type": "integer" - }, - "original_height": { - "type": "integer" + "images": { + "items": { + "$ref": "#/definitions/imdb.ImageItem" + }, + "type": "array" }, - "original_width": { + "limit": { + "example": 50, "type": "integer" }, - "owner": { - "$ref": "#/definitions/instagram.IGOwner" - }, - "pk": { + "source_url": { + "example": "https://www.imdb.com/title/tt0089753/mediaindex/", "type": "string" }, - "product_type": { + "title": { + "example": "Holly - The Movie", "type": "string" }, - "taken_at": { + "total": { + "example": 38, "type": "integer" }, - "user": { - "$ref": "#/definitions/instagram.IGUser" + "type_counts": { + "items": { + "$ref": "#/definitions/imdb.ImageTypeCount" + }, + "type": "array" }, - "video_versions": { + "types": { "items": { - "$ref": "#/definitions/instagram.VideoVersion" + "type": "string" }, "type": "array" }, - "view_count": { - "type": "integer" + "url": { + "example": "https://www.imdb.com/title/tt0089753/mediaindex/", + "type": "string" } }, "type": "object" }, - "instagram.OriginalSoundInfo": { + "imdb.TitlePublicFactsAnalysisResponse": { "properties": { - "audio_asset_id": { - "type": "string" + "company_credits": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" }, - "ig_artist": { - "$ref": "#/definitions/instagram.IGArtist" + "filming_locations": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" }, - "is_explicit": { - "type": "boolean" + "goofs": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" }, - "original_audio_title": { - "type": "string" + "keywords": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" }, - "should_mute_audio": { + "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" - } - }, - "type": "object" - }, - "instagram.PagingInfo": { - "properties": { - "max_id": { - "type": "string" }, - "more_available": { + "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" }, - "instagram.Post": { + "imdb.TitlePublicFactsResponse": { "properties": { - "caption": { - "example": "You popped the big question. For all the questions that follow, try AI Mode in Search.", - "type": "string" + "company_credits": { + "items": { + "$ref": "#/definitions/imdb.CompanySection" + }, + "type": "array" }, - "children": { - "description": "nested carousel media", + "facts": { "items": { - "$ref": "#/definitions/instagram.Post" + "$ref": "#/definitions/imdb.PublicFactItem" }, "type": "array" }, - "comment_count": { - "example": 43, - "type": "integer" + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" }, - "height": { - "example": 1000, - "type": "integer" + "has_more": { + "example": true, + "type": "boolean" }, "id": { - "example": "3694065742636342530", + "example": "tt1375666", "type": "string" }, - "is_video": { - "example": false, - "type": "boolean" + "keywords": { + "items": { + "$ref": "#/definitions/imdb.KeywordItem" + }, + "type": "array" }, - "like_count": { - "example": 1880, - "type": "integer" + "locations": { + "items": { + "$ref": "#/definitions/imdb.LocationItem" + }, + "type": "array" }, - "media_url": { - "example": "https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/…n.jpg", - "type": "string" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "product_type": { - "example": "", + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/trivia/", "type": "string" }, - "shortcode": { - "example": "DND9TiOx10C", - "type": "string" + "total": { + "example": 21, + "type": "integer" }, - "taken_at": { - "example": "2025-08-07T17:16:14Z", + "type": { + "example": "trivia", "type": "string" }, - "video_url": { - "example": "", + "url": { + "example": "https://www.imdb.com/title/tt1375666/trivia/", "type": "string" - }, - "view_count": { - "description": "counters become pointers so they vanish when nil", - "example": 25023, - "type": "integer" - }, - "width": { - "example": 750, - "type": "integer" } }, "type": "object" }, - "instagram.ReelResponse": { + "imdb.TitleResponse": { "properties": { - "items": { + "cast": { "items": { - "$ref": "#/definitions/instagram.Item" + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "paging_info": { - "$ref": "#/definitions/instagram.PagingInfo" - } - }, - "type": "object" - }, - "instagram.RelatedProfile": { - "properties": { - "full_name": { - "example": "Gmail", + "content_rating": { + "example": "PG-13", + "type": "string" + }, + "directors": { + "items": { + "$ref": "#/definitions/imdb.Person" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, + "genres": { + "example": [ + "Action" + ], + "items": { + "type": "string" + }, + "type": "array" + }, "id": { - "example": "1234567890", + "example": "tt1375666", "type": "string" }, - "is_private": { - "example": false, - "type": "boolean" + "image_url": { + "type": "string" }, - "is_verified": { + "plot": { + "type": "string" + }, + "popularity_rank": { + "example": 82, + "type": "integer" + }, + "public_page_derived": { "example": true, "type": "boolean" }, - "profile_pic_url": { - "example": "https://…/profile.jpg", + "rating_count": { + "example": 2600000, + "type": "integer" + }, + "rating_value": { + "example": 8.8, + "type": "number" + }, + "release_date": { + "example": "2010-07-16", "type": "string" }, - "username": { - "example": "gmail", + "runtime_minutes": { + "example": 148, + "type": "integer" + }, + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/", "type": "string" - } - }, - "type": "object" - }, - "instagram.User": { - "properties": { - "full_name": { + }, + "title": { + "example": "Inception", "type": "string" }, - "id": { + "title_type": { + "example": "Movie", "type": "string" }, - "username": { + "url": { + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" + }, + "year": { + "example": "2010", "type": "string" } }, "type": "object" }, - "instagram.UserProfile": { + "imdb.TitleVideosResponse": { "properties": { - "bio_links": { - "example": [ - "[\"https://linkin.bio/google\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "biography": { - "example": "Here to help.", - "type": "string" - }, - "category_name": { - "description": "not present in sample", - "example": "", + "fetched_at": { + "example": "2026-09-14T14:46:16Z", "type": "string" }, - "external_url": { - "example": "https://linkin.bio/google", - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "fbid": { - "example": "17841401778116675", + "id": { + "example": "tt1375666", "type": "string" }, - "followers_count": { - "example": 15607284, - "type": "integer" - }, - "following_count": { - "example": 38, + "limit": { + "example": 50, "type": "integer" }, - "full_name": { - "example": "Google", + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/videogallery/", "type": "string" }, - "id": { - "example": "1067259270", + "title": { + "example": "Inception", "type": "string" }, - "is_private": { - "example": false, - "type": "boolean" - }, - "is_verified": { - "example": true, - "type": "boolean" + "total": { + "example": 35, + "type": "integer" }, - "location": { - "$ref": "#/definitions/instagram.BusinessAddress" + "url": { + "example": "https://www.imdb.com/title/tt1375666/videogallery/", + "type": "string" }, - "posts": { + "videos": { "items": { - "$ref": "#/definitions/instagram.Post" + "$ref": "#/definitions/imdb.VideoItem" }, "type": "array" + } + }, + "type": "object" + }, + "imdb.VideoItem": { + "properties": { + "content_type": { + "example": "Trailer", + "type": "string" }, - "posts_count": { - "example": 2867, + "duration_seconds": { + "example": 105, "type": "integer" }, - "profile_pic_url": { - "example": "https://scontent-lax3-1.cdninstagram.com/v/t51.2885-19/…n.jpg", + "id": { + "example": "vi2959588889", "type": "string" }, - "related_profiles": { - "items": { - "$ref": "#/definitions/instagram.RelatedProfile" - }, - "type": "array" + "position": { + "example": 1, + "type": "integer" }, - "username": { - "example": "google", + "primary_title": { + "$ref": "#/definitions/imdb.VideoPrimaryTitle" + }, + "thumbnail": { + "$ref": "#/definitions/imdb.VideoThumbnail" + }, + "title": { + "example": "10th Anniversary Dream Trailer", "type": "string" } }, "type": "object" }, - "instagram.VideoVersion": { + "imdb.VideoPrimaryTitle": { "properties": { - "height": { - "type": "integer" + "id": { + "example": "tt1375666", + "type": "string" }, - "type": { + "title": { + "example": "Inception", + "type": "string" + }, + "url": { + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" + } + }, + "type": "object" + }, + "imdb.VideoThumbnail": { + "properties": { + "height": { + "example": 1071, "type": "integer" }, "url": { + "example": "https://m.media-amazon.com/images/M/MV5BMTQ1ZmIzOTAtNDcwZi00NDVkLWE4NWItYWNhZGY1MmVlZGU0XkEyXkFqcGdeQWRvb2xpbmhk._V1_.jpg", "type": "string" }, "width": { + "example": 1905, "type": "integer" } }, "type": "object" }, - "instagram.postResponseDoc": { + "imdb.chartsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instagram.MediaItem" + "$ref": "#/definitions/imdb.ChartResponse" }, "msg": { "example": "OK", @@ -85111,14 +87218,14 @@ }, "type": "object" }, - "instagram.profileResponseDoc": { + "imdb.creditsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instagram.UserProfile" + "$ref": "#/definitions/imdb.CreditsResponse" }, "msg": { "example": "OK", @@ -85127,14 +87234,14 @@ }, "type": "object" }, - "instagram.reelsResponseDoc": { + "imdb.episodesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instagram.ReelResponse" + "$ref": "#/definitions/imdb.EpisodesResponse" }, "msg": { "example": "OK", @@ -85143,892 +87250,969 @@ }, "type": "object" }, - "investopedia.AuthorInfoItem": { + "imdb.imageTypesResponseDoc": { "properties": { - "label": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.ImageTypesResponse" }, - "value": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "investopedia.AuthorResponse": { + "imdb.nameAwardsResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/investopedia.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "info": { - "items": { - "$ref": "#/definitions/investopedia.AuthorInfoItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "job_title": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.NameAwardsResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.nameCreditsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "quote": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.NameCreditsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "investopedia.HeadlineItem": { + "imdb.nameImagesResponseDoc": { "properties": { - "author": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.NameImagesResponse" }, - "published_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.nameResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "summary": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.NameResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.nameVideosResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "type": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.NameVideosResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "iol.AuthorArticle": { + "imdb.parentalGuideResponseDoc": { "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" + "code": { + "example": 200, + "type": "integer" }, - "section": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.ParentalGuideResponse" }, - "summary": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.ratingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.RatingsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "iol.AuthorResponse": { + "imdb.releaseInfoResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/iol.AuthorArticle" - }, - "type": "array" - }, - "image_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.ReleaseInfoResponse" }, - "role": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.reviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.ReviewsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "irishindependent.AuthorArticle": { + "imdb.searchResponseDoc": { "properties": { - "image_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "paywalled": { - "description": "Paywalled is true when the article is premium (subscriber) content.", - "type": "boolean" + "data": { + "$ref": "#/definitions/imdb.SearchResponse" }, - "published_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.searchTitleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "section": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.SearchTitleResponse" }, - "summary": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.similarResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.SimilarResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "irishindependent.AuthorResponse": { + "imdb.technicalSpecsResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/irishindependent.AuthorArticle" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "bio": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TechnicalSpecsResponse" }, - "email": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.titleAwardsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TitleAwardsResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.titleBoxOfficeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/imdb.TitleBoxOfficeResponse" }, - "title": { + "msg": { + "example": "OK", "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": "object" + }, + "imdb.titleConnectionsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/imdb.TitleConnectionsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "irishtimes.AuthorResponse": { + "imdb.titleImagesResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "email": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TitleImagesResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.titlePublicFactsAnalysisResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "job_title": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TitlePublicFactsAnalysisResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.titlePublicFactsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "twitter": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "jcrew.CategoriesResponse": { + "imdb.titleResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/jcrew.NavCategory" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "departments": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/imdb.TitleResponse" }, - "fetched_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.titleVideosResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "site": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TitleVideosResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "jcrew.CategoryProduct": { + "importyeti.Company": { "properties": { - "average_rating": { + "address": { + "example": "Minneapolis, Mn 55402, Us", + "type": "string" + }, + "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" }, - "badge": { + "avg_teu_per_shipment": { + "example": 7.19, + "type": "number" + }, + "est_shipping_spend": { + "example": "$27M", "type": "string" }, - "color_codes": { + "hs_codes": { "items": { - "type": "string" + "$ref": "#/definitions/importyeti.HSCode" }, "type": "array" }, - "currency": { + "last_shipment_date": { + "example": "07/16/2026", "type": "string" }, - "default_color_code": { + "name": { + "example": "Target 33 South 6Th Street Cc", "type": "string" }, - "discount_max_percent": { - "type": "integer" + "phone": { + "example": "XXX-XXX-X296", + "type": "string" }, - "discount_min_percent": { - "type": "integer" + "recent_shipments": { + "items": { + "$ref": "#/definitions/importyeti.Shipment" + }, + "type": "array" }, - "family_id": { - "type": "string" + "region_breakdown": { + "items": { + "$ref": "#/definitions/importyeti.RegionBreakdown" + }, + "type": "array" }, - "id": { + "slug": { + "example": "target-33-south-6th-street-cc", "type": "string" }, - "name": { + "source_url": { + "example": "https://www.importyeti.com/company/target", "type": "string" }, - "price": { - "type": "number" + "suppliers": { + "items": { + "$ref": "#/definitions/importyeti.Supplier" + }, + "type": "array" }, - "review_count": { + "total_shipments": { + "example": 9123, "type": "integer" }, "url": { + "example": "https://www.importyeti.com/company/target-33-south-6th-street-cc", + "type": "string" + }, + "website": { + "example": "www.target.com", "type": "string" } }, "type": "object" }, - "jcrew.CategoryResponse": { + "importyeti.CountryShipments": { "properties": { - "category": { + "country": { + "example": "China", "type": "string" }, - "count": { + "shipments": { + "example": 4267, "type": "integer" - }, - "fetched_at": { + } + }, + "type": "object" + }, + "importyeti.HSCode": { + "properties": { + "code": { + "example": "6404.19.9092", "type": "string" }, - "gender": { + "description": { + "example": "Valued over $12/pair", "type": "string" }, - "label": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/jcrew.CategoryProduct" - }, - "type": "array" - }, - "result_count": { - "type": "integer" - }, - "site": { + "product_description": { + "example": "Footwear Po- 1101064043 Hs Code-6404199092", "type": "string" }, - "source_url": { + "sample_bill_of_lading": { + "example": "APLU050437011", "type": "string" - }, - "total_pages": { - "description": "TotalPages is computed from ResultCount at the upstream's own fixed\n60-per-page size.", - "type": "integer" } }, "type": "object" }, - "jcrew.Facet": { + "importyeti.RegionBreakdown": { "properties": { - "is_range": { - "type": "boolean" - }, - "label": { - "type": "string" - }, - "name": { - "type": "string" - }, - "options": { + "countries": { "items": { - "$ref": "#/definitions/jcrew.FacetOption" + "$ref": "#/definitions/importyeti.CountryShipments" }, "type": "array" }, - "range_max": { - "type": "number" - }, - "range_min": { + "percent": { + "example": 80.3, "type": "number" }, - "type": { + "region": { + "example": "Asia", "type": "string" } }, "type": "object" }, - "jcrew.FacetOption": { + "importyeti.SearchResponse": { "properties": { - "count": { + "page": { + "example": 1, "type": "integer" }, - "label": { + "query": { + "example": "nike", "type": "string" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "jcrew.Hour": { - "properties": { - "open_intervals": { + "results": { "items": { - "$ref": "#/definitions/jcrew.TimeInterval" + "$ref": "#/definitions/importyeti.SearchResult" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_hits": { + "example": 135, + "type": "integer" + }, + "total_pages": { + "example": 14, + "type": "integer" } }, "type": "object" }, - "jcrew.NavCategory": { + "importyeti.SearchResult": { "properties": { - "category": { + "address": { + "example": "1 Bowerman Dr, Beaverton, Or 97005, Us", "type": "string" }, - "department": { + "country_code": { + "example": "US", "type": "string" }, - "label": { + "kind": { + "example": "company", "type": "string" }, - "section": { - "type": "string" - } - }, - "type": "object" - }, - "jcrew.ProductColor": { - "properties": { - "code": { + "most_recent_shipment": { + "example": "23/11/2024", "type": "string" }, - "image_url": { + "other_addresses_count": { + "example": 27, + "type": "integer" + }, + "other_names_count": { + "example": 17, + "type": "integer" + }, + "slug": { + "example": "nike", "type": "string" }, - "name": { + "title": { + "example": "Nike", "type": "string" + }, + "total_shipments": { + "example": 560, + "type": "integer" } }, "type": "object" }, - "jcrew.ProductDetailResponse": { + "importyeti.Shipment": { "properties": { - "average_rating": { - "type": "number" - }, - "brand": { + "bill_of_lading": { + "example": "MOSJMK0H2607003", "type": "string" }, - "category_id": { + "containers": { + "example": "1", "type": "string" }, - "colors": { - "items": { - "$ref": "#/definitions/jcrew.ProductColor" - }, - "type": "array" - }, - "currency": { + "date": { + "example": "07/16/2026", "type": "string" }, "description": { + "example": "Kart Chains", "type": "string" }, - "fetched_at": { + "estimated_freight_cost": { + "example": "$ 2,563.26", "type": "string" }, - "fit_description": { - "items": { - "type": "string" - }, - "type": "array" - }, - "gender": { + "quantity": { + "example": "2 ctn", "type": "string" }, - "list_price": { - "type": "number" - }, - "name": { + "route": { + "example": "Asia US Pacific", "type": "string" }, - "pid": { + "supplier_location": { + "example": "Kaga Shi, Japan", "type": "string" }, - "rating_count": { - "type": "integer" - }, - "site": { + "supplier_name": { + "example": "Enuma Chain Mfg Co Ltd", "type": "string" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "skus": { - "items": { - "$ref": "#/definitions/jcrew.ProductSKU" - }, - "type": "array" - }, - "source_url": { + "supplier_slug": { + "example": "enuma-chain-mfg", "type": "string" }, - "url": { + "weight": { + "example": "959 kg", "type": "string" } }, "type": "object" }, - "jcrew.ProductReviewsResponse": { + "importyeti.Supplier": { "properties": { - "average_rating": { - "type": "number" - }, - "count": { - "type": "integer" - }, - "fetched_at": { + "city": { + "example": "Maria Fe", "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "pid": { + "country": { + "example": "Philippines", "type": "string" }, - "rating_count": { - "type": "integer" + "description": { + "type": "string" }, - "rating_histogram": { - "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "hs_codes": { + "example": [ + "4602.19", + "8504.40" + ], "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "recommended_ratio": { - "type": "number" + "name": { + "example": "Durus Industries", + "type": "string" }, - "reviews": { + "product_categories": { + "example": [ + "Furnitures", + "Toys" + ], "items": { - "$ref": "#/definitions/jcrew.Review" + "type": "string" }, "type": "array" }, - "site": { - "type": "string" - }, - "source_url": { + "slug": { + "example": "durus-industries", "type": "string" }, - "total_pages": { - "type": "integer" - }, - "total_reviews": { + "total_shipments": { + "example": 308, "type": "integer" } }, "type": "object" }, - "jcrew.ProductSKU": { + "importyeti.companyResponseDoc": { "properties": { - "color_code": { - "type": "string" - }, - "color_name": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "orderable": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "price": { - "type": "number" + "data": { + "$ref": "#/definitions/importyeti.Company" }, - "size": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "jcrew.ProductSummary": { + "importyeti.searchResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "family_id": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "orderable": { - "type": "boolean" - }, - "price_max": { - "type": "number" - }, - "price_min": { - "type": "number" - }, - "sale_price_max": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "sale_price_min": { - "type": "number" + "data": { + "$ref": "#/definitions/importyeti.SearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "jcrew.Review": { + "indeed.Job": { "properties": { - "author": { - "type": "string" + "benefits": { + "items": { + "type": "string" + }, + "type": "array" }, - "body": { + "city": { + "example": "New York", "type": "string" }, - "created_at": { + "company": { + "example": "dv01", "type": "string" }, - "headline": { - "type": "string" + "company_rating": { + "example": 3.5, + "type": "number" }, - "helpful_votes": { + "company_review_count": { + "example": 20, "type": "integer" }, - "id": { + "company_url": { + "example": "https://www.indeed.com/cmp/Dv01", "type": "string" }, - "location": { + "country": { + "example": "US", "type": "string" }, - "not_helpful_votes": { - "type": "integer" - }, - "rating": { - "type": "integer" + "description_html": { + "type": "string" }, - "updated_at": { + "description_text": { "type": "string" }, - "verified_purchase": { + "direct_apply": { + "example": true, "type": "boolean" - } - }, - "type": "object" - }, - "jcrew.SearchResponse": { - "properties": { - "count": { - "type": "integer" }, - "facets": { + "employment_type": { "items": { - "$ref": "#/definitions/jcrew.Facet" + "type": "string" }, "type": "array" }, - "fetched_at": { + "job_key": { + "example": "a055dc6ab3a91a3b", "type": "string" }, - "filter": { + "location": { + "example": "New York, NY 10003", "type": "string" }, - "keyword": { + "postal_code": { + "example": "10003", "type": "string" }, - "page": { - "type": "integer" + "posted_at": { + "example": "2026-06-29T16:52:09Z", + "type": "string" }, - "per_page": { - "type": "integer" + "remote": { + "example": false, + "type": "boolean" }, - "products": { - "items": { - "$ref": "#/definitions/jcrew.ProductSummary" - }, - "type": "array" + "salary_currency": { + "example": "USD", + "type": "string" }, - "site": { + "salary_max": { + "example": 160000, + "type": "number" + }, + "salary_min": { + "example": 140000, + "type": "number" + }, + "salary_period": { + "example": "yearly", "type": "string" }, - "sort": { + "salary_text": { + "example": "$140,000 - $160,000 a year", "type": "string" }, - "source_url": { + "state": { + "example": "NY", "type": "string" }, - "total_pages": { - "type": "integer" + "title": { + "example": "Senior Backend Engineer", + "type": "string" }, - "total_products": { - "type": "integer" + "url": { + "example": "https://www.indeed.com/viewjob?jk=a055dc6ab3a91a3b", + "type": "string" + }, + "valid_through": { + "example": "2026-11-10T07:28:05Z", + "type": "string" } }, "type": "object" }, - "jcrew.SizeChartResponse": { + "indeed.JobCard": { "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" - }, - "fetched_at": { + "city": { + "example": "New York", "type": "string" }, - "pid": { + "company": { + "example": "dv01", "type": "string" }, - "site": { + "company_rating": { + "example": 3.6, + "type": "number" + }, + "company_review_count": { + "example": 20, + "type": "integer" + }, + "indeed_applyable": { + "example": true, + "type": "boolean" + }, + "job_key": { + "example": "a055dc6ab3a91a3b", "type": "string" }, - "sizes": { + "job_types": { "items": { - "$ref": "#/definitions/jcrew.SizeChartRow" + "type": "string" }, "type": "array" }, - "source_url": { + "location": { + "example": "New York, NY 10003", "type": "string" - } - }, - "type": "object" - }, - "jcrew.SizeChartRow": { - "properties": { - "imperial": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" }, - "metric": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "new_job": { + "example": false, + "type": "boolean" }, - "size": { - "type": "string" - } - }, - "type": "object" - }, - "jcrew.Store": { - "properties": { - "address": { + "postal_code": { + "example": "10003", "type": "string" }, - "city": { + "posted_at": { + "example": "2026-06-29T16:52:09Z", "type": "string" }, - "country": { + "posted_relative": { + "example": "13 days ago", "type": "string" }, - "distance_miles": { - "type": "number" - }, - "hours": { - "additionalProperties": { - "$ref": "#/definitions/jcrew.Hour" - }, - "type": "object" + "remote": { + "example": false, + "type": "boolean" }, - "id": { + "salary_currency": { + "example": "USD", "type": "string" }, - "latitude": { + "salary_max": { + "example": 160000, "type": "number" }, - "longitude": { + "salary_min": { + "example": 140000, "type": "number" }, - "name": { - "type": "string" - }, - "phone": { + "salary_period": { + "example": "yearly", "type": "string" }, - "postal_code": { + "salary_text": { + "example": "$140,000 - $160,000 a year", "type": "string" }, - "region": { + "snippet": { + "example": "Interact with a diverse team...", "type": "string" }, - "services": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "jcrew.StoreResponse": { - "properties": { - "count": { - "type": "integer" + "sponsored": { + "example": true, + "type": "boolean" }, - "fetched_at": { + "state": { + "example": "NY", "type": "string" }, - "site": { + "title": { + "example": "Senior Backend Engineer", "type": "string" }, - "source_url": { - "type": "string" + "urgently_hiring": { + "example": false, + "type": "boolean" }, - "stores": { - "items": { - "$ref": "#/definitions/jcrew.Store" - }, - "type": "array" + "url": { + "example": "https://www.indeed.com/viewjob?jk=a055dc6ab3a91a3b", + "type": "string" } }, "type": "object" }, - "jcrew.SuggestResponse": { + "indeed.LocationSuggestResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, "query": { - "type": "string" - }, - "site": { - "type": "string" - }, - "source_url": { + "example": "Austin", "type": "string" }, "suggestions": { "items": { - "$ref": "#/definitions/jcrew.Suggestion" + "$ref": "#/definitions/indeed.LocationSuggestion" }, "type": "array" } }, "type": "object" }, - "jcrew.Suggestion": { + "indeed.LocationSuggestion": { "properties": { - "query": { + "name": { + "example": "Austin, TX (Travis County)", "type": "string" }, - "total_results": { - "type": "integer" + "source": { + "example": "PRECISELY", + "type": "string" } }, "type": "object" }, - "jcrew.TimeInterval": { + "indeed.SearchResponse": { "properties": { - "end": { + "jobs": { + "items": { + "$ref": "#/definitions/indeed.JobCard" + }, + "type": "array" + }, + "location": { + "example": "New York, NY", "type": "string" }, - "start": { + "page": { + "example": 1, + "type": "integer" + }, + "query": { + "example": "software engineer", "type": "string" + }, + "total": { + "example": 3040, + "type": "integer" } }, "type": "object" }, - "jcrew.categoriesResponseDoc": { + "indeed.jobResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jcrew.CategoriesResponse" + "$ref": "#/definitions/indeed.Job" }, "msg": { "example": "OK", @@ -86037,14 +88221,14 @@ }, "type": "object" }, - "jcrew.categoryResponseDoc": { + "indeed.locationSuggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jcrew.CategoryResponse" + "$ref": "#/definitions/indeed.LocationSuggestResponse" }, "msg": { "example": "OK", @@ -86053,14 +88237,14 @@ }, "type": "object" }, - "jcrew.productResponseDoc": { + "indeed.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jcrew.ProductDetailResponse" + "$ref": "#/definitions/indeed.SearchResponse" }, "msg": { "example": "OK", @@ -86069,95 +88253,90 @@ }, "type": "object" }, - "jcrew.productReviewsResponseDoc": { + "independent.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "section": { + "type": "string" }, - "data": { - "$ref": "#/definitions/jcrew.ProductReviewsResponse" + "section_url": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "jcrew.searchResponseDoc": { + "independent.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/independent.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/jcrew.SearchResponse" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "jcrew.sizeChartResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.SizeChartResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "jcrew.storesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.StoreResponse" + "twitter": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "jcrew.suggestResponseDoc": { + "indianexpress.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "image_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/jcrew.SuggestResponse" + "published_at": { + "type": "string" }, - "msg": { - "example": "OK", + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "jerusalempost.AuthorArticle": { + "indianexpress.AuthorResponse": { "properties": { - "published_at": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/indianexpress.AuthorArticle" + }, + "type": "array" }, - "summary": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { "type": "string" }, - "title": { + "name": { "type": "string" }, "url": { @@ -86166,12 +88345,18 @@ }, "type": "object" }, - "jerusalempost.AuthorRef": { + "indiatoday.AuthorArticle": { "properties": { - "slug": { + "image_url": { "type": "string" }, - "type": { + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { "type": "string" }, "url": { @@ -86180,16 +88365,19 @@ }, "type": "object" }, - "jerusalempost.AuthorResponse": { + "indiatoday.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/jerusalempost.AuthorArticle" + "$ref": "#/definitions/indiatoday.AuthorArticle" }, "type": "array" }, - "description": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, "image_url": { "type": "string" @@ -86197,7 +88385,7 @@ "name": { "type": "string" }, - "type": { + "title": { "type": "string" }, "url": { @@ -86206,779 +88394,1030 @@ }, "type": "object" }, - "jerusalempost.AuthorsResponse": { + "indiewire.AuthorArticle": { "properties": { - "authors": { - "items": { - "$ref": "#/definitions/jerusalempost.AuthorRef" - }, - "type": "array" + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "jimmyjohns.MenuCategory": { + "indiewire.AuthorResponse": { "properties": { - "category_id": { - "example": 69933, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/indiewire.AuthorArticle" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_next_page": { + "type": "boolean" + }, + "headshot_url": { + "type": "string" }, "name": { - "example": "Originals", "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/jimmyjohns.MenuProduct" + "page": { + "type": "integer" + }, + "social_links": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "type": "object" + }, + "url": { + "type": "string" } }, "type": "object" }, - "jimmyjohns.MenuProduct": { + "inews.AuthorArticle": { "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", + "image_url": { "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" - }, - "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" - }, - "description": { - "example": "HAM, PROVOLONE, lettuce, tomato & mayo", + "published_at": { "type": "string" }, - "image_url": { + "section": { "type": "string" }, - "max_calories": { - "example": "650", + "summary": { "type": "string" }, - "name": { - "example": "#1 The Pepe®", + "title": { "type": "string" }, - "product_id": { - "example": 33276056, - "type": "integer" - }, - "short_description": { + "url": { "type": "string" } }, "type": "object" }, - "jimmyjohns.MenuResponse": { + "inews.AuthorResponse": { "properties": { - "categories": { + "articles": { "items": { - "$ref": "#/definitions/jimmyjohns.MenuCategory" + "$ref": "#/definitions/inews.AuthorArticle" }, "type": "array" }, - "category_count": { - "example": 20, - "type": "integer" + "bio": { + "type": "string" }, - "fetched_at": { + "image_url": { "type": "string" }, - "product_count": { - "example": 180, - "type": "integer" + "name": { + "type": "string" }, - "restaurant_id": { - "example": 67182, - "type": "integer" + "same_as": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "jimmyjohns.ModifierChoice": { + "inquirer.AuthorArticle": { "properties": { - "base_calories": { - "description": "BaseCalories is this choice's calorie delta, which can be negative\nfor a \"light\"/\"no\" ingredient choice.", - "example": "70", + "category": { "type": "string" }, - "chain_option_id": { - "example": 2476875, - "type": "integer" - }, - "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" - }, - "groups": { - "items": { - "$ref": "#/definitions/jimmyjohns.ModifierGroup" - }, - "type": "array" - }, - "is_default": { - "type": "boolean" - }, - "max_calories": { + "published_at": { "type": "string" }, - "name": { - "example": "REGULAR", + "title": { "type": "string" }, - "option_id": { - "example": 5265915696, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "jimmyjohns.ModifierGroup": { + "inquirer.AuthorResponse": { "properties": { - "chain_modifier_id": { - "example": 480998, - "type": "integer" - }, - "choices": { + "articles": { "items": { - "$ref": "#/definitions/jimmyjohns.ModifierChoice" + "$ref": "#/definitions/inquirer.AuthorArticle" }, "type": "array" }, - "group_id": { - "example": 1176354037, - "type": "integer" - }, - "mandatory": { - "type": "boolean" - }, - "max_selects": { - "type": "integer" + "name": { + "type": "string" }, - "min_selects": { + "page": { "type": "integer" }, - "name": { - "example": "Choose Your Size", + "url": { "type": "string" } }, "type": "object" }, - "jimmyjohns.ModifiersResponse": { + "instacart.Department": { "properties": { - "fetched_at": { + "id": { "type": "string" }, - "group_count": { - "example": 9, - "type": "integer" + "name": { + "type": "string" }, - "groups": { + "slug": { + "type": "string" + }, + "subcategories": { "items": { - "$ref": "#/definitions/jimmyjohns.ModifierGroup" + "$ref": "#/definitions/instacart.Subcategory" }, "type": "array" - }, - "product_id": { - "example": 33276056, - "type": "integer" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "jimmyjohns.NearbyResponse": { + "instacart.DepartmentsResponse": { "properties": { - "count": { - "example": 10, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "radius_miles": { - "example": 15, - "type": "integer" - }, - "restaurants": { + "departments": { "items": { - "$ref": "#/definitions/jimmyjohns.NearbyRestaurant" + "$ref": "#/definitions/instacart.Department" }, "type": "array" }, - "source_url": { + "shop_id": { "type": "string" } }, "type": "object" }, - "jimmyjohns.NearbyRestaurant": { + "instacart.ItemNutrition": { "properties": { - "accepts_delivery": { - "type": "boolean" - }, - "accepts_pickup": { - "type": "boolean" + "label": { + "type": "string" }, - "address": { - "$ref": "#/definitions/jimmyjohns.StoreAddress" + "unit": { + "type": "string" }, - "distance_miles": { - "example": 0.4, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "instacart.ItemPrice": { + "properties": { + "current_price": { "type": "number" }, - "is_open": { + "offer_label": { + "type": "string" + }, + "on_sale": { "type": "boolean" }, - "latitude": { - "example": 44.9401301, - "type": "number" + "pricing_unit": { + "type": "string" }, - "longitude": { - "example": -93.1411487, + "regular_price": { "type": "number" + } + }, + "type": "object" + }, + "instacart.ItemResponse": { + "properties": { + "available": { + "type": "boolean" }, - "name": { - "example": "JJ0004", - "type": "string" - }, - "order_url": { - "example": "https://online.jimmyjohns.com/menu/jj0004/", + "brand_name": { "type": "string" }, - "phone_number": { - "example": "(651) 222-2221", + "dietary_labels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { "type": "string" }, - "restaurant_id": { - "example": 67182, - "type": "integer" + "image_url": { + "type": "string" }, - "slug": { - "example": "jj0004", + "name": { "type": "string" }, - "timezone": { - "example": "America/Chicago", + "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" }, - "jimmyjohns.SitemapEntry": { + "instacart.SearchNearbyResponse": { "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", - "type": "string" - }, - "path": { - "example": "in/columbus/sandwiches-1414.html", + "postal_code": { "type": "string" }, - "store_number": { - "description": "StoreNumber is the trailing id shared by all three variants.", - "example": "1414", + "query": { "type": "string" }, - "url": { - "type": "string" + "suggestions": { + "items": { + "$ref": "#/definitions/instacart.SearchSuggestion" + }, + "type": "array" } }, "type": "object" }, - "jimmyjohns.SitemapResponse": { + "instacart.SearchResponse": { "properties": { - "count": { - "example": 100, - "type": "integer" + "query": { + "type": "string" }, - "entries": { + "shop_id": { + "type": "string" + }, + "suggestions": { "items": { - "$ref": "#/definitions/jimmyjohns.SitemapEntry" + "$ref": "#/definitions/instacart.SearchSuggestion" }, "type": "array" - }, - "fetched_at": { + } + }, + "type": "object" + }, + "instacart.SearchSuggestion": { + "properties": { + "relative_url": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "shard": { - "example": 0, - "type": "integer" - }, - "shard_count": { - "example": 1, - "type": "integer" - }, - "source_url": { + "term": { "type": "string" }, - "total_in_shard": { - "example": 9789, - "type": "integer" - }, - "total_pages": { - "example": 98, - "type": "integer" + "thumbnail_url": { + "type": "string" } }, "type": "object" }, - "jimmyjohns.StoreAddress": { + "instacart.Store": { "properties": { - "city": { - "example": "Columbus", + "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" }, - "country": { - "example": "US", + "logo_url": { "type": "string" }, - "postal_code": { - "example": "47201", + "name": { "type": "string" }, - "region": { - "example": "IN", + "retailer_id": { "type": "string" }, - "street": { - "example": "2115 W Jonathan Moore Pike", + "retailer_location_id": { "type": "string" - } - }, - "type": "object" - }, - "jimmyjohns.StoreHours": { - "properties": { - "closes": { - "example": "22:00", + }, + "retailer_type": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "saver_store": { + "type": "boolean" + }, + "service_type": { "type": "string" }, - "opens": { - "example": "10:30", + "shop_id": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "jimmyjohns.StoreResponse": { + "instacart.StoreSearchResponse": { "properties": { - "address": { - "$ref": "#/definitions/jimmyjohns.StoreAddress" - }, - "fetched_at": { + "postal_code": { "type": "string" }, - "hours": { + "stores": { "items": { - "$ref": "#/definitions/jimmyjohns.StoreHours" + "$ref": "#/definitions/instacart.Store" }, "type": "array" - }, - "image_url": { + } + }, + "type": "object" + }, + "instacart.Subcategory": { + "properties": { + "id": { "type": "string" }, - "latitude": { - "example": 39.1994347, - "type": "number" - }, - "longitude": { - "example": -85.9470667, - "type": "number" - }, "name": { - "example": "Jimmy John's", "type": "string" }, - "path": { + "slug": { "type": "string" - }, - "phone_number": { + } + }, + "type": "object" + }, + "instacart.TrendingResponse": { + "properties": { + "postal_code": { "type": "string" }, - "serves_cuisine": { - "type": "string" + "terms": { + "items": { + "$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" }, - "jimmyjohns.menuResponseDoc": { + "instacart.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", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jimmyjohns.MenuResponse" + "$ref": "#/definitions/instacart.ItemResponse" }, "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": { + "instacart.searchNearbyResponseDoc": { "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/instacart.SearchNearbyResponse" }, "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": { + "instacart.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/jimmyjohns.NearbyResponse" + "$ref": "#/definitions/instacart.SearchResponse" }, "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": { + "instacart.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/jimmyjohns.SitemapResponse" + "$ref": "#/definitions/instacart.StoreSearchResponse" }, "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": { + "instacart.trendingResponseDoc": { "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/instacart.TrendingResponse" }, "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": { + "instagram.BusinessAddress": { "properties": { - "company": { + "city_name": { + "example": "Mountain View, California", "type": "string" }, - "count": { - "type": "integer" + "latitude": { + "example": 37.4221, + "type": "number" }, - "jobs": { - "items": { - "$ref": "#/definitions/jobs.Job" - }, - "type": "array" + "longitude": { + "example": -122.08432, + "type": "number" }, - "provider": { + "street_address": { + "example": "1600 Amphitheatre Pkwy", "type": "string" }, - "source_url": { + "zip_code": { + "example": "94043", + "type": "string" + } + }, + "type": "object" + }, + "instagram.Caption": { + "properties": { + "text": { "type": "string" }, - "total": { - "type": "integer" + "user": { + "$ref": "#/definitions/instagram.User" } }, "type": "object" }, - "jobs.CompanySearchResponse": { + "instagram.ClipsMetadata": { "properties": { - "count": { - "type": "integer" + "audio_type": { + "type": "string" }, - "found": { - "items": { - "$ref": "#/definitions/jobs.ProviderHit" - }, - "type": "array" + "is_shared_to_fb": { + "type": "boolean" }, - "slug": { + "original_sound_info": { + "$ref": "#/definitions/instagram.OriginalSoundInfo" + } + }, + "type": "object" + }, + "instagram.IGArtist": { + "properties": { + "id": { + "type": "string" + }, + "username": { "type": "string" } }, "type": "object" }, - "jobs.Count": { + "instagram.IGCaption": { "properties": { - "count": { + "created_at": { "type": "integer" }, - "name": { + "pk": { + "type": "string" + }, + "text": { "type": "string" } }, "type": "object" }, - "jobs.HiringSignals": { + "instagram.IGOwner": { "properties": { - "as_of": { + "id": { "type": "string" }, - "by_department": { - "items": { - "$ref": "#/definitions/jobs.Count" - }, - "type": "array" - }, - "by_location": { - "items": { - "$ref": "#/definitions/jobs.Count" - }, - "type": "array" + "is_private": { + "type": "boolean" }, - "company": { + "pk": { "type": "string" }, - "new_last_30d": { - "type": "integer" + "profile_pic_url": { + "type": "string" }, - "new_last_7d": { - "type": "integer" + "username": { + "type": "string" + } + }, + "type": "object" + }, + "instagram.IGUser": { + "properties": { + "full_name": { + "type": "string" }, - "provider": { + "id": { "type": "string" }, - "remote_count": { - "type": "integer" + "is_private": { + "type": "boolean" }, - "remote_pct": { - "type": "number" + "is_verified": { + "type": "boolean" }, - "sampled_roles": { + "pk": { + "type": "string" + }, + "profile_pic_url": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "instagram.ImageCandidate": { + "properties": { + "height": { "type": "integer" }, - "source_url": { + "url": { "type": "string" }, - "top_titles": { + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "instagram.ImageVersions": { + "properties": { + "candidates": { "items": { - "$ref": "#/definitions/jobs.Count" + "$ref": "#/definitions/instagram.ImageCandidate" }, "type": "array" - }, - "total_open_roles": { - "type": "integer" } }, "type": "object" }, - "jobs.Job": { + "instagram.ImageVersions2": { "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\".", + "candidates": { "items": { - "type": "string" + "$ref": "#/definitions/instagram.ImageCandidate" }, "type": "array" + } + }, + "type": "object" + }, + "instagram.Item": { + "properties": { + "media": { + "$ref": "#/definitions/instagram.Media" + } + }, + "type": "object" + }, + "instagram.Media": { + "properties": { + "caption": { + "allOf": [ + { + "$ref": "#/definitions/instagram.Caption" + } + ], + "description": "pointer so it can be nil" }, - "apply_url": { + "code": { "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" + "comment_count": { + "type": "integer" }, - "company": { + "display_uri": { "type": "string" }, - "company_logo_url": { + "id": { "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).", + "image_versions2": { + "$ref": "#/definitions/instagram.ImageVersions" + }, + "like_count": { + "type": "integer" + }, + "media_type": { + "description": "1=Image 2=Video 8=Album", + "type": "integer" + }, + "play_count": { + "type": "integer" + }, + "taken_at": { + "type": "integer" + } + }, + "type": "object" + }, + "instagram.MediaItem": { + "properties": { + "accessibility_caption": { "type": "string" }, - "compensation_currency": { + "caption": { + "$ref": "#/definitions/instagram.IGCaption" + }, + "clips_metadata": { + "$ref": "#/definitions/instagram.ClipsMetadata" + }, + "code": { "type": "string" }, - "compensation_max": { - "type": "number" + "comment_count": { + "type": "integer" }, - "compensation_min": { - "type": "number" + "display_uri": { + "type": "string" }, - "compensation_period": { + "has_audio": { + "type": "boolean" + }, + "id": { "type": "string" }, - "department": { + "image_versions2": { + "$ref": "#/definitions/instagram.ImageVersions2" + }, + "like_count": { + "type": "integer" + }, + "link": { "type": "string" }, - "description_html": { + "media_type": { + "type": "integer" + }, + "original_height": { + "type": "integer" + }, + "original_width": { + "type": "integer" + }, + "owner": { + "$ref": "#/definitions/instagram.IGOwner" + }, + "pk": { "type": "string" }, - "description_text": { + "product_type": { "type": "string" }, - "education_level_required": { + "taken_at": { + "type": "integer" + }, + "user": { + "$ref": "#/definitions/instagram.IGUser" + }, + "video_versions": { "items": { - "type": "string" + "$ref": "#/definitions/instagram.VideoVersion" }, "type": "array" }, - "employment_type": { + "view_count": { + "type": "integer" + } + }, + "type": "object" + }, + "instagram.OriginalSoundInfo": { + "properties": { + "audio_asset_id": { "type": "string" }, - "id": { - "type": "string" + "ig_artist": { + "$ref": "#/definitions/instagram.IGArtist" }, - "location": { - "type": "string" + "is_explicit": { + "type": "boolean" }, - "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.", + "original_audio_title": { "type": "string" }, - "location_country": { + "should_mute_audio": { + "type": "boolean" + } + }, + "type": "object" + }, + "instagram.PagingInfo": { + "properties": { + "max_id": { "type": "string" }, - "location_state": { + "more_available": { + "type": "boolean" + } + }, + "type": "object" + }, + "instagram.Post": { + "properties": { + "caption": { + "example": "You popped the big question. For all the questions that follow, try AI Mode in Search.", "type": "string" }, - "locations": { + "children": { + "description": "nested carousel media", "items": { - "type": "string" + "$ref": "#/definitions/instagram.Post" }, "type": "array" }, - "posted_age_text": { - "description": "Workday relative age (\"Posted Today\")", + "comment_count": { + "example": 43, + "type": "integer" + }, + "height": { + "example": 1000, + "type": "integer" + }, + "id": { + "example": "3694065742636342530", "type": "string" }, - "posted_at": { - "description": "RFC3339 / date when the provider gives one", + "is_video": { + "example": false, + "type": "boolean" + }, + "like_count": { + "example": 1880, + "type": "integer" + }, + "media_url": { + "example": "https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/…n.jpg", "type": "string" }, - "provider": { + "product_type": { + "example": "", "type": "string" }, - "remote": { - "type": "boolean" + "shortcode": { + "example": "DND9TiOx10C", + "type": "string" }, - "req_id": { + "taken_at": { + "example": "2025-08-07T17:16:14Z", "type": "string" }, - "security_clearance_required": { - "items": { - "type": "string" - }, - "type": "array" + "video_url": { + "example": "", + "type": "string" }, - "skills_mentioned": { - "description": "Skills lists canonical ESCO skill labels mentioned in the job title or\ndescription.", + "view_count": { + "description": "counters become pointers so they vanish when nil", + "example": 25023, + "type": "integer" + }, + "width": { + "example": 750, + "type": "integer" + } + }, + "type": "object" + }, + "instagram.ReelResponse": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/instagram.Item" }, "type": "array" }, - "team": { + "paging_info": { + "$ref": "#/definitions/instagram.PagingInfo" + } + }, + "type": "object" + }, + "instagram.RelatedProfile": { + "properties": { + "full_name": { + "example": "Gmail", "type": "string" }, - "title": { + "id": { + "example": "1234567890", "type": "string" }, - "url": { + "is_private": { + "example": false, + "type": "boolean" + }, + "is_verified": { + "example": true, + "type": "boolean" + }, + "profile_pic_url": { + "example": "https://…/profile.jpg", "type": "string" }, - "workplace_type": { + "username": { + "example": "gmail", "type": "string" } }, "type": "object" }, - "jobs.ProviderHit": { + "instagram.User": { "properties": { - "board_url": { + "full_name": { "type": "string" }, - "company": { + "id": { "type": "string" }, - "provider": { + "username": { + "type": "string" + } + }, + "type": "object" + }, + "instagram.UserProfile": { + "properties": { + "bio_links": { + "example": [ + "[\"https://linkin.bio/google\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "biography": { + "example": "Here to help.", "type": "string" }, - "total_open_roles": { + "category_name": { + "description": "not present in sample", + "example": "", + "type": "string" + }, + "external_url": { + "example": "https://linkin.bio/google", + "type": "string" + }, + "fbid": { + "example": "17841401778116675", + "type": "string" + }, + "followers_count": { + "example": 15607284, "type": "integer" + }, + "following_count": { + "example": 38, + "type": "integer" + }, + "full_name": { + "example": "Google", + "type": "string" + }, + "id": { + "example": "1067259270", + "type": "string" + }, + "is_private": { + "example": false, + "type": "boolean" + }, + "is_verified": { + "example": true, + "type": "boolean" + }, + "location": { + "$ref": "#/definitions/instagram.BusinessAddress" + }, + "posts": { + "items": { + "$ref": "#/definitions/instagram.Post" + }, + "type": "array" + }, + "posts_count": { + "example": 2867, + "type": "integer" + }, + "profile_pic_url": { + "example": "https://scontent-lax3-1.cdninstagram.com/v/t51.2885-19/…n.jpg", + "type": "string" + }, + "related_profiles": { + "items": { + "$ref": "#/definitions/instagram.RelatedProfile" + }, + "type": "array" + }, + "username": { + "example": "google", + "type": "string" } }, "type": "object" }, - "jobs.boardResponseDoc": { + "instagram.VideoVersion": { "properties": { - "code": { - "example": 200, + "height": { "type": "integer" }, - "data": { - "$ref": "#/definitions/jobs.BoardResponse" + "type": { + "type": "integer" }, - "msg": { - "example": "OK", + "url": { "type": "string" + }, + "width": { + "type": "integer" } }, "type": "object" }, - "jobs.jobResponseDoc": { + "instagram.postResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jobs.Job" + "$ref": "#/definitions/instagram.MediaItem" }, "msg": { "example": "OK", @@ -86987,14 +89426,14 @@ }, "type": "object" }, - "jobs.searchResponseDoc": { + "instagram.profileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jobs.CompanySearchResponse" + "$ref": "#/definitions/instagram.UserProfile" }, "msg": { "example": "OK", @@ -87003,14 +89442,14 @@ }, "type": "object" }, - "jobs.signalsResponseDoc": { + "instagram.reelsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jobs.HiringSignals" + "$ref": "#/definitions/instagram.ReelResponse" }, "msg": { "example": "OK", @@ -87019,743 +89458,515 @@ }, "type": "object" }, - "justeat.FilterOption": { + "investopedia.AuthorInfoItem": { "properties": { - "count": { - "type": "integer" + "label": { + "type": "string" }, - "filter": { + "url": { + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "justeat.FiltersResponse": { + "investopedia.AuthorResponse": { "properties": { - "filters": { + "articles": { "items": { - "$ref": "#/definitions/justeat.FilterOption" + "$ref": "#/definitions/investopedia.HeadlineItem" }, "type": "array" }, - "postcode": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { "type": "string" }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "justeat.MenuCategory": { - "properties": { - "id": { + "image_url": { "type": "string" }, - "items": { + "info": { "items": { - "$ref": "#/definitions/justeat.MenuItem" + "$ref": "#/definitions/investopedia.AuthorInfoItem" }, "type": "array" }, + "job_title": { + "type": "string" + }, "name": { "type": "string" + }, + "quote": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "justeat.MenuItem": { + "investopedia.HeadlineItem": { "properties": { - "description": { + "author": { "type": "string" }, - "energy_display": { + "image_url": { "type": "string" }, - "id": { + "published_at": { "type": "string" }, - "image_url": { + "summary": { "type": "string" }, - "modifier_groups": { - "items": { - "$ref": "#/definitions/justeat.ModifierGroup" - }, - "type": "array" + "title": { + "type": "string" }, - "name": { + "type": { "type": "string" }, - "price": { - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "justeat.MenuResponse": { + "iol.AuthorArticle": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/justeat.MenuCategory" - }, - "type": "array" - }, - "currency_code": { + "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" }, - "item_count": { - "type": "integer" + "section": { + "type": "string" }, - "name": { + "summary": { "type": "string" }, - "restaurant_id": { + "title": { "type": "string" }, - "unique_name": { + "url": { "type": "string" } }, "type": "object" }, - "justeat.ModifierGroup": { + "iol.AuthorResponse": { "properties": { - "id": { + "articles": { + "items": { + "$ref": "#/definitions/iol.AuthorArticle" + }, + "type": "array" + }, + "image_url": { "type": "string" }, - "max_choices": { - "type": "integer" + "name": { + "type": "string" }, - "min_choices": { - "type": "integer" + "role": { + "type": "string" }, - "name": { + "slug": { "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/justeat.ModifierOption" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "justeat.ModifierOption": { + "irishindependent.AuthorArticle": { "properties": { - "addition_price": { - "type": "number" + "image_url": { + "type": "string" }, - "energy_display": { + "paywalled": { + "description": "Paywalled is true when the article is premium (subscriber) content.", + "type": "boolean" + }, + "published_at": { "type": "string" }, - "id": { + "section": { "type": "string" }, - "name": { + "summary": { "type": "string" }, - "remove_price": { - "type": "number" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "justeat.RestaurantResponse": { + "irishindependent.AuthorResponse": { "properties": { - "address": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/irishindependent.AuthorArticle" + }, + "type": "array" }, - "city": { + "bio": { "type": "string" }, - "country": { + "email": { "type": "string" }, "image_url": { "type": "string" }, - "is_active": { - "type": "boolean" - }, "name": { "type": "string" }, - "postal_code": { - "type": "string" + "same_as": { + "items": { + "type": "string" + }, + "type": "array" }, - "primary_cuisine": { + "title": { "type": "string" }, - "rating": { - "type": "number" - }, - "rating_count": { + "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" }, - "restaurant_id": { - "type": "string" - }, - "unique_name": { + "url": { "type": "string" } }, "type": "object" }, - "justeat.SearchResponse": { + "irishtimes.AuthorResponse": { "properties": { - "restaurants": { + "articles": { "items": { - "$ref": "#/definitions/justeat.SearchRestaurant" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "justeat.SearchRestaurant": { - "properties": { - "city": { - "type": "string" - }, - "delivery_eta_max_minutes": { - "type": "integer" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "delivery_eta_min_minutes": { - "type": "integer" + "email": { + "type": "string" }, "image_url": { "type": "string" }, - "is_open_now": { - "type": "boolean" - }, - "name": { + "job_title": { "type": "string" }, - "postal_code": { + "name": { "type": "string" }, - "rating": { - "type": "number" - }, - "rating_count": { - "type": "integer" - }, - "restaurant_id": { + "twitter": { "type": "string" }, - "unique_name": { + "url": { "type": "string" } }, "type": "object" }, - "justeat.filtersResponseDoc": { + "japantimes.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/newsplatform.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/justeat.FiltersResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "url": { + "type": "string" } }, "type": "object" }, - "justeat.menuResponseDoc": { + "jcrew.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/justeat.MenuResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "justeat.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.RestaurantResponse" - }, - "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" - }, - "data": { - "$ref": "#/definitions/justeat.SearchResponse" + "categories": { + "items": { + "$ref": "#/definitions/jcrew.NavCategory" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "justwatch.AgeCertification": { - "properties": { - "technical_name": { - "example": "PG-13", - "type": "string" - } - }, - "type": "object" - }, - "justwatch.AgeCertificationsResponse": { - "properties": { - "age_certifications": { + "departments": { "items": { - "$ref": "#/definitions/justwatch.AgeCertification" + "type": "string" }, "type": "array" }, - "country": { - "example": "US", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.AnalysisResponse": { - "properties": { - "summary": { - "$ref": "#/definitions/justwatch.AnalysisSummary" }, - "title": { - "$ref": "#/definitions/justwatch.TitleResponse" + "site": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "justwatch.AnalysisSummary": { + "jcrew.CategoryProduct": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "best_buy": { - "$ref": "#/definitions/justwatch.Offer" - }, - "best_free": { - "$ref": "#/definitions/justwatch.Offer" - }, - "best_rent": { - "$ref": "#/definitions/justwatch.Offer" + "average_rating": { + "type": "number" }, - "best_subscription": { - "$ref": "#/definitions/justwatch.Offer" + "badge": { + "type": "string" }, - "format_counts": { - "additionalProperties": { - "type": "integer" + "color_codes": { + "items": { + "type": "string" }, - "type": "object" + "type": "array" }, - "monetization_counts": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" + "currency": { + "type": "string" }, - "price_ranges": { - "additionalProperties": { - "$ref": "#/definitions/justwatch.PriceRange" - }, - "type": "object" + "default_color_code": { + "type": "string" }, - "provider_count": { - "example": 6, + "discount_max_percent": { "type": "integer" }, - "total_offers": { - "example": 15, + "discount_min_percent": { "type": "integer" - } - }, - "type": "object" - }, - "justwatch.Backdrop": { - "properties": { - "url": { - "example": "https://images.justwatch.com/backdrop/8735151/s1920/inception.jpg", - "type": "string" - } - }, - "type": "object" - }, - "justwatch.Clip": { - "properties": { - "external_id": { - "example": "8hP9D6kZseM", - "type": "string" }, - "provider": { - "example": "YOUTUBE", + "family_id": { "type": "string" }, - "url": { - "example": "https://www.youtube.com/watch?v=8hP9D6kZseM", - "type": "string" - } - }, - "type": "object" - }, - "justwatch.Credit": { - "properties": { - "character_name": { - "example": "Dom Cobb", + "id": { "type": "string" }, "name": { - "example": "Leonardo DiCaprio", "type": "string" }, - "person_id": { - "example": 1641, + "price": { + "type": "number" + }, + "review_count": { "type": "integer" }, - "role": { - "example": "ACTOR", + "url": { "type": "string" } }, "type": "object" }, - "justwatch.DiscoverResponse": { + "jcrew.CategoryResponse": { "properties": { - "country": { - "example": "US", + "category": { "type": "string" }, - "genres": { - "example": [ - "act" - ], - "items": { - "type": "string" - }, - "type": "array" + "count": { + "type": "integer" }, - "language": { - "example": "en", + "fetched_at": { "type": "string" }, - "monetization_types": { - "example": [ - "FLATRATE" - ], - "items": { - "type": "string" - }, - "type": "array" + "gender": { + "type": "string" }, - "production_countries": { - "example": [ - "KR" - ], - "items": { - "type": "string" - }, - "type": "array" + "label": { + "type": "string" }, - "providers": { - "example": [ - "nfx" - ], - "items": { - "type": "string" - }, - "type": "array" + "page": { + "type": "integer" }, - "results": { + "products": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "$ref": "#/definitions/jcrew.CategoryProduct" }, "type": "array" }, - "type": { - "example": "all", - "type": "string" - }, - "year_max": { - "example": 2026, + "result_count": { "type": "integer" }, - "year_min": { - "example": 2020, - "type": "integer" - } - }, - "type": "object" - }, - "justwatch.EpisodeByIDResponse": { - "properties": { - "country": { - "example": "US", + "site": { "type": "string" }, - "episode": { - "$ref": "#/definitions/justwatch.EpisodeSummary" - }, - "language": { - "example": "en", + "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" }, - "justwatch.EpisodeCountryOffers": { + "jcrew.Facet": { "properties": { - "country": { - "example": "US", + "is_range": { + "type": "boolean" + }, + "label": { "type": "string" }, - "episode": { - "$ref": "#/definitions/justwatch.EpisodeSummary" + "name": { + "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/justwatch.Offer" - }, - "type": "array" - } - }, - "type": "object" - }, - "justwatch.EpisodeOffersResponse": { - "properties": { - "countries": { + "options": { "items": { - "$ref": "#/definitions/justwatch.EpisodeCountryOffers" + "$ref": "#/definitions/jcrew.FacetOption" }, "type": "array" }, - "id": { - "example": "tse5550494", - "type": "string" + "range_max": { + "type": "number" }, - "language": { - "example": "en", + "range_min": { + "type": "number" + }, + "type": { "type": "string" } }, "type": "object" }, - "justwatch.EpisodeSummary": { + "jcrew.FacetOption": { "properties": { - "description": { - "type": "string" - }, - "episode_number": { - "example": 1, - "type": "integer" - }, - "id": { - "example": "tse5550494", - "type": "string" - }, - "object_id": { - "example": 5550494, + "count": { "type": "integer" }, - "object_type": { - "example": "SHOW_EPISODE", - "type": "string" - }, - "offers": { - "items": { - "$ref": "#/definitions/justwatch.Offer" - }, - "type": "array" - }, - "path": { - "type": "string" - }, - "poster_url": { - "type": "string" - }, - "title": { - "example": "Long Day's Journey Into Night", + "label": { "type": "string" }, - "url": { + "value": { "type": "string" - }, - "year": { - "example": 2022, - "type": "integer" } }, "type": "object" }, - "justwatch.Genre": { + "jcrew.Hour": { "properties": { - "short_name": { - "example": "act", - "type": "string" - }, - "translation": { - "example": "Action & Adventure", - "type": "string" + "open_intervals": { + "items": { + "$ref": "#/definitions/jcrew.TimeInterval" + }, + "type": "array" } }, "type": "object" }, - "justwatch.GenreTitlesResponse": { + "jcrew.NavCategory": { "properties": { - "country": { - "example": "US", + "category": { "type": "string" }, - "genre": { - "example": "act", + "department": { "type": "string" }, - "language": { - "example": "en", + "label": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/justwatch.SearchTitle" - }, - "type": "array" - }, - "type": { - "example": "all", + "section": { "type": "string" } }, "type": "object" }, - "justwatch.GenresResponse": { + "jcrew.ProductColor": { "properties": { - "genres": { - "items": { - "$ref": "#/definitions/justwatch.Genre" - }, - "type": "array" + "code": { + "type": "string" }, - "language": { - "example": "en", + "image_url": { + "type": "string" + }, + "name": { "type": "string" } }, "type": "object" }, - "justwatch.MonetizationTitlesResponse": { + "jcrew.ProductDetailResponse": { "properties": { - "country": { - "example": "US", - "type": "string" + "average_rating": { + "type": "number" }, - "language": { - "example": "en", + "brand": { "type": "string" }, - "monetization_type": { - "example": "FLATRATE", + "category_id": { "type": "string" }, - "results": { + "colors": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "$ref": "#/definitions/jcrew.ProductColor" }, "type": "array" }, - "type": { - "example": "all", + "currency": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.NewTitlesResponse": { - "properties": { - "country": { - "example": "US", + }, + "description": { "type": "string" }, - "language": { - "example": "en", + "fetched_at": { "type": "string" }, - "results": { + "fit_description": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "type": "string" }, "type": "array" }, - "type": { - "example": "all", - "type": "string" - } - }, - "type": "object" - }, - "justwatch.Offer": { - "properties": { - "availability": { - "example": "https://schema.org/InStock", - "type": "string" - }, - "category": { - "example": "Blu-Ray", + "gender": { "type": "string" }, - "currency": { - "example": "USD", - "type": "string" + "list_price": { + "type": "number" }, - "monetization_type": { - "example": "RENT", + "name": { "type": "string" }, - "presentation_type": { - "example": "4K", + "pid": { "type": "string" }, - "price": { - "example": 4.99, - "type": "number" + "rating_count": { + "type": "integer" }, - "provider": { - "example": "Amazon Video", + "site": { "type": "string" }, - "provider_id": { - "example": 10, - "type": "integer" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" }, - "provider_short": { - "example": "amz", - "type": "string" + "skus": { + "items": { + "$ref": "#/definitions/jcrew.ProductSKU" + }, + "type": "array" }, - "provider_technical": { - "example": "amazon", + "source_url": { "type": "string" }, "url": { @@ -87764,547 +89975,392 @@ }, "type": "object" }, - "justwatch.PopularResponse": { + "jcrew.ProductReviewsResponse": { "properties": { - "country": { - "example": "US", - "type": "string" + "average_rating": { + "type": "number" }, - "has_next_page": { - "example": true, - "type": "boolean" + "count": { + "type": "integer" }, - "language": { - "example": "en", + "fetched_at": { "type": "string" }, - "next_cursor": { - "example": "Mg==", + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "pid": { "type": "string" }, - "results": { + "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": { - "$ref": "#/definitions/justwatch.SearchTitle" + "type": "integer" }, "type": "array" }, - "type": { - "example": "all", + "recommended_ratio": { + "type": "number" + }, + "reviews": { + "items": { + "$ref": "#/definitions/jcrew.Review" + }, + "type": "array" + }, + "site": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.PriceRange": { - "properties": { - "currency": { - "example": "USD", + }, + "source_url": { "type": "string" }, - "max": { - "example": 14.99, - "type": "number" + "total_pages": { + "type": "integer" }, - "min": { - "example": 2.99, - "type": "number" + "total_reviews": { + "type": "integer" } }, "type": "object" }, - "justwatch.Provider": { + "jcrew.ProductSKU": { "properties": { - "clear_name": { - "example": "Netflix", + "color_code": { "type": "string" }, - "icon_url": { - "example": "https://images.justwatch.com/icon/207360008/s100/netflix.jpg", + "color_name": { "type": "string" }, - "id": { - "example": 8, - "type": "integer" - }, - "short_name": { - "example": "nfx", + "currency": { "type": "string" }, - "technical_name": { - "example": "netflix", + "orderable": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "size": { "type": "string" } }, "type": "object" }, - "justwatch.ProviderTitlesResponse": { + "jcrew.ProductSummary": { "properties": { - "country": { - "example": "US", + "description": { "type": "string" }, - "language": { - "example": "en", + "family_id": { "type": "string" }, - "provider": { - "example": "nfx", + "gender": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/justwatch.SearchTitle" - }, - "type": "array" - }, - "type": { - "example": "all", + "id": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.ProvidersResponse": { - "properties": { - "country": { - "example": "US", + }, + "image_url": { "type": "string" }, - "providers": { - "items": { - "$ref": "#/definitions/justwatch.Provider" - }, - "type": "array" - } - }, - "type": "object" - }, - "justwatch.Scoring": { - "properties": { - "best_rating": { - "example": "100", + "name": { "type": "string" }, - "certified_fresh": { - "example": true, + "orderable": { "type": "boolean" }, - "imdb_score": { - "example": 8.8, + "price_max": { "type": "number" }, - "imdb_votes": { - "example": 2798306, - "type": "integer" - }, - "justwatch_rating": { - "example": 97, + "price_min": { "type": "number" }, - "rating_count": { - "example": 77696, - "type": "integer" - }, - "tmdb_popularity": { - "example": 38.5801, + "sale_price_max": { "type": "number" }, - "tmdb_score": { - "example": 8.372, + "sale_price_min": { "type": "number" }, - "tomato_meter": { - "example": 87, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "justwatch.SearchResponse": { + "jcrew.Review": { "properties": { - "country": { - "example": "US", + "author": { "type": "string" }, - "language": { - "example": "en", + "body": { "type": "string" }, - "query": { - "example": "inception", + "created_at": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/justwatch.SearchTitle" - }, - "type": "array" - } - }, - "type": "object" - }, - "justwatch.SearchTitle": { - "properties": { - "id": { - "example": "tm92641", + "headline": { "type": "string" }, - "object_id": { - "example": 92641, + "helpful_votes": { "type": "integer" }, - "object_type": { - "example": "MOVIE", - "type": "string" - }, - "offers": { - "items": { - "$ref": "#/definitions/justwatch.Offer" - }, - "type": "array" - }, - "path": { - "example": "/us/movie/inception", - "type": "string" - }, - "poster_url": { - "example": "https://images.justwatch.com/poster/302449148/s718/inception.jpg", + "id": { "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" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "example": "Inception", + "location": { "type": "string" }, - "url": { - "example": "https://www.justwatch.com/us/movie/inception", - "type": "string" + "not_helpful_votes": { + "type": "integer" }, - "year": { - "example": 2010, + "rating": { "type": "integer" - } - }, - "type": "object" - }, - "justwatch.SeasonByIDResponse": { - "properties": { - "country": { - "example": "US", - "type": "string" }, - "language": { - "example": "en", + "updated_at": { "type": "string" }, - "season": { - "$ref": "#/definitions/justwatch.SeasonSummary" + "verified_purchase": { + "type": "boolean" } }, "type": "object" }, - "justwatch.SeasonEpisodesResponse": { + "jcrew.SearchResponse": { "properties": { - "country": { - "example": "US", - "type": "string" + "count": { + "type": "integer" }, - "episodes": { + "facets": { "items": { - "$ref": "#/definitions/justwatch.EpisodeSummary" + "$ref": "#/definitions/jcrew.Facet" }, "type": "array" }, - "language": { - "example": "en", + "fetched_at": { "type": "string" }, - "season": { - "$ref": "#/definitions/justwatch.SeasonSummary" - } - }, - "type": "object" - }, - "justwatch.SeasonSummary": { - "properties": { - "description": { + "filter": { "type": "string" }, - "id": { - "example": "tss297253", + "keyword": { "type": "string" }, - "object_id": { - "example": 297253, + "page": { "type": "integer" }, - "object_type": { - "example": "SHOW_SEASON", - "type": "string" + "per_page": { + "type": "integer" }, - "path": { - "example": "/us/tv-show/from/season-1", - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/jcrew.ProductSummary" + }, + "type": "array" }, - "poster_url": { - "example": "https://images.justwatch.com/poster/320190730/s718/season-1.jpg", + "site": { "type": "string" }, - "season_number": { - "example": 1, - "type": "integer" - }, - "title": { - "example": "Season 1", + "sort": { "type": "string" }, - "url": { - "example": "https://www.justwatch.com/us/tv-show/from/season-1", + "source_url": { "type": "string" }, - "year": { - "example": 2022, + "total_pages": { + "type": "integer" + }, + "total_products": { "type": "integer" } }, "type": "object" }, - "justwatch.ShowSeasonsResponse": { + "jcrew.SizeChartResponse": { "properties": { - "country": { - "example": "US", - "type": "string" - }, - "language": { - "example": "en", - "type": "string" - }, - "seasons": { + "columns": { "items": { - "$ref": "#/definitions/justwatch.SeasonSummary" + "type": "string" }, "type": "array" }, - "show": { - "$ref": "#/definitions/justwatch.TitleResponse" - } - }, - "type": "object" - }, - "justwatch.SimilarTitlesResponse": { - "properties": { - "country": { - "example": "US", + "fetched_at": { "type": "string" }, - "id": { - "example": "tm92641", + "pid": { "type": "string" }, - "language": { - "example": "en", + "site": { "type": "string" }, - "results": { + "sizes": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "$ref": "#/definitions/jcrew.SizeChartRow" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "justwatch.TitleCountryOffers": { + "jcrew.SizeChartRow": { "properties": { - "country": { - "example": "US", - "type": "string" + "imperial": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" }, - "offers": { - "items": { - "$ref": "#/definitions/justwatch.Offer" + "metric": { + "additionalProperties": { + "format": "float64", + "type": "number" }, - "type": "array" + "type": "object" }, - "title": { - "$ref": "#/definitions/justwatch.TitleResponse" + "size": { + "type": "string" } }, "type": "object" }, - "justwatch.TitleMediaResponse": { + "jcrew.Store": { "properties": { - "backdrops": { - "items": { - "$ref": "#/definitions/justwatch.Backdrop" - }, - "type": "array" + "address": { + "type": "string" }, - "clips": { - "items": { - "$ref": "#/definitions/justwatch.Clip" - }, - "type": "array" + "city": { + "type": "string" }, "country": { - "example": "US", "type": "string" }, - "credits": { - "items": { - "$ref": "#/definitions/justwatch.Credit" + "distance_miles": { + "type": "number" + }, + "hours": { + "additionalProperties": { + "$ref": "#/definitions/jcrew.Hour" }, - "type": "array" + "type": "object" }, "id": { - "example": "tm92641", "type": "string" }, - "language": { - "example": "en", - "type": "string" + "latitude": { + "type": "number" }, - "title": { - "example": "Inception", - "type": "string" - } - }, - "type": "object" - }, - "justwatch.TitleOffersResponse": { - "properties": { - "countries": { - "items": { - "$ref": "#/definitions/justwatch.TitleCountryOffers" - }, - "type": "array" + "longitude": { + "type": "number" }, - "id": { - "example": "tm92641", + "name": { "type": "string" }, - "language": { - "example": "en", + "phone": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.TitleResponse": { - "properties": { - "content_rating": { + }, + "postal_code": { "type": "string" }, - "description": { + "region": { "type": "string" }, - "genres": { + "services": { "items": { "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "jcrew.StoreResponse": { + "properties": { + "count": { + "type": "integer" }, - "id": { - "example": "tm92641", + "fetched_at": { "type": "string" }, - "object_id": { - "example": 92641, - "type": "integer" + "site": { + "type": "string" }, - "object_type": { - "example": "MOVIE", + "source_url": { "type": "string" }, - "offers": { + "stores": { "items": { - "$ref": "#/definitions/justwatch.Offer" + "$ref": "#/definitions/jcrew.Store" }, "type": "array" + } + }, + "type": "object" + }, + "jcrew.SuggestResponse": { + "properties": { + "count": { + "type": "integer" }, - "path": { - "example": "/us/movie/inception", - "type": "string" - }, - "poster_url": { - "example": "https://images.justwatch.com/poster/302449148/s718/inception.jpg", - "type": "string" - }, - "release_date": { - "example": "2010-07-14", + "fetched_at": { "type": "string" }, - "runtime": { - "example": "PT2H28M0S", + "query": { "type": "string" }, - "scoring": { - "$ref": "#/definitions/justwatch.Scoring" - }, - "title": { - "example": "Inception", + "site": { "type": "string" }, - "url": { - "example": "https://www.justwatch.com/us/movie/inception", + "source_url": { "type": "string" }, - "year": { - "example": 2010, - "type": "integer" + "suggestions": { + "items": { + "$ref": "#/definitions/jcrew.Suggestion" + }, + "type": "array" } }, "type": "object" }, - "justwatch.ageCertificationsResponseDoc": { + "jcrew.Suggestion": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/justwatch.AgeCertificationsResponse" - }, - "msg": { - "example": "OK", + "query": { "type": "string" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "justwatch.analysisResponseDoc": { + "jcrew.TimeInterval": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/justwatch.AnalysisResponse" + "end": { + "type": "string" }, - "msg": { - "example": "OK", + "start": { "type": "string" } }, "type": "object" }, - "justwatch.discoverResponseDoc": { + "jcrew.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.DiscoverResponse" + "$ref": "#/definitions/jcrew.CategoriesResponse" }, "msg": { "example": "OK", @@ -88313,14 +90369,14 @@ }, "type": "object" }, - "justwatch.episodeByIDResponseDoc": { + "jcrew.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.EpisodeByIDResponse" + "$ref": "#/definitions/jcrew.CategoryResponse" }, "msg": { "example": "OK", @@ -88329,14 +90385,14 @@ }, "type": "object" }, - "justwatch.episodeOffersResponseDoc": { + "jcrew.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.EpisodeOffersResponse" + "$ref": "#/definitions/jcrew.ProductDetailResponse" }, "msg": { "example": "OK", @@ -88345,14 +90401,14 @@ }, "type": "object" }, - "justwatch.genreTitlesResponseDoc": { + "jcrew.productReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.GenreTitlesResponse" + "$ref": "#/definitions/jcrew.ProductReviewsResponse" }, "msg": { "example": "OK", @@ -88361,14 +90417,14 @@ }, "type": "object" }, - "justwatch.genresResponseDoc": { + "jcrew.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.GenresResponse" + "$ref": "#/definitions/jcrew.SearchResponse" }, "msg": { "example": "OK", @@ -88377,14 +90433,14 @@ }, "type": "object" }, - "justwatch.monetizationTitlesResponseDoc": { + "jcrew.sizeChartResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.MonetizationTitlesResponse" + "$ref": "#/definitions/jcrew.SizeChartResponse" }, "msg": { "example": "OK", @@ -88393,14 +90449,14 @@ }, "type": "object" }, - "justwatch.newTitlesResponseDoc": { + "jcrew.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.NewTitlesResponse" + "$ref": "#/definitions/jcrew.StoreResponse" }, "msg": { "example": "OK", @@ -88409,14 +90465,14 @@ }, "type": "object" }, - "justwatch.popularResponseDoc": { + "jcrew.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.PopularResponse" + "$ref": "#/definitions/jcrew.SuggestResponse" }, "msg": { "example": "OK", @@ -88425,3012 +90481,3472 @@ }, "type": "object" }, - "justwatch.providerTitlesResponseDoc": { + "jerusalempost.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/justwatch.ProviderTitlesResponse" - }, - "msg": { - "example": "OK", + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.providersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/justwatch.ProvidersResponse" }, - "msg": { - "example": "OK", + "summary": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/justwatch.SearchResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "justwatch.seasonByIDResponseDoc": { + "jerusalempost.AuthorRef": { "properties": { - "code": { - "example": 200, - "type": "integer" + "slug": { + "type": "string" }, - "data": { - "$ref": "#/definitions/justwatch.SeasonByIDResponse" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "justwatch.seasonEpisodesResponseDoc": { + "jerusalempost.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/justwatch.SeasonEpisodesResponse" + "articles": { + "items": { + "$ref": "#/definitions/jerusalempost.AuthorArticle" + }, + "type": "array" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.showSeasonsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/justwatch.ShowSeasonsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.similarTitlesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/justwatch.SimilarTitlesResponse" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "justwatch.titleMediaResponseDoc": { + "jerusalempost.AuthorsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/justwatch.TitleMediaResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "authors": { + "items": { + "$ref": "#/definitions/jerusalempost.AuthorRef" + }, + "type": "array" } }, "type": "object" }, - "justwatch.titleOffersResponseDoc": { + "jimmyjohns.MenuCategory": { "properties": { - "code": { - "example": 200, + "category_id": { + "example": 69933, "type": "integer" }, - "data": { - "$ref": "#/definitions/justwatch.TitleOffersResponse" - }, - "msg": { - "example": "OK", + "name": { + "example": "Originals", "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/jimmyjohns.MenuProduct" + }, + "type": "array" } }, "type": "object" }, - "justwatch.titleResponseDoc": { + "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/justwatch.TitleResponse" + "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", + "description": { + "example": "HAM, PROVOLONE, lettuce, tomato & mayo", "type": "string" - } - }, - "type": "object" - }, - "kalshi.BatchMarketHistoryResponse": { - "properties": { - "end_ts": { - "example": 1780804800, - "type": "integer" }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "image_url": { "type": "string" }, - "include_latest_before_start": { - "example": false, - "type": "boolean" - }, - "markets": { - "items": { - "$ref": "#/definitions/kalshi.MarketHistoryResponse" - }, - "type": "array" - }, - "period_interval": { - "example": 1440, - "type": "integer" + "max_calories": { + "example": "650", + "type": "string" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/markets/candlesticks", + "name": { + "example": "#1 The Pepe®", "type": "string" }, - "start_ts": { - "example": 1780286400, + "product_id": { + "example": 33276056, "type": "integer" }, - "tickers": { - "example": [ - "KXELONMARS-99" - ], - "items": { - "type": "string" - }, - "type": "array" + "short_description": { + "type": "string" } }, "type": "object" }, - "kalshi.BatchOrderBookResponse": { + "jimmyjohns.MenuResponse": { "properties": { - "books": { + "categories": { "items": { - "$ref": "#/definitions/kalshi.OrderBookResponse" + "$ref": "#/definitions/jimmyjohns.MenuCategory" }, "type": "array" }, + "category_count": { + "example": 20, + "type": "integer" + }, "fetched_at": { - "example": "2026-06-07T14:00:00Z", "type": "string" }, + "product_count": { + "example": 180, + "type": "integer" + }, + "restaurant_id": { + "example": 67182, + "type": "integer" + }, "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/markets/orderbooks", "type": "string" - }, - "tickers": { - "example": [ - "KXELONMARS-99" - ], - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "kalshi.CandleOHLC": { + "jimmyjohns.ModifierChoice": { "properties": { - "close": { - "example": 0.08, - "type": "number" + "base_calories": { + "description": "BaseCalories is this choice's calorie delta, which can be negative\nfor a \"light\"/\"no\" ingredient choice.", + "example": "70", + "type": "string" }, - "high": { - "example": 0.11, - "type": "number" + "chain_option_id": { + "example": 2476875, + "type": "integer" }, - "low": { - "example": 0.08, + "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" }, - "mean": { - "example": 0.1014, - "type": "number" + "groups": { + "items": { + "$ref": "#/definitions/jimmyjohns.ModifierGroup" + }, + "type": "array" }, - "open": { - "example": 0.11, - "type": "number" + "is_default": { + "type": "boolean" }, - "previous": { - "example": 0.08, - "type": "number" - } - }, - "type": "object" - }, - "kalshi.Competition": { - "properties": { - "id": { + "max_calories": { "type": "string" }, "name": { + "example": "REGULAR", "type": "string" + }, + "option_id": { + "example": 5265915696, + "type": "integer" } }, "type": "object" }, - "kalshi.EventHistoryResponse": { + "jimmyjohns.ModifierGroup": { "properties": { - "adjusted_end_ts": { - "example": 1780804800, - "type": "integer" - }, - "end_ts": { - "example": 1780804800, + "chain_modifier_id": { + "example": 480998, "type": "integer" }, - "event_ticker": { - "example": "KXELONMARS-99", - "type": "string" - }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "include_latest_before_start": { - "example": false, - "type": "boolean" - }, - "market_tickers": { - "example": [ - "KXELONMARS-99" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "markets": { + "choices": { "items": { - "$ref": "#/definitions/kalshi.MarketHistoryResponse" + "$ref": "#/definitions/jimmyjohns.ModifierChoice" }, "type": "array" }, - "period_interval": { - "example": 1440, + "group_id": { + "example": 1176354037, "type": "integer" }, - "series_ticker": { - "example": "KXELONMARS", - "type": "string" + "mandatory": { + "type": "boolean" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/events/KXELONMARS-99/candlesticks", - "type": "string" + "max_selects": { + "type": "integer" }, - "start_ts": { - "example": 1780286400, + "min_selects": { "type": "integer" + }, + "name": { + "example": "Choose Your Size", + "type": "string" } }, "type": "object" }, - "kalshi.EventMetadataResponse": { + "jimmyjohns.ModifiersResponse": { "properties": { - "competition": { - "$ref": "#/definitions/kalshi.Competition" - }, - "competition_scope": { - "type": "string" - }, - "event_ticker": { - "example": "KXELONMARS-99", - "type": "string" - }, - "featured_image_url": { - "type": "string" - }, "fetched_at": { - "example": "2026-06-07T14:00:00Z", "type": "string" }, - "image_url": { - "example": "https://kalshi-public-docs.s3.amazonaws.com/series-images-webp/KXELONMARS.webp", - "type": "string" + "group_count": { + "example": 9, + "type": "integer" }, - "market_details": { + "groups": { "items": { - "$ref": "#/definitions/kalshi.MarketDetail" + "$ref": "#/definitions/jimmyjohns.ModifierGroup" }, "type": "array" }, - "settlement_sources": { - "items": { - "$ref": "#/definitions/kalshi.SettlementSource" - }, - "type": "array" + "product_id": { + "example": 33276056, + "type": "integer" }, "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/events/KXELONMARS-99/metadata", "type": "string" } }, "type": "object" }, - "kalshi.EventResponse": { + "jimmyjohns.NearbyResponse": { "properties": { - "event": { - "$ref": "#/definitions/kalshi.EventRow" + "count": { + "example": 10, + "type": "integer" }, "fetched_at": { - "example": "2026-06-07T14:00:00Z", "type": "string" }, - "markets": { + "radius_miles": { + "example": 15, + "type": "integer" + }, + "restaurants": { "items": { - "$ref": "#/definitions/kalshi.MarketRow" + "$ref": "#/definitions/jimmyjohns.NearbyRestaurant" }, "type": "array" }, "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/events/KXELONMARS-99", "type": "string" } }, "type": "object" }, - "kalshi.EventRow": { + "jimmyjohns.NearbyRestaurant": { "properties": { - "available_on_brokers": { - "example": false, + "accepts_delivery": { "type": "boolean" }, - "category": { - "example": "World", - "type": "string" + "accepts_pickup": { + "type": "boolean" }, - "collateral_return_type": { - "example": "MECNET", + "address": { + "$ref": "#/definitions/jimmyjohns.StoreAddress" + }, + "distance_miles": { + "example": 0.4, + "type": "number" + }, + "is_open": { + "type": "boolean" + }, + "latitude": { + "example": 44.9401301, + "type": "number" + }, + "longitude": { + "example": -93.1411487, + "type": "number" + }, + "name": { + "example": "JJ0004", "type": "string" }, - "event_ticker": { - "example": "KXELONMARS-99", + "order_url": { + "example": "https://online.jimmyjohns.com/menu/jj0004/", "type": "string" }, - "last_updated": { - "example": "2026-05-10T00:33:53Z", + "phone_number": { + "example": "(651) 222-2221", "type": "string" }, - "markets": { - "items": { - "$ref": "#/definitions/kalshi.MarketRow" - }, - "type": "array" + "restaurant_id": { + "example": 67182, + "type": "integer" }, - "mutually_exclusive": { - "example": false, - "type": "boolean" + "slug": { + "example": "jj0004", + "type": "string" }, - "series_ticker": { - "example": "KXELONMARS", + "timezone": { + "example": "America/Chicago", + "type": "string" + } + }, + "type": "object" + }, + "jimmyjohns.SitemapEntry": { + "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", "type": "string" }, - "strike_period": { + "path": { + "example": "in/columbus/sandwiches-1414.html", "type": "string" }, - "sub_title": { - "example": "Before 2099", + "store_number": { + "description": "StoreNumber is the trailing id shared by all three variants.", + "example": "1414", "type": "string" }, - "title": { - "example": "Will Elon Musk visit Mars in his lifetime?", + "url": { "type": "string" } }, "type": "object" }, - "kalshi.EventsResponse": { + "jimmyjohns.SitemapResponse": { "properties": { - "cursor": { - "type": "string" + "count": { + "example": 100, + "type": "integer" }, - "events": { + "entries": { "items": { - "$ref": "#/definitions/kalshi.EventRow" + "$ref": "#/definitions/jimmyjohns.SitemapEntry" }, "type": "array" }, "fetched_at": { - "example": "2026-06-07T14:00:00Z", "type": "string" }, - "limit": { - "example": 25, + "page": { + "example": 1, + "type": "integer" + }, + "shard": { + "example": 0, + "type": "integer" + }, + "shard_count": { + "example": 1, "type": "integer" }, "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/events?limit=25", "type": "string" + }, + "total_in_shard": { + "example": 9789, + "type": "integer" + }, + "total_pages": { + "example": 98, + "type": "integer" } }, "type": "object" }, - "kalshi.ExchangeHoursBlock": { + "jimmyjohns.StoreAddress": { "properties": { - "close_time": { - "example": "00:00", + "city": { + "example": "Columbus", "type": "string" }, - "open_time": { - "example": "00:00", + "country": { + "example": "US", "type": "string" - } - }, - "type": "object" - }, - "kalshi.ExchangeMaintenanceWindow": { - "properties": { - "end_time": { + }, + "postal_code": { + "example": "47201", "type": "string" }, - "reason": { + "region": { + "example": "IN", "type": "string" }, - "start_time": { + "street": { + "example": "2115 W Jonathan Moore Pike", "type": "string" } }, "type": "object" }, - "kalshi.ExchangeScheduleResponse": { + "jimmyjohns.StoreHours": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "closes": { + "example": "22:00", "type": "string" }, - "maintenance_windows": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeMaintenanceWindow" - }, - "type": "array" - }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/exchange/schedule", + "day_of_week": { + "example": "Monday", "type": "string" }, - "standard_hours": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeStandardHours" - }, - "type": "array" + "opens": { + "example": "10:30", + "type": "string" } }, "type": "object" }, - "kalshi.ExchangeStandardHours": { + "jimmyjohns.StoreResponse": { "properties": { - "end_time": { - "example": "2200-12-01T00:00:00Z", + "address": { + "$ref": "#/definitions/jimmyjohns.StoreAddress" + }, + "fetched_at": { "type": "string" }, - "friday": { + "hours": { "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + "$ref": "#/definitions/jimmyjohns.StoreHours" }, "type": "array" }, - "monday": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" - }, - "type": "array" + "image_url": { + "type": "string" }, - "saturday": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" - }, - "type": "array" + "latitude": { + "example": 39.1994347, + "type": "number" }, - "start_time": { - "example": "2024-12-01T00:00:00Z", + "longitude": { + "example": -85.9470667, + "type": "number" + }, + "name": { + "example": "Jimmy John's", "type": "string" }, - "sunday": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" - }, - "type": "array" + "path": { + "type": "string" }, - "thursday": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" - }, - "type": "array" + "phone_number": { + "type": "string" }, - "tuesday": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" - }, - "type": "array" + "serves_cuisine": { + "type": "string" }, - "wednesday": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" - }, - "type": "array" + "source_url": { + "type": "string" } }, "type": "object" }, - "kalshi.ExchangeStatusResponse": { + "jimmyjohns.menuResponseDoc": { "properties": { - "exchange_active": { - "example": true, - "type": "boolean" - }, - "fetched_at": { - "example": "2026-06-07T14: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" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/exchange/status", - "type": "string" + "data": { + "$ref": "#/definitions/jimmyjohns.MenuResponse" }, - "trading_active": { - "example": true, - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kalshi.HistoricalCutoffResponse": { + "jimmyjohns.modifiersResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "market_settled_at": { - "example": "2026-04-08T00:00:00Z", - "type": "string" - }, - "orders_updated_at": { - "example": "2026-04-08T00: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" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/historical/cutoff", - "type": "string" + "data": { + "$ref": "#/definitions/jimmyjohns.ModifiersResponse" }, - "trades_created_at": { - "example": "2026-04-08T00:00:00Z", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kalshi.HistoricalMarketResponse": { + "jimmyjohns.nearbyResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14: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" }, - "market": { - "$ref": "#/definitions/kalshi.MarketRow" + "data": { + "$ref": "#/definitions/jimmyjohns.NearbyResponse" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/historical/markets/KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kalshi.HistoricalMarketsResponse": { + "jimmyjohns.sitemapResponseDoc": { "properties": { - "cursor": { - "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": { - "example": "2026-06-07T14:00:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/jimmyjohns.SitemapResponse" }, - "limit": { - "example": 25, + "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" }, - "markets": { - "items": { - "$ref": "#/definitions/kalshi.MarketRow" - }, - "type": "array" + "data": { + "$ref": "#/definitions/jimmyjohns.StoreResponse" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/historical/markets?limit=25", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kalshi.HistoricalTradesResponse": { + "jobs.BoardResponse": { "properties": { - "cursor": { - "type": "string" - }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "company": { "type": "string" }, - "limit": { - "example": 25, - "type": "integer" - }, - "max_ts": { - "example": 1775689200, + "count": { "type": "integer" }, - "min_ts": { - "example": 1775602800, - "type": "integer" + "jobs": { + "items": { + "$ref": "#/definitions/jobs.Job" + }, + "type": "array" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/historical/trades?limit=25", + "provider": { "type": "string" }, - "ticker": { - "example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557", + "source_url": { "type": "string" }, - "trades": { - "items": { - "$ref": "#/definitions/kalshi.TradeRow" - }, - "type": "array" + "total": { + "type": "integer" } }, "type": "object" }, - "kalshi.MarketCandlestick": { + "jobs.CompanySearchResponse": { "properties": { - "end_period_at": { - "example": "2026-06-01T00:00:00Z", - "type": "string" - }, - "end_period_ts": { - "example": 1780286400, + "count": { "type": "integer" }, - "open_interest": { - "example": 32980.77, - "type": "number" - }, - "price": { - "$ref": "#/definitions/kalshi.CandleOHLC" - }, - "volume": { - "example": 7, - "type": "number" - }, - "yes_ask": { - "$ref": "#/definitions/kalshi.CandleOHLC" + "found": { + "items": { + "$ref": "#/definitions/jobs.ProviderHit" + }, + "type": "array" }, - "yes_bid": { - "$ref": "#/definitions/kalshi.CandleOHLC" + "slug": { + "type": "string" } }, "type": "object" }, - "kalshi.MarketDetail": { + "jobs.Count": { "properties": { - "color_code": { - "example": "#AA00FF", - "type": "string" - }, - "image_url": { - "type": "string" + "count": { + "type": "integer" }, - "market_ticker": { - "example": "KXELONMARS-99", + "name": { "type": "string" } }, "type": "object" }, - "kalshi.MarketHistoryResponse": { + "jobs.HiringSignals": { "properties": { - "candlesticks": { + "as_of": { + "type": "string" + }, + "by_department": { "items": { - "$ref": "#/definitions/kalshi.MarketCandlestick" + "$ref": "#/definitions/jobs.Count" }, "type": "array" }, - "end_ts": { - "example": 1780804800, - "type": "integer" + "by_location": { + "items": { + "$ref": "#/definitions/jobs.Count" + }, + "type": "array" }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "company": { "type": "string" }, - "include_latest_before_start": { - "example": false, - "type": "boolean" - }, - "period_interval": { - "example": 1440, + "new_last_30d": { "type": "integer" }, - "series_ticker": { - "example": "KXELONMARS", - "type": "string" + "new_last_7d": { + "type": "integer" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/markets/KXELONMARS-99/candlesticks", + "provider": { "type": "string" }, - "start_ts": { - "example": 1780286400, + "remote_count": { "type": "integer" }, - "ticker": { - "example": "KXELONMARS-99", - "type": "string" - } - }, - "type": "object" - }, - "kalshi.MarketResponse": { - "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" + "remote_pct": { + "type": "number" }, - "market": { - "$ref": "#/definitions/kalshi.MarketRow" + "sampled_roles": { + "type": "integer" }, "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/markets/KXELONMARS-99", "type": "string" + }, + "top_titles": { + "items": { + "$ref": "#/definitions/jobs.Count" + }, + "type": "array" + }, + "total_open_roles": { + "type": "integer" } }, "type": "object" }, - "kalshi.MarketRow": { + "jobs.Job": { "properties": { - "close_time": { - "example": "2099-08-01T04:59:00Z", - "type": "string" + "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" }, - "event_ticker": { - "example": "KXELONMARS-99", + "apply_url": { "type": "string" }, - "expiration_time": { - "example": "2099-08-08T15:00:00Z", + "benefits_mentioned": { + "description": "Benefits, Clearance, and Education contain canonical requirements and\nofferings mentioned in the job title or description.", + "items": { + "type": "string" + }, + "type": "array" + }, + "company": { "type": "string" }, - "last_price": { - "example": 0.08, - "type": "number" + "company_logo_url": { + "type": "string" }, - "liquidity": { - "example": 0, - "type": "number" + "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" }, - "market_type": { - "example": "binary", + "compensation_currency": { "type": "string" }, - "no_ask": { - "example": 0.92, + "compensation_max": { "type": "number" }, - "no_bid": { - "example": 0.9, + "compensation_min": { "type": "number" }, - "open_interest": { - "example": 32773.57, - "type": "number" + "compensation_period": { + "type": "string" }, - "open_time": { - "example": "2025-08-28T20:45:00Z", + "department": { "type": "string" }, - "previous_price": { - "example": 0.1, - "type": "number" + "description_html": { + "type": "string" }, - "response_price_unit": { - "example": "usd_cent", + "description_text": { "type": "string" }, - "result": { + "education_level_required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "employment_type": { "type": "string" }, - "rules_primary": { + "id": { "type": "string" }, - "status": { - "example": "active", + "location": { "type": "string" }, - "sub_title": { - "example": "Mars", + "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" }, - "ticker": { - "example": "KXELONMARS-99", + "location_country": { "type": "string" }, - "title": { - "example": "Will Elon Musk visit Mars before Aug 1, 2099?", + "location_state": { "type": "string" }, - "volume": { - "example": 94840.88, - "type": "number" + "locations": { + "items": { + "type": "string" + }, + "type": "array" }, - "volume_24h": { - "example": 16, - "type": "number" + "posted_age_text": { + "description": "Workday relative age (\"Posted Today\")", + "type": "string" }, - "yes_ask": { - "example": 0.1, - "type": "number" + "posted_at": { + "description": "RFC3339 / date when the provider gives one", + "type": "string" }, - "yes_bid": { - "example": 0.08, - "type": "number" - } - }, - "type": "object" - }, - "kalshi.MarketsResponse": { - "properties": { - "cursor": { + "provider": { "type": "string" }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "remote": { + "type": "boolean" + }, + "req_id": { "type": "string" }, - "limit": { - "example": 25, - "type": "integer" + "security_clearance_required": { + "items": { + "type": "string" + }, + "type": "array" }, - "markets": { + "skills_mentioned": { + "description": "Skills lists canonical ESCO skill labels mentioned in the job title or\ndescription.", "items": { - "$ref": "#/definitions/kalshi.MarketRow" + "type": "string" }, "type": "array" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/markets?limit=25", + "team": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "workplace_type": { "type": "string" } }, "type": "object" }, - "kalshi.MultivariateEventsResponse": { + "jobs.ProviderHit": { "properties": { - "cursor": { + "board_url": { "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/kalshi.EventRow" - }, - "type": "array" + "company": { + "type": "string" }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "provider": { "type": "string" }, - "limit": { - "example": 25, + "total_open_roles": { "type": "integer" - }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/events/multivariate?limit=25", - "type": "string" } }, "type": "object" }, - "kalshi.OrderBookLevel": { + "jobs.boardResponseDoc": { "properties": { - "price": { - "example": 0.08, - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "size": { - "example": 185.72, - "type": "number" + "data": { + "$ref": "#/definitions/jobs.BoardResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "kalshi.OrderBookResponse": { + "jobs.jobResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "no": { - "items": { - "$ref": "#/definitions/kalshi.OrderBookLevel" - }, - "type": "array" + "data": { + "$ref": "#/definitions/jobs.Job" }, - "raw_unit_hint": { - "example": "dollars", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "jobs.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/markets/KXELONMARS-99/orderbook", - "type": "string" + "data": { + "$ref": "#/definitions/jobs.CompanySearchResponse" }, - "ticker": { - "example": "KXELONMARS-99", + "msg": { + "example": "OK", "type": "string" - }, - "yes": { - "items": { - "$ref": "#/definitions/kalshi.OrderBookLevel" - }, - "type": "array" } }, "type": "object" }, - "kalshi.SeriesDetailResponse": { + "jobs.signalsResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "series": { - "$ref": "#/definitions/kalshi.SeriesRow" + "data": { + "$ref": "#/definitions/jobs.HiringSignals" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kalshi.SeriesResponse": { + "justeat.FilterOption": { "properties": { - "cursor": { - "type": "string" - }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "limit": { - "example": 25, + "count": { "type": "integer" }, - "series": { + "filter": { + "type": "string" + } + }, + "type": "object" + }, + "justeat.FiltersResponse": { + "properties": { + "filters": { "items": { - "$ref": "#/definitions/kalshi.SeriesRow" + "$ref": "#/definitions/justeat.FilterOption" }, "type": "array" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/series?limit=25", + "postcode": { "type": "string" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "kalshi.SeriesRow": { + "justeat.MenuCategory": { "properties": { - "category": { - "example": "Politics", + "id": { "type": "string" }, - "contract_terms_url": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/justeat.MenuItem" + }, + "type": "array" }, - "contract_url": { + "name": { "type": "string" - }, - "fee_multiplier": { - "example": 1, - "type": "number" - }, - "fee_type": { - "example": "quadratic", + } + }, + "type": "object" + }, + "justeat.MenuItem": { + "properties": { + "description": { "type": "string" }, - "frequency": { - "example": "custom", + "energy_display": { "type": "string" }, - "last_updated": { - "example": "2026-06-01T15:24:00Z", + "id": { "type": "string" }, - "series_ticker": { - "example": "KXELONMARS", + "image_url": { "type": "string" }, - "settlement_sources": { + "modifier_groups": { "items": { - "$ref": "#/definitions/kalshi.SettlementSource" + "$ref": "#/definitions/justeat.ModifierGroup" }, "type": "array" }, - "title": { - "example": "Will Elon Musk visit Mars in his lifetime?", + "name": { "type": "string" + }, + "price": { + "type": "number" } }, "type": "object" }, - "kalshi.SettlementSource": { + "justeat.MenuResponse": { "properties": { + "categories": { + "items": { + "$ref": "#/definitions/justeat.MenuCategory" + }, + "type": "array" + }, + "currency_code": { + "type": "string" + }, + "item_count": { + "type": "integer" + }, "name": { - "example": "The Guardian", "type": "string" }, - "url": { - "example": "https://www.theguardian.com", + "restaurant_id": { + "type": "string" + }, + "unique_name": { "type": "string" } }, "type": "object" }, - "kalshi.TradeRow": { + "justeat.ModifierGroup": { "properties": { - "count": { - "example": 2, - "type": "number" - }, - "created_time": { - "example": "2026-06-07T07:23:05Z", + "id": { "type": "string" }, - "created_ts": { - "example": 1780816985, + "max_choices": { "type": "integer" }, - "is_block_trade": { - "example": false, - "type": "boolean" - }, - "no_price": { - "example": 0.91, - "type": "number" + "min_choices": { + "type": "integer" }, - "taker_book_side": { - "example": "ask", + "name": { "type": "string" }, - "taker_outcome_side": { - "example": "no", - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/justeat.ModifierOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "justeat.ModifierOption": { + "properties": { + "addition_price": { + "type": "number" }, - "taker_side": { - "example": "no", + "energy_display": { "type": "string" }, - "ticker": { - "example": "KXELONMARS-99", + "id": { "type": "string" }, - "trade_id": { - "example": "9126fe1f-7233-7c75-2c37-06ce7841bbe3", + "name": { "type": "string" }, - "yes_price": { - "example": 0.09, + "remove_price": { "type": "number" } }, "type": "object" }, - "kalshi.TradesResponse": { + "justeat.RestaurantResponse": { "properties": { - "cursor": { + "address": { "type": "string" }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "city": { "type": "string" }, - "limit": { - "example": 25, - "type": "integer" + "country": { + "type": "string" }, - "max_ts": { - "example": 1780873200, - "type": "integer" + "image_url": { + "type": "string" }, - "min_ts": { - "example": 1780786800, - "type": "integer" + "is_active": { + "type": "boolean" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/markets/trades?limit=25", + "name": { "type": "string" }, - "ticker": { - "example": "KXELONMARS-99", + "postal_code": { "type": "string" }, - "trades": { - "items": { - "$ref": "#/definitions/kalshi.TradeRow" - }, - "type": "array" - } - }, - "type": "object" - }, - "kalshi.batchMarketHistoryResponseDoc": { - "properties": { - "code": { - "example": 200, + "primary_cuisine": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "rating_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/kalshi.BatchMarketHistoryResponse" + "restaurant_id": { + "type": "string" }, - "msg": { - "example": "OK", + "unique_name": { "type": "string" } }, "type": "object" }, - "kalshi.batchOrderBookResponseDoc": { + "justeat.SearchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.BatchOrderBookResponse" + "restaurants": { + "items": { + "$ref": "#/definitions/justeat.SearchRestaurant" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total_count": { + "type": "integer" } }, "type": "object" }, - "kalshi.eventHistoryResponseDoc": { + "justeat.SearchRestaurant": { "properties": { - "code": { - "example": 200, + "city": { + "type": "string" + }, + "delivery_eta_max_minutes": { "type": "integer" }, - "data": { - "$ref": "#/definitions/kalshi.EventHistoryResponse" + "delivery_eta_min_minutes": { + "type": "integer" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "kalshi.eventMetadataResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/kalshi.EventMetadataResponse" + "is_open_now": { + "type": "boolean" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "kalshi.eventResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "postal_code": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "rating_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/kalshi.EventResponse" + "restaurant_id": { + "type": "string" }, - "msg": { - "example": "OK", + "unique_name": { "type": "string" } }, "type": "object" }, - "kalshi.eventsResponseDoc": { + "justeat.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/kalshi.EventsResponse" + "$ref": "#/definitions/justeat.FiltersResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kalshi.exchangeScheduleResponseDoc": { + "justeat.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/kalshi.ExchangeScheduleResponse" + "$ref": "#/definitions/justeat.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kalshi.exchangeStatusResponseDoc": { + "justeat.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/kalshi.ExchangeStatusResponse" + "$ref": "#/definitions/justeat.RestaurantResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kalshi.historicalCutoffResponseDoc": { + "justeat.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/kalshi.HistoricalCutoffResponse" + "$ref": "#/definitions/justeat.SearchResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kalshi.historicalMarketResponseDoc": { + "justwatch.AgeCertification": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.HistoricalMarketResponse" - }, - "msg": { - "example": "OK", + "technical_name": { + "example": "PG-13", "type": "string" } }, "type": "object" }, - "kalshi.historicalMarketsResponseDoc": { + "justwatch.AgeCertificationsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.HistoricalMarketsResponse" + "age_certifications": { + "items": { + "$ref": "#/definitions/justwatch.AgeCertification" + }, + "type": "array" }, - "msg": { - "example": "OK", + "country": { + "example": "US", "type": "string" } }, "type": "object" }, - "kalshi.historicalTradesResponseDoc": { + "justwatch.AnalysisResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.HistoricalTradesResponse" + "summary": { + "$ref": "#/definitions/justwatch.AnalysisSummary" }, - "msg": { - "example": "OK", - "type": "string" + "title": { + "$ref": "#/definitions/justwatch.TitleResponse" } }, "type": "object" }, - "kalshi.marketHistoryResponseDoc": { + "justwatch.AnalysisSummary": { "properties": { - "code": { - "example": 200, - "type": "integer" + "available": { + "example": true, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/kalshi.MarketHistoryResponse" + "best_buy": { + "$ref": "#/definitions/justwatch.Offer" }, - "msg": { - "example": "OK", - "type": "string" + "best_free": { + "$ref": "#/definitions/justwatch.Offer" + }, + "best_rent": { + "$ref": "#/definitions/justwatch.Offer" + }, + "best_subscription": { + "$ref": "#/definitions/justwatch.Offer" + }, + "format_counts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "monetization_counts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "price_ranges": { + "additionalProperties": { + "$ref": "#/definitions/justwatch.PriceRange" + }, + "type": "object" + }, + "provider_count": { + "example": 6, + "type": "integer" + }, + "total_offers": { + "example": 15, + "type": "integer" } }, "type": "object" }, - "kalshi.marketResponseDoc": { + "justwatch.Backdrop": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.MarketResponse" - }, - "msg": { - "example": "OK", + "url": { + "example": "https://images.justwatch.com/backdrop/8735151/s1920/inception.jpg", "type": "string" } }, "type": "object" }, - "kalshi.marketsResponseDoc": { + "justwatch.Clip": { "properties": { - "code": { - "example": 200, - "type": "integer" + "external_id": { + "example": "8hP9D6kZseM", + "type": "string" }, - "data": { - "$ref": "#/definitions/kalshi.MarketsResponse" + "provider": { + "example": "YOUTUBE", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://www.youtube.com/watch?v=8hP9D6kZseM", "type": "string" } }, "type": "object" }, - "kalshi.multivariateEventsResponseDoc": { + "justwatch.Credit": { "properties": { - "code": { - "example": 200, - "type": "integer" + "character_name": { + "example": "Dom Cobb", + "type": "string" }, - "data": { - "$ref": "#/definitions/kalshi.MultivariateEventsResponse" + "name": { + "example": "Leonardo DiCaprio", + "type": "string" }, - "msg": { - "example": "OK", + "person_id": { + "example": 1641, + "type": "integer" + }, + "role": { + "example": "ACTOR", "type": "string" } }, "type": "object" }, - "kalshi.orderBookResponseDoc": { + "justwatch.DiscoverResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "country": { + "example": "US", + "type": "string" }, - "data": { - "$ref": "#/definitions/kalshi.OrderBookResponse" + "genres": { + "example": [ + "act" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "language": { + "example": "en", + "type": "string" + }, + "monetization_types": { + "example": [ + "FLATRATE" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "production_countries": { + "example": [ + "KR" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "providers": { + "example": [ + "nfx" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "results": { + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" + }, + "type": { + "example": "all", "type": "string" + }, + "year_max": { + "example": 2026, + "type": "integer" + }, + "year_min": { + "example": 2020, + "type": "integer" } }, "type": "object" }, - "kalshi.seriesDetailResponseDoc": { + "justwatch.EpisodeByIDResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "country": { + "example": "US", + "type": "string" }, - "data": { - "$ref": "#/definitions/kalshi.SeriesDetailResponse" + "episode": { + "$ref": "#/definitions/justwatch.EpisodeSummary" }, - "msg": { - "example": "OK", + "language": { + "example": "en", "type": "string" } }, "type": "object" }, - "kalshi.seriesResponseDoc": { + "justwatch.EpisodeCountryOffers": { "properties": { - "code": { - "example": 200, - "type": "integer" + "country": { + "example": "US", + "type": "string" }, - "data": { - "$ref": "#/definitions/kalshi.SeriesResponse" + "episode": { + "$ref": "#/definitions/justwatch.EpisodeSummary" }, - "msg": { - "example": "OK", - "type": "string" + "offers": { + "items": { + "$ref": "#/definitions/justwatch.Offer" + }, + "type": "array" } }, "type": "object" }, - "kalshi.tradesResponseDoc": { + "justwatch.EpisodeOffersResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "countries": { + "items": { + "$ref": "#/definitions/justwatch.EpisodeCountryOffers" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/kalshi.TradesResponse" + "id": { + "example": "tse5550494", + "type": "string" }, - "msg": { - "example": "OK", + "language": { + "example": "en", "type": "string" } }, "type": "object" }, - "kfc.Address": { + "justwatch.EpisodeSummary": { "properties": { - "address1": { - "example": "600 Terminal Drive", + "description": { "type": "string" }, - "address2": { - "example": "Louisville International Airport - Pre Security", - "type": "string" + "episode_number": { + "example": 1, + "type": "integer" }, - "city": { - "example": "Louisville", + "id": { + "example": "tse5550494", "type": "string" }, - "country_code": { - "example": "US", + "object_id": { + "example": 5550494, + "type": "integer" + }, + "object_type": { + "example": "SHOW_EPISODE", "type": "string" }, - "latitude": { - "example": 38.1857, - "type": "number" + "offers": { + "items": { + "$ref": "#/definitions/justwatch.Offer" + }, + "type": "array" }, - "longitude": { - "example": -85.7445, - "type": "number" + "path": { + "type": "string" }, - "phone": { - "example": "+15023633000", + "poster_url": { "type": "string" }, - "postal_code": { - "example": "40209", + "title": { + "example": "Long Day's Journey Into Night", "type": "string" }, - "state": { - "example": "KY", + "url": { "type": "string" + }, + "year": { + "example": 2022, + "type": "integer" } }, "type": "object" }, - "kfc.DeliveryEstimateResponse": { + "justwatch.Genre": { "properties": { - "delivery_provider": { - "example": "DOORDASH", + "short_name": { + "example": "act", "type": "string" }, - "dropoff_at": { + "translation": { + "example": "Action & Adventure", "type": "string" - }, - "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": "object" + }, + "justwatch.GenreTitlesResponse": { + "properties": { + "country": { + "example": "US", "type": "string" }, - "pickup_at": { + "genre": { + "example": "act", "type": "string" }, - "reason": { - "example": "Marketplace store is inactive", + "language": { + "example": "en", "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, 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" + "results": { + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" }, - "store_number": { - "example": "K750015", + "type": { + "example": "all", "type": "string" } }, "type": "object" }, - "kfc.DeliveryFeeLine": { + "justwatch.GenresResponse": { "properties": { - "amount": { - "$ref": "#/definitions/kfc.Money" - }, - "name": { - "example": "Delivery Fee", - "type": "string" + "genres": { + "items": { + "$ref": "#/definitions/justwatch.Genre" + }, + "type": "array" }, - "type": { - "example": "DELIVERY", + "language": { + "example": "en", "type": "string" } }, "type": "object" }, - "kfc.MenuCategory": { + "justwatch.MonetizationTitlesResponse": { "properties": { - "category_code": { - "example": "combos", + "country": { + "example": "US", "type": "string" }, - "description": { - "example": "Combos", + "language": { + "example": "en", "type": "string" }, - "items": { + "monetization_type": { + "example": "FLATRATE", + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/kfc.MenuItem" + "$ref": "#/definitions/justwatch.SearchTitle" }, "type": "array" }, - "name": { - "example": "Combos", + "type": { + "example": "all", "type": "string" } }, "type": "object" }, - "kfc.MenuItem": { + "justwatch.NewTitlesResponse": { "properties": { - "code": { - "example": "chocolate-chunk-cookie", - "type": "string" - }, - "description": { - "type": "string" - }, - "image_url": { + "country": { + "example": "US", "type": "string" }, - "name": { - "example": "Chocolate Chunk Cookie", + "language": { + "example": "en", "type": "string" }, - "price": { - "$ref": "#/definitions/kfc.Money" + "results": { + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" }, "type": { - "example": "product", - "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|||||", + "example": "all", "type": "string" } }, "type": "object" }, - "kfc.MenuResponse": { + "justwatch.Offer": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/kfc.MenuCategory" - }, - "type": "array" + "availability": { + "example": "https://schema.org/InStock", + "type": "string" }, - "channel": { - "example": "WEB", + "category": { + "example": "Blu-Ray", "type": "string" }, "currency": { "example": "USD", "type": "string" }, - "fetched_at": { - "type": "string" - }, - "item_count": { - "example": 52, - "type": "integer" - }, - "menu_id": { - "example": "845791b0-7bdb-4ff0-92f2-344a89aa4b57", + "monetization_type": { + "example": "RENT", "type": "string" }, - "source_url": { + "presentation_type": { + "example": "4K", "type": "string" }, - "store_number": { - "example": "I824001", - "type": "string" - } - }, - "type": "object" - }, - "kfc.Money": { - "properties": { - "amount": { + "price": { "example": 4.99, "type": "number" }, - "amount_cents": { - "example": 499, + "provider": { + "example": "Amazon Video", + "type": "string" + }, + "provider_id": { + "example": 10, "type": "integer" }, - "currency_code": { - "example": "USD", + "provider_short": { + "example": "amz", + "type": "string" + }, + "provider_technical": { + "example": "amazon", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kfc.NearbyResponse": { + "justwatch.PopularResponse": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { + "country": { + "example": "US", "type": "string" }, - "has_more": { + "has_next_page": { "example": true, "type": "boolean" }, - "source_url": { + "language": { + "example": "en", "type": "string" }, - "stores": { + "next_cursor": { + "example": "Mg==", + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/kfc.NearbyStore" + "$ref": "#/definitions/justwatch.SearchTitle" }, "type": "array" + }, + "type": { + "example": "all", + "type": "string" } }, "type": "object" }, - "kfc.NearbyStore": { + "justwatch.PriceRange": { "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" - }, - "address": { - "$ref": "#/definitions/kfc.Address" + "currency": { + "example": "USD", + "type": "string" }, - "archived": { - "example": false, - "type": "boolean" + "max": { + "example": 14.99, + "type": "number" }, - "distance_miles": { - "example": 1.408, + "min": { + "example": 2.99, "type": "number" + } + }, + "type": "object" + }, + "justwatch.Provider": { + "properties": { + "clear_name": { + "example": "Netflix", + "type": "string" }, - "name": { - "example": "KFC 600 Terminal Drive", + "icon_url": { + "example": "https://images.justwatch.com/icon/207360008/s100/netflix.jpg", "type": "string" }, - "store_number": { - "example": "I824001", + "id": { + "example": 8, + "type": "integer" + }, + "short_name": { + "example": "nfx", "type": "string" }, - "timezone": { - "example": "America/New_York", + "technical_name": { + "example": "netflix", "type": "string" } }, "type": "object" }, - "kfc.OccasionHours": { + "justwatch.ProviderTitlesResponse": { "properties": { - "enabled": { - "example": true, - "type": "boolean" + "country": { + "example": "US", + "type": "string" }, - "occasion": { - "example": "DELIVERY", + "language": { + "example": "en", "type": "string" }, - "windows": { + "provider": { + "example": "nfx", + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/kfc.TimeWindow" + "$ref": "#/definitions/justwatch.SearchTitle" }, "type": "array" + }, + "type": { + "example": "all", + "type": "string" } }, "type": "object" }, - "kfc.Promotion": { + "justwatch.ProvidersResponse": { "properties": { - "automatic": { - "example": true, - "type": "boolean" - }, - "description": { - "type": "string" - }, - "display_name": { - "example": "50% off Chicken Sandwich", - "type": "string" - }, - "name": { - "example": "Digital-Q324 - 50% off Chicken Sandwich", - "type": "string" - }, - "promotion_id": { - "example": "6815f409-5b1e-44dc-9f99-26b1c1a2699a", + "country": { + "example": "US", "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" - ], + "providers": { "items": { - "type": "string" + "$ref": "#/definitions/justwatch.Provider" }, "type": "array" } }, "type": "object" }, - "kfc.PromotionResponse": { + "justwatch.Scoring": { "properties": { - "automatic": { + "best_rating": { + "example": "100", + "type": "string" + }, + "certified_fresh": { "example": true, "type": "boolean" }, - "code_status": { - "type": "string" + "imdb_score": { + "example": 8.8, + "type": "number" }, - "description": { - "type": "string" + "imdb_votes": { + "example": 2798306, + "type": "integer" }, - "display_name": { - "example": "50% off Chicken Sandwich", - "type": "string" + "justwatch_rating": { + "example": 97, + "type": "number" }, - "effective_date": { + "rating_count": { + "example": 77696, + "type": "integer" + }, + "tmdb_popularity": { + "example": 38.5801, + "type": "number" + }, + "tmdb_score": { + "example": 8.372, + "type": "number" + }, + "tomato_meter": { + "example": 87, + "type": "integer" + } + }, + "type": "object" + }, + "justwatch.SearchResponse": { + "properties": { + "country": { + "example": "US", "type": "string" }, - "expiration_date": { + "language": { + "example": "en", "type": "string" }, - "fetched_at": { + "query": { + "example": "inception", "type": "string" }, - "group_status": { + "results": { + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" + } + }, + "type": "object" + }, + "justwatch.SearchTitle": { + "properties": { + "id": { + "example": "tm92641", "type": "string" }, - "name": { - "example": "Digital-Q324 - 50% off Chicken Sandwich", + "object_id": { + "example": 92641, + "type": "integer" + }, + "object_type": { + "example": "MOVIE", "type": "string" }, - "promotion_id": { - "example": "6815f409-5b1e-44dc-9f99-26b1c1a2699a", + "offers": { + "items": { + "$ref": "#/definitions/justwatch.Offer" + }, + "type": "array" + }, + "path": { + "example": "/us/movie/inception", "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", + "poster_url": { + "example": "https://images.justwatch.com/poster/302449148/s718/inception.jpg", "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.", + "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": [ - "WALMART5DOLLARSOFF" + "KR" ], "items": { "type": "string" }, "type": "array" }, - "source_url": { + "title": { + "example": "Inception", "type": "string" }, - "times_used": { - "example": 0, + "url": { + "example": "https://www.justwatch.com/us/movie/inception", + "type": "string" + }, + "year": { + "example": 2010, "type": "integer" } }, "type": "object" }, - "kfc.PromotionsResponse": { + "justwatch.SeasonByIDResponse": { "properties": { - "count": { - "example": 15, - "type": "integer" + "country": { + "example": "US", + "type": "string" }, - "fetched_at": { + "language": { + "example": "en", "type": "string" }, - "promotions": { + "season": { + "$ref": "#/definitions/justwatch.SeasonSummary" + } + }, + "type": "object" + }, + "justwatch.SeasonEpisodesResponse": { + "properties": { + "country": { + "example": "US", + "type": "string" + }, + "episodes": { "items": { - "$ref": "#/definitions/kfc.Promotion" + "$ref": "#/definitions/justwatch.EpisodeSummary" }, "type": "array" }, - "source_url": { + "language": { + "example": "en", "type": "string" }, - "store_number": { - "example": "I824001", - "type": "string" + "season": { + "$ref": "#/definitions/justwatch.SeasonSummary" } }, "type": "object" }, - "kfc.Store": { + "justwatch.SeasonSummary": { "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" + "description": { + "type": "string" }, - "address": { - "$ref": "#/definitions/kfc.Address" + "id": { + "example": "tss297253", + "type": "string" }, - "archived": { - "example": false, - "type": "boolean" + "object_id": { + "example": 297253, + "type": "integer" }, - "name": { - "example": "KFC 600 Terminal Drive", + "object_type": { + "example": "SHOW_SEASON", "type": "string" }, - "store_number": { - "example": "I824001", + "path": { + "example": "/us/tv-show/from/season-1", "type": "string" }, - "timezone": { - "example": "America/New_York", + "poster_url": { + "example": "https://images.justwatch.com/poster/320190730/s718/season-1.jpg", + "type": "string" + }, + "season_number": { + "example": 1, + "type": "integer" + }, + "title": { + "example": "Season 1", + "type": "string" + }, + "url": { + "example": "https://www.justwatch.com/us/tv-show/from/season-1", "type": "string" + }, + "year": { + "example": 2022, + "type": "integer" } }, "type": "object" }, - "kfc.StoreResponse": { + "justwatch.ShowSeasonsResponse": { "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" - }, - "address": { - "$ref": "#/definitions/kfc.Address" - }, - "archived": { - "example": false, - "type": "boolean" + "country": { + "example": "US", + "type": "string" }, - "fetched_at": { + "language": { + "example": "en", "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.", + "seasons": { "items": { - "$ref": "#/definitions/kfc.OccasionHours" + "$ref": "#/definitions/justwatch.SeasonSummary" }, "type": "array" }, - "name": { - "example": "KFC 600 Terminal Drive", + "show": { + "$ref": "#/definitions/justwatch.TitleResponse" + } + }, + "type": "object" + }, + "justwatch.SimilarTitlesResponse": { + "properties": { + "country": { + "example": "US", "type": "string" }, - "source_url": { + "id": { + "example": "tm92641", "type": "string" }, - "store_number": { - "example": "I824001", + "language": { + "example": "en", "type": "string" }, - "timezone": { - "example": "America/New_York", + "results": { + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" + } + }, + "type": "object" + }, + "justwatch.TitleCountryOffers": { + "properties": { + "country": { + "example": "US", "type": "string" + }, + "offers": { + "items": { + "$ref": "#/definitions/justwatch.Offer" + }, + "type": "array" + }, + "title": { + "$ref": "#/definitions/justwatch.TitleResponse" } }, "type": "object" }, - "kfc.StoresResponse": { + "justwatch.TitleMediaResponse": { "properties": { - "count": { - "example": 5, - "type": "integer" + "backdrops": { + "items": { + "$ref": "#/definitions/justwatch.Backdrop" + }, + "type": "array" }, - "fetched_at": { + "clips": { + "items": { + "$ref": "#/definitions/justwatch.Clip" + }, + "type": "array" + }, + "country": { + "example": "US", "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "credits": { + "items": { + "$ref": "#/definitions/justwatch.Credit" + }, + "type": "array" }, - "source_url": { + "id": { + "example": "tm92641", "type": "string" }, - "stores": { + "language": { + "example": "en", + "type": "string" + }, + "title": { + "example": "Inception", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.TitleOffersResponse": { + "properties": { + "countries": { "items": { - "$ref": "#/definitions/kfc.Store" + "$ref": "#/definitions/justwatch.TitleCountryOffers" }, "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" + "id": { + "example": "tm92641", + "type": "string" + }, + "language": { + "example": "en", + "type": "string" } }, "type": "object" }, - "kfc.TimeWindow": { + "justwatch.TitleResponse": { "properties": { - "blackout": { - "example": false, - "type": "boolean" + "content_rating": { + "type": "string" }, - "days": { - "example": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], + "description": { + "type": "string" + }, + "genres": { "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "duration": { - "example": "09:00:00", + "id": { + "example": "tm92641", "type": "string" }, - "start_time": { - "example": "10:00:00", + "object_id": { + "example": 92641, + "type": "integer" + }, + "object_type": { + "example": "MOVIE", + "type": "string" + }, + "offers": { + "items": { + "$ref": "#/definitions/justwatch.Offer" + }, + "type": "array" + }, + "path": { + "example": "/us/movie/inception", + "type": "string" + }, + "poster_url": { + "example": "https://images.justwatch.com/poster/302449148/s718/inception.jpg", + "type": "string" + }, + "release_date": { + "example": "2010-07-14", + "type": "string" + }, + "runtime": { + "example": "PT2H28M0S", + "type": "string" + }, + "scoring": { + "$ref": "#/definitions/justwatch.Scoring" + }, + "title": { + "example": "Inception", "type": "string" + }, + "url": { + "example": "https://www.justwatch.com/us/movie/inception", + "type": "string" + }, + "year": { + "example": 2010, + "type": "integer" } }, "type": "object" }, - "kfc.deliveryEstimateResponseDoc": { + "justwatch.ageCertificationsResponseDoc": { "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/justwatch.AgeCertificationsResponse" }, "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": { + "justwatch.analysisResponseDoc": { "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/justwatch.AnalysisResponse" }, "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": { + "justwatch.discoverResponseDoc": { "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/justwatch.DiscoverResponse" }, "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": { + "justwatch.episodeByIDResponseDoc": { "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/justwatch.EpisodeByIDResponse" }, "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": { + "justwatch.episodeOffersResponseDoc": { "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/justwatch.EpisodeOffersResponse" }, "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": { + "justwatch.genreTitlesResponseDoc": { "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/justwatch.GenreTitlesResponse" }, "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": { + "justwatch.genresResponseDoc": { "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/justwatch.GenresResponse" }, "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": { + "justwatch.monetizationTitlesResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "biography": { - "type": "string" + "data": { + "$ref": "#/definitions/justwatch.MonetizationTitlesResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "justwatch.newTitlesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/justwatch.NewTitlesResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" - }, - "total_articles": { + } + }, + "type": "object" + }, + "justwatch.popularResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "twitter_handle": { - "type": "string" + "data": { + "$ref": "#/definitions/justwatch.PopularResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kickstarter.Category": { + "justwatch.providerTitlesResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "example": "Technology", - "type": "string" + "data": { + "$ref": "#/definitions/justwatch.ProviderTitlesResponse" }, - "parent_id": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.providersResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "slug": { - "example": "technology", - "type": "string" + "data": { + "$ref": "#/definitions/justwatch.ProvidersResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kickstarter.Comment": { + "justwatch.searchResponseDoc": { "properties": { - "author_name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "body": { + "data": { + "$ref": "#/definitions/justwatch.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "justwatch.seasonByIDResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_creator": { - "type": "boolean" + "data": { + "$ref": "#/definitions/justwatch.SeasonByIDResponse" }, - "posted_at": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kickstarter.CommentsResult": { + "justwatch.seasonEpisodesResponseDoc": { "properties": { - "comments": { - "items": { - "$ref": "#/definitions/kickstarter.Comment" - }, - "type": "array" - }, - "total_count": { + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/justwatch.SeasonEpisodesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "kickstarter.Creator": { + "justwatch.showSeasonsResponseDoc": { "properties": { - "avatar": { - "type": "string" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/justwatch.ShowSeasonsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kickstarter.DiscoverResult": { + "justwatch.similarTitlesResponseDoc": { "properties": { - "page": { + "code": { + "example": 200, "type": "integer" }, - "projects": { - "items": { - "$ref": "#/definitions/kickstarter.Project" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.SimilarTitlesResponse" }, - "total_hits": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "kickstarter.Location": { + "justwatch.titleMediaResponseDoc": { "properties": { - "country": { - "example": "US", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "displayable_name": { - "example": "Los Angeles, CA", - "type": "string" + "data": { + "$ref": "#/definitions/justwatch.TitleMediaResponse" }, - "id": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.titleOffersResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "example": "Los Angeles", - "type": "string" + "data": { + "$ref": "#/definitions/justwatch.TitleOffersResponse" }, - "short_name": { - "example": "Los Angeles, CA", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kickstarter.Photo": { + "justwatch.titleResponseDoc": { "properties": { - "full": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/justwatch.TitleResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kickstarter.Project": { + "kalshi.BatchMarketHistoryResponse": { "properties": { - "backers_count": { + "end_ts": { + "example": 1780804800, "type": "integer" }, - "blurb": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "category": { - "$ref": "#/definitions/kickstarter.Category" - }, - "comments_count": { - "type": "integer" + "include_latest_before_start": { + "example": false, + "type": "boolean" }, - "converted_pledged_amount": { - "type": "number" + "markets": { + "items": { + "$ref": "#/definitions/kalshi.MarketHistoryResponse" + }, + "type": "array" }, - "country": { - "example": "US", - "type": "string" + "period_interval": { + "example": 1440, + "type": "integer" }, - "created_at": { + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/markets/candlesticks", "type": "string" }, - "creator": { - "$ref": "#/definitions/kickstarter.Creator" + "start_ts": { + "example": 1780286400, + "type": "integer" }, - "currency": { - "example": "USD", - "type": "string" + "tickers": { + "example": [ + "KXELONMARS-99" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "kalshi.BatchOrderBookResponse": { + "properties": { + "books": { + "items": { + "$ref": "#/definitions/kalshi.OrderBookResponse" + }, + "type": "array" }, - "currency_symbol": { - "example": "$", + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "deadline": { + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/markets/orderbooks", "type": "string" }, - "faq_count": { - "type": "integer" + "tickers": { + "example": [ + "KXELONMARS-99" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "kalshi.CandleOHLC": { + "properties": { + "close": { + "example": 0.08, + "type": "number" }, - "goal": { + "high": { + "example": 0.11, "type": "number" }, - "has_video": { - "type": "boolean" + "low": { + "example": 0.08, + "type": "number" }, - "id": { - "example": 1114436418, - "type": "integer" + "mean": { + "example": 0.1014, + "type": "number" }, - "is_launched": { - "type": "boolean" + "open": { + "example": 0.11, + "type": "number" }, - "launched_at": { + "previous": { + "example": 0.08, + "type": "number" + } + }, + "type": "object" + }, + "kalshi.Competition": { + "properties": { + "id": { "type": "string" }, - "location": { - "$ref": "#/definitions/kickstarter.Location" - }, "name": { "type": "string" - }, - "percent_funded": { + } + }, + "type": "object" + }, + "kalshi.EventHistoryResponse": { + "properties": { + "adjusted_end_ts": { + "example": 1780804800, "type": "integer" }, - "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" + "end_ts": { + "example": 1780804800, + "type": "integer" }, - "risks_and_challenges": { + "event_ticker": { + "example": "KXELONMARS-99", "type": "string" }, - "slug": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "spotlight": { + "include_latest_before_start": { + "example": false, "type": "boolean" }, - "staff_pick": { - "type": "boolean" + "market_tickers": { + "example": [ + "KXELONMARS-99" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "state": { - "example": "live", - "type": "string" + "markets": { + "items": { + "$ref": "#/definitions/kalshi.MarketHistoryResponse" + }, + "type": "array" }, - "state_changed_at": { - "type": "string" + "period_interval": { + "example": 1440, + "type": "integer" }, - "story": { + "series_ticker": { + "example": "KXELONMARS", "type": "string" }, - "updates_count": { - "type": "integer" - }, - "url": { + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/events/KXELONMARS-99/candlesticks", "type": "string" }, - "usd_pledged": { - "type": "number" + "start_ts": { + "example": 1780286400, + "type": "integer" } }, "type": "object" }, - "kickstarter.RewardAddOn": { + "kalshi.EventMetadataResponse": { "properties": { - "amount": { - "type": "number" + "competition": { + "$ref": "#/definitions/kalshi.Competition" }, - "currency": { + "competition_scope": { "type": "string" }, - "description": { + "event_ticker": { + "example": "KXELONMARS-99", "type": "string" }, - "id": { + "featured_image_url": { "type": "string" }, - "name": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "image_url": { + "example": "https://kalshi-public-docs.s3.amazonaws.com/series-images-webp/KXELONMARS.webp", + "type": "string" + }, + "market_details": { + "items": { + "$ref": "#/definitions/kalshi.MarketDetail" + }, + "type": "array" + }, + "settlement_sources": { + "items": { + "$ref": "#/definitions/kalshi.SettlementSource" + }, + "type": "array" + }, + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/events/KXELONMARS-99/metadata", "type": "string" } }, "type": "object" }, - "kickstarter.RewardItem": { + "kalshi.EventResponse": { "properties": { - "name": { + "event": { + "$ref": "#/definitions/kalshi.EventRow" + }, + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "quantity": { - "type": "integer" + "markets": { + "items": { + "$ref": "#/definitions/kalshi.MarketRow" + }, + "type": "array" + }, + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/events/KXELONMARS-99", + "type": "string" } }, "type": "object" }, - "kickstarter.RewardTier": { + "kalshi.EventRow": { "properties": { - "add_ons": { - "items": { - "$ref": "#/definitions/kickstarter.RewardAddOn" - }, - "type": "array" - }, - "amount": { - "type": "number" - }, - "available": { + "available_on_brokers": { + "example": false, "type": "boolean" }, - "backers_count": { - "type": "integer" - }, - "currency": { - "example": "USD", - "type": "string" - }, - "description": { - "type": "string" - }, - "ends_at": { + "category": { + "example": "World", "type": "string" }, - "estimated_delivery_on": { - "example": "2026-06-01", + "collateral_return_type": { + "example": "MECNET", "type": "string" }, - "featured": { - "type": "boolean" - }, - "id": { + "event_ticker": { + "example": "KXELONMARS-99", "type": "string" }, - "image": { + "last_updated": { + "example": "2026-05-10T00:33:53Z", "type": "string" }, - "items": { + "markets": { "items": { - "$ref": "#/definitions/kickstarter.RewardItem" + "$ref": "#/definitions/kalshi.MarketRow" }, "type": "array" }, - "limit": { - "type": "integer" + "mutually_exclusive": { + "example": false, + "type": "boolean" }, - "name": { + "series_ticker": { + "example": "KXELONMARS", "type": "string" }, - "remaining_quantity": { - "type": "integer" - }, - "shipping_enabled": { - "type": "boolean" + "strike_period": { + "type": "string" }, - "shipping_preference": { - "example": "unrestricted", + "sub_title": { + "example": "Before 2099", "type": "string" }, - "shipping_summary": { + "title": { + "example": "Will Elon Musk visit Mars in his lifetime?", "type": "string" } }, "type": "object" }, - "kickstarter.Update": { + "kalshi.EventsResponse": { "properties": { - "author_name": { - "type": "string" - }, - "body": { + "cursor": { "type": "string" }, - "comments_count": { - "type": "integer" - }, - "is_creator": { - "type": "boolean" - }, - "number": { - "example": 7, - "type": "integer" + "events": { + "items": { + "$ref": "#/definitions/kalshi.EventRow" + }, + "type": "array" }, - "published_at": { - "example": "July 10, 2026", + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "title": { - "type": "string" + "limit": { + "example": 25, + "type": "integer" }, - "url": { + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/events?limit=25", "type": "string" } }, "type": "object" }, - "kickstarter.UpdatesResult": { + "kalshi.ExchangeHoursBlock": { "properties": { - "updates": { - "items": { - "$ref": "#/definitions/kickstarter.Update" - }, - "type": "array" + "close_time": { + "example": "00:00", + "type": "string" + }, + "open_time": { + "example": "00:00", + "type": "string" } }, "type": "object" }, - "kickstarter.commentsResponseDoc": { + "kalshi.ExchangeMaintenanceWindow": { "properties": { - "code": { - "example": 200, - "type": "integer" + "end_time": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kickstarter.CommentsResult" + "reason": { + "type": "string" }, - "msg": { - "example": "OK", + "start_time": { "type": "string" } }, "type": "object" }, - "kickstarter.discoverResponseDoc": { + "kalshi.ExchangeScheduleResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/kickstarter.DiscoverResult" + "maintenance_windows": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeMaintenanceWindow" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/exchange/schedule", "type": "string" + }, + "standard_hours": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeStandardHours" + }, + "type": "array" } }, "type": "object" }, - "kickstarter.projectResponseDoc": { + "kalshi.ExchangeStandardHours": { "properties": { - "code": { - "example": 200, - "type": "integer" + "end_time": { + "example": "2200-12-01T00:00:00Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/kickstarter.Project" + "friday": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + }, + "type": "array" }, - "msg": { - "example": "OK", + "monday": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + }, + "type": "array" + }, + "saturday": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + }, + "type": "array" + }, + "start_time": { + "example": "2024-12-01T00:00:00Z", "type": "string" + }, + "sunday": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + }, + "type": "array" + }, + "thursday": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + }, + "type": "array" + }, + "tuesday": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + }, + "type": "array" + }, + "wednesday": { + "items": { + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + }, + "type": "array" } }, "type": "object" }, - "kickstarter.updatesResponseDoc": { + "kalshi.ExchangeStatusResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "exchange_active": { + "example": true, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/kickstarter.UpdatesResult" + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/exchange/status", "type": "string" + }, + "trading_active": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "kohls.CategoryFacet": { + "kalshi.HistoricalCutoffResponse": { "properties": { - "label": { - "example": "Department", + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "name": { - "example": "Department", + "market_settled_at": { + "example": "2026-04-08T00:00:00Z", "type": "string" }, - "options": { + "orders_updated_at": { + "example": "2026-04-08T00:00:00Z", + "type": "string" + }, + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/historical/cutoff", + "type": "string" + }, + "trades_created_at": { + "example": "2026-04-08T00:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.HistoricalMarketResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "market": { + "$ref": "#/definitions/kalshi.MarketRow" + }, + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/historical/markets/KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.HistoricalMarketsResponse": { + "properties": { + "cursor": { + "type": "string" + }, + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "limit": { + "example": 25, + "type": "integer" + }, + "markets": { "items": { - "$ref": "#/definitions/kohls.CategoryFacetOption" + "$ref": "#/definitions/kalshi.MarketRow" }, "type": "array" + }, + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/historical/markets?limit=25", + "type": "string" } }, "type": "object" }, - "kohls.CategoryFacetOption": { + "kalshi.HistoricalTradesResponse": { "properties": { - "active": { - "type": "boolean" - }, - "category": { - "example": "Room:Dorm+Department:Bedding", + "cursor": { "type": "string" }, - "name": { - "example": "Bedding", + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "product_count": { - "example": 479, + "limit": { + "example": 25, + "type": "integer" + }, + "max_ts": { + "example": 1775689200, + "type": "integer" + }, + "min_ts": { + "example": 1775602800, "type": "integer" + }, + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/historical/trades?limit=25", + "type": "string" + }, + "ticker": { + "example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557", + "type": "string" + }, + "trades": { + "items": { + "$ref": "#/definitions/kalshi.TradeRow" + }, + "type": "array" } }, "type": "object" }, - "kohls.CategoryPriceRange": { + "kalshi.MarketCandlestick": { "properties": { - "max_price": { - "example": 9.99, + "end_period_at": { + "example": "2026-06-01T00:00:00Z", + "type": "string" + }, + "end_period_ts": { + "example": 1780286400, + "type": "integer" + }, + "open_interest": { + "example": 32980.77, "type": "number" }, - "min_price": { - "example": 2.99, + "price": { + "$ref": "#/definitions/kalshi.CandleOHLC" + }, + "volume": { + "example": 7, "type": "number" + }, + "yes_ask": { + "$ref": "#/definitions/kalshi.CandleOHLC" + }, + "yes_bid": { + "$ref": "#/definitions/kalshi.CandleOHLC" } }, "type": "object" }, - "kohls.CategoryProduct": { + "kalshi.MarketDetail": { "properties": { - "available_for_pickup": { - "example": false, - "type": "boolean" + "color_code": { + "example": "#AA00FF", + "type": "string" }, - "available_for_ship": { - "example": true, - "type": "boolean" + "image_url": { + "type": "string" }, - "colors": { + "market_ticker": { + "example": "KXELONMARS-99", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.MarketHistoryResponse": { + "properties": { + "candlesticks": { "items": { - "type": "string" + "$ref": "#/definitions/kalshi.MarketCandlestick" }, "type": "array" }, - "currency_code": { - "example": "USD", - "type": "string" + "end_ts": { + "example": 1780804800, + "type": "integer" }, - "image_url": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "on_sale": { - "example": true, + "include_latest_before_start": { + "example": false, "type": "boolean" }, - "rating": { - "example": 3.9, - "type": "number" - }, - "regular_price": { - "$ref": "#/definitions/kohls.CategoryPriceRange" - }, - "review_count": { - "example": 27103, + "period_interval": { + "example": 1440, "type": "integer" }, - "sale_price": { - "$ref": "#/definitions/kohls.CategoryPriceRange" + "series_ticker": { + "example": "KXELONMARS", + "type": "string" }, - "title": { - "example": "The Big One® Solid Bath Towel, Bath Sheet, Hand Towel or Washcloth", + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/markets/KXELONMARS-99/candlesticks", "type": "string" }, - "url": { + "start_ts": { + "example": 1780286400, + "type": "integer" + }, + "ticker": { + "example": "KXELONMARS-99", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.MarketResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "web_id": { - "example": "4569328", + "market": { + "$ref": "#/definitions/kalshi.MarketRow" + }, + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/markets/KXELONMARS-99", "type": "string" } }, "type": "object" }, - "kohls.CategoryResponse": { + "kalshi.MarketRow": { "properties": { - "category": { - "example": "Room:Dorm", + "close_time": { + "example": "2099-08-01T04:59:00Z", "type": "string" }, - "count": { - "example": 120, - "type": "integer" + "event_ticker": { + "example": "KXELONMARS-99", + "type": "string" }, - "facets": { - "items": { - "$ref": "#/definitions/kohls.CategoryFacet" - }, - "type": "array" + "expiration_time": { + "example": "2099-08-08T15:00:00Z", + "type": "string" }, - "fetched_at": { + "last_price": { + "example": 0.08, + "type": "number" + }, + "liquidity": { + "example": 0, + "type": "number" + }, + "market_type": { + "example": "binary", "type": "string" }, - "limit": { - "example": 120, - "type": "integer" + "no_ask": { + "example": 0.92, + "type": "number" }, - "product_count": { - "example": 1317, - "type": "integer" + "no_bid": { + "example": 0.9, + "type": "number" }, - "products": { - "items": { - "$ref": "#/definitions/kohls.CategoryProduct" - }, - "type": "array" + "open_interest": { + "example": 32773.57, + "type": "number" }, - "source_url": { + "open_time": { + "example": "2025-08-28T20:45:00Z", + "type": "string" + }, + "previous_price": { + "example": 0.1, + "type": "number" + }, + "response_price_unit": { + "example": "usd_cent", + "type": "string" + }, + "result": { + "type": "string" + }, + "rules_primary": { + "type": "string" + }, + "status": { + "example": "active", + "type": "string" + }, + "sub_title": { + "example": "Mars", + "type": "string" + }, + "ticker": { + "example": "KXELONMARS-99", "type": "string" }, "title": { - "example": "Essential Dorm Items for College-Bound Students | Kohl's", + "example": "Will Elon Musk visit Mars before Aug 1, 2099?", "type": "string" }, - "total_pages": { - "example": 11, - "type": "integer" + "volume": { + "example": 94840.88, + "type": "number" + }, + "volume_24h": { + "example": 16, + "type": "number" + }, + "yes_ask": { + "example": 0.1, + "type": "number" + }, + "yes_bid": { + "example": 0.08, + "type": "number" } }, "type": "object" }, - "kohls.ProductReviewsResponse": { + "kalshi.MarketsResponse": { "properties": { - "fetched_at": { + "cursor": { "type": "string" }, - "page": { - "type": "integer" + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "page_size": { + "limit": { + "example": 25, "type": "integer" }, - "reviews": { + "markets": { "items": { - "$ref": "#/definitions/kohls.Review" + "$ref": "#/definitions/kalshi.MarketRow" }, "type": "array" }, "source_url": { - "type": "string" - }, - "total_count": { - "type": "integer" - }, - "web_id": { + "example": "https://external-api.kalshi.com/trade-api/v2/markets?limit=25", "type": "string" } }, "type": "object" }, - "kohls.Review": { + "kalshi.MultivariateEventsResponse": { "properties": { - "author": { - "type": "string" - }, - "id": { - "type": "string" - }, - "location": { + "cursor": { "type": "string" }, - "photo_urls": { + "events": { "items": { - "type": "string" + "$ref": "#/definitions/kalshi.EventRow" }, "type": "array" }, - "rating": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "limit": { + "example": 25, "type": "integer" }, - "recommended": { - "type": "boolean" + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/events/multivariate?limit=25", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.OrderBookLevel": { + "properties": { + "price": { + "example": 0.08, + "type": "number" }, - "secondary_ratings": { + "size": { + "example": 185.72, + "type": "number" + } + }, + "type": "object" + }, + "kalshi.OrderBookResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "no": { "items": { - "$ref": "#/definitions/kohls.ReviewSecondaryRating" + "$ref": "#/definitions/kalshi.OrderBookLevel" }, "type": "array" }, - "submitted_at": { + "raw_unit_hint": { + "example": "dollars", "type": "string" }, - "text": { + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/markets/KXELONMARS-99/orderbook", "type": "string" }, - "title": { + "ticker": { + "example": "KXELONMARS-99", "type": "string" + }, + "yes": { + "items": { + "$ref": "#/definitions/kalshi.OrderBookLevel" + }, + "type": "array" } }, "type": "object" }, - "kohls.ReviewSecondaryRating": { + "kalshi.SeriesDetailResponse": { "properties": { - "max_value": { - "example": 5, - "type": "integer" - }, - "name": { - "example": "Quality", + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "value": { - "example": 4, - "type": "integer" + "series": { + "$ref": "#/definitions/kalshi.SeriesRow" + }, + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS", + "type": "string" } }, "type": "object" }, - "kohls.Store": { + "kalshi.SeriesResponse": { "properties": { - "address": { - "example": "17150 SOUTHCENTER PKWY", + "cursor": { "type": "string" }, - "badges": { - "example": [ - "Sephora", - "Baby Gifting Shop" - ], + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "limit": { + "example": 25, + "type": "integer" + }, + "series": { "items": { - "type": "string" + "$ref": "#/definitions/kalshi.SeriesRow" }, "type": "array" }, - "city": { - "example": "TUKWILA", + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/series?limit=25", "type": "string" - }, - "country": { - "example": "US", + } + }, + "type": "object" + }, + "kalshi.SeriesRow": { + "properties": { + "category": { + "example": "Politics", "type": "string" }, - "distance_miles": { - "example": 11.3, - "type": "number" - }, - "hours": { - "items": { - "$ref": "#/definitions/kohls.StoreHours" - }, - "type": "array" + "contract_terms_url": { + "type": "string" }, - "id": { - "example": "1152", + "contract_url": { "type": "string" }, - "latitude": { - "example": 47.450079, + "fee_multiplier": { + "example": 1, "type": "number" }, - "longitude": { - "example": -122.2581113, - "type": "number" + "fee_type": { + "example": "quadratic", + "type": "string" }, - "name": { - "example": "Kohl's Tukwila", + "frequency": { + "example": "custom", "type": "string" }, - "phone": { - "example": "(206) 394-0078", + "last_updated": { + "example": "2026-06-01T15:24:00Z", "type": "string" }, - "postal_code": { - "example": "98188", + "series_ticker": { + "example": "KXELONMARS", "type": "string" }, - "services": { - "example": [ - "In-Store Pickup", - "Wifi Enabled" - ], + "settlement_sources": { "items": { - "type": "string" + "$ref": "#/definitions/kalshi.SettlementSource" }, "type": "array" }, - "state": { - "example": "WA", - "type": "string" - }, - "url": { + "title": { + "example": "Will Elon Musk visit Mars in his lifetime?", "type": "string" } }, "type": "object" }, - "kohls.StoreHours": { + "kalshi.SettlementSource": { "properties": { - "close": { - "example": "21:00", - "type": "string" - }, - "day": { - "example": "Monday", + "name": { + "example": "The Guardian", "type": "string" }, - "open": { - "example": "09:00", + "url": { + "example": "https://www.theguardian.com", "type": "string" } }, "type": "object" }, - "kohls.StoresResponse": { + "kalshi.TradeRow": { "properties": { "count": { + "example": 2, + "type": "number" + }, + "created_time": { + "example": "2026-06-07T07:23:05Z", + "type": "string" + }, + "created_ts": { + "example": 1780816985, "type": "integer" }, - "fetched_at": { + "is_block_trade": { + "example": false, + "type": "boolean" + }, + "no_price": { + "example": 0.91, + "type": "number" + }, + "taker_book_side": { + "example": "ask", "type": "string" }, - "search": { + "taker_outcome_side": { + "example": "no", "type": "string" }, - "source_url": { + "taker_side": { + "example": "no", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/kohls.Store" - }, - "type": "array" + "ticker": { + "example": "KXELONMARS-99", + "type": "string" + }, + "trade_id": { + "example": "9126fe1f-7233-7c75-2c37-06ce7841bbe3", + "type": "string" + }, + "yes_price": { + "example": 0.09, + "type": "number" } }, "type": "object" }, - "kohls.SuggestResponse": { + "kalshi.TradesResponse": { "properties": { - "count": { - "type": "integer" + "cursor": { + "type": "string" }, "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "query": { - "type": "string" + "limit": { + "example": 25, + "type": "integer" + }, + "max_ts": { + "example": 1780873200, + "type": "integer" + }, + "min_ts": { + "example": 1780786800, + "type": "integer" }, "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/markets/trades?limit=25", "type": "string" }, - "suggestions": { + "ticker": { + "example": "KXELONMARS-99", + "type": "string" + }, + "trades": { "items": { - "type": "string" + "$ref": "#/definitions/kalshi.TradeRow" }, "type": "array" } }, "type": "object" }, - "kohls.categoryResponseDoc": { + "kalshi.batchMarketHistoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kohls.CategoryResponse" + "$ref": "#/definitions/kalshi.BatchMarketHistoryResponse" }, "msg": { "example": "OK", @@ -91439,14 +93955,14 @@ }, "type": "object" }, - "kohls.productReviewsResponseDoc": { + "kalshi.batchOrderBookResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kohls.ProductReviewsResponse" + "$ref": "#/definitions/kalshi.BatchOrderBookResponse" }, "msg": { "example": "OK", @@ -91455,14 +93971,14 @@ }, "type": "object" }, - "kohls.storesResponseDoc": { + "kalshi.eventHistoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kohls.StoresResponse" + "$ref": "#/definitions/kalshi.EventHistoryResponse" }, "msg": { "example": "OK", @@ -91471,14 +93987,14 @@ }, "type": "object" }, - "kohls.suggestResponseDoc": { + "kalshi.eventMetadataResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kohls.SuggestResponse" + "$ref": "#/definitions/kalshi.EventMetadataResponse" }, "msg": { "example": "OK", @@ -91487,1074 +94003,931 @@ }, "type": "object" }, - "kotaku.AuthorResponse": { + "kalshi.eventResponseDoc": { "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/kalshi.EventResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kotaku.AuthorSocialLink": { + "kalshi.eventsResponseDoc": { "properties": { - "type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/kalshi.EventsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.CategoriesResponse": { + "kalshi.exchangeScheduleResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/kroger.CategoryTaxon" - }, - "type": "array" - }, - "count": { + "code": { + "example": 200, "type": "integer" }, - "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" + "data": { + "$ref": "#/definitions/kalshi.ExchangeScheduleResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.CategoryResponse": { + "kalshi.exchangeStatusResponseDoc": { "properties": { - "category_id": { - "type": "string" - }, - "facets": { - "items": { - "$ref": "#/definitions/kroger.SearchFacetGroup" - }, - "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": { + "code": { + "example": 200, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/kroger.SearchResultProduct" - }, - "type": "array" - }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.ExchangeStatusResponse" }, - "source": { + "msg": { + "example": "OK", "type": "string" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "kroger.CategoryTaxon": { + "kalshi.historicalCutoffResponseDoc": { "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": { - "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.", - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.HistoricalCutoffResponse" }, - "url": { - "description": "URL is the canonical kroger.com category-browse page URL.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.Coupon": { + "kalshi.historicalMarketResponseDoc": { "properties": { - "brand": { - "type": "string" - }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "display_description": { - "type": "string" - }, - "end_date": { - "type": "string" - }, - "expiration_date": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "kroger_coupon_number": { - "type": "string" - }, - "modalities": { - "items": { - "type": "string" - }, - "type": "array" - }, - "redemptions_allowed": { - "type": "integer" - }, - "requirement_description": { - "type": "string" - }, - "requirement_quantity": { + "code": { + "example": 200, "type": "integer" }, - "savings": { - "type": "number" - }, - "savings_tags": { - "items": { - "$ref": "#/definitions/kroger.CouponSavingsTag" - }, - "type": "array" - }, - "short_description": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.HistoricalMarketResponse" }, - "start_date": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "kalshi.historicalMarketsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "status": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.HistoricalMarketsResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" - }, - "total_downloads": { + } + }, + "type": "object" + }, + "kalshi.historicalTradesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "type": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.HistoricalTradesResponse" }, - "value": { - "type": "number" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "kroger.CouponSavingsTag": { + "kalshi.marketHistoryResponseDoc": { "properties": { - "description": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "display_name": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.MarketHistoryResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.CouponsResponse": { + "kalshi.marketResponseDoc": { "properties": { - "brand": { - "type": "string" - }, - "count": { + "code": { + "example": 200, "type": "integer" }, - "coupons": { - "items": { - "$ref": "#/definitions/kroger.Coupon" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.MarketResponse" }, - "location_id": { + "msg": { + "example": "OK", "type": "string" - }, - "page": { + } + }, + "type": "object" + }, + "kalshi.marketsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "page_size": { - "type": "integer" + "data": { + "$ref": "#/definitions/kalshi.MarketsResponse" }, - "upc": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.NutritionFact": { + "kalshi.multivariateEventsResponseDoc": { "properties": { - "daily_value": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "unit": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.MultivariateEventsResponse" }, - "value": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.ProductCategory": { + "kalshi.orderBookResponseDoc": { "properties": { - "commodity": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "department": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.OrderBookResponse" }, - "sub_commodity": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.ProductDetail": { + "kalshi.seriesDetailResponseDoc": { "properties": { - "alcohol": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "brand": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.SeriesDetailResponse" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "$ref": "#/definitions/kroger.ProductCategory" - }, - "country_of_origin": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "images": { - "items": { - "$ref": "#/definitions/kroger.ProductImage" - }, - "type": "array" - }, - "inventory": { - "$ref": "#/definitions/kroger.ProductInventory" - }, - "name": { - "type": "string" - }, - "nutrition": { - "$ref": "#/definitions/kroger.ProductNutrition" - }, - "price": { - "$ref": "#/definitions/kroger.ProductPrice" - }, - "rating": { - "$ref": "#/definitions/kroger.ProductRating" - }, - "size": { - "type": "string" - }, - "upc": { - "type": "string" - }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.ProductImage": { + "kalshi.seriesResponseDoc": { "properties": { - "perspective": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "size": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.SeriesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.ProductInventory": { + "kalshi.tradesResponseDoc": { "properties": { - "available": { + "code": { + "example": 200, "type": "integer" }, - "location_id": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.TradesResponse" }, - "stock_level": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.ProductNutrition": { + "kfc.Address": { "properties": { - "allergens": { + "address1": { + "example": "600 Terminal Drive", "type": "string" }, - "facts": { - "items": { - "$ref": "#/definitions/kroger.NutritionFact" - }, - "type": "array" - }, - "gluten_free": { - "type": "boolean" + "address2": { + "example": "Louisville International Airport - Pre Security", + "type": "string" }, - "ingredients": { + "city": { + "example": "Louisville", "type": "string" }, - "kosher": { - "type": "boolean" + "country_code": { + "example": "US", + "type": "string" }, - "non_gmo": { - "type": "boolean" + "latitude": { + "example": 38.1857, + "type": "number" }, - "organic": { - "type": "boolean" + "longitude": { + "example": -85.7445, + "type": "number" }, - "product_warning": { + "phone": { + "example": "+15023633000", "type": "string" }, - "serving_size": { + "postal_code": { + "example": "40209", "type": "string" }, - "servings_per_container": { + "state": { + "example": "KY", "type": "string" } }, "type": "object" }, - "kroger.ProductOffer": { + "kfc.DeliveryEstimateResponse": { "properties": { - "availability": { + "delivery_provider": { + "example": "DOORDASH", "type": "string" }, - "currency": { + "dropoff_at": { "type": "string" }, - "original_price": { - "type": "number" + "fee": { + "allOf": [ + { + "$ref": "#/definitions/kfc.Money" + } + ], + "description": "Fee is the total delivery fee; Fees breaks it down by line item." }, - "price": { - "type": "number" + "fees": { + "items": { + "$ref": "#/definitions/kfc.DeliveryFeeLine" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "pickup_at": { + "type": "string" + }, + "reason": { + "example": "Marketplace store is inactive", + "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, 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" + }, + "store_number": { + "example": "K750015", + "type": "string" } }, "type": "object" }, - "kroger.ProductPrice": { + "kfc.DeliveryFeeLine": { "properties": { "amount": { - "type": "number" + "$ref": "#/definitions/kfc.Money" }, - "currency": { + "name": { + "example": "Delivery Fee", "type": "string" }, - "display": { + "type": { + "example": "DELIVERY", "type": "string" - }, - "location_id": { + } + }, + "type": "object" + }, + "kfc.MenuCategory": { + "properties": { + "category_code": { + "example": "combos", "type": "string" }, - "seller_id": { + "description": { + "example": "Combos", "type": "string" }, - "seller_name": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/kfc.MenuItem" + }, + "type": "array" }, - "unit_price_text": { + "name": { + "example": "Combos", "type": "string" } }, "type": "object" }, - "kroger.ProductRating": { + "kfc.MenuItem": { "properties": { - "average": { - "type": "number" + "code": { + "example": "chocolate-chunk-cookie", + "type": "string" }, - "count": { - "type": "integer" + "description": { + "type": "string" }, - "five_stars": { - "type": "integer" + "image_url": { + "type": "string" }, - "four_stars": { - "type": "integer" + "name": { + "example": "Chocolate Chunk Cookie", + "type": "string" }, - "one_star": { - "type": "integer" + "price": { + "$ref": "#/definitions/kfc.Money" }, - "three_stars": { - "type": "integer" + "type": { + "example": "product", + "type": "string" }, - "two_stars": { - "type": "integer" + "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" }, - "kroger.ProductResponse": { + "kfc.MenuResponse": { "properties": { - "brand": { - "type": "string" - }, "categories": { "items": { - "type": "string" + "$ref": "#/definitions/kfc.MenuCategory" }, "type": "array" }, - "description": { + "channel": { + "example": "WEB", "type": "string" }, - "image_url": { + "currency": { + "example": "USD", "type": "string" }, - "offer": { - "$ref": "#/definitions/kroger.ProductOffer" + "fetched_at": { + "type": "string" }, - "rating_count": { + "item_count": { + "example": 52, "type": "integer" }, - "rating_value": { - "type": "number" - }, - "title": { + "menu_id": { + "example": "845791b0-7bdb-4ff0-92f2-344a89aa4b57", "type": "string" }, - "upc": { + "source_url": { "type": "string" }, - "url": { + "store_number": { + "example": "I824001", "type": "string" } }, "type": "object" }, - "kroger.ProductsResponse": { + "kfc.Money": { "properties": { - "count": { - "type": "integer" - }, - "location_id": { - "type": "string" + "amount": { + "example": 4.99, + "type": "number" }, - "products": { - "items": { - "$ref": "#/definitions/kroger.ProductDetail" - }, - "type": "array" - } - }, - "type": "object" - }, - "kroger.RelatedTag": { - "properties": { - "position": { + "amount_cents": { + "example": 499, "type": "integer" }, - "query": { - "type": "string" - }, - "source": { - "type": "string" - }, - "tag": { + "currency_code": { + "example": "USD", "type": "string" } }, "type": "object" }, - "kroger.RelatedTagsResponse": { + "kfc.NearbyResponse": { "properties": { "count": { + "example": 20, "type": "integer" }, - "location_id": { + "fetched_at": { "type": "string" }, - "query": { + "has_more": { + "example": true, + "type": "boolean" + }, + "source_url": { "type": "string" }, - "related_tags": { + "stores": { "items": { - "$ref": "#/definitions/kroger.RelatedTag" + "$ref": "#/definitions/kfc.NearbyStore" }, "type": "array" } }, "type": "object" }, - "kroger.Review": { + "kfc.NearbyStore": { "properties": { - "featured": { + "accepting_online_orders": { + "example": true, "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": { - "type": "integer" + "address": { + "$ref": "#/definitions/kfc.Address" }, - "ratings_only": { + "archived": { + "example": false, "type": "boolean" }, - "recommended": { - "type": "boolean" + "distance_miles": { + "example": 1.408, + "type": "number" }, - "submitted_at": { + "name": { + "example": "KFC 600 Terminal Drive", "type": "string" }, - "text": { + "store_number": { + "example": "I824001", "type": "string" }, - "title": { + "timezone": { + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "kroger.ReviewPhoto": { + "kfc.OccasionHours": { "properties": { - "size": { - "type": "string" + "enabled": { + "example": true, + "type": "boolean" }, - "url": { + "occasion": { + "example": "DELIVERY", "type": "string" - } - }, - "type": "object" - }, - "kroger.ReviewsResponse": { - "properties": { - "average_rating": { - "type": "number" - }, - "page": { - "type": "integer" }, - "page_size": { - "type": "integer" - }, - "rating": { - "$ref": "#/definitions/kroger.ProductRating" - }, - "reviews": { + "windows": { "items": { - "$ref": "#/definitions/kroger.Review" + "$ref": "#/definitions/kfc.TimeWindow" }, "type": "array" - }, - "total_count": { - "type": "integer" - }, - "upc": { - "type": "string" } }, "type": "object" }, - "kroger.SearchFacetGroup": { + "kfc.Promotion": { "properties": { - "group": { + "automatic": { + "example": true, + "type": "boolean" + }, + "description": { "type": "string" }, - "values": { - "items": { - "$ref": "#/definitions/kroger.SearchFacetValue" - }, - "type": "array" - } - }, - "type": "object" - }, - "kroger.SearchFacetValue": { - "properties": { - "count": { - "type": "integer" + "display_name": { + "example": "50% off Chicken Sandwich", + "type": "string" }, "name": { + "example": "Digital-Q324 - 50% off Chicken Sandwich", "type": "string" }, - "slug": { + "promotion_id": { + "example": "6815f409-5b1e-44dc-9f99-26b1c1a2699a", "type": "string" - } - }, - "type": "object" - }, - "kroger.SearchResponse": { - "properties": { - "facets": { - "items": { - "$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" }, - "products": { + "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/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.", - "type": "string" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "kroger.SearchResultProduct": { + "kfc.PromotionResponse": { "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.", - "type": "string" + "automatic": { + "example": true, + "type": "boolean" }, - "currency": { + "code_status": { "type": "string" }, - "image_url": { + "description": { "type": "string" }, - "low_stock": { - "type": "boolean" - }, - "original_price": { - "type": "number" + "display_name": { + "example": "50% off Chicken Sandwich", + "type": "string" }, - "price": { - "type": "number" + "effective_date": { + "type": "string" }, - "size": { + "expiration_date": { "type": "string" }, - "snap_ebt_eligible": { - "type": "boolean" + "fetched_at": { + "type": "string" }, - "stock_level": { + "group_status": { "type": "string" }, - "title": { + "name": { + "example": "Digital-Q324 - 50% off Chicken Sandwich", "type": "string" }, - "unit_price": { + "promotion_id": { + "example": "6815f409-5b1e-44dc-9f99-26b1c1a2699a", "type": "string" }, - "upc": { + "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" }, - "url": { + "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" + }, + "source_url": { "type": "string" + }, + "times_used": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "kroger.StoreAddress": { + "kfc.PromotionsResponse": { "properties": { - "address_lines": { - "items": { - "type": "string" - }, - "type": "array" + "count": { + "example": 15, + "type": "integer" }, - "city": { + "fetched_at": { "type": "string" }, - "country": { - "type": "string" + "promotions": { + "items": { + "$ref": "#/definitions/kfc.Promotion" + }, + "type": "array" }, - "postal_code": { + "source_url": { "type": "string" }, - "state": { + "store_number": { + "example": "I824001", "type": "string" } }, "type": "object" }, - "kroger.StoreHours": { + "kfc.Store": { "properties": { - "days": { + "accepting_online_orders": { + "example": true, + "type": "boolean" + }, + "address": { + "$ref": "#/definitions/kfc.Address" + }, + "archived": { + "example": false, + "type": "boolean" + }, + "name": { + "example": "KFC 600 Terminal Drive", "type": "string" }, - "hours": { + "store_number": { + "example": "I824001", "type": "string" }, - "is_today": { - "type": "boolean" + "timezone": { + "example": "America/New_York", + "type": "string" } }, "type": "object" }, - "kroger.StoreLocation": { + "kfc.StoreResponse": { "properties": { - "latitude": { - "type": "number" + "accepting_online_orders": { + "example": true, + "type": "boolean" }, - "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" + "$ref": "#/definitions/kfc.Address" }, - "has_drive_thru": { + "archived": { + "example": false, "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/kroger.StoreHours" + "$ref": "#/definitions/kfc.OccasionHours" }, "type": "array" }, - "location": { - "$ref": "#/definitions/kroger.StoreLocation" - }, "name": { + "example": "KFC 600 Terminal Drive", "type": "string" }, - "open_text": { + "source_url": { "type": "string" }, - "phone": { + "store_number": { + "example": "I824001", "type": "string" }, - "store_id": { + "timezone": { + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "kroger.SuggestResponse": { + "kfc.StoresResponse": { "properties": { - "location_id": { - "type": "string" + "count": { + "example": 5, + "type": "integer" }, - "query": { + "fetched_at": { "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).", + "has_more": { + "example": true, + "type": "boolean" + }, + "source_url": { "type": "string" }, - "suggestions": { + "stores": { "items": { - "$ref": "#/definitions/kroger.Suggestion" + "$ref": "#/definitions/kfc.Store" }, "type": "array" - } - }, - "type": "object" - }, - "kroger.Suggestion": { - "properties": { - "type": { - "type": "string" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "kroger.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, + "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" - }, - "data": { - "$ref": "#/definitions/kroger.CategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" } }, "type": "object" }, - "kroger.categoryResponseDoc": { + "kfc.TimeWindow": { "properties": { - "code": { - "example": 200, - "type": "integer" + "blackout": { + "example": false, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/kroger.CategoryResponse" + "days": { + "example": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "msg": { - "example": "OK", + "duration": { + "example": "09:00:00", "type": "string" - } - }, - "type": "object" - }, - "kroger.couponsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kroger.CouponsResponse" }, - "msg": { - "example": "OK", + "start_time": { + "example": "10:00:00", "type": "string" } }, "type": "object" }, - "kroger.productResponseDoc": { + "kfc.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/kroger.ProductResponse" + "$ref": "#/definitions/kfc.DeliveryEstimateResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kroger.productsResponseDoc": { + "kfc.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/kroger.ProductsResponse" + "$ref": "#/definitions/kfc.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kroger.relatedTagsResponseDoc": { + "kfc.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/kroger.RelatedTagsResponse" + "$ref": "#/definitions/kfc.NearbyResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kroger.reviewsResponseDoc": { + "kfc.promotionResponseDoc": { "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/kroger.ReviewsResponse" + "$ref": "#/definitions/kfc.PromotionResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kroger.searchResponseDoc": { + "kfc.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/kroger.SearchResponse" + "$ref": "#/definitions/kfc.PromotionsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kroger.storeResponseDoc": { + "kfc.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/kroger.StoreResponse" + "$ref": "#/definitions/kfc.StoreResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "kroger.suggestResponseDoc": { + "kfc.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/kroger.SuggestResponse" + "$ref": "#/definitions/kfc.StoresResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "latimes.ArticleResponse": { + "khaleejtimes.AuthorResponse": { "properties": { - "authors": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "description": { - "type": "string" - }, - "headline": { + "biography": { "type": "string" }, "image_url": { "type": "string" }, - "is_accessible_for_free": { - "type": "boolean" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { + "name": { "type": "string" }, - "section": { + "slug": { "type": "string" }, - "updated_at": { + "total_articles": { + "type": "integer" + }, + "twitter_handle": { "type": "string" }, "url": { @@ -92563,18 +94936,20 @@ }, "type": "object" }, - "latimes.AuthorArticle": { + "kickstarter.Category": { "properties": { - "image_url": { - "type": "string" + "id": { + "type": "integer" }, - "published_at": { + "name": { + "example": "Technology", "type": "string" }, - "summary": { - "type": "string" + "parent_id": { + "type": "integer" }, - "title": { + "slug": { + "example": "technology", "type": "string" }, "url": { @@ -92583,70 +94958,46 @@ }, "type": "object" }, - "latimes.AuthorResponse": { + "kickstarter.Comment": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/latimes.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "job_title": { + "author_name": { "type": "string" }, - "name": { + "body": { "type": "string" }, - "social_accounts": { - "items": { - "$ref": "#/definitions/latimes.AuthorSocialAccount" - }, - "type": "array" + "is_creator": { + "type": "boolean" }, - "url": { + "posted_at": { "type": "string" } }, "type": "object" }, - "latimes.AuthorSocialAccount": { + "kickstarter.CommentsResult": { "properties": { - "platform": { - "type": "string" + "comments": { + "items": { + "$ref": "#/definitions/kickstarter.Comment" + }, + "type": "array" }, - "url": { - "type": "string" + "total_count": { + "type": "integer" } }, "type": "object" }, - "latimes.HeadlineItem": { + "kickstarter.Creator": { "properties": { - "author": { - "type": "string" - }, - "image_caption": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { + "avatar": { "type": "string" }, - "summary": { - "type": "string" + "id": { + "type": "integer" }, - "title": { + "name": { "type": "string" }, "url": { @@ -92655,531 +95006,317 @@ }, "type": "object" }, - "latimes.HeadlinesResponse": { + "kickstarter.DiscoverResult": { "properties": { - "items": { + "page": { + "type": "integer" + }, + "projects": { "items": { - "$ref": "#/definitions/latimes.HeadlineItem" + "$ref": "#/definitions/kickstarter.Project" }, "type": "array" }, - "section": { - "type": "string" + "total_hits": { + "type": "integer" } }, "type": "object" }, - "latimes.SectionInfo": { + "kickstarter.Location": { "properties": { - "feed_url": { + "country": { + "example": "US", + "type": "string" + }, + "displayable_name": { + "example": "Los Angeles, CA", "type": "string" }, + "id": { + "type": "integer" + }, "name": { + "example": "Los Angeles", "type": "string" }, - "slug": { + "short_name": { + "example": "Los Angeles, CA", "type": "string" } }, "type": "object" }, - "latimes.SectionsResponse": { + "kickstarter.Photo": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/latimes.SectionInfo" - }, - "type": "array" + "full": { + "type": "string" } }, "type": "object" }, - "latimes.articleResponseDoc": { + "kickstarter.Project": { "properties": { - "code": { - "example": 200, + "backers_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/latimes.ArticleResponse" - }, - "msg": { - "example": "OK", + "blurb": { "type": "string" - } - }, - "type": "object" - }, - "latimes.authorResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "category": { + "$ref": "#/definitions/kickstarter.Category" + }, + "comments_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/latimes.AuthorResponse" + "converted_pledged_amount": { + "type": "number" }, - "msg": { - "example": "OK", + "country": { + "example": "US", "type": "string" - } - }, - "type": "object" - }, - "latimes.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/latimes.HeadlinesResponse" + "created_at": { + "type": "string" }, - "msg": { - "example": "OK", + "creator": { + "$ref": "#/definitions/kickstarter.Creator" + }, + "currency": { + "example": "USD", "type": "string" - } - }, - "type": "object" - }, - "latimes.sectionsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "currency_symbol": { + "example": "$", + "type": "string" + }, + "deadline": { + "type": "string" + }, + "faq_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/latimes.SectionsResponse" + "goal": { + "type": "number" }, - "msg": { - "example": "OK", + "has_video": { + "type": "boolean" + }, + "id": { + "example": 1114436418, + "type": "integer" + }, + "is_launched": { + "type": "boolean" + }, + "launched_at": { "type": "string" - } - }, - "type": "object" - }, - "lazada.CategoryDirectoryResponse": { - "properties": { - "fetched_at": { - "example": "2026-08-28T04:00:00Z", + }, + "location": { + "$ref": "#/definitions/kickstarter.Location" + }, + "name": { "type": "string" }, - "groups": { + "percent_funded": { + "type": "integer" + }, + "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/lazada.CategoryGroup" + "$ref": "#/definitions/kickstarter.RewardTier" }, "type": "array" }, - "region": { - "example": "ID", + "risks_and_challenges": { "type": "string" }, - "source_url": { - "example": "https://pages.lazada.co.id/wow/i/id/LandingPage/lazmall?wh_weex=true", - "type": "string" - } - }, - "type": "object" - }, - "lazada.CategoryGroup": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/lazada.CategoryNode" - }, - "type": "array" - }, - "name": { - "example": "Elektronik", - "type": "string" - } - }, - "type": "object" - }, - "lazada.CategoryLink": { - "properties": { - "name": { - "example": "Handphone", + "slug": { "type": "string" }, - "url": { - "example": "https://www.lazada.co.id/beli-handphone", - "type": "string" - } - }, - "type": "object" - }, - "lazada.CategoryNode": { - "properties": { - "children": { - "items": { - "$ref": "#/definitions/lazada.CategoryNode" - }, - "type": "array" + "spotlight": { + "type": "boolean" }, - "name": { - "example": "Laptop", - "type": "string" + "staff_pick": { + "type": "boolean" }, - "url": { - "example": "https://www.lazada.co.id/shop-beli-laptop/", - "type": "string" - } - }, - "type": "object" - }, - "lazada.CategoryProductsResponse": { - "properties": { - "brand": { - "example": "lazada6910077_crown-127197821", + "state": { + "example": "live", "type": "string" }, - "category": { - "example": "shop-karaoke-systems", + "state_changed_at": { "type": "string" }, - "fetched_at": { - "example": "2026-09-02T04:00:00Z", + "story": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/lazada.ListingItem" - }, - "type": "array" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 40, + "updates_count": { "type": "integer" }, - "region": { - "example": "PH", - "type": "string" - }, - "sort": { - "example": "popularity", - "type": "string" - }, - "source_url": { - "example": "https://www.lazada.com.ph/shop-karaoke-systems/?ajax=true&page=1", + "url": { "type": "string" }, - "total_results": { - "example": 2400, - "type": "integer" + "usd_pledged": { + "type": "number" } }, "type": "object" }, - "lazada.HomeResponse": { + "kickstarter.RewardAddOn": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/lazada.CategoryLink" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-08-28T04:00:00Z", - "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", - "type": "string" + "amount": { + "type": "number" }, - "source_url": { - "example": "https://www.lazada.co.id/", - "type": "string" - } - }, - "type": "object" - }, - "lazada.ListingItem": { - "properties": { "currency": { - "example": "PHP", - "type": "string" - }, - "discount": { - "example": "77% Off", - "type": "string" - }, - "image": { - "example": "https://ph-live-01.slatic.net/p/example.png", "type": "string" }, - "item_id": { - "example": 15396167084, - "type": "integer" - }, - "location": { - "example": "Benguet", + "description": { "type": "string" }, - "price": { - "example": 159, - "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, - "type": "number" - }, - "reviews": { - "example": 3, - "type": "integer" - }, - "title": { - "example": "Digilab Original K12 Bluetooth Portable Karaoke Speaker", + "id": { "type": "string" }, - "url": { - "example": "https://www.lazada.com.ph/products/pdp-i15396167084.html", + "name": { "type": "string" } }, "type": "object" }, - "lazada.OfficialStore": { + "kickstarter.RewardItem": { "properties": { - "brand_image": { - "example": "https://img.lazcdn.com/g/p/example.jpg", - "type": "string" - }, "name": { - "example": "Alfalink", - "type": "string" - }, - "shop_image": { - "example": "https://img.lazcdn.com/g/shop/example.jpeg", "type": "string" }, - "url": { - "example": "https://www.lazada.co.id/shop/alfalink", - "type": "string" + "quantity": { + "type": "integer" } }, "type": "object" }, - "lazada.ProductResponse": { + "kickstarter.RewardTier": { "properties": { - "brand": { - "example": "Pantene", - "type": "string" - }, - "brand_url": { - "example": "https://www.lazada.co.id/pantene/", - "type": "string" - }, - "category": { - "example": [ - "Kecantikan" - ], + "add_ons": { "items": { - "type": "string" + "$ref": "#/definitions/kickstarter.RewardAddOn" }, "type": "array" }, + "amount": { + "type": "number" + }, + "available": { + "type": "boolean" + }, + "backers_count": { + "type": "integer" + }, "currency": { - "example": "IDR", + "example": "USD", "type": "string" }, "description": { "type": "string" }, - "fetched_at": { - "example": "2026-09-02T04:00:00Z", - "type": "string" - }, - "highlights": { + "ends_at": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "item_id": { - "example": 159992555, - "type": "integer" - }, - "price": { - "example": 190500, - "type": "number" - }, - "region": { - "example": "ID", + "estimated_delivery_on": { + "example": "2026-06-01", "type": "string" }, - "seller_id": { - "example": 100161156, - "type": "integer" - }, - "sku_id": { - "example": 181803572, - "type": "integer" - }, - "source_url": { - "example": "https://www.lazada.co.id/products/pdp-i159992555-s181803572.html", - "type": "string" + "featured": { + "type": "boolean" }, - "title": { - "example": "PANTENE Shampoo Hair Fall Control 990ml", + "id": { "type": "string" }, - "url": { - "example": "https://www.lazada.co.id/products/pantene-shampoo-hair-fall-control-990ml-i159992555-s181803572.html", + "image": { "type": "string" }, - "variants": { + "items": { "items": { - "$ref": "#/definitions/lazada.ProductVariant" + "$ref": "#/definitions/kickstarter.RewardItem" }, "type": "array" - } - }, - "type": "object" - }, - "lazada.ProductSummary": { - "properties": { - "currency": { - "example": "IDR", - "type": "string" }, - "discount": { - "example": "-32%", - "type": "string" + "limit": { + "type": "integer" }, - "image": { - "example": "https://img.lazcdn.com/g/p/example.jpg", + "name": { "type": "string" }, - "item_id": { - "example": 159992555, + "remaining_quantity": { "type": "integer" }, - "original_price": { - "example": 190500, - "type": "number" - }, - "price": { - "example": 129000, - "type": "number" + "shipping_enabled": { + "type": "boolean" }, - "title": { - "example": "PANTENE Shampoo Hair Fall Control 990ml", + "shipping_preference": { + "example": "unrestricted", "type": "string" }, - "url": { - "example": "https://www.lazada.co.id/products/pdp-i159992555-s181803572.html", + "shipping_summary": { "type": "string" } }, "type": "object" }, - "lazada.ProductVariant": { + "kickstarter.Update": { "properties": { - "name": { - "example": "Volume", + "author_name": { "type": "string" }, - "values": { - "example": [ - "990 ml" - ], - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "lazada.SearchResponse": { - "properties": { - "fetched_at": { - "example": "2026-09-02T04:00:00Z", + "body": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/lazada.ListingItem" - }, - "type": "array" - }, - "page": { - "example": 1, + "comments_count": { "type": "integer" }, - "page_size": { - "example": 40, - "type": "integer" + "is_creator": { + "type": "boolean" }, - "query": { - "example": "karaoke", - "type": "string" + "number": { + "example": 7, + "type": "integer" }, - "region": { - "example": "PH", + "published_at": { + "example": "July 10, 2026", "type": "string" }, - "sort": { - "example": "popularity", + "title": { "type": "string" }, - "source_url": { - "example": "https://www.lazada.com.ph/catalog/?q=karaoke&ajax=true&page=1", + "url": { "type": "string" - }, - "total_results": { - "example": 2400, - "type": "integer" } }, "type": "object" }, - "lazada.categoriesResponseDoc": { + "kickstarter.UpdatesResult": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/lazada.CategoryDirectoryResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "updates": { + "items": { + "$ref": "#/definitions/kickstarter.Update" + }, + "type": "array" } }, "type": "object" }, - "lazada.categoryProductsResponseDoc": { + "kickstarter.commentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lazada.CategoryProductsResponse" + "$ref": "#/definitions/kickstarter.CommentsResult" }, "msg": { "example": "OK", @@ -93188,14 +95325,14 @@ }, "type": "object" }, - "lazada.homeResponseDoc": { + "kickstarter.discoverResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lazada.HomeResponse" + "$ref": "#/definitions/kickstarter.DiscoverResult" }, "msg": { "example": "OK", @@ -93204,14 +95341,14 @@ }, "type": "object" }, - "lazada.productResponseDoc": { + "kickstarter.projectResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lazada.ProductResponse" + "$ref": "#/definitions/kickstarter.Project" }, "msg": { "example": "OK", @@ -93220,14 +95357,14 @@ }, "type": "object" }, - "lazada.searchResponseDoc": { + "kickstarter.updatesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lazada.SearchResponse" + "$ref": "#/definitions/kickstarter.UpdatesResult" }, "msg": { "example": "OK", @@ -93236,468 +95373,396 @@ }, "type": "object" }, - "leboncoin.ListingCard": { + "kohls.CategoryFacet": { "properties": { - "category": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_url": { + "label": { + "example": "Department", "type": "string" }, - "price_eur": { - "type": "integer" - }, - "title": { + "name": { + "example": "Department", "type": "string" }, - "url": { - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/kohls.CategoryFacetOption" + }, + "type": "array" } }, "type": "object" }, - "leboncoin.ListingResponse": { + "kohls.CategoryFacetOption": { "properties": { - "availability": { - "type": "string" + "active": { + "type": "boolean" }, "category": { + "example": "Room:Dorm+Department:Bedding", "type": "string" }, - "condition": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_url": { + "name": { + "example": "Bedding", "type": "string" }, - "price_eur": { + "product_count": { + "example": 479, "type": "integer" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "leboncoin.SearchResponse": { + "kohls.CategoryPriceRange": { "properties": { - "listings": { - "items": { - "$ref": "#/definitions/leboncoin.ListingCard" - }, - "type": "array" - }, - "location": { - "type": "string" + "max_price": { + "example": 9.99, + "type": "number" }, - "source_url": { - "type": "string" + "min_price": { + "example": 2.99, + "type": "number" } }, "type": "object" }, - "leboncoin.listingResponseDoc": { + "kohls.CategoryProduct": { "properties": { - "code": { - "example": 200, - "type": "integer" + "available_for_pickup": { + "example": false, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/leboncoin.ListingResponse" + "available_for_ship": { + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "leboncoin.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "colors": { + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/leboncoin.SearchResponse" + "currency_code": { + "example": "USD", + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "letterboxd.FilmRating": { - "properties": { - "average": { - "example": 4.52, + }, + "on_sale": { + "example": true, + "type": "boolean" + }, + "rating": { + "example": 3.9, "type": "number" }, - "count": { - "example": 5553202, - "type": "integer" + "regular_price": { + "$ref": "#/definitions/kohls.CategoryPriceRange" }, "review_count": { - "example": 740173, + "example": 27103, "type": "integer" - } - }, - "type": "object" - }, - "letterboxd.FilmRef": { - "properties": { - "slug": { - "type": "string" + }, + "sale_price": { + "$ref": "#/definitions/kohls.CategoryPriceRange" }, "title": { + "example": "The Big One® Solid Bath Towel, Bath Sheet, Hand Towel or Washcloth", "type": "string" }, - "uri": { + "url": { + "type": "string" + }, + "web_id": { + "example": "4569328", "type": "string" } }, "type": "object" }, - "letterboxd.FilmResponse": { + "kohls.CategoryResponse": { "properties": { - "cast": { - "items": { - "$ref": "#/definitions/letterboxd.PersonCredit" - }, - "type": "array" + "category": { + "example": "Room:Dorm", + "type": "string" }, - "countries": { - "items": { - "type": "string" - }, - "type": "array" + "count": { + "example": 120, + "type": "integer" }, - "directors": { + "facets": { "items": { - "$ref": "#/definitions/letterboxd.PersonCredit" + "$ref": "#/definitions/kohls.CategoryFacet" }, "type": "array" }, - "genres": { - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "languages": { - "items": { - "type": "string" - }, - "type": "array" + "limit": { + "example": 120, + "type": "integer" }, - "poster_url": { - "type": "string" + "product_count": { + "example": 1317, + "type": "integer" }, - "production_companies": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/kohls.CategoryProduct" }, "type": "array" }, - "rating": { - "$ref": "#/definitions/letterboxd.FilmRating" - }, - "release_date": { - "example": "2019-05-21", - "type": "string" - }, - "runtime_minutes": { - "example": 133, - "type": "integer" - }, - "slug": { - "example": "parasite-2019", - "type": "string" - }, "source_url": { "type": "string" }, - "synopsis": { - "type": "string" - }, "title": { - "example": "Parasite", - "type": "string" - }, - "uri": { + "example": "Essential Dorm Items for College-Bound Students | Kohl's", "type": "string" }, - "year": { - "example": 2019, + "total_pages": { + "example": 11, "type": "integer" } }, "type": "object" }, - "letterboxd.MemberResponse": { + "kohls.ProductReviewsResponse": { "properties": { - "display_name": { + "fetched_at": { "type": "string" }, - "films_this_year": { - "type": "integer" - }, - "films_watched": { - "type": "integer" - }, - "followers": { + "page": { "type": "integer" }, - "following": { + "page_size": { "type": "integer" }, - "lists": { - "type": "integer" + "reviews": { + "items": { + "$ref": "#/definitions/kohls.Review" + }, + "type": "array" }, "source_url": { "type": "string" }, - "uri": { - "type": "string" + "total_count": { + "type": "integer" }, - "username": { + "web_id": { "type": "string" } }, "type": "object" }, - "letterboxd.PersonCredit": { + "kohls.Review": { "properties": { - "name": { + "author": { "type": "string" }, - "slug": { + "id": { "type": "string" - } - }, - "type": "object" - }, - "letterboxd.PersonResponse": { - "properties": { - "films": { - "items": { - "$ref": "#/definitions/letterboxd.FilmRef" - }, - "type": "array" }, - "name": { + "location": { "type": "string" }, - "role": { - "type": "string" + "photo_urls": { + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { - "type": "string" + "rating": { + "type": "integer" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "letterboxd.PopularResponse": { - "properties": { - "decade": { - "type": "string" + "recommended": { + "type": "boolean" }, - "films": { + "secondary_ratings": { "items": { - "$ref": "#/definitions/letterboxd.FilmRef" + "$ref": "#/definitions/kohls.ReviewSecondaryRating" }, "type": "array" }, - "genre": { + "submitted_at": { "type": "string" }, - "period": { + "text": { "type": "string" }, - "source_url": { + "title": { "type": "string" } }, "type": "object" }, - "letterboxd.RatingBucket": { + "kohls.ReviewSecondaryRating": { "properties": { - "count": { + "max_value": { + "example": 5, "type": "integer" }, - "percent": { - "type": "integer" + "name": { + "example": "Quality", + "type": "string" }, - "stars": { - "example": 4.5, - "type": "number" + "value": { + "example": 4, + "type": "integer" } }, "type": "object" }, - "letterboxd.RatingHistogramResponse": { + "kohls.Store": { "properties": { - "buckets": { + "address": { + "example": "17150 SOUTHCENTER PKWY", + "type": "string" + }, + "badges": { + "example": [ + "Sephora", + "Baby Gifting Shop" + ], "items": { - "$ref": "#/definitions/letterboxd.RatingBucket" + "type": "string" }, "type": "array" }, - "slug": { + "city": { + "example": "TUKWILA", "type": "string" }, - "source_url": { + "country": { + "example": "US", "type": "string" }, - "total_ratings": { - "type": "integer" - } - }, - "type": "object" - }, - "letterboxd.Review": { - "properties": { - "comment_count": { - "type": "integer" - }, - "contains_spoilers": { - "type": "boolean" + "distance_miles": { + "example": 11.3, + "type": "number" }, - "date": { - "example": "2019-08-14", - "type": "string" + "hours": { + "items": { + "$ref": "#/definitions/kohls.StoreHours" + }, + "type": "array" }, - "display_name": { + "id": { + "example": "1152", "type": "string" }, - "like_count": { - "type": "integer" - }, - "liked": { - "type": "boolean" + "latitude": { + "example": 47.450079, + "type": "number" }, - "rating": { - "example": 4.5, + "longitude": { + "example": -122.2581113, "type": "number" }, - "text": { + "name": { + "example": "Kohl's Tukwila", "type": "string" }, - "username": { + "phone": { + "example": "(206) 394-0078", "type": "string" - } - }, - "type": "object" - }, - "letterboxd.ReviewsResponse": { - "properties": { - "reviews": { + }, + "postal_code": { + "example": "98188", + "type": "string" + }, + "services": { + "example": [ + "In-Store Pickup", + "Wifi Enabled" + ], "items": { - "$ref": "#/definitions/letterboxd.Review" + "type": "string" }, "type": "array" }, - "slug": { + "state": { + "example": "WA", "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "letterboxd.SearchResponse": { + "kohls.StoreHours": { "properties": { - "query": { + "close": { + "example": "21:00", "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/letterboxd.SearchResult" - }, - "type": "array" - }, - "source_url": { + "day": { + "example": "Monday", "type": "string" }, - "type": { + "open": { + "example": "09:00", "type": "string" } }, "type": "object" }, - "letterboxd.SearchResult": { + "kohls.StoresResponse": { "properties": { - "owner": { - "type": "string" - }, - "role": { - "example": "director", - "type": "string" - }, - "slug": { - "type": "string" + "count": { + "type": "integer" }, - "title": { + "fetched_at": { "type": "string" }, - "type": { - "example": "film", + "search": { "type": "string" }, - "uri": { + "source_url": { "type": "string" }, - "year": { - "type": "integer" + "stores": { + "items": { + "$ref": "#/definitions/kohls.Store" + }, + "type": "array" } }, "type": "object" }, - "letterboxd.SimilarResponse": { + "kohls.SuggestResponse": { "properties": { - "films": { - "items": { - "$ref": "#/definitions/letterboxd.FilmRef" - }, - "type": "array" + "count": { + "type": "integer" }, - "slug": { + "fetched_at": { + "type": "string" + }, + "query": { "type": "string" }, "source_url": { "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "letterboxd.filmResponseDoc": { + "kohls.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.FilmResponse" + "$ref": "#/definitions/kohls.CategoryResponse" }, "msg": { "example": "OK", @@ -93706,14 +95771,14 @@ }, "type": "object" }, - "letterboxd.memberResponseDoc": { + "kohls.productReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.MemberResponse" + "$ref": "#/definitions/kohls.ProductReviewsResponse" }, "msg": { "example": "OK", @@ -93722,14 +95787,14 @@ }, "type": "object" }, - "letterboxd.personResponseDoc": { + "kohls.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.PersonResponse" + "$ref": "#/definitions/kohls.StoresResponse" }, "msg": { "example": "OK", @@ -93738,14 +95803,14 @@ }, "type": "object" }, - "letterboxd.popularResponseDoc": { + "kohls.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.PopularResponse" + "$ref": "#/definitions/kohls.SuggestResponse" }, "msg": { "example": "OK", @@ -93754,589 +95819,752 @@ }, "type": "object" }, - "letterboxd.ratingHistogramResponseDoc": { + "kotaku.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/letterboxd.RatingHistogramResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "social_links": { + "items": { + "$ref": "#/definitions/kotaku.AuthorSocialLink" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "letterboxd.reviewsResponseDoc": { + "kotaku.AuthorSocialLink": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/letterboxd.ReviewsResponse" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "letterboxd.searchResponseDoc": { + "kroger.CategoriesResponse": { "properties": { - "code": { - "example": 200, + "categories": { + "items": { + "$ref": "#/definitions/kroger.CategoryTaxon" + }, + "type": "array" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/letterboxd.SearchResponse" + "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" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "letterboxd.similarResponseDoc": { + "kroger.CategoryResponse": { "properties": { - "code": { - "example": 200, + "category_id": { + "type": "string" + }, + "facets": { + "items": { + "$ref": "#/definitions/kroger.SearchFacetGroup" + }, + "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": "integer" }, - "data": { - "$ref": "#/definitions/letterboxd.SimilarResponse" + "products": { + "items": { + "$ref": "#/definitions/kroger.SearchResultProduct" + }, + "type": "array" }, - "msg": { - "example": "OK", + "slug": { + "type": "string" + }, + "source": { "type": "string" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "linkedin.Customer": { + "kroger.CategoryTaxon": { "properties": { - "follower_count": { - "example": 12345, - "type": "integer" + "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" }, - "industry": { - "example": "Information Technology & Services", + "category_id": { "type": "string" }, - "link": { - "example": "https://www.linkedin.com/company/contoso/", + "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" }, - "logo": { - "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", + "name": { "type": "string" }, - "name": { - "example": "Contoso Ltd.", + "slug": { + "type": "string" + }, + "url": { + "description": "URL is the canonical kroger.com category-browse page URL.", "type": "string" } }, "type": "object" }, - "linkedin.LinkedinCompanyResponse": { + "kroger.Coupon": { "properties": { - "about": { - "example": "We’re a team of scientists, engineers...", + "brand": { "type": "string" }, - "affiliated_pages": { + "categories": { "items": { - "$ref": "#/definitions/linkedin.Page" + "type": "string" }, "type": "array" }, - "company_size": { - "example": "501-1,000", + "display_description": { "type": "string" }, - "follower_count": { - "example": 1176422, - "type": "integer" + "end_date": { + "type": "string" }, - "founded_on": { - "example": 2010, - "type": "integer" + "expiration_date": { + "type": "string" }, - "headline": { - "example": "We're committed to solving intelligence, to advance science and benefit humanity.", + "id": { "type": "string" }, - "headquarters": { - "example": "London, London", + "image_url": { "type": "string" }, - "industry": { - "example": "Research Services", - "type": "string" - }, - "link": { - "example": "https://www.linkedin.com/company/googledeepmind", + "kroger_coupon_number": { "type": "string" }, - "locations": { + "modalities": { "items": { - "$ref": "#/definitions/linkedin.Location" + "type": "string" }, "type": "array" }, - "logo": { - "example": "https://static.licdn.com/.../linkedin-bug-color.png", - "type": "string" + "redemptions_allowed": { + "type": "integer" }, - "name": { - "example": "Google DeepMind", + "requirement_description": { "type": "string" }, - "num_of_employees_on_linkedin": { - "example": 5590, + "requirement_quantity": { "type": "integer" }, - "similar_pages": { + "savings": { + "type": "number" + }, + "savings_tags": { "items": { - "$ref": "#/definitions/linkedin.Page" + "$ref": "#/definitions/kroger.CouponSavingsTag" }, "type": "array" }, - "specialties": { - "example": "Artificial Intelligence and Machine Learning", + "short_description": { "type": "string" }, + "start_date": { + "type": "string" + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "total_downloads": { + "type": "integer" + }, "type": { - "example": "Privately Held", "type": "string" }, - "updates": { + "value": { + "type": "number" + } + }, + "type": "object" + }, + "kroger.CouponSavingsTag": { + "properties": { + "description": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "kroger.CouponsResponse": { + "properties": { + "brand": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "coupons": { "items": { - "$ref": "#/definitions/linkedin.Update" + "$ref": "#/definitions/kroger.Coupon" }, "type": "array" }, - "website": { - "example": "https://www.deepmind.google", + "location_id": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "upc": { "type": "string" } }, "type": "object" }, - "linkedin.LinkedinProductResponse": { + "kroger.NutritionFact": { "properties": { - "about": { - "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.", + "daily_value": { "type": "string" }, - "category_link": { - "example": "https://www.linkedin.com/products/categories/business-management-software", + "name": { "type": "string" }, - "category_name": { - "example": "Business Management Software", + "unit": { "type": "string" }, - "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", + "value": { + "type": "string" + } + }, + "type": "object" + }, + "kroger.ProductCategory": { + "properties": { + "commodity": { "type": "string" }, - "external_link": { - "example": "https://dynamics.microsoft.com/en-us/business-central/overview/", + "department": { "type": "string" }, - "featured_customers": { + "sub_commodity": { + "type": "string" + } + }, + "type": "object" + }, + "kroger.ProductDetail": { + "properties": { + "alcohol": { + "type": "boolean" + }, + "brand": { + "type": "string" + }, + "categories": { "items": { - "$ref": "#/definitions/linkedin.Customer" + "type": "string" }, "type": "array" }, - "link": { - "example": "https://www.linkedin.com/products/microsoft-dynamics-microsoft-dynamics-365-business-central", + "category": { + "$ref": "#/definitions/kroger.ProductCategory" + }, + "country_of_origin": { "type": "string" }, - "logo": { - "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", + "image_url": { "type": "string" }, - "medias": { + "images": { "items": { - "$ref": "#/definitions/linkedin.Media" + "$ref": "#/definitions/kroger.ProductImage" }, "type": "array" }, + "inventory": { + "$ref": "#/definitions/kroger.ProductInventory" + }, "name": { - "example": "Microsoft Dynamics 365 Business Central", "type": "string" }, - "organization_link": { - "example": "https://www.linkedin.com/company/microsoft-dynamics/", - "type": "string" + "nutrition": { + "$ref": "#/definitions/kroger.ProductNutrition" }, - "organization_name": { - "example": "Microsoft Dynamics 365", + "price": { + "$ref": "#/definitions/kroger.ProductPrice" + }, + "rating": { + "$ref": "#/definitions/kroger.ProductRating" + }, + "size": { "type": "string" }, - "other_products": { - "items": { - "$ref": "#/definitions/linkedin.Product" - }, - "type": "array" + "upc": { + "type": "string" }, - "similar_products": { - "items": { - "$ref": "#/definitions/linkedin.Product" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "linkedin.Location": { + "kroger.ProductImage": { "properties": { - "address": { - "example": "Kings Cross, London, London N1C4AG, GB", + "perspective": { "type": "string" }, - "is_primary": { - "example": true, - "type": "boolean" - } - }, - "type": "object" - }, - "linkedin.Media": { - "properties": { - "link": { - "example": "https://media.licdn.com/media/sample-video.mp4", + "size": { "type": "string" }, - "name": { - "example": "Product Demo Video", + "url": { "type": "string" } }, "type": "object" }, - "linkedin.Page": { + "kroger.ProductInventory": { "properties": { - "address": { - "example": "San Francisco, CA", - "type": "string" - }, - "industry": { - "example": "Research Services", - "type": "string" + "available": { + "type": "integer" }, - "link": { - "example": "https://www.linkedin.com/company/openai", + "location_id": { "type": "string" }, - "name": { - "example": "OpenAI", + "stock_level": { "type": "string" } }, "type": "object" }, - "linkedin.Product": { + "kroger.ProductNutrition": { "properties": { - "category_link": { - "example": "https://www.linkedin.com/products/categories/business-management-software", + "allergens": { "type": "string" }, - "category_name": { - "example": "Business Management Software", + "facts": { + "items": { + "$ref": "#/definitions/kroger.NutritionFact" + }, + "type": "array" + }, + "gluten_free": { + "type": "boolean" + }, + "ingredients": { "type": "string" }, - "link": { - "example": "https://www.linkedin.com/products/odoo/", + "kosher": { + "type": "boolean" + }, + "non_gmo": { + "type": "boolean" + }, + "organic": { + "type": "boolean" + }, + "product_warning": { "type": "string" }, - "logo": { - "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", + "serving_size": { "type": "string" }, - "name": { - "example": "Odoo", + "servings_per_container": { "type": "string" } }, "type": "object" }, - "linkedin.ProductCategoriesResponse": { + "kroger.ProductOffer": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/linkedin.ProductCategoryItem" - }, - "type": "array" + "availability": { + "type": "string" }, - "total": { - "example": 620, - "type": "integer" + "currency": { + "type": "string" + }, + "original_price": { + "type": "number" + }, + "price": { + "type": "number" } }, "type": "object" }, - "linkedin.ProductCategoryItem": { + "kroger.ProductPrice": { "properties": { - "id": { - "example": "1620", + "amount": { + "type": "number" + }, + "currency": { "type": "string" }, - "link": { - "example": "https://www.linkedin.com/products/categories/healthcare-crm-software", + "display": { "type": "string" }, - "name": { - "example": "Healthcare CRM Software", + "location_id": { "type": "string" }, - "universal_name": { - "example": "healthcare-crm-software", + "seller_id": { "type": "string" }, - "urn": { - "example": "urn:li:standardizedProductCategory:1620", + "seller_name": { + "type": "string" + }, + "unit_price_text": { "type": "string" } }, "type": "object" }, - "linkedin.ProductSearchResultItem": { + "kroger.ProductRating": { "properties": { - "category_link": { - "example": "https://www.linkedin.com/products/categories/sales-intelligence-software", - "type": "string" + "average": { + "type": "number" }, - "category_name": { - "example": "Sales Intelligence Software", + "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": { + "properties": { + "brand": { "type": "string" }, + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, "description": { - "example": "Sales Navigator helps sellers have high-quality conversations with the people that matter, at scale.", "type": "string" }, - "id": { - "example": "linkedin-sales-navigator", + "image_url": { "type": "string" }, - "link": { - "example": "https://www.linkedin.com/products/linkedin-sales-navigator", - "type": "string" + "offer": { + "$ref": "#/definitions/kroger.ProductOffer" }, - "logo": { - "example": "https://media.licdn.com/dms/image/v2/D4E33AQFKTZDLqpinzQ/productpage-logo-image_100_100/B4EZX4WGqkHUAY-/0/1743628299227/linkedin_sales_navigator_logo", + "rating_count": { + "type": "integer" + }, + "rating_value": { + "type": "number" + }, + "title": { "type": "string" }, - "name": { - "example": "LinkedIn Sales Navigator", + "upc": { "type": "string" }, - "organization_name": { - "example": "LinkedIn", + "url": { "type": "string" } }, "type": "object" }, - "linkedin.ProductsSearchResponse": { + "kroger.ProductsResponse": { "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, + "count": { "type": "integer" }, + "location_id": { + "type": "string" + }, "products": { "items": { - "$ref": "#/definitions/linkedin.ProductSearchResultItem" + "$ref": "#/definitions/kroger.ProductDetail" }, "type": "array" - }, - "start": { - "example": 0, + } + }, + "type": "object" + }, + "kroger.RelatedTag": { + "properties": { + "position": { "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" + "query": { + "type": "string" + }, + "source": { + "type": "string" + }, + "tag": { + "type": "string" } }, "type": "object" }, - "linkedin.Update": { + "kroger.RelatedTagsResponse": { "properties": { - "author": { - "example": "Google DeepMind", + "count": { + "type": "integer" + }, + "location_id": { "type": "string" }, - "author_link": { - "example": "https://uk.linkedin.com/company/googledeepmind", + "query": { "type": "string" }, - "images": { - "example": [ - "[\"https://example.com/image1.jpg\"]" - ], + "related_tags": { "items": { - "type": "string" + "$ref": "#/definitions/kroger.RelatedTag" }, "type": "array" - }, - "is_reposted": { - "example": false, + } + }, + "type": "object" + }, + "kroger.Review": { + "properties": { + "featured": { "type": "boolean" }, - "logo": { - "example": "https://media.licdn.com/dms/image/v2/D4E0BAQEntrYwxPlbQA/company-logo_100_100/0/googledeepmind_logo", + "helpful_vote_count": { + "type": "integer" + }, + "id": { "type": "string" }, - "num_of_comments": { - "example": 21, + "not_helpful_vote_count": { "type": "integer" }, - "num_of_reactions": { - "example": 571, + "photos": { + "items": { + "$ref": "#/definitions/kroger.ReviewPhoto" + }, + "type": "array" + }, + "rating": { "type": "integer" }, - "post_link": { - "example": "https://www.linkedin.com/posts/googledeepmind_thomas-story-activity-7313245349987385346-5COL", - "type": "string" + "ratings_only": { + "type": "boolean" }, - "published_at": { - "example": "1w", + "recommended": { + "type": "boolean" + }, + "submitted_at": { "type": "string" }, - "summary": { - "example": "When his son was diagnosed with a rare disease, Googler Thomas Wagner...", + "text": { "type": "string" }, - "videos": { - "example": [ - "[\"https://example.com/video1.mp4\"]" - ], - "items": { - "type": "string" - }, - "type": "array" + "title": { + "type": "string" } }, "type": "object" }, - "linkedin.companyResponseDoc": { + "kroger.ReviewPhoto": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/linkedin.LinkedinCompanyResponse" + "size": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "linkedin.productCategoriesResponseDoc": { + "kroger.ReviewsResponse": { "properties": { - "code": { - "example": 200, + "average_rating": { + "type": "number" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/linkedin.ProductCategoriesResponse" + "page_size": { + "type": "integer" }, - "msg": { - "example": "OK", + "rating": { + "$ref": "#/definitions/kroger.ProductRating" + }, + "reviews": { + "items": { + "$ref": "#/definitions/kroger.Review" + }, + "type": "array" + }, + "total_count": { + "type": "integer" + }, + "upc": { "type": "string" } }, "type": "object" }, - "linkedin.productResponseDoc": { + "kroger.SearchFacetGroup": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/linkedin.LinkedinProductResponse" - }, - "msg": { - "example": "OK", + "group": { "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/kroger.SearchFacetValue" + }, + "type": "array" } }, "type": "object" }, - "linkedin.productsSearchResponseDoc": { + "kroger.SearchFacetValue": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/linkedin.ProductsSearchResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" } }, "type": "object" }, - "linkedin.showcaseResponseDoc": { + "kroger.SearchResponse": { "properties": { - "code": { - "example": 200, + "facets": { + "items": { + "$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" }, - "data": { - "$ref": "#/definitions/linkedin.LinkedinCompanyResponse" + "products": { + "items": { + "$ref": "#/definitions/kroger.SearchResultProduct" + }, + "type": "array" }, - "msg": { - "example": "OK", + "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.", "type": "string" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "livemint.AuthorResponse": { + "kroger.SearchResultProduct": { "properties": { - "biography": { - "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" }, - "facebook_url": { + "currency": { "type": "string" }, "image_url": { "type": "string" }, - "instagram_url": { + "low_stock": { + "type": "boolean" + }, + "original_price": { + "type": "number" + }, + "price": { + "type": "number" + }, + "size": { "type": "string" }, - "job_title": { + "snap_ebt_eligible": { + "type": "boolean" + }, + "stock_level": { "type": "string" }, - "linkedin_url": { + "title": { "type": "string" }, - "name": { + "unit_price": { "type": "string" }, - "twitter_url": { + "upc": { "type": "string" }, "url": { @@ -94345,124 +96573,135 @@ }, "type": "object" }, - "livescience.AuthorResponse": { + "kroger.StoreAddress": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { + "address_lines": { "items": { "type": "string" }, "type": "array" }, - "has_next_page": { - "type": "boolean" - }, - "job_title": { + "city": { "type": "string" }, - "name": { + "country": { "type": "string" }, - "page": { - "type": "integer" - }, - "slug": { + "postal_code": { "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/livescience.AuthorSocialLink" - }, - "type": "array" - }, - "url": { + "state": { "type": "string" } }, "type": "object" }, - "livescience.AuthorSocialLink": { + "kroger.StoreHours": { "properties": { - "platform": { + "days": { "type": "string" }, - "url": { + "hours": { "type": "string" + }, + "is_today": { + "type": "boolean" } }, "type": "object" }, - "livescore.livescoreNewsFeedItemDoc": { + "kroger.StoreLocation": { "properties": { - "author": { - "example": "LiveScore", + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + } + }, + "type": "object" + }, + "kroger.StoreResponse": { + "properties": { + "address": { + "$ref": "#/definitions/kroger.StoreAddress" + }, + "brand": { "type": "string" }, - "categories": { - "example": [ - "football" - ], + "break_hours": { "items": { - "type": "string" + "$ref": "#/definitions/kroger.StoreHours" }, "type": "array" }, - "content": { - "example": "

The complete RSS story body.

", + "has_drive_thru": { + "type": "boolean" + }, + "hours": { + "items": { + "$ref": "#/definitions/kroger.StoreHours" + }, + "type": "array" + }, + "location": { + "$ref": "#/definitions/kroger.StoreLocation" + }, + "name": { "type": "string" }, - "description": { - "example": "A short summary of the latest story.", + "open_text": { "type": "string" }, - "guid": { - "example": "https://www.livescore.com/en/news/football/example-story/", + "phone": { "type": "string" }, - "link": { - "example": "https://www.livescore.com/en/news/football/example-story/", + "store_id": { + "type": "string" + } + }, + "type": "object" + }, + "kroger.SuggestResponse": { + "properties": { + "location_id": { "type": "string" }, - "published_at": { - "example": "Sat, 26 Sep 2026 08:45:00 GMT", + "query": { "type": "string" }, - "title": { - "example": "Latest football news", + "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" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/kroger.Suggestion" + }, + "type": "array" + } + }, + "type": "object" + }, + "kroger.Suggestion": { + "properties": { + "type": { + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "livescore.livescoreNewsFeedResponseDoc": { + "kroger.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "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" + "$ref": "#/definitions/kroger.CategoriesResponse" }, "msg": { "example": "OK", @@ -94471,55 +96710,30 @@ }, "type": "object" }, - "livescore.livescoreNewsPublisherDoc": { + "kroger.categoryResponseDoc": { "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", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "telephone": { - "example": "+1 866 221 1426", - "type": "string" + "data": { + "$ref": "#/definitions/kroger.CategoryResponse" }, - "website": { - "example": "https://www.statsperform.com/", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "livescore.livescoreNewsPublishersResponseDoc": { + "kroger.couponsResponseDoc": { "properties": { "code": { "example": 200, "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" - } - }, - "type": "object" + "$ref": "#/definitions/kroger.CouponsResponse" }, "msg": { "example": "OK", @@ -94528,32 +96742,14 @@ }, "type": "object" }, - "livescore.livescoreSearchResponseDoc": { + "kroger.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "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" + "$ref": "#/definitions/kroger.ProductResponse" }, "msg": { "example": "OK", @@ -94562,22 +96758,14 @@ }, "type": "object" }, - "livescore.newsCategoriesResponseDoc": { + "kroger.productsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/livescore.newsCategoryDoc" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/definitions/kroger.ProductsResponse" }, "msg": { "example": "OK", @@ -94586,35 +96774,30 @@ }, "type": "object" }, - "livescore.newsCategoryDoc": { + "kroger.relatedTagsResponseDoc": { "properties": { - "id": { - "example": "football", - "type": "string" - }, - "name": { - "example": "Football", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "type": { - "example": "sport", - "type": "string" + "data": { + "$ref": "#/definitions/kroger.RelatedTagsResponse" }, - "url": { - "example": "https://www.livescore.com/en/news/football/", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "livescore.responseDoc": { + "kroger.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/livescore.sourceDataDoc" + "$ref": "#/definitions/kroger.ReviewsResponse" }, "msg": { "example": "OK", @@ -94623,48 +96806,46 @@ }, "type": "object" }, - "livescore.sourceDataDoc": { + "kroger.searchResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "additionalProperties": true, - "type": "object" + "$ref": "#/definitions/kroger.SearchResponse" }, - "source_url": { - "example": "https://www.livescore.com/en/football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267/", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "livescore.sportDoc": { + "kroger.storeResponseDoc": { "properties": { - "id": { - "example": "soccer", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "Football", + "data": { + "$ref": "#/definitions/kroger.StoreResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "livescore.sportsResponseDoc": { + "kroger.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "properties": { - "sports": { - "items": { - "$ref": "#/definitions/livescore.sportDoc" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/definitions/kroger.SuggestResponse" }, "msg": { "example": "OK", @@ -94673,44 +96854,59 @@ }, "type": "object" }, - "lululemon.CategoriesResponse": { + "latimes.ArticleResponse": { "properties": { - "categories": { + "authors": { "items": { - "$ref": "#/definitions/lululemon.CategoryEntry" + "type": "string" }, "type": "array" }, - "count": { - "type": "integer" + "description": { + "type": "string" }, - "fetched_at": { + "headline": { "type": "string" }, - "source_url": { + "image_url": { + "type": "string" + }, + "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" }, - "lululemon.CategoryEntry": { + "latimes.AuthorArticle": { "properties": { - "category": { + "image_url": { "type": "string" }, - "cdp_hash": { + "published_at": { "type": "string" }, - "name": { + "summary": { "type": "string" }, - "path": { - "items": { - "type": "string" - }, - "type": "array" - }, - "section": { + "title": { "type": "string" }, "url": { @@ -94719,63 +96915,68 @@ }, "type": "object" }, - "lululemon.CategoryResponse": { + "latimes.AuthorResponse": { "properties": { - "category": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/latimes.AuthorArticle" + }, + "type": "array" }, - "cdp_hash": { + "bio": { "type": "string" }, - "count": { - "type": "integer" + "email": { + "type": "string" }, - "fetched_at": { + "image_url": { "type": "string" }, - "page": { - "type": "integer" + "job_title": { + "type": "string" }, - "page_size": { - "type": "integer" + "name": { + "type": "string" }, - "products": { + "social_accounts": { "items": { - "$ref": "#/definitions/lululemon.ProductSummary" + "$ref": "#/definitions/latimes.AuthorSocialAccount" }, "type": "array" }, - "source_url": { + "url": { "type": "string" - }, - "total_products": { - "type": "integer" } }, "type": "object" }, - "lululemon.OutfitItem": { + "latimes.AuthorSocialAccount": { "properties": { - "category": { + "platform": { "type": "string" }, - "currency": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "latimes.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "id": { + "image_caption": { "type": "string" }, "image_url": { "type": "string" }, - "list_price": { - "type": "number" - }, - "on_sale": { - "type": "boolean" + "published_at": { + "type": "string" }, - "sale_price": { - "type": "number" + "summary": { + "type": "string" }, "title": { "type": "string" @@ -94786,425 +96987,515 @@ }, "type": "object" }, - "lululemon.OutfitLook": { + "latimes.HeadlinesResponse": { "properties": { - "id": { - "type": "string" - }, "items": { "items": { - "$ref": "#/definitions/lululemon.OutfitItem" + "$ref": "#/definitions/latimes.HeadlineItem" }, "type": "array" + }, + "section": { + "type": "string" } }, "type": "object" }, - "lululemon.OutfitResponse": { + "latimes.SectionInfo": { "properties": { - "color_code": { - "type": "string" - }, - "fetched_at": { + "feed_url": { "type": "string" }, - "item": { - "$ref": "#/definitions/lululemon.OutfitItem" - }, - "looks": { - "items": { - "$ref": "#/definitions/lululemon.OutfitLook" - }, - "type": "array" - }, - "source_url": { + "name": { "type": "string" }, - "unified_id": { + "slug": { "type": "string" } }, "type": "object" }, - "lululemon.ProductDetailColor": { + "latimes.SectionsResponse": { "properties": { - "code": { + "sections": { + "items": { + "$ref": "#/definitions/latimes.SectionInfo" + }, + "type": "array" + } + }, + "type": "object" + }, + "latimes.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/latimes.ArticleResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "latimes.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/latimes.AuthorResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "latimes.headlinesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "swatch_url": { + "data": { + "$ref": "#/definitions/latimes.HeadlinesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "lululemon.ProductDetailRating": { + "latimes.sectionsResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "value": { - "type": "number" + "data": { + "$ref": "#/definitions/latimes.SectionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "lululemon.ProductDetailResponse": { + "lazada.CategoryDirectoryResponse": { "properties": { - "activities": { + "fetched_at": { + "example": "2026-08-28T04:00:00Z", + "type": "string" + }, + "groups": { "items": { - "type": "string" + "$ref": "#/definitions/lazada.CategoryGroup" }, "type": "array" }, - "category": { + "region": { + "example": "ID", "type": "string" }, - "category_id": { + "source_url": { + "example": "https://pages.lazada.co.id/wow/i/id/LandingPage/lazmall?wh_weex=true", "type": "string" - }, - "colors": { + } + }, + "type": "object" + }, + "lazada.CategoryGroup": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/lululemon.ProductDetailColor" + "$ref": "#/definitions/lazada.CategoryNode" }, "type": "array" }, - "currency": { + "name": { + "example": "Elektronik", "type": "string" - }, - "description": { + } + }, + "type": "object" + }, + "lazada.CategoryLink": { + "properties": { + "name": { + "example": "Handphone", "type": "string" }, - "fetched_at": { + "url": { + "example": "https://www.lazada.co.id/beli-handphone", "type": "string" - }, - "gender": { + } + }, + "type": "object" + }, + "lazada.CategoryNode": { + "properties": { + "children": { "items": { - "type": "string" + "$ref": "#/definitions/lazada.CategoryNode" }, "type": "array" }, - "highlights": { + "name": { + "example": "Laptop", + "type": "string" + }, + "url": { + "example": "https://www.lazada.co.id/shop-beli-laptop/", + "type": "string" + } + }, + "type": "object" + }, + "lazada.CategoryProductsResponse": { + "properties": { + "brand": { + "example": "lazada6910077_crown-127197821", + "type": "string" + }, + "category": { + "example": "shop-karaoke-systems", + "type": "string" + }, + "fetched_at": { + "example": "2026-09-02T04:00:00Z", + "type": "string" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/lazada.ListingItem" }, "type": "array" }, - "name": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "on_sale": { - "type": "boolean" + "page_size": { + "example": 40, + "type": "integer" }, - "price": { - "type": "number" + "region": { + "example": "PH", + "type": "string" }, - "product_id": { + "sort": { + "example": "popularity", "type": "string" }, - "rating": { - "$ref": "#/definitions/lululemon.ProductDetailRating" + "source_url": { + "example": "https://www.lazada.com.ph/shop-karaoke-systems/?ajax=true&page=1", + "type": "string" }, - "reviews": { + "total_results": { + "example": 2400, + "type": "integer" + } + }, + "type": "object" + }, + "lazada.HomeResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/lululemon.ProductDetailReview" + "$ref": "#/definitions/lazada.CategoryLink" }, "type": "array" }, - "sizes": { + "fetched_at": { + "example": "2026-08-28T04:00:00Z", + "type": "string" + }, + "flash_sale_items": { "items": { - "type": "string" + "$ref": "#/definitions/lazada.ProductSummary" }, "type": "array" }, - "skus": { + "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/lululemon.ProductDetailSKU" + "$ref": "#/definitions/lazada.OfficialStore" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "unified_id": { + "region": { + "example": "ID", "type": "string" }, - "url": { + "source_url": { + "example": "https://www.lazada.co.id/", "type": "string" } }, "type": "object" }, - "lululemon.ProductDetailReview": { + "lazada.ListingItem": { "properties": { - "badge": { + "currency": { + "example": "PHP", "type": "string" }, - "body": { + "discount": { + "example": "77% Off", "type": "string" }, - "fit": { + "image": { + "example": "https://ph-live-01.slatic.net/p/example.png", "type": "string" }, - "id": { + "item_id": { + "example": 15396167084, + "type": "integer" + }, + "location": { + "example": "Benguet", "type": "string" }, - "rating": { + "price": { + "example": 159, "type": "number" }, - "size_purchased": { - "type": "string" + "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" }, - "submitted_at": { - "type": "string" + "reviews": { + "example": 3, + "type": "integer" }, "title": { + "example": "Digilab Original K12 Bluetooth Portable Karaoke Speaker", "type": "string" }, - "verified_buyer": { - "type": "boolean" + "url": { + "example": "https://www.lazada.com.ph/products/pdp-i15396167084.html", + "type": "string" } }, "type": "object" }, - "lululemon.ProductDetailSKU": { + "lazada.OfficialStore": { "properties": { - "available": { - "type": "boolean" - }, - "color_code": { - "type": "string" - }, - "color_name": { - "type": "string" - }, - "id": { - "type": "string" - }, - "on_sale": { - "type": "boolean" - }, - "price": { - "type": "number" - }, - "sale_price": { - "type": "number" - }, - "size": { + "brand_image": { + "example": "https://img.lazcdn.com/g/p/example.jpg", "type": "string" }, - "style_id": { + "name": { + "example": "Alfalink", "type": "string" }, - "style_number": { + "shop_image": { + "example": "https://img.lazcdn.com/g/shop/example.jpeg", "type": "string" }, "url": { + "example": "https://www.lazada.co.id/shop/alfalink", "type": "string" } }, "type": "object" }, - "lululemon.ProductSummary": { + "lazada.ProductResponse": { "properties": { - "activities": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { + "brand": { + "example": "Pantene", "type": "string" }, - "category_id": { + "brand_url": { + "example": "https://www.lazada.co.id/pantene/", "type": "string" }, - "colors": { + "category": { + "example": [ + "Kecantikan" + ], "items": { "type": "string" }, "type": "array" }, "currency": { + "example": "IDR", "type": "string" }, - "id": { + "description": { "type": "string" }, - "image_url": { + "fetched_at": { + "example": "2026-09-02T04:00:00Z", "type": "string" }, - "list_price": { - "type": "number" - }, - "name": { + "highlights": { "type": "string" }, - "new_arrival": { - "type": "boolean" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "on_sale": { - "type": "boolean" + "item_id": { + "example": 159992555, + "type": "integer" }, "price": { + "example": 190500, "type": "number" }, - "sale_price": { - "type": "number" + "region": { + "example": "ID", + "type": "string" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "seller_id": { + "example": 100161156, + "type": "integer" }, - "style_numbers": { - "items": { - "type": "string" - }, - "type": "array" + "sku_id": { + "example": 181803572, + "type": "integer" }, - "unified_id": { + "source_url": { + "example": "https://www.lazada.co.id/products/pdp-i159992555-s181803572.html", + "type": "string" + }, + "title": { + "example": "PANTENE Shampoo Hair Fall Control 990ml", "type": "string" }, "url": { + "example": "https://www.lazada.co.id/products/pantene-shampoo-hair-fall-control-990ml-i159992555-s181803572.html", "type": "string" + }, + "variants": { + "items": { + "$ref": "#/definitions/lazada.ProductVariant" + }, + "type": "array" } }, "type": "object" }, - "lululemon.Store": { + "lazada.ProductSummary": { "properties": { - "address": { + "currency": { + "example": "IDR", "type": "string" }, - "amenities": { - "$ref": "#/definitions/lululemon.StoreAmenities" - }, - "city": { + "discount": { + "example": "-32%", "type": "string" }, - "country": { + "image": { + "example": "https://img.lazcdn.com/g/p/example.jpg", "type": "string" }, - "distance_miles": { - "type": "number" - }, - "hours": { - "items": { - "$ref": "#/definitions/lululemon.StoreHours" - }, - "type": "array" - }, - "id": { - "type": "string" + "item_id": { + "example": 159992555, + "type": "integer" }, - "latitude": { + "original_price": { + "example": 190500, "type": "number" }, - "longitude": { + "price": { + "example": 129000, "type": "number" }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "state": { - "type": "string" - }, - "state_name": { - "type": "string" - }, - "status": { - "type": "string" - }, - "store_type": { + "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" }, - "lululemon.StoreAmenities": { + "lazada.ProductVariant": { "properties": { - "buy_online_pickup_store": { - "type": "boolean" - }, - "complementary_hemming": { - "type": "boolean" - }, - "curbside_pickup": { - "type": "boolean" - }, - "footwear": { - "type": "boolean" - }, - "has_mirror": { - "type": "boolean" - }, - "like_new": { - "type": "boolean" - }, - "personal_shopping": { - "type": "boolean" + "name": { + "example": "Volume", + "type": "string" }, - "returns_exchanges": { - "type": "boolean" + "values": { + "example": [ + "990 ml" + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "lululemon.StoreHours": { + "lazada.SearchResponse": { "properties": { - "close": { + "fetched_at": { + "example": "2026-09-02T04:00:00Z", "type": "string" }, - "day": { + "items": { + "items": { + "$ref": "#/definitions/lazada.ListingItem" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 40, + "type": "integer" + }, + "query": { + "example": "karaoke", "type": "string" }, - "open": { + "region": { + "example": "PH", "type": "string" - } - }, - "type": "object" - }, - "lululemon.StoresResponse": { - "properties": { - "count": { - "type": "integer" }, - "fetched_at": { + "sort": { + "example": "popularity", "type": "string" }, "source_url": { + "example": "https://www.lazada.com.ph/catalog/?q=karaoke&ajax=true&page=1", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/lululemon.Store" - }, - "type": "array" + "total_results": { + "example": 2400, + "type": "integer" } }, "type": "object" }, - "lululemon.categoriesResponseDoc": { + "lazada.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lululemon.CategoriesResponse" + "$ref": "#/definitions/lazada.CategoryDirectoryResponse" }, "msg": { "example": "OK", @@ -95213,14 +97504,14 @@ }, "type": "object" }, - "lululemon.categoryResponseDoc": { + "lazada.categoryProductsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lululemon.CategoryResponse" + "$ref": "#/definitions/lazada.CategoryProductsResponse" }, "msg": { "example": "OK", @@ -95229,14 +97520,14 @@ }, "type": "object" }, - "lululemon.outfitResponseDoc": { + "lazada.homeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lululemon.OutfitResponse" + "$ref": "#/definitions/lazada.HomeResponse" }, "msg": { "example": "OK", @@ -95245,14 +97536,14 @@ }, "type": "object" }, - "lululemon.productDetailResponseDoc": { + "lazada.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lululemon.ProductDetailResponse" + "$ref": "#/definitions/lazada.ProductResponse" }, "msg": { "example": "OK", @@ -95261,14 +97552,14 @@ }, "type": "object" }, - "lululemon.storesResponseDoc": { + "lazada.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lululemon.StoresResponse" + "$ref": "#/definitions/lazada.SearchResponse" }, "msg": { "example": "OK", @@ -95277,17 +97568,20 @@ }, "type": "object" }, - "macrumors.AuthorArticle": { + "leboncoin.ListingCard": { "properties": { - "image_url": { + "category": { "type": "string" }, - "published_at": { + "id": { "type": "string" }, - "summary": { + "image_url": { "type": "string" }, + "price_eur": { + "type": "integer" + }, "title": { "type": "string" }, @@ -95297,24 +97591,33 @@ }, "type": "object" }, - "macrumors.AuthorResponse": { + "leboncoin.ListingResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/macrumors.AuthorArticle" - }, - "type": "array" + "availability": { + "type": "string" }, - "bio": { + "category": { "type": "string" }, - "image_url": { + "condition": { "type": "string" }, - "name": { + "currency": { "type": "string" }, - "slug": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "price_eur": { + "type": "integer" + }, + "title": { "type": "string" }, "url": { @@ -95323,944 +97626,1049 @@ }, "type": "object" }, - "macys.ProductColor": { + "leboncoin.SearchResponse": { "properties": { - "current_price": { - "type": "number" + "listings": { + "items": { + "$ref": "#/definitions/leboncoin.ListingCard" + }, + "type": "array" }, - "id": { + "location": { "type": "string" }, - "name": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "leboncoin.listingResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "on_sale": { - "type": "boolean" + "data": { + "$ref": "#/definitions/leboncoin.ListingResponse" }, - "regular_price": { + "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": { + "properties": { + "average": { + "example": 4.52, "type": "number" + }, + "count": { + "example": 5553202, + "type": "integer" + }, + "review_count": { + "example": 740173, + "type": "integer" } }, "type": "object" }, - "macys.ProductDetailResponse": { + "letterboxd.FilmRef": { "properties": { - "available": { - "type": "boolean" + "slug": { + "type": "string" }, - "brand": { + "title": { "type": "string" }, - "bullet_points": { + "uri": { + "type": "string" + } + }, + "type": "object" + }, + "letterboxd.FilmResponse": { + "properties": { + "cast": { "items": { - "type": "string" + "$ref": "#/definitions/letterboxd.PersonCredit" }, "type": "array" }, - "categories": { + "countries": { "items": { "type": "string" }, "type": "array" }, - "colors": { + "directors": { "items": { - "$ref": "#/definitions/macys.ProductColor" + "$ref": "#/definitions/letterboxd.PersonCredit" }, "type": "array" }, - "currency_code": { - "type": "string" - }, - "current_price": { - "type": "number" - }, - "department_name": { - "type": "string" - }, - "description": { - "type": "string" + "genres": { + "items": { + "type": "string" + }, + "type": "array" }, - "division_name": { - "type": "string" + "languages": { + "items": { + "type": "string" + }, + "type": "array" }, - "fetched_at": { + "poster_url": { "type": "string" }, - "images": { + "production_companies": { "items": { "type": "string" }, "type": "array" }, - "low_availability": { - "type": "boolean" + "rating": { + "$ref": "#/definitions/letterboxd.FilmRating" }, - "name": { + "release_date": { + "example": "2019-05-21", "type": "string" }, - "on_sale": { - "type": "boolean" + "runtime_minutes": { + "example": 133, + "type": "integer" }, - "product_id": { + "slug": { + "example": "parasite-2019", "type": "string" }, - "rating": { - "type": "number" - }, - "regular_price": { - "type": "number" + "source_url": { + "type": "string" }, - "review_count": { - "type": "integer" + "synopsis": { + "type": "string" }, - "source_url": { + "title": { + "example": "Parasite", "type": "string" }, - "url": { + "uri": { "type": "string" + }, + "year": { + "example": 2019, + "type": "integer" } }, "type": "object" }, - "macys.ProductReviewsResponse": { + "letterboxd.MemberResponse": { "properties": { - "average_rating": { - "type": "number" - }, - "count": { - "type": "integer" - }, - "fetched_at": { + "display_name": { "type": "string" }, - "page": { + "films_this_year": { "type": "integer" }, - "page_size": { + "films_watched": { "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.", + "followers": { "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": { - "type": "integer" - }, - "type": "array" - }, - "recommended_ratio": { - "type": "number" + "following": { + "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/macys.Review" - }, - "type": "array" + "lists": { + "type": "integer" }, "source_url": { "type": "string" }, - "total_pages": { - "type": "integer" + "uri": { + "type": "string" }, - "total_reviews": { - "type": "integer" + "username": { + "type": "string" } }, "type": "object" }, - "macys.Review": { + "letterboxd.PersonCredit": { "properties": { - "author": { + "name": { "type": "string" }, - "body": { + "slug": { "type": "string" + } + }, + "type": "object" + }, + "letterboxd.PersonResponse": { + "properties": { + "films": { + "items": { + "$ref": "#/definitions/letterboxd.FilmRef" + }, + "type": "array" }, - "id": { + "name": { "type": "string" }, - "location": { + "role": { "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": { + "slug": { "type": "string" }, - "title": { + "source_url": { "type": "string" } }, "type": "object" }, - "macys.SuggestResponse": { + "letterboxd.PopularResponse": { "properties": { - "count": { - "type": "integer" + "decade": { + "type": "string" }, - "fetched_at": { + "films": { + "items": { + "$ref": "#/definitions/letterboxd.FilmRef" + }, + "type": "array" + }, + "genre": { "type": "string" }, - "query": { + "period": { "type": "string" }, "source_url": { "type": "string" - }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "macys.productDetailResponseDoc": { + "letterboxd.RatingBucket": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/macys.ProductDetailResponse" + "percent": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "stars": { + "example": 4.5, + "type": "number" } }, "type": "object" }, - "macys.productReviewsResponseDoc": { + "letterboxd.RatingHistogramResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "buckets": { + "items": { + "$ref": "#/definitions/letterboxd.RatingBucket" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/macys.ProductReviewsResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "total_ratings": { + "type": "integer" } }, "type": "object" }, - "macys.suggestResponseDoc": { + "letterboxd.Review": { "properties": { - "code": { - "example": 200, + "comment_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/macys.SuggestResponse" + "contains_spoilers": { + "type": "boolean" }, - "msg": { - "example": "OK", + "date": { + "example": "2019-08-14", "type": "string" - } - }, - "type": "object" - }, - "marketwatch.AuthorArticle": { - "properties": { - "title": { + }, + "display_name": { "type": "string" }, - "url": { + "like_count": { + "type": "integer" + }, + "liked": { + "type": "boolean" + }, + "rating": { + "example": 4.5, + "type": "number" + }, + "text": { + "type": "string" + }, + "username": { "type": "string" } }, "type": "object" }, - "marketwatch.AuthorResponse": { + "letterboxd.ReviewsResponse": { "properties": { - "articles": { + "reviews": { "items": { - "$ref": "#/definitions/marketwatch.AuthorArticle" + "$ref": "#/definitions/letterboxd.Review" }, "type": "array" }, - "bio": { + "slug": { "type": "string" }, - "job_title": { + "source_url": { "type": "string" - }, - "name": { + } + }, + "type": "object" + }, + "letterboxd.SearchResponse": { + "properties": { + "query": { "type": "string" }, - "slug": { - "type": "string" + "results": { + "items": { + "$ref": "#/definitions/letterboxd.SearchResult" + }, + "type": "array" }, - "url": { + "source_url": { "type": "string" }, - "works_for": { + "type": { "type": "string" } }, "type": "object" }, - "mashable.AuthorResponse": { + "letterboxd.SearchResult": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "owner": { + "type": "string" }, - "has_next_page": { - "type": "boolean" + "role": { + "example": "director", + "type": "string" }, - "image_url": { + "slug": { "type": "string" }, - "name": { + "title": { "type": "string" }, - "page": { - "type": "integer" + "type": { + "example": "film", + "type": "string" }, - "slug": { + "uri": { "type": "string" }, - "social_links": { + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "letterboxd.SimilarResponse": { + "properties": { + "films": { "items": { - "$ref": "#/definitions/mashable.AuthorSocialLink" + "$ref": "#/definitions/letterboxd.FilmRef" }, "type": "array" }, - "title": { + "slug": { "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "mashable.AuthorSocialLink": { + "letterboxd.filmResponseDoc": { "properties": { - "platform": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/letterboxd.FilmResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mcdonalds.CategoriesResponse": { + "letterboxd.memberResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/mcdonalds.Category" - }, - "type": "array" - }, - "count": { - "example": 13, + "code": { + "example": 200, "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" - }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/letterboxd.MemberResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mcdonalds.Category": { + "letterboxd.personResponseDoc": { "properties": { - "name": { - "example": "Breakfast", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "breakfast", - "type": "string" + "data": { + "$ref": "#/definitions/letterboxd.PersonResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mcdonalds.ItemComponent": { + "letterboxd.popularResponseDoc": { "properties": { - "allergens": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "ingredients": { + "data": { + "$ref": "#/definitions/letterboxd.PopularResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mcdonalds.ItemListEntry": { + "letterboxd.ratingHistogramResponseDoc": { "properties": { - "allergens": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "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" + "data": { + "$ref": "#/definitions/letterboxd.RatingHistogramResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "letterboxd.reviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/letterboxd.ReviewsResponse" }, - "ingredients": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "letterboxd.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "item_id": { - "example": "200466", - "type": "string" + "data": { + "$ref": "#/definitions/letterboxd.SearchResponse" }, - "name": { - "example": "Quarter Pounder with Cheese", + "msg": { + "example": "OK", "type": "string" - }, - "nutrients": { - "items": { - "$ref": "#/definitions/mcdonalds.Nutrient" - }, - "type": "array" } }, "type": "object" }, - "mcdonalds.ItemListResponse": { + "letterboxd.similarResponseDoc": { "properties": { - "count": { - "example": 3, + "code": { + "example": 200, "type": "integer" }, - "country": { - "example": "us", + "data": { + "$ref": "#/definitions/letterboxd.SimilarResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "linkedin.Customer": { + "properties": { + "follower_count": { + "example": 12345, + "type": "integer" }, - "fetched_at": { + "industry": { + "example": "Information Technology & Services", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/mcdonalds.ItemListEntry" - }, - "type": "array" + "link": { + "example": "https://www.linkedin.com/company/contoso/", + "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" + "logo": { + "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" }, - "source_url": { + "name": { + "example": "Contoso Ltd.", "type": "string" } }, "type": "object" }, - "mcdonalds.ItemResponse": { + "linkedin.LinkedinCompanyResponse": { "properties": { - "allergens": { - "description": "Allergens is McDonald's own allergen statement for the item.", + "about": { + "example": "We’re a team of scientists, engineers...", "type": "string" }, - "country": { - "description": "Country echoes the market this item was read from. Item ids are NOT\nportable across markets.", - "example": "us", - "type": "string" + "affiliated_pages": { + "items": { + "$ref": "#/definitions/linkedin.Page" + }, + "type": "array" }, - "description": { + "company_size": { + "example": "501-1,000", "type": "string" }, - "fetched_at": { - "type": "string" + "follower_count": { + "example": 1176422, + "type": "integer" }, - "image_url": { + "founded_on": { + "example": 2010, + "type": "integer" + }, + "headline": { + "example": "We're committed to solving intelligence, to advance science and benefit humanity.", "type": "string" }, - "ingredients": { - "description": "Ingredients is the full ingredient statement.", + "headquarters": { + "example": "London, London", "type": "string" }, - "item_id": { - "example": "200463", + "industry": { + "example": "Research Services", "type": "string" }, - "name": { - "example": "Big Mac", + "link": { + "example": "https://www.linkedin.com/company/googledeepmind", "type": "string" }, - "nutrients": { - "description": "Nutrients are the published per-serving nutrition values.", + "locations": { "items": { - "$ref": "#/definitions/mcdonalds.Nutrient" + "$ref": "#/definitions/linkedin.Location" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "mcdonalds.MenuItemSummary": { - "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": { - "type": "string" - }, - "item_id": { - "example": "200300", + "logo": { + "example": "https://static.licdn.com/.../linkedin-bug-color.png", "type": "string" }, "name": { - "example": "Bacon, Egg & Cheese Biscuit", - "type": "string" - }, - "product_url": { - "type": "string" - } - }, - "type": "object" - }, - "mcdonalds.MenuResponse": { - "properties": { - "category": { - "example": "breakfast", + "example": "Google DeepMind", "type": "string" }, - "count": { - "example": 32, + "num_of_employees_on_linkedin": { + "example": 5590, "type": "integer" }, - "country": { - "example": "us", + "similar_pages": { + "items": { + "$ref": "#/definitions/linkedin.Page" + }, + "type": "array" + }, + "specialties": { + "example": "Artificial Intelligence and Machine Learning", "type": "string" }, - "fetched_at": { + "type": { + "example": "Privately Held", "type": "string" }, - "items": { + "updates": { "items": { - "$ref": "#/definitions/mcdonalds.MenuItemSummary" + "$ref": "#/definitions/linkedin.Update" }, "type": "array" }, - "source_url": { + "website": { + "example": "https://www.deepmind.google", "type": "string" } }, "type": "object" }, - "mcdonalds.Nutrient": { + "linkedin.LinkedinProductResponse": { "properties": { - "daily_value": { - "description": "DailyValue is the percent-daily-value where McDonald's prints one.", - "example": "45", + "about": { + "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" }, - "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", + "category_link": { + "example": "https://www.linkedin.com/products/categories/business-management-software", "type": "string" }, - "name": { - "example": "Calories", + "category_name": { + "example": "Business Management Software", "type": "string" }, - "unit": { - "example": "Cal.", + "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" }, - "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", + "external_link": { + "example": "https://dynamics.microsoft.com/en-us/business-central/overview/", "type": "string" - } - }, - "type": "object" - }, - "mcdonalds.Restaurant": { - "properties": { - "address": { - "example": "160 Broadway", + }, + "featured_customers": { + "items": { + "$ref": "#/definitions/linkedin.Customer" + }, + "type": "array" + }, + "link": { + "example": "https://www.linkedin.com/products/microsoft-dynamics-microsoft-dynamics-365-business-central", "type": "string" }, - "city": { - "example": "New York", + "logo": { + "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" }, - "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.", + "medias": { + "items": { + "$ref": "#/definitions/linkedin.Media" + }, + "type": "array" + }, + "name": { + "example": "Microsoft Dynamics 365 Business Central", "type": "string" }, - "drive_thru_hours": { + "organization_link": { + "example": "https://www.linkedin.com/company/microsoft-dynamics/", "type": "string" }, - "facilities": { - "description": "Facilities are McDonald's own amenity codes for the restaurant\n(e.g. GIFTCARDS, MOBILEOFFERS, DRIVETHRU, WIFI).", + "organization_name": { + "example": "Microsoft Dynamics 365", + "type": "string" + }, + "other_products": { "items": { - "type": "string" + "$ref": "#/definitions/linkedin.Product" }, "type": "array" }, - "hours": { - "description": "Hours is the full week where McDonald's publishes it.", + "similar_products": { "items": { - "$ref": "#/definitions/mcdonalds.RestaurantHours" + "$ref": "#/definitions/linkedin.Product" }, "type": "array" - }, - "latitude": { - "example": 40.709438, - "type": "number" - }, - "longitude": { - "example": -74.010086, - "type": "number" - }, - "name": { - "example": "160 BROADWAY", - "type": "string" - }, - "open_status": { - "example": "OPEN", + } + }, + "type": "object" + }, + "linkedin.Location": { + "properties": { + "address": { + "example": "Kings Cross, London, London N1C4AG, GB", "type": "string" }, - "postal_code": { - "example": "10038", + "is_primary": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "linkedin.Media": { + "properties": { + "link": { + "example": "https://media.licdn.com/media/sample-video.mp4", "type": "string" }, - "state": { - "example": "NY", + "name": { + "example": "Product Demo Video", "type": "string" - }, - "store_id": { - "example": "10528", + } + }, + "type": "object" + }, + "linkedin.Page": { + "properties": { + "address": { + "example": "San Francisco, CA", "type": "string" }, - "telephone": { - "example": "(212) 385-2066", + "industry": { + "example": "Research Services", "type": "string" }, - "timezone": { + "link": { + "example": "https://www.linkedin.com/company/openai", "type": "string" }, - "today_hours": { - "description": "TodayHours and DriveThruHours are the published windows for today.", + "name": { + "example": "OpenAI", "type": "string" } }, "type": "object" }, - "mcdonalds.RestaurantHours": { + "linkedin.Product": { "properties": { - "day_of_week": { - "example": "monday", + "category_link": { + "example": "https://www.linkedin.com/products/categories/business-management-software", "type": "string" }, - "hours": { - "example": "00:00 - 00:00", + "category_name": { + "example": "Business Management Software", + "type": "string" + }, + "link": { + "example": "https://www.linkedin.com/products/odoo/", + "type": "string" + }, + "logo": { + "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" + }, + "name": { + "example": "Odoo", "type": "string" } }, "type": "object" }, - "mcdonalds.RestaurantMenuChoice": { + "linkedin.ProductCategoriesResponse": { "properties": { - "options": { + "categories": { "items": { - "$ref": "#/definitions/mcdonalds.RestaurantMenuChoiceOption" + "$ref": "#/definitions/linkedin.ProductCategoryItem" }, "type": "array" + }, + "total": { + "example": 620, + "type": "integer" } }, "type": "object" }, - "mcdonalds.RestaurantMenuChoiceOption": { + "linkedin.ProductCategoryItem": { "properties": { - "item_id": { - "example": "14877", + "id": { + "example": "1620", + "type": "string" + }, + "link": { + "example": "https://www.linkedin.com/products/categories/healthcare-crm-software", "type": "string" }, "name": { - "example": "Lemonade", + "example": "Healthcare CRM Software", "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" + "universal_name": { + "example": "healthcare-crm-software", + "type": "string" + }, + "urn": { + "example": "urn:li:standardizedProductCategory:1620", + "type": "string" } }, "type": "object" }, - "mcdonalds.RestaurantMenuItem": { + "linkedin.ProductSearchResultItem": { "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" + "category_link": { + "example": "https://www.linkedin.com/products/categories/sales-intelligence-software", + "type": "string" }, - "delivery_price": { - "example": 8.39, - "type": "number" + "category_name": { + "example": "Sales Intelligence Software", + "type": "string" }, - "eat_in_price": { - "example": 7.29, - "type": "number" + "description": { + "example": "Sales Navigator helps sellers have high-quality conversations with the people that matter, at scale.", + "type": "string" }, - "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", + "id": { + "example": "linkedin-sales-navigator", "type": "string" }, - "image_url": { + "link": { + "example": "https://www.linkedin.com/products/linkedin-sales-navigator", "type": "string" }, - "item_id": { - "example": "5", + "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": "Big Mac®", + "example": "LinkedIn Sales Navigator", "type": "string" }, - "pickup_price": { - "example": 7.29, - "type": "number" + "organization_name": { + "example": "LinkedIn", + "type": "string" } }, "type": "object" }, - "mcdonalds.RestaurantMenuResponse": { + "linkedin.ProductsSearchResponse": { "properties": { - "count": { - "example": 563, + "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" }, - "currency": { - "example": "$", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "items": { + "products": { "items": { - "$ref": "#/definitions/mcdonalds.RestaurantMenuItem" + "$ref": "#/definitions/linkedin.ProductSearchResultItem" }, "type": "array" }, - "source_url": { - "type": "string" + "start": { + "example": 0, + "type": "integer" }, - "store_id": { - "example": "10528", - "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, + "type": "integer" } }, "type": "object" }, - "mcdonalds.RestaurantsResponse": { + "linkedin.Update": { "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", + "author": { + "example": "Google DeepMind", "type": "string" }, - "fetched_at": { + "author_link": { + "example": "https://uk.linkedin.com/company/googledeepmind", "type": "string" }, - "restaurants": { + "images": { + "example": [ + "[\"https://example.com/image1.jpg\"]" + ], "items": { - "$ref": "#/definitions/mcdonalds.Restaurant" + "type": "string" }, "type": "array" }, - "source_url": { + "is_reposted": { + "example": false, + "type": "boolean" + }, + "logo": { + "example": "https://media.licdn.com/dms/image/v2/D4E0BAQEntrYwxPlbQA/company-logo_100_100/0/googledeepmind_logo", "type": "string" - } - }, - "type": "object" - }, - "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", + }, + "num_of_comments": { + "example": 21, "type": "integer" }, - "data": { - "$ref": "#/definitions/mcdonalds.CategoriesResponse" + "num_of_reactions": { + "example": 571, + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "post_link": { + "example": "https://www.linkedin.com/posts/googledeepmind_thomas-story-activity-7313245349987385346-5COL", + "type": "string" + }, + "published_at": { + "example": "1w", + "type": "string" + }, + "summary": { + "example": "When his son was diagnosed with a rare disease, Googler Thomas Wagner...", + "type": "string" + }, + "videos": { + "example": [ + "[\"https://example.com/video1.mp4\"]" + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "mcdonalds.itemListResponseDoc": { + "linkedin.companyResponseDoc": { "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/mcdonalds.ItemListResponse" + "$ref": "#/definitions/linkedin.LinkedinCompanyResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "mcdonalds.itemResponseDoc": { + "linkedin.productCategoriesResponseDoc": { "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/mcdonalds.ItemResponse" + "$ref": "#/definitions/linkedin.ProductCategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "mcdonalds.menuResponseDoc": { + "linkedin.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/mcdonalds.MenuResponse" + "$ref": "#/definitions/linkedin.LinkedinProductResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "mcdonalds.restaurantMenuResponseDoc": { + "linkedin.productsSearchResponseDoc": { "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/mcdonalds.RestaurantMenuResponse" + "$ref": "#/definitions/linkedin.ProductsSearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "mcdonalds.restaurantsResponseDoc": { + "linkedin.showcaseResponseDoc": { "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/mcdonalds.RestaurantsResponse" + "$ref": "#/definitions/linkedin.LinkedinCompanyResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "mediaite.AuthorArticle": { - "properties": { - "date": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mediaite.AuthorResponse": { + "livemint.AuthorResponse": { "properties": { - "articles": { + "biography": { "items": { - "$ref": "#/definitions/mediaite.AuthorArticle" + "type": "string" }, "type": "array" }, - "avatar_url": { + "facebook_url": { "type": "string" }, - "bio": { + "image_url": { "type": "string" }, - "email": { + "instagram_url": { "type": "string" }, - "name": { + "job_title": { "type": "string" }, - "slug": { + "linkedin_url": { "type": "string" }, - "twitter": { + "name": { + "type": "string" + }, + "twitter_url": { "type": "string" }, "url": { @@ -96269,115 +98677,124 @@ }, "type": "object" }, - "medicalnewstoday.ArticleResponse": { + "livescience.AuthorResponse": { "properties": { - "authors": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "paragraphs": { + "biography": { "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.", + "has_next_page": { "type": "boolean" }, - "published_at": { + "job_title": { "type": "string" }, - "section": { + "name": { "type": "string" }, - "title": { - "type": "string" + "page": { + "type": "integer" }, - "updated_at": { + "slug": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "medicalnewstoday.AuthorResponse": { - "properties": { - "articles": { + "social_links": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/livescience.AuthorSocialLink" }, "type": "array" }, - "bio": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "medicalnewstoday.HeadlinesResponse": { + "livescience.AuthorSocialLink": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "platform": { + "type": "string" }, - "section": { + "url": { "type": "string" } }, "type": "object" }, - "medicalnewstoday.NewsResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "medicalnewstoday.SectionsResponse": { + "livescore.livescoreNewsFeedItemDoc": { "properties": { - "sections": { + "author": { + "example": "LiveScore", + "type": "string" + }, + "categories": { + "example": [ + "football" + ], "items": { - "$ref": "#/definitions/newsplatform.Section" + "type": "string" }, "type": "array" + }, + "content": { + "example": "

The complete RSS story body.

", + "type": "string" + }, + "description": { + "example": "A short summary of the latest story.", + "type": "string" + }, + "guid": { + "example": "https://www.livescore.com/en/news/football/example-story/", + "type": "string" + }, + "link": { + "example": "https://www.livescore.com/en/news/football/example-story/", + "type": "string" + }, + "published_at": { + "example": "Sat, 26 Sep 2026 08:45:00 GMT", + "type": "string" + }, + "title": { + "example": "Latest football news", + "type": "string" } }, "type": "object" }, - "medicalnewstoday.articleResponseDoc": { + "livescore.livescoreNewsFeedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.ArticleResponse" + "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" }, "msg": { "example": "OK", @@ -96386,30 +98803,55 @@ }, "type": "object" }, - "medicalnewstoday.authorResponseDoc": { + "livescore.livescoreNewsPublisherDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "contact": { + "example": "https://www.statsperform.com/contact/", + "type": "string" }, - "data": { - "$ref": "#/definitions/medicalnewstoday.AuthorResponse" + "logo_url": { + "example": "https://www.livescore.com/ls-web-assets/images/publishers-stats-perform.webp", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Stats Perform", + "type": "string" + }, + "telephone": { + "example": "+1 866 221 1426", + "type": "string" + }, + "website": { + "example": "https://www.statsperform.com/", "type": "string" } }, "type": "object" }, - "medicalnewstoday.headlinesResponseDoc": { + "livescore.livescoreNewsPublishersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.HeadlinesResponse" + "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", @@ -96418,14 +98860,32 @@ }, "type": "object" }, - "medicalnewstoday.newsResponseDoc": { + "livescore.livescoreSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.NewsResponse" + "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", @@ -96434,14 +98894,22 @@ }, "type": "object" }, - "medicalnewstoday.sectionsResponseDoc": { + "livescore.newsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.SectionsResponse" + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/livescore.newsCategoryDoc" + }, + "type": "array" + } + }, + "type": "object" }, "msg": { "example": "OK", @@ -96450,429 +98918,420 @@ }, "type": "object" }, - "men.AuthorArticle": { + "livescore.newsCategoryDoc": { "properties": { - "label": { + "id": { + "example": "football", "type": "string" }, - "label_url": { + "name": { + "example": "Football", "type": "string" }, - "title": { + "type": { + "example": "sport", "type": "string" }, "url": { + "example": "https://www.livescore.com/en/news/football/", "type": "string" } }, "type": "object" }, - "men.AuthorResponse": { + "livescore.responseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/men.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "twitter": { - "type": "string" + "data": { + "$ref": "#/definitions/livescore.sourceDataDoc" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mercari.AutocompleteResponse": { + "livescore.sourceDataDoc": { "properties": { - "query": { - "type": "string" + "data": { + "additionalProperties": true, + "type": "object" }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" + "source_url": { + "example": "https://www.livescore.com/en/football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267/", + "type": "string" } }, "type": "object" }, - "mercari.Brand": { + "livescore.sportDoc": { "properties": { "id": { - "type": "integer" + "example": "soccer", + "type": "string" }, "name": { + "example": "Football", "type": "string" } }, "type": "object" }, - "mercari.Category": { + "livescore.sportsResponseDoc": { "properties": { - "icon_url": { - "type": "string" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "properties": { + "sports": { + "items": { + "$ref": "#/definitions/livescore.sportDoc" + }, + "type": "array" + } + }, + "type": "object" }, - "parent_id": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "mercari.HomeResponse": { + "lululemon.CategoriesResponse": { "properties": { - "items": { + "categories": { "items": { - "$ref": "#/definitions/mercari.ItemSummary" + "$ref": "#/definitions/lululemon.CategoryEntry" }, "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "mercari.ItemDetailResponse": { + "lululemon.CategoryEntry": { "properties": { - "category_code": { - "type": "integer" + "category": { + "type": "string" }, - "condition_code": { - "type": "integer" + "cdp_hash": { + "type": "string" }, - "description": { + "name": { "type": "string" }, - "hashtags": { + "path": { "items": { "type": "string" }, "type": "array" }, - "id": { + "section": { "type": "string" }, - "photos": { - "items": { - "type": "string" - }, - "type": "array" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "lululemon.CategoryResponse": { + "properties": { + "category": { + "type": "string" }, - "price_cents": { + "cdp_hash": { + "type": "string" + }, + "count": { "type": "integer" }, - "shipping_from_state": { + "fetched_at": { "type": "string" }, - "similar_items": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/mercari.ItemSummary" + "$ref": "#/definitions/lululemon.ProductSummary" }, "type": "array" }, - "title": { + "source_url": { "type": "string" }, - "url": { - "type": "string" + "total_products": { + "type": "integer" } }, "type": "object" }, - "mercari.ItemSummary": { + "lululemon.OutfitItem": { "properties": { - "condition_code": { - "type": "integer" + "category": { + "type": "string" }, - "created_at_unix": { - "type": "integer" + "currency": { + "type": "string" }, "id": { "type": "string" }, - "num_likes": { - "type": "integer" - }, - "original_price_cents": { - "type": "integer" + "image_url": { + "type": "string" }, - "price_cents": { - "type": "integer" + "list_price": { + "type": "number" }, - "seller_id": { - "type": "string" + "on_sale": { + "type": "boolean" }, - "thumbnail_url": { - "type": "string" + "sale_price": { + "type": "number" }, "title": { "type": "string" }, - "updated_at_unix": { - "type": "integer" - }, "url": { "type": "string" } }, "type": "object" }, - "mercari.MasterResponse": { + "lululemon.OutfitLook": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/mercari.Brand" - }, - "type": "array" - }, - "categories": { - "items": { - "$ref": "#/definitions/mercari.Category" - }, - "type": "array" + "id": { + "type": "string" }, - "sizes": { + "items": { "items": { - "$ref": "#/definitions/mercari.Size" + "$ref": "#/definitions/lululemon.OutfitItem" }, "type": "array" } }, "type": "object" }, - "mercari.SearchResponse": { + "lululemon.OutfitResponse": { "properties": { - "items": { + "color_code": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "item": { + "$ref": "#/definitions/lululemon.OutfitItem" + }, + "looks": { "items": { - "$ref": "#/definitions/mercari.ItemSummary" + "$ref": "#/definitions/lululemon.OutfitLook" }, "type": "array" }, - "query": { + "source_url": { "type": "string" }, - "total_results": { - "type": "integer" + "unified_id": { + "type": "string" } }, "type": "object" }, - "mercari.Size": { + "lululemon.ProductDetailColor": { "properties": { "code": { "type": "string" }, - "id": { - "type": "integer" - }, "name": { "type": "string" }, - "short_name": { + "swatch_url": { "type": "string" } }, "type": "object" }, - "mercari.autocompleteResponseDoc": { + "lululemon.ProductDetailRating": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/mercari.AutocompleteResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "mercari.homeResponseDoc": { + "lululemon.ProductDetailResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mercari.HomeResponse" + "activities": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "category": { "type": "string" - } - }, - "type": "object" - }, - "mercari.masterResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mercari.MasterResponse" }, - "msg": { - "example": "OK", + "category_id": { "type": "string" - } - }, - "type": "object" - }, - "mercari.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/mercari.SearchResponse" + "colors": { + "items": { + "$ref": "#/definitions/lululemon.ProductDetailColor" + }, + "type": "array" }, - "msg": { - "example": "OK", + "currency": { "type": "string" - } - }, - "type": "object" - }, - "metacritic.BrowseItem": { - "properties": { + }, "description": { "type": "string" }, - "genres": { + "fetched_at": { + "type": "string" + }, + "gender": { "items": { - "$ref": "#/definitions/metacritic.Genre" + "type": "string" }, "type": "array" }, - "id": { - "type": "integer" + "highlights": { + "items": { + "type": "string" + }, + "type": "array" }, - "image": { + "name": { "type": "string" }, - "metascore": { - "$ref": "#/definitions/metacritic.ScoreSummary" + "on_sale": { + "type": "boolean" }, - "premiere_year": { - "type": "integer" + "price": { + "type": "number" }, - "rating": { + "product_id": { "type": "string" }, - "release_date": { - "type": "string" + "rating": { + "$ref": "#/definitions/lululemon.ProductDetailRating" }, - "season_count": { - "type": "integer" + "reviews": { + "items": { + "$ref": "#/definitions/lululemon.ProductDetailReview" + }, + "type": "array" }, - "slug": { - "type": "string" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" }, - "title": { + "skus": { + "items": { + "$ref": "#/definitions/lululemon.ProductDetailSKU" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "type": { - "example": "game", + "unified_id": { "type": "string" }, "url": { "type": "string" - }, - "user_score": { - "type": "number" } }, "type": "object" }, - "metacritic.BrowseResponse": { + "lululemon.ProductDetailReview": { "properties": { - "genre": { + "badge": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/metacritic.BrowseItem" - }, - "type": "array" - }, - "page": { - "type": "integer" + "body": { + "type": "string" }, - "per_page": { - "type": "integer" + "fit": { + "type": "string" }, - "sort": { + "id": { "type": "string" }, - "total": { - "type": "integer" + "rating": { + "type": "number" }, - "type": { + "size_purchased": { "type": "string" - } - }, - "type": "object" - }, - "metacritic.Credit": { - "properties": { - "name": { + }, + "submitted_at": { "type": "string" }, - "role": { - "example": "Director", + "title": { "type": "string" + }, + "verified_buyer": { + "type": "boolean" } }, "type": "object" }, - "metacritic.CriticReview": { + "lululemon.ProductDetailSKU": { "properties": { - "author": { - "type": "string" + "available": { + "type": "boolean" }, - "date": { - "example": "2022-02-23", + "color_code": { "type": "string" }, - "platform": { + "color_name": { "type": "string" }, - "publication": { + "id": { "type": "string" }, - "publication_slug": { + "on_sale": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "sale_price": { + "type": "number" + }, + "size": { "type": "string" }, - "quote": { + "style_id": { "type": "string" }, - "score": { - "type": "integer" + "style_number": { + "type": "string" }, "url": { "type": "string" @@ -96880,296 +99339,220 @@ }, "type": "object" }, - "metacritic.CriticReviewsResponse": { + "lululemon.ProductSummary": { "properties": { - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "reviews": { + "activities": { "items": { - "$ref": "#/definitions/metacritic.CriticReview" + "type": "string" }, "type": "array" }, - "slug": { + "category": { "type": "string" }, - "sort": { + "category_id": { "type": "string" }, - "total": { - "type": "integer" + "colors": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": { + "currency": { "type": "string" - } - }, - "type": "object" - }, - "metacritic.Genre": { - "properties": { + }, "id": { - "type": "integer" + "type": "string" + }, + "image_url": { + "type": "string" + }, + "list_price": { + "type": "number" }, "name": { "type": "string" - } - }, - "type": "object" - }, - "metacritic.Platform": { - "properties": { - "id": { - "type": "integer" }, - "is_lead": { + "new_arrival": { "type": "boolean" }, - "metascore": { - "$ref": "#/definitions/metacritic.ScoreSummary" + "on_sale": { + "type": "boolean" }, - "name": { - "example": "PlayStation 5", - "type": "string" + "price": { + "type": "number" }, - "release_date": { - "type": "string" - } - }, - "type": "object" - }, - "metacritic.Product": { - "properties": { - "countries": { + "sale_price": { + "type": "number" + }, + "sizes": { "items": { "type": "string" }, "type": "array" }, - "description": { - "type": "string" - }, - "duration": { - "type": "integer" - }, - "genres": { + "style_numbers": { "items": { - "$ref": "#/definitions/metacritic.Genre" + "type": "string" }, "type": "array" }, - "id": { - "type": "integer" - }, - "image": { + "unified_id": { "type": "string" }, - "imdb_id": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "lululemon.Store": { + "properties": { + "address": { "type": "string" }, - "imdb_url": { + "amenities": { + "$ref": "#/definitions/lululemon.StoreAmenities" + }, + "city": { "type": "string" }, - "in_theaters": { - "type": "boolean" + "country": { + "type": "string" }, - "metascore": { - "$ref": "#/definitions/metacritic.ScoreSummary" + "distance_miles": { + "type": "number" }, - "networks": { + "hours": { "items": { - "type": "string" + "$ref": "#/definitions/lululemon.StoreHours" }, "type": "array" }, - "platforms": { - "items": { - "$ref": "#/definitions/metacritic.Platform" - }, - "type": "array" + "id": { + "type": "string" }, - "premiere_year": { - "type": "integer" + "latitude": { + "type": "number" }, - "production": { - "$ref": "#/definitions/metacritic.Production" + "longitude": { + "type": "number" }, - "rating": { - "example": "M", + "message": { "type": "string" }, - "release_date": { - "example": "2022-02-25", + "name": { "type": "string" }, - "season_count": { - "type": "integer" - }, "slug": { "type": "string" }, - "tagline": { + "state": { "type": "string" }, - "title": { + "state_name": { "type": "string" }, - "type": { - "example": "game", + "status": { "type": "string" }, - "url": { + "store_type": { "type": "string" }, - "user_score": { - "$ref": "#/definitions/metacritic.ScoreSummary" - }, - "video": { - "$ref": "#/definitions/metacritic.Video" - } - }, - "type": "object" - }, - "metacritic.Production": { - "properties": { - "companies": { - "items": { - "type": "string" - }, - "type": "array" - }, - "crew": { - "items": { - "$ref": "#/definitions/metacritic.Credit" - }, - "type": "array" - }, - "official_site": { + "url": { "type": "string" } }, "type": "object" }, - "metacritic.ScoreSummary": { + "lululemon.StoreAmenities": { "properties": { - "max": { - "example": 100, - "type": "integer" + "buy_online_pickup_store": { + "type": "boolean" }, - "negative_count": { - "type": "integer" + "complementary_hemming": { + "type": "boolean" }, - "neutral_count": { - "type": "integer" + "curbside_pickup": { + "type": "boolean" }, - "positive_count": { - "type": "integer" + "footwear": { + "type": "boolean" }, - "review_count": { - "type": "integer" + "has_mirror": { + "type": "boolean" }, - "score": { - "type": "number" + "like_new": { + "type": "boolean" }, - "sentiment": { - "example": "Universal acclaim", - "type": "string" + "personal_shopping": { + "type": "boolean" }, - "url": { - "type": "string" + "returns_exchanges": { + "type": "boolean" } }, "type": "object" }, - "metacritic.UserReview": { + "lululemon.StoreHours": { "properties": { - "author": { - "type": "string" - }, - "date": { - "type": "string" - }, - "id": { + "close": { "type": "string" }, - "platform": { + "day": { "type": "string" }, - "quote": { + "open": { "type": "string" - }, - "score": { - "type": "integer" - }, - "spoiler": { - "type": "boolean" - }, - "thumbs_down": { - "type": "integer" - }, - "thumbs_up": { - "type": "integer" } }, "type": "object" }, - "metacritic.UserReviewsResponse": { + "lululemon.StoresResponse": { "properties": { - "page": { - "type": "integer" - }, - "per_page": { + "count": { "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/metacritic.UserReview" - }, - "type": "array" - }, - "slug": { + "fetched_at": { "type": "string" }, - "sort": { + "source_url": { "type": "string" }, - "total": { - "type": "integer" - }, - "type": { - "type": "string" + "stores": { + "items": { + "$ref": "#/definitions/lululemon.Store" + }, + "type": "array" } }, "type": "object" }, - "metacritic.Video": { + "lululemon.categoriesResponseDoc": { "properties": { - "duration": { + "code": { + "example": 200, "type": "integer" }, - "embed_url": { - "type": "string" - }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/lululemon.CategoriesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "metacritic.browseResponseDoc": { + "lululemon.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metacritic.BrowseResponse" + "$ref": "#/definitions/lululemon.CategoryResponse" }, "msg": { "example": "OK", @@ -97178,14 +99561,14 @@ }, "type": "object" }, - "metacritic.criticReviewsResponseDoc": { + "lululemon.outfitResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metacritic.CriticReviewsResponse" + "$ref": "#/definitions/lululemon.OutfitResponse" }, "msg": { "example": "OK", @@ -97194,14 +99577,14 @@ }, "type": "object" }, - "metacritic.productResponseDoc": { + "lululemon.productDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metacritic.Product" + "$ref": "#/definitions/lululemon.ProductDetailResponse" }, "msg": { "example": "OK", @@ -97210,14 +99593,14 @@ }, "type": "object" }, - "metacritic.userReviewsResponseDoc": { + "lululemon.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metacritic.UserReviewsResponse" + "$ref": "#/definitions/lululemon.StoresResponse" }, "msg": { "example": "OK", @@ -97226,716 +99609,1033 @@ }, "type": "object" }, - "metaculus.ForecastHistoryPoint": { + "macrumors.AuthorArticle": { "properties": { - "center": { - "example": 0.36, - "type": "number" - }, - "centers": { - "items": { - "type": "number" - }, - "type": "array" + "image_url": { + "type": "string" }, - "end_time": { - "example": "2026-06-01T17:06:20Z", + "published_at": { "type": "string" }, - "end_ts": { - "example": 1780333580.206417, - "type": "number" + "summary": { + "type": "string" }, - "forecaster_count": { - "example": 17, - "type": "integer" + "title": { + "type": "string" }, - "interval_lower_bounds": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "macrumors.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "number" + "$ref": "#/definitions/macrumors.AuthorArticle" }, "type": "array" }, - "interval_upper_bounds": { - "items": { - "type": "number" - }, - "type": "array" + "bio": { + "type": "string" }, - "lower": { - "example": 0.26, - "type": "number" + "image_url": { + "type": "string" }, - "start_time": { - "example": "2026-06-01T17:00:00Z", + "name": { "type": "string" }, - "start_ts": { - "example": 1780333200, - "type": "number" + "slug": { + "type": "string" }, - "upper": { - "example": 0.61, - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "metaculus.ForecastHistoryResponse": { + "macys.ProductColor": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "max_points": { - "example": 500, - "type": "integer" + "current_price": { + "type": "number" }, - "method": { - "example": "recency_weighted", + "id": { "type": "string" }, - "points": { - "items": { - "$ref": "#/definitions/metaculus.ForecastHistoryPoint" - }, - "type": "array" - }, - "points_count": { - "example": 25, - "type": "integer" + "name": { + "type": "string" }, - "public_page_derived": { - "example": true, + "on_sale": { "type": "boolean" }, - "question": { - "$ref": "#/definitions/metaculus.QuestionRow" - }, - "source_url": { - "example": "https://www.metaculus.com/questions/43612/", - "type": "string" + "regular_price": { + "type": "number" } }, "type": "object" }, - "metaculus.ForecastSummary": { + "macys.ProductDetailResponse": { "properties": { - "center": { - "example": 0.52, - "type": "number" + "available": { + "type": "boolean" }, - "centers": { + "brand": { + "type": "string" + }, + "bullet_points": { "items": { - "type": "number" + "type": "string" }, "type": "array" }, - "forecaster_count": { - "example": 54, - "type": "integer" - }, - "history_points": { - "example": 25, - "type": "integer" - }, - "interval_lower_bounds": { + "categories": { "items": { - "type": "number" + "type": "string" }, "type": "array" }, - "interval_upper_bounds": { + "colors": { "items": { - "type": "number" + "$ref": "#/definitions/macys.ProductColor" }, "type": "array" }, - "lower": { - "example": 0.37, + "currency_code": { + "type": "string" + }, + "current_price": { "type": "number" }, - "method": { - "example": "recency_weighted", + "department_name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "division_name": { "type": "string" }, - "upper": { - "example": 0.66, - "type": "number" - } - }, - "type": "object" - }, - "metaculus.ForecastsResponse": { - "properties": { "fetched_at": { - "example": "2026-06-07T14:00:00Z", "type": "string" }, - "methods": { + "images": { "items": { - "$ref": "#/definitions/metaculus.ForecastSummary" + "type": "string" }, "type": "array" }, - "methods_count": { - "example": 3, - "type": "integer" + "low_availability": { + "type": "boolean" }, - "public_page_derived": { - "example": true, + "name": { + "type": "string" + }, + "on_sale": { "type": "boolean" }, - "question": { - "$ref": "#/definitions/metaculus.QuestionRow" + "product_id": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "regular_price": { + "type": "number" + }, + "review_count": { + "type": "integer" }, "source_url": { - "example": "https://www.metaculus.com/questions/43612/", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "metaculus.OptionForecast": { + "macys.ProductReviewsResponse": { "properties": { - "center": { - "example": 0.42, + "average_rating": { "type": "number" }, - "forecast_value": { - "example": 0.42, - "type": "number" + "count": { + "type": "integer" }, - "forecaster_count": { - "example": 5, + "fetched_at": { + "type": "string" + }, + "page": { "type": "integer" }, - "index": { - "example": 0, + "page_size": { "type": "integer" }, - "label": { - "example": "OpenAI", + "product_id": { "type": "string" }, - "lower": { - "example": 0.31, - "type": "number" + "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" }, - "mean": { - "example": 0.39, - "type": "number" + "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" }, - "upper": { - "example": 0.43, + "recommended_ratio": { "type": "number" + }, + "reviews": { + "items": { + "$ref": "#/definitions/macys.Review" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_reviews": { + "type": "integer" } }, "type": "object" }, - "metaculus.OptionsChange": { + "macys.Review": { "properties": { - "changed_at": { - "example": "0001-01-01T00:00:00", + "author": { "type": "string" }, - "options": { - "items": { - "type": "string" - }, - "type": "array" + "body": { + "type": "string" + }, + "id": { + "type": "string" + }, + "location": { + "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": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "metaculus.OptionsResponse": { + "macys.SuggestResponse": { "properties": { + "count": { + "type": "integer" + }, "fetched_at": { - "example": "2026-06-07T14:00:00Z", "type": "string" }, - "method": { - "example": "recency_weighted", + "query": { "type": "string" }, - "options": { + "source_url": { + "type": "string" + }, + "suggestions": { "items": { - "$ref": "#/definitions/metaculus.OptionForecast" + "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "macys.productDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "options_count": { - "example": 2, + "data": { + "$ref": "#/definitions/macys.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "macys.productReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "options_history": { - "items": { - "$ref": "#/definitions/metaculus.OptionsChange" - }, - "type": "array" + "data": { + "$ref": "#/definitions/macys.ProductReviewsResponse" }, - "public_page_derived": { - "example": true, - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "macys.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "question": { - "$ref": "#/definitions/metaculus.QuestionRow" + "data": { + "$ref": "#/definitions/macys.SuggestResponse" }, - "source_url": { - "example": "https://www.metaculus.com/questions/43731/", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "metaculus.Project": { + "makeuseof.AuthorResponse": { "properties": { - "emoji": { - "example": "💼", + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { "type": "string" }, - "id": { - "example": 3698, - "type": "integer" + "image_url": { + "type": "string" }, "name": { - "example": "Economy & Business", "type": "string" }, - "slug": { - "example": "economy-business", + "social_links": { + "items": { + "$ref": "#/definitions/valnet.AuthorSocialLink" + }, + "type": "array" + }, + "title": { "type": "string" }, - "type": { - "example": "category", + "url": { "type": "string" } }, "type": "object" }, - "metaculus.QuestionMetadataResponse": { + "marketwatch.AuthorArticle": { "properties": { - "actual_close_time": { - "example": "2026-12-30T23:59:00Z", + "title": { "type": "string" }, - "actual_resolve_time": { - "example": "2027-01-02T00:00:00Z", + "url": { "type": "string" - }, - "all_options_ever": { + } + }, + "type": "object" + }, + "marketwatch.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/marketwatch.AuthorArticle" }, "type": "array" }, - "default_aggregation_method": { - "example": "recency_weighted", + "bio": { "type": "string" }, - "default_score_type": { - "example": "peer", + "job_title": { "type": "string" }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "name": { "type": "string" }, - "group_variable": { - "example": "Company", + "slug": { "type": "string" }, - "inbound_outcome_count": { - "example": 10, - "type": "integer" - }, - "include_bots_in_aggregates": { - "example": false, - "type": "boolean" - }, - "open_lower_bound": { - "example": false, - "type": "boolean" - }, - "open_upper_bound": { - "example": false, - "type": "boolean" + "url": { + "type": "string" }, - "options": { + "works_for": { + "type": "string" + } + }, + "type": "object" + }, + "mashable.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "options_history": { + "biography": { "items": { - "$ref": "#/definitions/metaculus.OptionsChange" + "type": "string" }, "type": "array" }, - "options_order": { - "example": "DEFAULT", - "type": "string" - }, - "possibilities": {}, - "public_page_derived": { - "example": true, + "has_next_page": { "type": "boolean" }, - "question": { - "$ref": "#/definitions/metaculus.QuestionRow" + "image_url": { + "type": "string" }, - "resolution": { + "name": { "type": "string" }, - "resolution_set_time": { - "example": "2027-01-02T00:00:00Z", + "page": { + "type": "integer" + }, + "slug": { "type": "string" }, - "scaling": { - "$ref": "#/definitions/metaculus.QuestionScaling" + "social_links": { + "items": { + "$ref": "#/definitions/mashable.AuthorSocialLink" + }, + "type": "array" }, - "short_title": { - "example": "OpenAI or Anthropic - higher valuation on Jan 1, 2027?", + "title": { "type": "string" }, - "source_url": { - "example": "https://www.metaculus.com/questions/43731/", + "url": { "type": "string" } }, "type": "object" }, - "metaculus.QuestionResponse": { + "mashable.AuthorSocialLink": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "platform": { "type": "string" }, - "question": { - "$ref": "#/definitions/metaculus.QuestionRow" - }, - "source_url": { - "example": "https://www.metaculus.com/questions/43612/", + "url": { "type": "string" } }, "type": "object" }, - "metaculus.QuestionRow": { + "mcdonalds.CategoriesResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/metaculus.Project" + "$ref": "#/definitions/mcdonalds.Category" }, "type": "array" }, - "comment_count": { - "example": 16, + "count": { + "example": 13, "type": "integer" }, - "edited_at": { - "example": "2026-06-07T13:14:34Z", + "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" }, - "forecaster_count": { - "example": 54, - "type": "integer" - }, - "forecasts_count": { - "example": 149, - "type": "integer" + "fetched_at": { + "type": "string" }, - "id": { - "example": 43612, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.Category": { + "properties": { + "name": { + "example": "Breakfast", + "type": "string" + }, + "slug": { + "example": "breakfast", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.ItemComponent": { + "properties": { + "allergens": { + "type": "string" + }, + "ingredients": { + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.ItemListEntry": { + "properties": { + "allergens": { + "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" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "ingredients": { + "type": "string" + }, + "item_id": { + "example": "200466", + "type": "string" + }, + "name": { + "example": "Quarter Pounder with Cheese", + "type": "string" + }, + "nutrients": { + "items": { + "$ref": "#/definitions/mcdonalds.Nutrient" + }, + "type": "array" + } + }, + "type": "object" + }, + "mcdonalds.ItemListResponse": { + "properties": { + "count": { + "example": 3, "type": "integer" }, - "latest_forecast_center": { - "example": 0.52, - "type": "number" + "country": { + "example": "us", + "type": "string" }, - "latest_forecast_lower": { - "example": 0.37, - "type": "number" + "fetched_at": { + "type": "string" }, - "latest_forecast_upper": { - "example": 0.66, - "type": "number" + "items": { + "items": { + "$ref": "#/definitions/mcdonalds.ItemListEntry" + }, + "type": "array" }, - "open_time": { - "example": "2026-06-01T17:00:00Z", + "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" + }, + "mcdonalds.ItemResponse": { + "properties": { + "allergens": { + "description": "Allergens is McDonald's own allergen statement for the item.", "type": "string" }, - "projects": { + "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" + }, + "fetched_at": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "ingredients": { + "description": "Ingredients is the full ingredient statement.", + "type": "string" + }, + "item_id": { + "example": "200463", + "type": "string" + }, + "name": { + "example": "Big Mac", + "type": "string" + }, + "nutrients": { + "description": "Nutrients are the published per-serving nutrition values.", "items": { - "$ref": "#/definitions/metaculus.Project" + "$ref": "#/definitions/mcdonalds.Nutrient" }, "type": "array" }, - "public_page_derived": { - "example": true, - "type": "boolean" + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.MenuItemSummary": { + "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" }, - "published_at": { - "example": "2026-05-29T15:33:53Z", + "image_url": { "type": "string" }, - "question_id": { - "example": 43609, - "type": "integer" + "item_id": { + "example": "200300", + "type": "string" }, - "question_title": { - "example": "What will be the World Bank monthly price of liquid sulphur in June 2026?", + "name": { + "example": "Bacon, Egg & Cheese Biscuit", "type": "string" }, - "question_type": { - "example": "numeric", + "product_url": { + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.MenuResponse": { + "properties": { + "category": { + "example": "breakfast", "type": "string" }, - "resolved": { - "example": false, - "type": "boolean" + "count": { + "example": 32, + "type": "integer" }, - "scheduled_close_time": { - "example": "2026-07-15T00:00:00Z", + "country": { + "example": "us", "type": "string" }, - "scheduled_resolve_time": { - "example": "2026-09-07T00:00:00Z", + "fetched_at": { "type": "string" }, - "slug": { - "example": "tampa-sulphur-price-in-june-2026", + "items": { + "items": { + "$ref": "#/definitions/mcdonalds.MenuItemSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.Nutrient": { + "properties": { + "daily_value": { + "description": "DailyValue is the percent-daily-value where McDonald's prints one.", + "example": "45", "type": "string" }, - "status": { - "example": "open", + "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" }, - "title": { - "example": "Tampa sulphur price in June 2026?", + "name": { + "example": "Calories", "type": "string" }, "unit": { - "example": "USD/metric ton", + "example": "Cal.", "type": "string" }, - "url": { - "example": "https://www.metaculus.com/questions/43612/tampa-sulphur-price-in-june-2026/", + "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" }, - "metaculus.QuestionScaling": { + "mcdonalds.Restaurant": { "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": {}, + "address": { + "example": "160 Broadway", + "type": "string" + }, + "city": { + "example": "New York", + "type": "string" + }, + "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" + }, + "drive_thru_hours": { + "type": "string" + }, + "facilities": { + "description": "Facilities are McDonald's own amenity codes for the restaurant\n(e.g. GIFTCARDS, MOBILEOFFERS, DRIVETHRU, WIFI).", + "items": { + "type": "string" + }, "type": "array" }, - "inbound_outcome_count": { - "example": 10, - "type": "integer" + "hours": { + "description": "Hours is the full week where McDonald's publishes it.", + "items": { + "$ref": "#/definitions/mcdonalds.RestaurantHours" + }, + "type": "array" }, - "nominal_max": { - "example": 100, + "latitude": { + "example": 40.709438, "type": "number" }, - "nominal_min": { - "example": 0, + "longitude": { + "example": -74.010086, "type": "number" }, - "open_lower_bound": { - "example": false, - "type": "boolean" + "name": { + "example": "160 BROADWAY", + "type": "string" }, - "open_upper_bound": { - "example": false, - "type": "boolean" + "open_status": { + "example": "OPEN", + "type": "string" }, - "range_max": { - "example": 100, + "postal_code": { + "example": "10038", + "type": "string" + }, + "state": { + "example": "NY", + "type": "string" + }, + "store_id": { + "example": "10528", + "type": "string" + }, + "telephone": { + "example": "(212) 385-2066", + "type": "string" + }, + "timezone": { + "type": "string" + }, + "today_hours": { + "description": "TodayHours and DriveThruHours are the published windows for today.", + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.RestaurantHours": { + "properties": { + "day_of_week": { + "example": "monday", + "type": "string" + }, + "hours": { + "example": "00:00 - 00:00", + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.RestaurantMenuChoice": { + "properties": { + "options": { + "items": { + "$ref": "#/definitions/mcdonalds.RestaurantMenuChoiceOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "mcdonalds.RestaurantMenuChoiceOption": { + "properties": { + "item_id": { + "example": "14877", + "type": "string" + }, + "name": { + "example": "Lemonade", + "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" + } + }, + "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" }, - "range_min": { - "example": 0, + "delivery_price": { + "example": 8.39, "type": "number" }, - "zero_point": { - "example": 0, + "eat_in_price": { + "example": 7.29, + "type": "number" + }, + "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" + }, + "image_url": { + "type": "string" + }, + "item_id": { + "example": "5", + "type": "string" + }, + "name": { + "example": "Big Mac®", + "type": "string" + }, + "pickup_price": { + "example": 7.29, "type": "number" } }, "type": "object" }, - "metaculus.QuestionsResponse": { + "mcdonalds.RestaurantMenuResponse": { "properties": { - "feed": { - "example": "questions", + "count": { + "example": 563, + "type": "integer" + }, + "currency": { + "example": "$", "type": "string" }, "fetched_at": { - "example": "2026-06-07T14:00:00Z", "type": "string" }, - "limit": { - "example": 10, + "items": { + "items": { + "$ref": "#/definitions/mcdonalds.RestaurantMenuItem" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "10528", + "type": "string" + } + }, + "type": "object" + }, + "mcdonalds.RestaurantsResponse": { + "properties": { + "count": { + "example": 5, "type": "integer" }, - "questions": { + "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" + }, + "fetched_at": { + "type": "string" + }, + "restaurants": { "items": { - "$ref": "#/definitions/metaculus.QuestionRow" + "$ref": "#/definitions/mcdonalds.Restaurant" }, "type": "array" }, "source_url": { - "example": "https://www.metaculus.com/questions/", "type": "string" } }, "type": "object" }, - "metaculus.forecastHistoryResponseDoc": { + "mcdonalds.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/metaculus.ForecastHistoryResponse" + "$ref": "#/definitions/mcdonalds.CategoriesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "metaculus.forecastsResponseDoc": { + "mcdonalds.itemListResponseDoc": { "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/metaculus.ForecastsResponse" + "$ref": "#/definitions/mcdonalds.ItemListResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "metaculus.metadataResponseDoc": { + "mcdonalds.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/metaculus.QuestionMetadataResponse" + "$ref": "#/definitions/mcdonalds.ItemResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "metaculus.optionsResponseDoc": { + "mcdonalds.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/metaculus.OptionsResponse" + "$ref": "#/definitions/mcdonalds.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "metaculus.questionResponseDoc": { + "mcdonalds.restaurantMenuResponseDoc": { "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/metaculus.QuestionResponse" + "$ref": "#/definitions/mcdonalds.RestaurantMenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "metaculus.questionsResponseDoc": { + "mcdonalds.restaurantsResponseDoc": { "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/metaculus.QuestionsResponse" + "$ref": "#/definitions/mcdonalds.RestaurantsResponse" }, "msg": { - "example": "OK", + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "mediaite.AuthorArticle": { + "properties": { + "date": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "metajobs.ListResponse": { + "mediaite.AuthorResponse": { "properties": { - "listings": { + "articles": { "items": { - "$ref": "#/definitions/metajobs.MetaJobListing" + "$ref": "#/definitions/mediaite.AuthorArticle" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" + "avatar_url": { + "type": "string" }, - "page_size": { - "example": 50, - "type": "integer" + "bio": { + "type": "string" }, - "source_url": { + "email": { "type": "string" }, - "total": { - "example": 754, - "type": "integer" - } - }, - "type": "object" - }, - "metajobs.MetaJob": { - "properties": { - "compensation_country": { - "example": "US", + "name": { "type": "string" }, - "compensation_max": { - "example": "$241,000/year", + "slug": { "type": "string" }, - "compensation_min": { - "example": "$173,000/year", + "twitter": { "type": "string" }, - "departments": { - "example": [ - "Product Management" - ], + "url": { + "type": "string" + } + }, + "type": "object" + }, + "medicalnewstoday.ArticleResponse": { + "properties": { + "authors": { "items": { "type": "string" }, @@ -97944,137 +100644,136 @@ "description": { "type": "string" }, - "id": { - "example": "1238249364564427", + "image_url": { "type": "string" }, - "locations": { - "example": [ - "Menlo Park", - " CA" - ], + "paragraphs": { "items": { "type": "string" }, "type": "array" }, - "minimum_qualifications": { - "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" }, - "preferred_qualifications": { - "items": { - "type": "string" - }, - "type": "array" + "published_at": { + "type": "string" }, - "responsibilities": { - "items": { - "type": "string" - }, - "type": "array" + "section": { + "type": "string" }, "title": { - "example": "Product Manager", + "type": "string" + }, + "updated_at": { "type": "string" }, "url": { - "example": "https://www.metacareers.com/profile/job_details/1238249364564427/", "type": "string" } }, "type": "object" }, - "metajobs.MetaJobListing": { + "medicalnewstoday.AuthorResponse": { "properties": { - "id": { - "example": "1238249364564427", + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "bio": { "type": "string" }, - "last_modified": { - "example": "2026-07-29T01:17:34-07:00", + "name": { + "type": "string" + }, + "slug": { "type": "string" }, "url": { - "example": "https://www.metacareers.com/profile/job_details/1238249364564427/", "type": "string" } }, "type": "object" }, - "metajobs.MetaJobSearchResult": { + "medicalnewstoday.HeadlinesResponse": { "properties": { - "id": { - "example": "1010234865172301", - "type": "string" - }, - "locations": { - "example": [ - "Sunnyvale", - " CA" - ], + "items": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "sub_teams": { - "example": [ - "Hardware" - ], + "section": { + "type": "string" + } + }, + "type": "object" + }, + "medicalnewstoday.NewsResponse": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" - }, - "teams": { - "example": [ - "Infrastructure" - ], + } + }, + "type": "object" + }, + "medicalnewstoday.SectionsResponse": { + "properties": { + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.Section" }, "type": "array" + } + }, + "type": "object" + }, + "medicalnewstoday.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "example": "ASIC Engineer, Design", - "type": "string" + "data": { + "$ref": "#/definitions/medicalnewstoday.ArticleResponse" }, - "url": { - "example": "https://www.metacareers.com/profile/job_details/1010234865172301/", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "metajobs.SearchResponse": { + "medicalnewstoday.authorResponseDoc": { "properties": { - "jobs": { - "items": { - "$ref": "#/definitions/metajobs.MetaJobSearchResult" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/medicalnewstoday.AuthorResponse" }, - "total": { - "example": 58, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "metajobs.jobResponseDoc": { + "medicalnewstoday.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metajobs.MetaJob" + "$ref": "#/definitions/medicalnewstoday.HeadlinesResponse" }, "msg": { "example": "OK", @@ -98083,14 +100782,14 @@ }, "type": "object" }, - "metajobs.listResponseDoc": { + "medicalnewstoday.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metajobs.ListResponse" + "$ref": "#/definitions/medicalnewstoday.NewsResponse" }, "msg": { "example": "OK", @@ -98099,14 +100798,14 @@ }, "type": "object" }, - "metajobs.searchResponseDoc": { + "medicalnewstoday.sectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metajobs.SearchResponse" + "$ref": "#/definitions/medicalnewstoday.SectionsResponse" }, "msg": { "example": "OK", @@ -98115,18 +100814,12 @@ }, "type": "object" }, - "metro.AuthorArticle": { + "men.AuthorArticle": { "properties": { - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "section": { + "label": { "type": "string" }, - "summary": { + "label_url": { "type": "string" }, "title": { @@ -98138,37 +100831,31 @@ }, "type": "object" }, - "metro.AuthorResponse": { + "men.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/metro.AuthorArticle" + "$ref": "#/definitions/men.AuthorArticle" }, "type": "array" }, "bio": { "type": "string" }, - "image_url": { + "email": { "type": "string" }, "job_title": { "type": "string" }, - "knows_about": { - "items": { - "type": "string" - }, - "type": "array" - }, "name": { "type": "string" }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" + "slug": { + "type": "string" + }, + "twitter": { + "type": "string" }, "url": { "type": "string" @@ -98176,1043 +100863,677 @@ }, "type": "object" }, - "microsoftstore.AgeRating": { + "mercari.AutocompleteResponse": { "properties": { - "age": { - "example": 13, - "type": "integer" - }, - "description": { - "example": "For ages 13 and up", + "query": { "type": "string" }, - "descriptors": { - "example": [ - "[\"Diverse Content: Discretion Advised\"]" - ], + "suggestions": { "items": { "type": "string" }, "type": "array" - }, - "system": { - "example": "ESRB", - "type": "string" - }, - "value": { - "example": "TEEN", - "type": "string" } }, "type": "object" }, - "microsoftstore.Award": { + "mercari.Brand": { "properties": { - "category": { - "example": "Productivity category", - "type": "string" - }, - "description": { - "example": "The Microsoft Store Awards celebrate apps and games that emphasize exceptional experiences for their users.", - "type": "string" - }, - "editorial_id": { - "example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h", - "type": "string" + "id": { + "type": "integer" }, - "title": { - "example": "Microsoft Store Awards 2025", + "name": { "type": "string" - }, - "year": { - "example": 2025, - "type": "integer" } }, "type": "object" }, - "microsoftstore.Badge": { + "mercari.Category": { "properties": { - "icon_id": { - "example": "AI", + "icon_url": { "type": "string" }, - "text": { - "example": "Uses AI features", + "id": { + "type": "integer" + }, + "name": { "type": "string" + }, + "parent_id": { + "type": "integer" } }, "type": "object" }, - "microsoftstore.CategoriesResponse": { + "mercari.HomeResponse": { "properties": { - "categories": { + "items": { "items": { - "$ref": "#/definitions/microsoftstore.CategoryTaxonomy" + "$ref": "#/definitions/mercari.ItemSummary" }, "type": "array" - }, - "media_type": { - "example": "apps", - "type": "string" } }, "type": "object" }, - "microsoftstore.CategoryResponse": { + "mercari.ItemDetailResponse": { "properties": { - "category": { - "example": "Photo & video", - "type": "string" + "category_code": { + "type": "integer" }, - "count": { - "example": 20, + "condition_code": { "type": "integer" }, - "has_more": { - "example": true, - "type": "boolean" + "description": { + "type": "string" }, - "items": { + "hashtags": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "type": "string" }, "type": "array" }, - "media_type": { - "example": "apps", - "type": "string" - }, - "next_cursor": { - "type": "string" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "microsoftstore.CategoryTaxonomy": { - "properties": { - "category": { - "example": "Books & reference", + "id": { "type": "string" }, - "subcategories": { - "example": [ - "[\"E-reader\"", - "\"Fiction\"", - "\"Nonfiction\"", - "\"Reference\"]" - ], + "photos": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "microsoftstore.ChartsResponse": { - "properties": { - "category": { - "example": "Photo & video", - "type": "string" }, - "count": { - "example": 20, + "price_cents": { "type": "integer" }, - "discount_filter": { - "example": "onsale", + "shipping_from_state": { "type": "string" }, - "items": { + "similar_items": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/mercari.ItemSummary" }, "type": "array" }, - "list": { - "example": "TopFree", + "title": { "type": "string" }, - "media_type": { - "example": "apps", + "url": { "type": "string" + } + }, + "type": "object" + }, + "mercari.ItemSummary": { + "properties": { + "condition_code": { + "type": "integer" }, - "num_players_filter": { - "example": "SinglePlayer", + "created_at_unix": { + "type": "integer" + }, + "id": { "type": "string" }, - "page": { - "example": 1, + "num_likes": { "type": "integer" }, - "page_size": { - "example": 20, + "original_price_cents": { "type": "integer" }, - "source_url": { - "type": "string" + "price_cents": { + "type": "integer" }, - "subcategory": { - "example": "E-reader", + "seller_id": { "type": "string" }, - "subscription_filter": { - "example": "gamepass", + "thumbnail_url": { "type": "string" }, "title": { - "example": "Must-have free apps", + "type": "string" + }, + "updated_at_unix": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "microsoftstore.EditorialResponse": { + "mercari.MasterResponse": { "properties": { - "editorial_id": { - "example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h", - "type": "string" - }, - "header_image": { - "type": "string" - }, - "paragraphs": { + "brands": { "items": { - "type": "string" + "$ref": "#/definitions/mercari.Brand" }, "type": "array" }, - "relevant_products": { + "categories": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/mercari.Category" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "subtitle": { - "$ref": "#/definitions/microsoftstore.EditorialSubtitle" - }, - "title": { - "example": "Productivity category", - "type": "string" - } - }, - "type": "object" - }, - "microsoftstore.EditorialSubtitle": { - "properties": { - "icon": { - "type": "string" - }, - "text": { - "example": "Microsoft Store Awards 2025", - "type": "string" + "sizes": { + "items": { + "$ref": "#/definitions/mercari.Size" + }, + "type": "array" } }, "type": "object" }, - "microsoftstore.EventsResponse": { + "mercari.SearchResponse": { "properties": { - "count": { - "example": 7, - "type": "integer" - }, "items": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/mercari.ItemSummary" }, "type": "array" }, - "media_type": { - "example": "apps", + "query": { "type": "string" }, - "page": { - "example": 1, + "total_results": { "type": "integer" + } + }, + "type": "object" + }, + "mercari.Size": { + "properties": { + "code": { + "type": "string" }, - "page_size": { - "example": 20, + "id": { "type": "integer" }, - "source_url": { + "name": { "type": "string" }, - "title": { - "example": "Special events", + "short_name": { "type": "string" } }, "type": "object" }, - "microsoftstore.Feature": { + "mercari.autocompleteResponseDoc": { "properties": { - "description": { - "example": "Get answers, writing help, and image generation.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "example": "AI assistant", + "data": { + "$ref": "#/definitions/mercari.AutocompleteResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "microsoftstore.Image": { + "mercari.homeResponseDoc": { "properties": { - "height": { - "example": 1080, + "code": { + "example": 200, "type": "integer" }, - "type": { - "example": "Screenshot", - "type": "string" + "data": { + "$ref": "#/definitions/mercari.HomeResponse" }, - "url": { - "example": "https://store-images.s-microsoft.com/image/apps.19060...f4dfc459-dae3-4ab8-8f40-18aa7ae9762f", + "msg": { + "example": "OK", "type": "string" - }, - "width": { - "example": 1920, - "type": "integer" } }, "type": "object" }, - "microsoftstore.Product": { + "mercari.masterResponseDoc": { "properties": { - "average_rating": { - "example": 4.3, - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "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" - }, - "is_game": { - "type": "boolean" - }, - "is_pwa": { - "type": "boolean" - }, - "is_subscription": { - "type": "boolean" - }, - "is_theme": { - "type": "boolean" - }, - "kind": { - "example": "app", - "type": "string" - }, - "media_type": { - "example": "Apps", - "type": "string" - }, - "poster_art_url": { - "type": "string" - }, - "price": { - "example": 0, - "type": "number" - }, - "product_id": { - "example": "9ncbcszsjrsb", - "type": "string" - }, - "publisher": { - "example": "Spotify AB", - "type": "string" - }, - "rating_count": { - "example": "34K", - "type": "string" + "data": { + "$ref": "#/definitions/mercari.MasterResponse" }, - "release_date_utc": { - "example": "2017-10-24T12:04:25Z", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "mercari.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "example": "Spotify - Music and Podcasts", - "type": "string" + "data": { + "$ref": "#/definitions/mercari.SearchResponse" }, - "url": { - "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "microsoftstore.ProductDetail": { + "metacritic.BrowseItem": { "properties": { - "age_ratings": { - "items": { - "$ref": "#/definitions/microsoftstore.AgeRating" - }, - "type": "array" + "description": { + "type": "string" }, - "allowed_platforms": { - "example": [ - "[\"Windows.Desktop\"", - "\"Windows.Xbox\"]" - ], + "genres": { "items": { - "type": "string" + "$ref": "#/definitions/metacritic.Genre" }, "type": "array" }, - "approximate_size_bytes": { - "example": 210105174, + "id": { "type": "integer" }, - "average_rating": { - "example": 4.3, - "type": "number" - }, - "badges": { - "items": { - "$ref": "#/definitions/microsoftstore.Badge" - }, - "type": "array" - }, - "box_art_url": { + "image": { "type": "string" }, - "capabilities": { - "items": { - "type": "string" - }, - "type": "array" - }, - "card_actions": { - "example": [ - "[\"Install\"", - "\"Launch\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "categories": { - "example": [ - "[\"Music\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "example": "Music", - "type": "string" + "metascore": { + "$ref": "#/definitions/metacritic.ScoreSummary" }, - "currency_code": { - "example": "USD", - "type": "string" + "premiere_year": { + "type": "integer" }, - "description": { + "rating": { "type": "string" }, - "display_price": { - "example": "Free", + "release_date": { "type": "string" }, - "features": { - "items": { - "$ref": "#/definitions/microsoftstore.Feature" - }, - "type": "array" - }, - "free": { - "example": true, - "type": "boolean" + "season_count": { + "type": "integer" }, - "hero_image_url": { + "slug": { "type": "string" }, - "icon_url": { + "title": { "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", + "type": { + "example": "game", "type": "string" }, - "last_update_date_utc": { - "example": "2026-09-22T14:30:28Z", + "url": { "type": "string" }, - "media_type": { - "example": "Apps", + "user_score": { + "type": "number" + } + }, + "type": "object" + }, + "metacritic.BrowseResponse": { + "properties": { + "genre": { "type": "string" }, - "package_family_names": { - "example": [ - "[\"SpotifyAB.SpotifyMusic_zpdnekdrzrea0\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "platforms": { - "example": [ - "[\"x86\"", - "\"x64\"]" - ], + "items": { "items": { - "type": "string" + "$ref": "#/definitions/metacritic.BrowseItem" }, "type": "array" }, - "poster_art_url": { - "type": "string" + "page": { + "type": "integer" }, - "price": { - "example": 0, - "type": "number" + "per_page": { + "type": "integer" }, - "privacy_url": { - "example": "https://www.spotify.com/legal/privacy-policy/", + "sort": { "type": "string" }, - "product_id": { - "example": "9ncbcszsjrsb", - "type": "string" + "total": { + "type": "integer" }, - "product_type": { - "example": "Application", + "type": { "type": "string" - }, - "publisher": { - "example": "Spotify AB", + } + }, + "type": "object" + }, + "metacritic.Credit": { + "properties": { + "name": { "type": "string" }, - "publisher_address": { + "role": { + "example": "Director", "type": "string" - }, - "publisher_id": { - "example": "10113470", + } + }, + "type": "object" + }, + "metacritic.CriticReview": { + "properties": { + "author": { "type": "string" }, - "rating_count": { - "example": 34225, - "type": "integer" - }, - "rating_count_formatted": { - "example": "34.2K", + "date": { + "example": "2022-02-23", "type": "string" }, - "release_date_utc": { - "example": "2017-10-24T12:04:25Z", + "platform": { "type": "string" }, - "screenshots": { - "items": { - "$ref": "#/definitions/microsoftstore.Image" - }, - "type": "array" - }, - "skus_summary": { - "items": { - "$ref": "#/definitions/microsoftstore.SkuPrice" - }, - "type": "array" - }, - "source_url": { + "publication": { "type": "string" }, - "supported_languages": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "example": "Spotify - Music and Podcasts", + "publication_slug": { "type": "string" }, - "trailers": { - "items": { - "$ref": "#/definitions/microsoftstore.Image" - }, - "type": "array" - }, - "url": { - "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", + "quote": { "type": "string" }, - "version": { - "type": "string" + "score": { + "type": "integer" }, - "website": { - "example": "https://www.spotify.com", + "url": { "type": "string" } }, "type": "object" }, - "microsoftstore.PublisherResponse": { + "metacritic.CriticReviewsResponse": { "properties": { - "count": { - "example": 3, + "page": { "type": "integer" }, - "has_more": { - "example": false, - "type": "boolean" + "per_page": { + "type": "integer" }, - "items": { + "reviews": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/metacritic.CriticReview" }, "type": "array" }, - "next_cursor": { + "slug": { "type": "string" }, - "publisher_name": { - "example": "Spotify AB", + "sort": { "type": "string" }, - "source_url": { + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "microsoftstore.RecommendedProduct": { + "metacritic.Genre": { "properties": { - "average_rating": { - "example": 4.5, - "type": "number" - }, - "categories": { - "example": [ - "[\"Action & adventure\"]" - ], - "items": { - "type": "string" - }, - "type": "array" + "id": { + "type": "integer" }, - "icon_url": { + "name": { "type": "string" + } + }, + "type": "object" + }, + "metacritic.Platform": { + "properties": { + "id": { + "type": "integer" }, - "product_id": { - "example": "9p4qk476j199", - "type": "string" + "is_lead": { + "type": "boolean" }, - "title": { - "example": "Bermuda Adventures: Farm Games", + "metascore": { + "$ref": "#/definitions/metacritic.ScoreSummary" + }, + "name": { + "example": "PlayStation 5", "type": "string" }, - "url": { - "example": "https://apps.microsoft.com/detail/9p4qk476j199", + "release_date": { "type": "string" } }, "type": "object" }, - "microsoftstore.RecommendedResponse": { + "metacritic.Product": { "properties": { - "items": { + "countries": { "items": { - "$ref": "#/definitions/microsoftstore.RecommendedProduct" + "type": "string" }, "type": "array" }, - "section_title": { - "example": "Recommended for you", + "description": { "type": "string" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "microsoftstore.RelatedResponse": { - "properties": { - "has_more_pages": { - "example": true, - "type": "boolean" + "duration": { + "type": "integer" }, - "items": { + "genres": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/metacritic.Genre" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 10, + "id": { "type": "integer" }, - "product_id": { - "example": "9ncbcszsjrsb", + "image": { "type": "string" }, - "product_type": { - "example": "Application", + "imdb_id": { "type": "string" }, - "source_url": { + "imdb_url": { "type": "string" }, - "total_count": { - "example": 50, - "type": "integer" - } - }, - "type": "object" - }, - "microsoftstore.Review": { - "properties": { - "device_family": { - "example": "Windows.Desktop", - "type": "string" + "in_theaters": { + "type": "boolean" }, - "helpful_negative": { - "example": 30, - "type": "integer" + "metascore": { + "$ref": "#/definitions/metacritic.ScoreSummary" }, - "helpful_positive": { - "example": 74, - "type": "integer" + "networks": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { - "example": "74a23681-6299-5cc4-5e83-a48d1c49ece6", - "type": "string" + "platforms": { + "items": { + "$ref": "#/definitions/metacritic.Platform" + }, + "type": "array" }, - "is_revised": { - "type": "boolean" + "premiere_year": { + "type": "integer" }, - "locale": { - "example": "EN-US", - "type": "string" + "production": { + "$ref": "#/definitions/metacritic.Production" }, - "market": { - "example": "US", + "rating": { + "example": "M", "type": "string" }, - "os_version": { - "example": "10.0.26200.8524", + "release_date": { + "example": "2022-02-25", "type": "string" }, - "rating": { - "example": 1, + "season_count": { "type": "integer" }, - "reviewer_name": { - "example": "constance", + "slug": { "type": "string" }, - "submitted_at_utc": { - "example": "2026-07-12T21:41:45Z", + "tagline": { "type": "string" }, - "text": { - "example": "so, the app used to be great...", + "title": { "type": "string" }, - "title": { - "example": "spotify has fallen off. HARD.", + "type": { + "example": "game", "type": "string" }, "url": { "type": "string" + }, + "user_score": { + "$ref": "#/definitions/metacritic.ScoreSummary" + }, + "video": { + "$ref": "#/definitions/metacritic.Video" } }, "type": "object" }, - "microsoftstore.ReviewsResponse": { + "metacritic.Production": { "properties": { - "has_more_pages": { - "example": true, - "type": "boolean" - }, - "next_page": { - "example": 2, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 20, - "type": "integer" - }, - "product_id": { - "example": "9ncbcszsjrsb", - "type": "string" - }, - "reviews": { + "companies": { "items": { - "$ref": "#/definitions/microsoftstore.Review" + "type": "string" }, "type": "array" }, - "sort": { - "example": "MostHelpful", - "type": "string" + "crew": { + "items": { + "$ref": "#/definitions/metacritic.Credit" + }, + "type": "array" }, - "source_url": { + "official_site": { "type": "string" - }, - "total_count": { - "example": 307, - "type": "integer" } }, "type": "object" }, - "microsoftstore.ReviewsSummaryResponse": { + "metacritic.ScoreSummary": { "properties": { - "average_rating": { - "example": 4.3, - "type": "number" - }, - "most_critical_review": { - "$ref": "#/definitions/microsoftstore.Review" - }, - "most_favorable_review": { - "$ref": "#/definitions/microsoftstore.Review" + "max": { + "example": 100, + "type": "integer" }, - "product_id": { - "example": "9ncbcszsjrsb", - "type": "string" + "negative_count": { + "type": "integer" }, - "rating_distribution": { - "type": "object" + "neutral_count": { + "type": "integer" }, - "rating_status": { - "example": "RatingAvailable", - "type": "string" + "positive_count": { + "type": "integer" }, "review_count": { - "example": 307, "type": "integer" }, - "source_url": { + "score": { + "type": "number" + }, + "sentiment": { + "example": "Universal acclaim", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "microsoftstore.SearchResponse": { + "metacritic.UserReview": { "properties": { - "age": { - "example": "all", - "type": "string" - }, - "category": { - "example": "all", + "author": { "type": "string" }, - "count": { - "example": 20, - "type": "integer" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/microsoftstore.Product" - }, - "type": "array" - }, - "media_type": { - "example": "all", + "date": { "type": "string" }, - "next_cursor": { - "example": "bz0wJmI9OU5DQkNTWlNKUlNCLD...", + "id": { "type": "string" }, - "price": { - "example": "all", + "platform": { "type": "string" }, - "query": { - "example": "spotify", + "quote": { "type": "string" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "microsoftstore.SkuPrice": { - "properties": { - "display_msrp": { - "example": "Free", - "type": "string" + "score": { + "type": "integer" }, - "display_price": { - "example": "Free", - "type": "string" + "spoiler": { + "type": "boolean" }, - "msrp": { - "example": 0, - "type": "number" + "thumbs_down": { + "type": "integer" }, - "price": { - "example": 0, - "type": "number" + "thumbs_up": { + "type": "integer" } }, "type": "object" }, - "microsoftstore.SpotlightResponse": { + "metacritic.UserReviewsResponse": { "properties": { - "count": { - "example": 8, + "page": { "type": "integer" }, - "items": { + "per_page": { + "type": "integer" + }, + "reviews": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/metacritic.UserReview" }, "type": "array" }, - "media_type": { - "example": "home", - "type": "string" - }, - "source_url": { + "slug": { "type": "string" - } - }, - "type": "object" - }, - "microsoftstore.SuggestResponse": { - "properties": { - "completions": { - "example": [ - "[\"spotify\"", - "\"spot\"", - "\"spotify for podcasters\"]" - ], - "items": { - "type": "string" - }, - "type": "array" }, - "prefix": { - "example": "spot", + "sort": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/microsoftstore.SuggestedProduct" - }, - "type": "array" + "total": { + "type": "integer" }, - "source_url": { + "type": { "type": "string" } }, "type": "object" }, - "microsoftstore.SuggestedProduct": { + "metacritic.Video": { "properties": { - "icon_url": { - "type": "string" - }, - "is_application": { - "example": true, - "type": "boolean" - }, - "is_game": { - "type": "boolean" - }, - "media_type": { - "example": "apps", - "type": "string" + "duration": { + "type": "integer" }, - "product_id": { - "example": "9ncbcszsjrsb", + "embed_url": { "type": "string" }, "title": { - "example": "Spotify - Music and Podcasts", "type": "string" }, "url": { - "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", "type": "string" } }, "type": "object" }, - "microsoftstore.categoriesResponseDoc": { + "metacritic.browseResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.CategoriesResponse" + "$ref": "#/definitions/metacritic.BrowseResponse" }, "msg": { "example": "OK", @@ -99221,14 +101542,14 @@ }, "type": "object" }, - "microsoftstore.categoryResponseDoc": { + "metacritic.criticReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.CategoryResponse" + "$ref": "#/definitions/metacritic.CriticReviewsResponse" }, "msg": { "example": "OK", @@ -99237,14 +101558,14 @@ }, "type": "object" }, - "microsoftstore.chartsResponseDoc": { + "metacritic.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.ChartsResponse" + "$ref": "#/definitions/metacritic.Product" }, "msg": { "example": "OK", @@ -99253,14 +101574,14 @@ }, "type": "object" }, - "microsoftstore.editorialResponseDoc": { + "metacritic.userReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.EditorialResponse" + "$ref": "#/definitions/metacritic.UserReviewsResponse" }, "msg": { "example": "OK", @@ -99269,1859 +101590,2025 @@ }, "type": "object" }, - "microsoftstore.eventsResponseDoc": { + "metaculus.ForecastHistoryPoint": { "properties": { - "code": { - "example": 200, - "type": "integer" + "center": { + "example": 0.36, + "type": "number" }, - "data": { - "$ref": "#/definitions/microsoftstore.EventsResponse" + "centers": { + "items": { + "type": "number" + }, + "type": "array" }, - "msg": { - "example": "OK", + "end_time": { + "example": "2026-06-01T17:06:20Z", "type": "string" - } - }, - "type": "object" - }, - "microsoftstore.productResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "end_ts": { + "example": 1780333580.206417, + "type": "number" + }, + "forecaster_count": { + "example": 17, "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.ProductDetail" + "interval_lower_bounds": { + "items": { + "type": "number" + }, + "type": "array" }, - "msg": { - "example": "OK", + "interval_upper_bounds": { + "items": { + "type": "number" + }, + "type": "array" + }, + "lower": { + "example": 0.26, + "type": "number" + }, + "start_time": { + "example": "2026-06-01T17:00:00Z", "type": "string" + }, + "start_ts": { + "example": 1780333200, + "type": "number" + }, + "upper": { + "example": 0.61, + "type": "number" } }, "type": "object" }, - "microsoftstore.publisherResponseDoc": { + "metaculus.ForecastHistoryResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "max_points": { + "example": 500, "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.PublisherResponse" + "method": { + "example": "recency_weighted", + "type": "string" }, - "msg": { - "example": "OK", + "points": { + "items": { + "$ref": "#/definitions/metaculus.ForecastHistoryPoint" + }, + "type": "array" + }, + "points_count": { + "example": 25, + "type": "integer" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "question": { + "$ref": "#/definitions/metaculus.QuestionRow" + }, + "source_url": { + "example": "https://www.metaculus.com/questions/43612/", "type": "string" } }, "type": "object" }, - "microsoftstore.recommendedResponseDoc": { + "metaculus.ForecastSummary": { "properties": { - "code": { - "example": 200, + "center": { + "example": 0.52, + "type": "number" + }, + "centers": { + "items": { + "type": "number" + }, + "type": "array" + }, + "forecaster_count": { + "example": 54, "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.RecommendedResponse" + "history_points": { + "example": 25, + "type": "integer" }, - "msg": { - "example": "OK", + "interval_lower_bounds": { + "items": { + "type": "number" + }, + "type": "array" + }, + "interval_upper_bounds": { + "items": { + "type": "number" + }, + "type": "array" + }, + "lower": { + "example": 0.37, + "type": "number" + }, + "method": { + "example": "recency_weighted", "type": "string" + }, + "upper": { + "example": 0.66, + "type": "number" } }, "type": "object" }, - "microsoftstore.relatedResponseDoc": { + "metaculus.ForecastsResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "methods": { + "items": { + "$ref": "#/definitions/metaculus.ForecastSummary" + }, + "type": "array" + }, + "methods_count": { + "example": 3, "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.RelatedResponse" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", + "question": { + "$ref": "#/definitions/metaculus.QuestionRow" + }, + "source_url": { + "example": "https://www.metaculus.com/questions/43612/", "type": "string" } }, "type": "object" }, - "microsoftstore.reviewsResponseDoc": { + "metaculus.OptionForecast": { "properties": { - "code": { - "example": 200, + "center": { + "example": 0.42, + "type": "number" + }, + "forecast_value": { + "example": 0.42, + "type": "number" + }, + "forecaster_count": { + "example": 5, "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.ReviewsResponse" + "index": { + "example": 0, + "type": "integer" }, - "msg": { - "example": "OK", + "label": { + "example": "OpenAI", "type": "string" + }, + "lower": { + "example": 0.31, + "type": "number" + }, + "mean": { + "example": 0.39, + "type": "number" + }, + "upper": { + "example": 0.43, + "type": "number" } }, "type": "object" }, - "microsoftstore.reviewsSummaryResponseDoc": { + "metaculus.OptionsChange": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/microsoftstore.ReviewsSummaryResponse" - }, - "msg": { - "example": "OK", + "changed_at": { + "example": "0001-01-01T00:00:00", "type": "string" + }, + "options": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "microsoftstore.searchResponseDoc": { + "metaculus.OptionsResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "method": { + "example": "recency_weighted", + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/metaculus.OptionForecast" + }, + "type": "array" + }, + "options_count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.SearchResponse" + "options_history": { + "items": { + "$ref": "#/definitions/metaculus.OptionsChange" + }, + "type": "array" }, - "msg": { - "example": "OK", + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "question": { + "$ref": "#/definitions/metaculus.QuestionRow" + }, + "source_url": { + "example": "https://www.metaculus.com/questions/43731/", "type": "string" } }, "type": "object" }, - "microsoftstore.spotlightResponseDoc": { + "metaculus.Project": { "properties": { - "code": { - "example": 200, + "emoji": { + "example": "💼", + "type": "string" + }, + "id": { + "example": 3698, "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.SpotlightResponse" + "name": { + "example": "Economy & Business", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "economy-business", + "type": "string" + }, + "type": { + "example": "category", "type": "string" } }, "type": "object" }, - "microsoftstore.suggestResponseDoc": { + "metaculus.QuestionMetadataResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/microsoftstore.SuggestResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "mirror.AuthorArticle": { - "properties": { - "label": { - "type": "string" - }, - "label_url": { + "actual_close_time": { + "example": "2026-12-30T23:59:00Z", "type": "string" }, - "title": { + "actual_resolve_time": { + "example": "2027-01-02T00:00:00Z", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "mirror.AuthorResponse": { - "properties": { - "articles": { + "all_options_ever": { "items": { - "$ref": "#/definitions/mirror.AuthorArticle" + "type": "string" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { + "default_aggregation_method": { + "example": "recency_weighted", "type": "string" }, - "twitter": { + "default_score_type": { + "example": "peer", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "mlb.BoxscorePlayer": { - "properties": { - "batting_order": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "person": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "position": { + "group_variable": { + "example": "Company", "type": "string" }, - "stats": { - "additionalProperties": { - "additionalProperties": {}, - "type": "object" - }, - "type": "object" - } - }, - "type": "object" - }, - "mlb.BoxscoreResponse": { - "properties": { - "away": { - "$ref": "#/definitions/mlb.BoxscoreTeam" + "inbound_outcome_count": { + "example": 10, + "type": "integer" }, - "fetched_at": { - "type": "string" + "include_bots_in_aggregates": { + "example": false, + "type": "boolean" }, - "game_id": { - "type": "integer" + "open_lower_bound": { + "example": false, + "type": "boolean" }, - "home": { - "$ref": "#/definitions/mlb.BoxscoreTeam" + "open_upper_bound": { + "example": false, + "type": "boolean" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "mlb.BoxscoreTeam": { - "properties": { - "players": { + "options": { "items": { - "$ref": "#/definitions/mlb.BoxscorePlayer" + "type": "string" }, "type": "array" }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" - }, - "team_stats": { - "additionalProperties": { - "additionalProperties": {}, - "type": "object" - }, - "type": "object" - } - }, - "type": "object" - }, - "mlb.Decision": { - "properties": { - "loser": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "save": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "winner": { - "$ref": "#/definitions/mlb.NamedRef" - } - }, - "type": "object" - }, - "mlb.EditorialFeedResponse": { - "properties": { - "fetched_at": { - "type": "string" - }, - "items": { + "options_history": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/metaculus.OptionsChange" }, "type": "array" }, - "language": { + "options_order": { + "example": "DEFAULT", "type": "string" }, - "limit": { - "type": "integer" + "possibilities": {}, + "public_page_derived": { + "example": true, + "type": "boolean" }, - "skip": { - "type": "integer" + "question": { + "$ref": "#/definitions/metaculus.QuestionRow" }, - "slug": { + "resolution": { "type": "string" }, - "source_url": { + "resolution_set_time": { + "example": "2027-01-02T00:00:00Z", "type": "string" - } - }, - "type": "object" - }, - "mlb.EnumValue": { - "properties": { - "description": { + }, + "scaling": { + "$ref": "#/definitions/metaculus.QuestionScaling" + }, + "short_title": { + "example": "OpenAI or Anthropic - higher valuation on Jan 1, 2027?", "type": "string" }, - "value": { + "source_url": { + "example": "https://www.metaculus.com/questions/43731/", "type": "string" } }, "type": "object" }, - "mlb.GameResponse": { + "metaculus.QuestionResponse": { "properties": { - "away_boxscore": { - "$ref": "#/definitions/mlb.TeamBoxscore" - }, - "decisions": { - "$ref": "#/definitions/mlb.Decision" - }, "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "game": { - "$ref": "#/definitions/mlb.GameSummary" - }, - "home_boxscore": { - "$ref": "#/definitions/mlb.TeamBoxscore" - }, - "linescore": { - "$ref": "#/definitions/mlb.Linescore" + "question": { + "$ref": "#/definitions/metaculus.QuestionRow" }, "source_url": { + "example": "https://www.metaculus.com/questions/43612/", "type": "string" } }, "type": "object" }, - "mlb.GameSide": { + "metaculus.QuestionRow": { "properties": { - "losses": { + "categories": { + "items": { + "$ref": "#/definitions/metaculus.Project" + }, + "type": "array" + }, + "comment_count": { + "example": 16, "type": "integer" }, - "probable_pitcher": { - "$ref": "#/definitions/mlb.NamedRef" + "edited_at": { + "example": "2026-06-07T13:14:34Z", + "type": "string" }, - "score": { + "forecaster_count": { + "example": 54, "type": "integer" }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" + "forecasts_count": { + "example": 149, + "type": "integer" }, - "wins": { + "id": { + "example": 43612, "type": "integer" - } - }, - "type": "object" - }, - "mlb.GameStatus": { - "properties": { - "abstract": { - "type": "string" }, - "code": { - "type": "string" + "latest_forecast_center": { + "example": 0.52, + "type": "number" }, - "detailed": { - "type": "string" + "latest_forecast_lower": { + "example": 0.37, + "type": "number" }, - "reason": { - "type": "string" - } - }, - "type": "object" - }, - "mlb.GameSummary": { - "properties": { - "away": { - "$ref": "#/definitions/mlb.GameSide" + "latest_forecast_upper": { + "example": 0.66, + "type": "number" }, - "day_night": { + "open_time": { + "example": "2026-06-01T17:00:00Z", "type": "string" }, - "double_header": { - "type": "string" + "projects": { + "items": { + "$ref": "#/definitions/metaculus.Project" + }, + "type": "array" }, - "game_date": { + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "published_at": { + "example": "2026-05-29T15:33:53Z", "type": "string" }, - "game_number": { + "question_id": { + "example": 43609, "type": "integer" }, - "game_type": { + "question_title": { + "example": "What will be the World Bank monthly price of liquid sulphur in June 2026?", "type": "string" }, - "home": { - "$ref": "#/definitions/mlb.GameSide" + "question_type": { + "example": "numeric", + "type": "string" }, - "id": { - "type": "integer" + "resolved": { + "example": false, + "type": "boolean" }, - "official_date": { + "scheduled_close_time": { + "example": "2026-07-15T00:00:00Z", "type": "string" }, - "scheduled_innings": { - "type": "integer" - }, - "season": { + "scheduled_resolve_time": { + "example": "2026-09-07T00:00:00Z", "type": "string" }, - "series_description": { + "slug": { + "example": "tampa-sulphur-price-in-june-2026", "type": "string" }, "status": { - "$ref": "#/definitions/mlb.GameStatus" + "example": "open", + "type": "string" }, - "venue": { - "$ref": "#/definitions/mlb.VenueRef" - } - }, - "type": "object" - }, - "mlb.ImageRef": { - "properties": { - "type": { + "title": { + "example": "Tampa sulphur price in June 2026?", + "type": "string" + }, + "unit": { + "example": "USD/metric ton", "type": "string" }, "url": { + "example": "https://www.metaculus.com/questions/43612/tampa-sulphur-price-in-june-2026/", "type": "string" } }, "type": "object" }, - "mlb.Inning": { + "metaculus.QuestionScaling": { "properties": { - "away_errors": { - "type": "integer" + "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" }, - "away_hits": { + "inbound_outcome_count": { + "example": 10, "type": "integer" }, - "away_runs": { - "type": "integer" + "nominal_max": { + "example": 100, + "type": "number" }, - "home_errors": { - "type": "integer" + "nominal_min": { + "example": 0, + "type": "number" }, - "home_hits": { - "type": "integer" + "open_lower_bound": { + "example": false, + "type": "boolean" }, - "home_runs": { - "type": "integer" + "open_upper_bound": { + "example": false, + "type": "boolean" }, - "number": { - "type": "integer" + "range_max": { + "example": 100, + "type": "number" + }, + "range_min": { + "example": 0, + "type": "number" + }, + "zero_point": { + "example": 0, + "type": "number" } }, "type": "object" }, - "mlb.LeaderCategory": { + "metaculus.QuestionsResponse": { "properties": { - "category": { + "feed": { + "example": "questions", "type": "string" }, - "game_type": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "group": { - "type": "string" + "limit": { + "example": 10, + "type": "integer" }, - "leaders": { + "questions": { "items": { - "$ref": "#/definitions/mlb.LeaderEntry" + "$ref": "#/definitions/metaculus.QuestionRow" }, "type": "array" }, - "season": { + "source_url": { + "example": "https://www.metaculus.com/questions/", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "mlb.LeaderEntry": { + "metaculus.forecastHistoryResponseDoc": { "properties": { - "league": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "player": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "rank": { + "code": { + "example": 200, "type": "integer" }, - "season": { - "type": "string" - }, - "stats": { - "additionalProperties": {}, - "type": "object" - }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" + "data": { + "$ref": "#/definitions/metaculus.ForecastHistoryResponse" }, - "value": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.LeagueLeadersResponse": { + "metaculus.forecastsResponseDoc": { "properties": { - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { + "data": { + "$ref": "#/definitions/metaculus.ForecastsResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "metaculus.metadataResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "results": { - "items": { - "$ref": "#/definitions/mlb.LeaderCategory" - }, - "type": "array" + "data": { + "$ref": "#/definitions/metaculus.QuestionMetadataResponse" }, - "season": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "metaculus.optionsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { + "data": { + "$ref": "#/definitions/metaculus.OptionsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.Linescore": { + "metaculus.questionResponseDoc": { "properties": { - "away_errors": { + "code": { + "example": 200, "type": "integer" }, - "away_hits": { - "type": "integer" + "data": { + "$ref": "#/definitions/metaculus.QuestionResponse" }, - "away_runs": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "metaculus.questionsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "current_inning": { - "type": "integer" + "data": { + "$ref": "#/definitions/metaculus.QuestionsResponse" }, - "home_errors": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "metajobs.ListResponse": { + "properties": { + "listings": { + "items": { + "$ref": "#/definitions/metajobs.MetaJobListing" + }, + "type": "array" }, - "home_hits": { + "page": { + "example": 1, "type": "integer" }, - "home_runs": { + "page_size": { + "example": 50, "type": "integer" }, - "inning_state": { + "source_url": { "type": "string" }, - "innings": { - "items": { - "$ref": "#/definitions/mlb.Inning" - }, - "type": "array" - }, - "scheduled_innings": { + "total": { + "example": 754, "type": "integer" } }, "type": "object" }, - "mlb.MLBDiscoveryResponse": { + "metajobs.MetaJob": { "properties": { - "divisions": { - "items": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "type": "array" + "compensation_country": { + "example": "US", + "type": "string" }, - "fetched_at": { + "compensation_max": { + "example": "$241,000/year", "type": "string" }, - "game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "compensation_min": { + "example": "$173,000/year", + "type": "string" }, - "leader_categories": { + "departments": { + "example": [ + "Product Management" + ], "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "leagues": { - "items": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "type": "array" + "description": { + "type": "string" }, - "prospect_date_ranges": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "id": { + "example": "1238249364564427", + "type": "string" }, - "prospect_minimum_pa": { + "locations": { + "example": [ + "Menlo Park", + " CA" + ], "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "prospect_positions": { + "minimum_qualifications": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "roster_types": { + "preferred_qualifications": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "sections": { + "responsibilities": { "items": { - "$ref": "#/definitions/mlb.NavigationItem" + "type": "string" }, "type": "array" }, - "source_url": { + "title": { + "example": "Product Manager", "type": "string" }, - "sports": { - "items": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "type": "array" + "url": { + "example": "https://www.metacareers.com/profile/job_details/1238249364564427/", + "type": "string" + } + }, + "type": "object" + }, + "metajobs.MetaJobListing": { + "properties": { + "id": { + "example": "1238249364564427", + "type": "string" }, - "standings_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "last_modified": { + "example": "2026-07-29T01:17:34-07:00", + "type": "string" }, - "stat_groups": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "url": { + "example": "https://www.metacareers.com/profile/job_details/1238249364564427/", + "type": "string" + } + }, + "type": "object" + }, + "metajobs.MetaJobSearchResult": { + "properties": { + "id": { + "example": "1010234865172301", + "type": "string" }, - "stat_hitter_positions": { + "locations": { + "example": [ + "Sunnyvale", + " CA" + ], "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "stat_player_pools": { + "sub_teams": { + "example": [ + "Hardware" + ], "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "stat_types": { + "teams": { + "example": [ + "Infrastructure" + ], "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "statcast_entity_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "title": { + "example": "ASIC Engineer, Design", + "type": "string" }, - "statcast_expected_filter_types": { + "url": { + "example": "https://www.metacareers.com/profile/job_details/1010234865172301/", + "type": "string" + } + }, + "type": "object" + }, + "metajobs.SearchResponse": { + "properties": { + "jobs": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/metajobs.MetaJobSearchResult" }, "type": "array" }, - "statcast_expected_max_year": { - "type": "integer" + "source_url": { + "type": "string" }, - "statcast_expected_min_year": { + "total": { + "example": 58, + "type": "integer" + } + }, + "type": "object" + }, + "metajobs.jobResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "statcast_expected_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "statcast_expected_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "statcast_expected_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/metajobs.MetaJob" }, - "statcast_expected_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "metajobs.listResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_leaderboards": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/metajobs.ListResponse" }, - "statcast_max_year": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "metajobs.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "statcast_min_year": { - "type": "integer" + "data": { + "$ref": "#/definitions/metajobs.SearchResponse" }, - "statcast_minimum_bbe": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "metro.AuthorArticle": { + "properties": { + "image_url": { + "type": "string" }, - "statcast_oaa_max_year": { - "type": "integer" + "published_at": { + "type": "string" }, - "statcast_oaa_min_year": { - "type": "integer" + "section": { + "type": "string" }, - "statcast_oaa_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "summary": { + "type": "string" }, - "statcast_oaa_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "title": { + "type": "string" }, - "statcast_oaa_ranges": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "metro.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/metro.AuthorArticle" }, "type": "array" }, - "statcast_oaa_roles": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "bio": { + "type": "string" }, - "statcast_oaa_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "image_url": { + "type": "string" }, - "statcast_oaa_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "job_title": { + "type": "string" }, - "statcast_oaa_types": { + "knows_about": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "statcast_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "name": { + "type": "string" }, - "statcast_sort_directions": { + "same_as": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "statcast_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "mlb.NamedRef": { + "microsoftstore.AgeRating": { "properties": { - "id": { + "age": { + "example": 13, "type": "integer" }, - "name": { + "description": { + "example": "For ages 13 and up", "type": "string" - } - }, - "type": "object" - }, - "mlb.NavigationItem": { - "properties": { - "children": { + }, + "descriptors": { + "example": [ + "[\"Diverse Content: Discretion Advised\"]" + ], "items": { - "$ref": "#/definitions/mlb.NavigationItem" + "type": "string" }, "type": "array" }, - "label": { + "system": { + "example": "ESRB", "type": "string" }, - "url": { + "value": { + "example": "TEEN", "type": "string" - }, - "visible": { - "type": "boolean" } }, "type": "object" }, - "mlb.Play": { + "microsoftstore.Award": { "properties": { - "at_bat_index": { - "type": "integer" - }, - "batter": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "description": { + "category": { + "example": "Productivity category", "type": "string" }, - "event": { + "description": { + "example": "The Microsoft Store Awards celebrate apps and games that emphasize exceptional experiences for their users.", "type": "string" }, - "event_type": { + "editorial_id": { + "example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h", "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/mlb.PlayEvent" - }, - "type": "array" - }, - "half_inning": { + "title": { + "example": "Microsoft Store Awards 2025", "type": "string" }, - "inning": { + "year": { + "example": 2025, "type": "integer" - }, - "is_complete": { - "type": "boolean" - }, - "pitcher": { - "$ref": "#/definitions/mlb.NamedRef" } }, "type": "object" }, - "mlb.PlayByPlayResponse": { + "microsoftstore.Badge": { "properties": { - "fetched_at": { + "icon_id": { + "example": "AI", "type": "string" }, - "game_id": { - "type": "integer" - }, - "plays": { + "text": { + "example": "Uses AI features", + "type": "string" + } + }, + "type": "object" + }, + "microsoftstore.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/mlb.Play" + "$ref": "#/definitions/microsoftstore.CategoryTaxonomy" }, "type": "array" }, - "source_url": { + "media_type": { + "example": "apps", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "mlb.PlayEvent": { + "microsoftstore.CategoryResponse": { "properties": { - "description": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "end_time": { + "category": { + "example": "Photo & video", "type": "string" }, - "index": { + "count": { + "example": 20, "type": "integer" }, - "is_pitch": { + "has_more": { + "example": true, "type": "boolean" }, - "pitch_data": { - "additionalProperties": {}, - "type": "object" + "items": { + "items": { + "$ref": "#/definitions/microsoftstore.Product" + }, + "type": "array" }, - "pitch_number": { - "type": "integer" + "media_type": { + "example": "apps", + "type": "string" }, - "start_time": { + "next_cursor": { "type": "string" }, - "type": { + "source_url": { "type": "string" } }, "type": "object" }, - "mlb.Player": { + "microsoftstore.CategoryTaxonomy": { "properties": { - "active": { - "type": "boolean" - }, - "bat_side": { + "category": { + "example": "Books & reference", "type": "string" }, - "birth_city": { + "subcategories": { + "example": [ + "[\"E-reader\"", + "\"Fiction\"", + "\"Nonfiction\"", + "\"Reference\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "microsoftstore.ChartsResponse": { + "properties": { + "category": { + "example": "Photo & video", "type": "string" }, - "birth_country": { - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "birth_date": { + "discount_filter": { + "example": "onsale", "type": "string" }, - "current_age": { - "type": "integer" - }, - "current_team": { - "$ref": "#/definitions/mlb.TeamRef" + "items": { + "items": { + "$ref": "#/definitions/microsoftstore.Product" + }, + "type": "array" }, - "full_name": { + "list": { + "example": "TopFree", "type": "string" }, - "height": { + "media_type": { + "example": "apps", "type": "string" }, - "id": { - "type": "integer" - }, - "mlb_debut_date": { + "num_players_filter": { + "example": "SinglePlayer", "type": "string" }, - "pitch_hand": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "position": { - "type": "string" + "page_size": { + "example": 20, + "type": "integer" }, - "position_code": { + "source_url": { "type": "string" }, - "primary_number": { + "subcategory": { + "example": "E-reader", "type": "string" }, - "weight": { - "type": "integer" - } - }, - "type": "object" - }, - "mlb.PlayerResponse": { - "properties": { - "fetched_at": { + "subscription_filter": { + "example": "gamepass", "type": "string" }, - "player": { - "$ref": "#/definitions/mlb.Player" - }, - "source_url": { + "title": { + "example": "Must-have free apps", "type": "string" } }, "type": "object" }, - "mlb.PlayerSuggestion": { + "microsoftstore.EditorialResponse": { "properties": { - "active": { - "type": "boolean" - }, - "boxscore_name": { + "editorial_id": { + "example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h", "type": "string" }, - "display_name": { + "header_image": { "type": "string" }, - "headshots": { + "paragraphs": { "items": { - "$ref": "#/definitions/mlb.ImageRef" + "type": "string" }, "type": "array" }, - "id": { - "type": "integer" + "relevant_products": { + "items": { + "$ref": "#/definitions/microsoftstore.Product" + }, + "type": "array" }, - "name": { + "source_url": { "type": "string" }, - "team_id": { - "type": "integer" + "subtitle": { + "$ref": "#/definitions/microsoftstore.EditorialSubtitle" }, - "team_tri_code": { + "title": { + "example": "Productivity category", "type": "string" - }, - "use_last_name": { + } + }, + "type": "object" + }, + "microsoftstore.EditorialSubtitle": { + "properties": { + "icon": { "type": "string" }, - "use_name": { + "text": { + "example": "Microsoft Store Awards 2025", "type": "string" } }, "type": "object" }, - "mlb.ProspectStat": { + "microsoftstore.EventsResponse": { "properties": { - "age": { + "count": { + "example": 7, "type": "integer" }, - "average": { - "type": "string" - }, - "batting_stats": { - "additionalProperties": {}, - "type": "object" - }, - "blown_saves": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/microsoftstore.Product" + }, + "type": "array" }, - "era": { + "media_type": { + "example": "apps", "type": "string" }, - "holds": { - "type": "integer" - }, - "losses": { + "page": { + "example": 1, "type": "integer" }, - "name": { - "type": "string" - }, - "pitching_stats": { - "additionalProperties": {}, - "type": "object" - }, - "player_id": { + "page_size": { + "example": 20, "type": "integer" }, - "position": { + "source_url": { "type": "string" }, - "rank": { - "type": "integer" - }, - "saves": { - "type": "integer" - }, - "slug": { + "title": { + "example": "Special events", "type": "string" - }, - "team": { + } + }, + "type": "object" + }, + "microsoftstore.Feature": { + "properties": { + "description": { + "example": "Get answers, writing help, and image generation.", "type": "string" }, - "team_id": { - "type": "integer" - }, - "team_level": { + "title": { + "example": "AI assistant", "type": "string" - }, - "wins": { - "type": "integer" } }, "type": "object" }, - "mlb.ProspectStatsResponse": { + "microsoftstore.Image": { "properties": { - "count": { + "height": { + "example": 1080, "type": "integer" }, - "date_range": { - "type": "string" - }, - "fetched_at": { + "type": { + "example": "Screenshot", "type": "string" }, - "limit": { - "type": "integer" - }, - "list_type": { + "url": { + "example": "https://store-images.s-microsoft.com/image/apps.19060...f4dfc459-dae3-4ab8-8f40-18aa7ae9762f", "type": "string" }, - "min_pa": { - "type": "integer" - }, - "offset": { + "width": { + "example": 1920, "type": "integer" + } + }, + "type": "object" + }, + "microsoftstore.Product": { + "properties": { + "average_rating": { + "example": 4.3, + "type": "number" }, - "player_type": { - "type": "string" + "award": { + "$ref": "#/definitions/microsoftstore.Award" }, - "players": { + "categories": { + "example": [ + "[\"Music\"]" + ], "items": { - "$ref": "#/definitions/mlb.ProspectStat" + "type": "string" }, "type": "array" }, - "position": { + "description": { + "example": "Love music and podcasts? Play your favorite songs...", "type": "string" }, - "query": { + "display_price": { + "example": "Free", "type": "string" }, - "source_url": { + "free": { + "example": true, + "type": "boolean" + }, + "icon_url": { + "example": "https://store-images.s-microsoft.com/image/apps.10546...", "type": "string" }, - "team_id": { - "type": "integer" + "is_application": { + "example": true, + "type": "boolean" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "mlb.RosterPlayer": { - "properties": { - "jersey_number": { - "type": "string" + "is_game": { + "type": "boolean" }, - "person": { - "$ref": "#/definitions/mlb.NamedRef" + "is_pwa": { + "type": "boolean" }, - "position": { - "type": "string" + "is_subscription": { + "type": "boolean" }, - "position_code": { - "type": "string" + "is_theme": { + "type": "boolean" }, - "status": { + "kind": { + "example": "app", "type": "string" - } - }, - "type": "object" - }, - "mlb.RosterResponse": { - "properties": { - "count": { - "type": "integer" }, - "fetched_at": { + "media_type": { + "example": "Apps", "type": "string" }, - "players": { - "items": { - "$ref": "#/definitions/mlb.RosterPlayer" - }, - "type": "array" - }, - "roster_type": { + "poster_art_url": { "type": "string" }, - "season": { - "type": "integer" + "price": { + "example": 0, + "type": "number" }, - "source_url": { + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "team_id": { - "type": "integer" - } - }, - "type": "object" - }, - "mlb.ScheduleResponse": { - "properties": { - "date": { + "publisher": { + "example": "Spotify AB", "type": "string" }, - "end_date": { + "rating_count": { + "example": "34K", "type": "string" }, - "fetched_at": { + "release_date_utc": { + "example": "2017-10-24T12:04:25Z", "type": "string" }, - "games": { - "items": { - "$ref": "#/definitions/mlb.GameSummary" - }, - "type": "array" - }, - "source_url": { + "title": { + "example": "Spotify - Music and Podcasts", "type": "string" }, - "start_date": { + "url": { + "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", "type": "string" - }, - "team_id": { - "type": "integer" - }, - "total_games": { - "type": "integer" } }, "type": "object" }, - "mlb.SearchResponse": { + "microsoftstore.ProductDetail": { "properties": { - "fetched_at": { - "type": "string" + "age_ratings": { + "items": { + "$ref": "#/definitions/microsoftstore.AgeRating" + }, + "type": "array" }, - "players": { + "allowed_platforms": { + "example": [ + "[\"Windows.Desktop\"", + "\"Windows.Xbox\"]" + ], "items": { - "$ref": "#/definitions/mlb.PlayerSuggestion" + "type": "string" }, "type": "array" }, - "query": { - "type": "string" + "approximate_size_bytes": { + "example": 210105174, + "type": "integer" }, - "search_terms": { + "average_rating": { + "example": 4.3, + "type": "number" + }, + "badges": { "items": { - "$ref": "#/definitions/mlb.TermSuggestion" + "$ref": "#/definitions/microsoftstore.Badge" }, "type": "array" }, - "source_url": { + "box_art_url": { "type": "string" }, - "teams": { + "capabilities": { "items": { - "$ref": "#/definitions/mlb.TeamSuggestion" + "type": "string" }, "type": "array" }, - "topics": { + "card_actions": { + "example": [ + "[\"Install\"", + "\"Launch\"]" + ], "items": { - "$ref": "#/definitions/mlb.TopicSuggestion" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "mlb.StandingsGroup": { - "properties": { - "division": { - "$ref": "#/definitions/mlb.NamedRef" }, - "league": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "teams": { + "categories": { + "example": [ + "[\"Music\"]" + ], "items": { - "$ref": "#/definitions/mlb.StandingsTeam" + "type": "string" }, "type": "array" }, - "type": { + "category": { + "example": "Music", "type": "string" - } - }, - "type": "object" - }, - "mlb.StandingsResponse": { - "properties": { - "date": { + }, + "currency_code": { + "example": "USD", "type": "string" }, - "fetched_at": { + "description": { "type": "string" }, - "groups": { + "display_price": { + "example": "Free", + "type": "string" + }, + "features": { "items": { - "$ref": "#/definitions/mlb.StandingsGroup" + "$ref": "#/definitions/microsoftstore.Feature" }, "type": "array" }, - "season": { - "type": "integer" + "free": { + "example": true, + "type": "boolean" }, - "source_url": { + "hero_image_url": { "type": "string" }, - "type": { + "icon_url": { "type": "string" - } - }, - "type": "object" - }, - "mlb.StandingsTeam": { - "properties": { - "clinched": { - "type": "boolean" }, - "division_leader": { + "is_application": { "type": "boolean" }, - "division_rank": { - "type": "string" - }, - "games_back": { - "type": "string" - }, - "league_rank": { - "type": "string" + "is_game": { + "type": "boolean" }, - "losses": { - "type": "integer" + "is_purchase_enabled": { + "type": "boolean" }, - "run_differential": { - "type": "integer" + "is_pwa": { + "type": "boolean" }, - "runs_allowed": { - "type": "integer" + "is_subscription": { + "type": "boolean" }, - "runs_scored": { - "type": "integer" + "is_theme": { + "type": "boolean" }, - "streak": { + "kind": { + "example": "app", "type": "string" }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" - }, - "wild_card_games_back": { + "last_update_date_utc": { + "example": "2026-09-22T14:30:28Z", "type": "string" }, - "winning_percentage": { + "media_type": { + "example": "Apps", "type": "string" }, - "wins": { - "type": "integer" - } - }, - "type": "object" - }, - "mlb.StatSplit": { - "properties": { - "league": { - "$ref": "#/definitions/mlb.NamedRef" + "package_family_names": { + "example": [ + "[\"SpotifyAB.SpotifyMusic_zpdnekdrzrea0\"]" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "player": { - "$ref": "#/definitions/mlb.NamedRef" + "platforms": { + "example": [ + "[\"x86\"", + "\"x64\"]" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "position": { + "poster_art_url": { "type": "string" }, - "rank": { - "type": "integer" + "price": { + "example": 0, + "type": "number" }, - "season": { + "privacy_url": { + "example": "https://www.spotify.com/legal/privacy-policy/", "type": "string" }, - "stats": { - "additionalProperties": {}, - "type": "object" - }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" - } - }, - "type": "object" - }, - "mlb.StatcastBoardResponse": { - "properties": { - "board": { + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "end_year": { - "type": "integer" - }, - "fetched_at": { + "product_type": { + "example": "Application", "type": "string" }, - "filter_type": { + "publisher": { + "example": "Spotify AB", "type": "string" }, - "league_average": { - "items": {}, - "type": "array" - }, - "limit": { - "type": "integer" + "publisher_address": { + "type": "string" }, - "minimum": { + "publisher_id": { + "example": "10113470", "type": "string" }, - "offset": { + "rating_count": { + "example": 34225, "type": "integer" }, - "position": { + "rating_count_formatted": { + "example": "34.2K", "type": "string" }, - "range": { + "release_date_utc": { + "example": "2017-10-24T12:04:25Z", "type": "string" }, - "roles": { + "screenshots": { "items": { - "type": "string" + "$ref": "#/definitions/microsoftstore.Image" }, "type": "array" }, - "rows": { + "skus_summary": { "items": { - "$ref": "#/definitions/mlb.StatcastRow" + "$ref": "#/definitions/microsoftstore.SkuPrice" }, "type": "array" }, - "sort": { - "type": "string" - }, - "sort_dir": { - "type": "string" - }, "source_url": { "type": "string" }, - "split": { - "type": "string" + "supported_languages": { + "items": { + "type": "string" + }, + "type": "array" }, - "start_year": { - "type": "integer" + "title": { + "example": "Spotify - Music and Podcasts", + "type": "string" }, - "team_id": { - "type": "integer" + "trailers": { + "items": { + "$ref": "#/definitions/microsoftstore.Image" + }, + "type": "array" }, - "total": { - "type": "integer" + "url": { + "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", + "type": "string" }, - "type": { + "version": { "type": "string" }, - "year": { - "type": "integer" + "website": { + "example": "https://www.spotify.com", + "type": "string" } }, "type": "object" }, - "mlb.StatcastResponse": { + "microsoftstore.PublisherResponse": { "properties": { - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "min_bbe": { - "type": "string" - }, - "offset": { + "count": { + "example": 3, "type": "integer" }, - "position": { - "type": "string" + "has_more": { + "example": false, + "type": "boolean" }, - "rows": { + "items": { "items": { - "$ref": "#/definitions/mlb.StatcastRow" + "$ref": "#/definitions/microsoftstore.Product" }, "type": "array" }, - "sort": { + "next_cursor": { "type": "string" }, - "sort_dir": { + "publisher_name": { + "example": "Spotify AB", "type": "string" }, "source_url": { "type": "string" - }, - "team_id": { - "type": "integer" - }, - "total": { - "type": "integer" - }, - "type": { - "type": "string" - }, - "year": { - "type": "integer" } }, "type": "object" }, - "mlb.StatcastRow": { + "microsoftstore.RecommendedProduct": { "properties": { - "entity_id": { - "type": "string" + "average_rating": { + "example": 4.5, + "type": "number" }, - "metrics": { - "additionalProperties": {}, - "type": "object" + "categories": { + "example": [ + "[\"Action & adventure\"]" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "name": { + "icon_url": { "type": "string" }, - "position": { + "product_id": { + "example": "9p4qk476j199", "type": "string" }, - "qualified": { - "type": "boolean" - }, - "rank": { - "type": "integer" - }, - "team": { + "title": { + "example": "Bermuda Adventures: Farm Games", "type": "string" }, - "team_id": { + "url": { + "example": "https://apps.microsoft.com/detail/9p4qk476j199", "type": "string" } }, "type": "object" }, - "mlb.StatsResponse": { + "microsoftstore.RecommendedResponse": { "properties": { - "fetched_at": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/microsoftstore.RecommendedProduct" + }, + "type": "array" }, - "group": { + "section_title": { + "example": "Recommended for you", "type": "string" }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "player_id": { - "type": "integer" - }, - "season": { - "type": "integer" - }, "source_url": { "type": "string" + } + }, + "type": "object" + }, + "microsoftstore.RelatedResponse": { + "properties": { + "has_more_pages": { + "example": true, + "type": "boolean" }, - "splits": { + "items": { "items": { - "$ref": "#/definitions/mlb.StatSplit" + "$ref": "#/definitions/microsoftstore.Product" }, "type": "array" }, - "team_id": { + "page": { + "example": 1, "type": "integer" }, - "total": { + "page_size": { + "example": 10, "type": "integer" }, - "type": { + "product_id": { + "example": "9ncbcszsjrsb", + "type": "string" + }, + "product_type": { + "example": "Application", + "type": "string" + }, + "source_url": { "type": "string" + }, + "total_count": { + "example": 50, + "type": "integer" } }, "type": "object" }, - "mlb.Team": { + "microsoftstore.Review": { "properties": { - "abbreviation": { + "device_family": { + "example": "Windows.Desktop", "type": "string" }, - "active": { + "helpful_negative": { + "example": 30, + "type": "integer" + }, + "helpful_positive": { + "example": 74, + "type": "integer" + }, + "id": { + "example": "74a23681-6299-5cc4-5e83-a48d1c49ece6", + "type": "string" + }, + "is_revised": { "type": "boolean" }, - "club_name": { + "locale": { + "example": "EN-US", "type": "string" }, - "division": { - "$ref": "#/definitions/mlb.NamedRef" + "market": { + "example": "US", + "type": "string" }, - "first_year_of_play": { + "os_version": { + "example": "10.0.26200.8524", "type": "string" }, - "id": { + "rating": { + "example": 1, "type": "integer" }, - "league": { - "$ref": "#/definitions/mlb.NamedRef" + "reviewer_name": { + "example": "constance", + "type": "string" }, - "location_name": { + "submitted_at_utc": { + "example": "2026-07-12T21:41:45Z", "type": "string" }, - "name": { + "text": { + "example": "so, the app used to be great...", "type": "string" }, - "season": { - "type": "integer" + "title": { + "example": "spotify has fallen off. HARD.", + "type": "string" }, - "venue": { - "$ref": "#/definitions/mlb.VenueRef" + "url": { + "type": "string" } }, "type": "object" }, - "mlb.TeamBoxscore": { + "microsoftstore.ReviewsResponse": { "properties": { - "batters": { - "items": { - "type": "integer" - }, - "type": "array" + "has_more_pages": { + "example": true, + "type": "boolean" }, - "pitchers": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 20, + "type": "integer" + }, + "product_id": { + "example": "9ncbcszsjrsb", + "type": "string" + }, + "reviews": { "items": { - "type": "integer" + "$ref": "#/definitions/microsoftstore.Review" }, "type": "array" }, - "players_used": { - "type": "integer" + "sort": { + "example": "MostHelpful", + "type": "string" }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" + "source_url": { + "type": "string" }, - "team_stats": { - "additionalProperties": { - "additionalProperties": {}, - "type": "object" - }, - "type": "object" + "total_count": { + "example": 307, + "type": "integer" } }, "type": "object" }, - "mlb.TeamRef": { + "microsoftstore.ReviewsSummaryResponse": { "properties": { - "abbreviation": { + "average_rating": { + "example": 4.3, + "type": "number" + }, + "most_critical_review": { + "$ref": "#/definitions/microsoftstore.Review" + }, + "most_favorable_review": { + "$ref": "#/definitions/microsoftstore.Review" + }, + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "id": { + "rating_distribution": { + "type": "object" + }, + "rating_status": { + "example": "RatingAvailable", + "type": "string" + }, + "review_count": { + "example": 307, "type": "integer" }, - "name": { + "source_url": { "type": "string" } }, "type": "object" }, - "mlb.TeamSuggestion": { + "microsoftstore.SearchResponse": { "properties": { - "club_name": { - "type": "string" - }, - "display_name": { + "age": { + "example": "all", "type": "string" }, - "franchise_name": { + "category": { + "example": "all", "type": "string" }, - "id": { + "count": { + "example": 20, "type": "integer" }, - "logos": { + "has_more": { + "example": true, + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/mlb.ImageRef" + "$ref": "#/definitions/microsoftstore.Product" }, "type": "array" }, - "name": { + "media_type": { + "example": "all", "type": "string" }, - "sport_id": { - "type": "integer" - }, - "team_name": { + "next_cursor": { + "example": "bz0wJmI9OU5DQkNTWlNKUlNCLD...", "type": "string" }, - "tri_code": { + "price": { + "example": "all", "type": "string" - } - }, - "type": "object" - }, - "mlb.TeamsResponse": { - "properties": { - "count": { - "type": "integer" }, - "fetched_at": { + "query": { + "example": "spotify", "type": "string" }, - "season": { - "type": "integer" - }, "source_url": { "type": "string" - }, - "teams": { - "items": { - "$ref": "#/definitions/mlb.Team" - }, - "type": "array" } }, "type": "object" }, - "mlb.TermSuggestion": { + "microsoftstore.SkuPrice": { "properties": { - "display_name": { + "display_msrp": { + "example": "Free", "type": "string" }, - "name": { + "display_price": { + "example": "Free", "type": "string" + }, + "msrp": { + "example": 0, + "type": "number" + }, + "price": { + "example": 0, + "type": "number" } }, "type": "object" }, - "mlb.TopicSuggestion": { + "microsoftstore.SpotlightResponse": { "properties": { - "display_name": { - "type": "string" + "count": { + "example": 8, + "type": "integer" }, - "fields": { + "items": { "items": { - "type": "integer" + "$ref": "#/definitions/microsoftstore.Product" }, "type": "array" }, - "name": { + "media_type": { + "example": "home", "type": "string" }, - "slug": { + "source_url": { "type": "string" } }, "type": "object" }, - "mlb.Transaction": { + "microsoftstore.SuggestResponse": { "properties": { - "date": { - "type": "string" - }, - "description": { - "type": "string" + "completions": { + "example": [ + "[\"spotify\"", + "\"spot\"", + "\"spotify for podcasters\"]" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "effective_date": { + "prefix": { + "example": "spot", "type": "string" }, - "from_team": { - "$ref": "#/definitions/mlb.TeamRef" - }, - "id": { - "type": "integer" - }, - "player": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "to_team": { - "$ref": "#/definitions/mlb.TeamRef" + "products": { + "items": { + "$ref": "#/definitions/microsoftstore.SuggestedProduct" + }, + "type": "array" }, - "type": { + "source_url": { "type": "string" } }, "type": "object" }, - "mlb.TransactionsResponse": { + "microsoftstore.SuggestedProduct": { "properties": { - "count": { - "type": "integer" - }, - "end_date": { + "icon_url": { "type": "string" }, - "fetched_at": { + "is_application": { + "example": true, + "type": "boolean" + }, + "is_game": { + "type": "boolean" + }, + "media_type": { + "example": "apps", "type": "string" }, - "source_url": { + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "start_date": { + "title": { + "example": "Spotify - Music and Podcasts", "type": "string" }, - "transactions": { - "items": { - "$ref": "#/definitions/mlb.Transaction" - }, - "type": "array" + "url": { + "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", + "type": "string" } }, "type": "object" }, - "mlb.VenueRef": { + "microsoftstore.categoriesResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/microsoftstore.CategoriesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.boxscoreResponseDoc": { + "microsoftstore.categoryResponseDoc": { "properties": { "code": { + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.BoxscoreResponse" + "$ref": "#/definitions/microsoftstore.CategoryResponse" }, "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.discoveryResponseDoc": { + "microsoftstore.chartsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.MLBDiscoveryResponse" + "$ref": "#/definitions/microsoftstore.ChartsResponse" }, "msg": { "example": "OK", @@ -101130,14 +103617,14 @@ }, "type": "object" }, - "mlb.editorialFeedResponseDoc": { + "microsoftstore.editorialResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.EditorialFeedResponse" + "$ref": "#/definitions/microsoftstore.EditorialResponse" }, "msg": { "example": "OK", @@ -101146,14 +103633,14 @@ }, "type": "object" }, - "mlb.gameResponseDoc": { + "microsoftstore.eventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.GameResponse" + "$ref": "#/definitions/microsoftstore.EventsResponse" }, "msg": { "example": "OK", @@ -101162,14 +103649,14 @@ }, "type": "object" }, - "mlb.leagueLeadersResponseDoc": { + "microsoftstore.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.LeagueLeadersResponse" + "$ref": "#/definitions/microsoftstore.ProductDetail" }, "msg": { "example": "OK", @@ -101178,28 +103665,30 @@ }, "type": "object" }, - "mlb.playByPlayResponseDoc": { + "microsoftstore.publisherResponseDoc": { "properties": { "code": { + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.PlayByPlayResponse" + "$ref": "#/definitions/microsoftstore.PublisherResponse" }, "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.playerResponseDoc": { + "microsoftstore.recommendedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.PlayerResponse" + "$ref": "#/definitions/microsoftstore.RecommendedResponse" }, "msg": { "example": "OK", @@ -101208,14 +103697,14 @@ }, "type": "object" }, - "mlb.prospectStatsResponseDoc": { + "microsoftstore.relatedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.ProspectStatsResponse" + "$ref": "#/definitions/microsoftstore.RelatedResponse" }, "msg": { "example": "OK", @@ -101224,14 +103713,14 @@ }, "type": "object" }, - "mlb.rosterResponseDoc": { + "microsoftstore.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.RosterResponse" + "$ref": "#/definitions/microsoftstore.ReviewsResponse" }, "msg": { "example": "OK", @@ -101240,14 +103729,14 @@ }, "type": "object" }, - "mlb.scheduleResponseDoc": { + "microsoftstore.reviewsSummaryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.ScheduleResponse" + "$ref": "#/definitions/microsoftstore.ReviewsSummaryResponse" }, "msg": { "example": "OK", @@ -101256,14 +103745,14 @@ }, "type": "object" }, - "mlb.searchResponseDoc": { + "microsoftstore.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.SearchResponse" + "$ref": "#/definitions/microsoftstore.SearchResponse" }, "msg": { "example": "OK", @@ -101272,14 +103761,14 @@ }, "type": "object" }, - "mlb.standingsResponseDoc": { + "microsoftstore.spotlightResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.StandingsResponse" + "$ref": "#/definitions/microsoftstore.SpotlightResponse" }, "msg": { "example": "OK", @@ -101288,14 +103777,14 @@ }, "type": "object" }, - "mlb.statcastBoardResponseDoc": { + "microsoftstore.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.StatcastBoardResponse" + "$ref": "#/definitions/microsoftstore.SuggestResponse" }, "msg": { "example": "OK", @@ -101304,122 +103793,48 @@ }, "type": "object" }, - "mlb.statcastResponseDoc": { + "mirror.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mlb.StatcastResponse" - }, - "msg": { - "example": "OK", + "label": { "type": "string" - } - }, - "type": "object" - }, - "mlb.statsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mlb.StatsResponse" }, - "msg": { - "example": "OK", + "label_url": { "type": "string" - } - }, - "type": "object" - }, - "mlb.teamsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.TeamsResponse" - }, - "msg": { - "example": "OK", + "title": { "type": "string" - } - }, - "type": "object" - }, - "mlb.transactionsResponseDoc": { - "properties": { - "code": { - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mlb.TransactionsResponse" }, - "msg": { + "url": { "type": "string" } }, "type": "object" }, - "modaoperandi.CategoriesResponse": { + "mirror.AuthorResponse": { "properties": { - "availability": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "categories": { - "items": { - "$ref": "#/definitions/modaoperandi.Category" - }, - "type": "array" - }, - "colors": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/mirror.AuthorArticle" }, "type": "array" }, - "designers": { - "items": { - "$ref": "#/definitions/modaoperandi.Designer" - }, - "type": "array" + "bio": { + "type": "string" }, - "gender": { + "email": { "type": "string" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "job_title": { + "type": "string" }, - "sorts": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "modaoperandi.Category": { - "properties": { "name": { "type": "string" }, "slug": { "type": "string" }, - "total_items": { - "type": "integer" + "twitter": { + "type": "string" }, "url": { "type": "string" @@ -101427,426 +103842,236 @@ }, "type": "object" }, - "modaoperandi.Designer": { + "mlb.BoxscorePlayer": { "properties": { - "name": { + "batting_order": { "type": "string" }, - "slug": { - "type": "string" + "person": { + "$ref": "#/definitions/mlb.NamedRef" }, - "total_items": { - "type": "integer" - } - }, - "type": "object" - }, - "modaoperandi.DesignersResponse": { - "properties": { - "count": { - "type": "integer" + "position": { + "type": "string" }, - "designers": { - "items": { - "$ref": "#/definitions/modaoperandi.Designer" + "stats": { + "additionalProperties": { + "additionalProperties": {}, + "type": "object" }, - "type": "array" - }, - "gender": { - "type": "string" + "type": "object" } }, "type": "object" }, - "modaoperandi.Detail": { + "mlb.BoxscoreResponse": { "properties": { - "availability": { - "type": "string" - }, - "color": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "description": { - "type": "string" - }, - "designer": { - "type": "string" - }, - "details": { - "type": "string" - }, - "id": { - "type": "string" - }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "in_stock": { - "type": "boolean" + "away": { + "$ref": "#/definitions/mlb.BoxscoreTeam" }, - "name": { + "fetched_at": { "type": "string" }, - "price": { - "type": "number" + "game_id": { + "type": "integer" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "home": { + "$ref": "#/definitions/mlb.BoxscoreTeam" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "modaoperandi.Facets": { + "mlb.BoxscoreTeam": { "properties": { - "availability": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "categories": { - "items": { - "$ref": "#/definitions/modaoperandi.Category" - }, - "type": "array" - }, - "colors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "designers": { + "players": { "items": { - "$ref": "#/definitions/modaoperandi.Designer" + "$ref": "#/definitions/mlb.BoxscorePlayer" }, "type": "array" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "team": { + "$ref": "#/definitions/mlb.TeamRef" }, - "sorts": { - "items": { - "type": "string" + "team_stats": { + "additionalProperties": { + "additionalProperties": {}, + "type": "object" }, - "type": "array" + "type": "object" } }, "type": "object" }, - "modaoperandi.Product": { + "mlb.Decision": { "properties": { - "availability": { - "type": "string" - }, - "color": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "designer": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "in_stock": { - "type": "boolean" - }, - "name": { - "type": "string" + "loser": { + "$ref": "#/definitions/mlb.NamedRef" }, - "price": { - "type": "number" + "save": { + "$ref": "#/definitions/mlb.NamedRef" }, - "url": { - "type": "string" + "winner": { + "$ref": "#/definitions/mlb.NamedRef" } }, "type": "object" }, - "modaoperandi.SearchResponse": { + "mlb.EditorialFeedResponse": { "properties": { - "category": { + "fetched_at": { "type": "string" }, - "count": { - "type": "integer" - }, - "facets": { - "$ref": "#/definitions/modaoperandi.Facets" + "items": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "gender": { + "language": { "type": "string" }, "limit": { "type": "integer" }, - "page": { + "skip": { "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/modaoperandi.Product" - }, - "type": "array" - }, - "query": { + "slug": { "type": "string" }, "source_url": { "type": "string" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "modaoperandi.categoriesDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/modaoperandi.CategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" } }, "type": "object" }, - "modaoperandi.designersDoc": { + "mlb.EnumValue": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/modaoperandi.DesignersResponse" - }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "modaoperandi.productDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/modaoperandi.Detail" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "modaoperandi.searchDoc": { + "mlb.GameResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "away_boxscore": { + "$ref": "#/definitions/mlb.TeamBoxscore" }, - "data": { - "$ref": "#/definitions/modaoperandi.SearchResponse" + "decisions": { + "$ref": "#/definitions/mlb.Decision" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "moncler.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/moncler.Category" - }, - "type": "array" - } - }, - "type": "object" - }, - "moncler.Category": { - "properties": { - "category_id": { + "fetched_at": { "type": "string" }, - "children": { - "items": { - "$ref": "#/definitions/moncler.Category" - }, - "type": "array" + "game": { + "$ref": "#/definitions/mlb.GameSummary" }, - "description": { - "type": "string" + "home_boxscore": { + "$ref": "#/definitions/mlb.TeamBoxscore" }, - "name": { - "type": "string" + "linescore": { + "$ref": "#/definitions/mlb.Linescore" }, - "parent_id": { + "source_url": { "type": "string" } }, "type": "object" }, - "moncler.CategoryResponse": { + "mlb.GameSide": { "properties": { - "category_id": { - "type": "string" - }, - "facets": { - "items": { - "$ref": "#/definitions/moncler.SearchFacet" - }, - "type": "array" - }, - "limit": { + "losses": { "type": "integer" }, - "offset": { - "type": "integer" + "probable_pitcher": { + "$ref": "#/definitions/mlb.NamedRef" }, - "results": { - "items": { - "$ref": "#/definitions/moncler.SearchHit" - }, - "type": "array" + "score": { + "type": "integer" }, - "sort_options": { - "items": { - "$ref": "#/definitions/moncler.SortOption" - }, - "type": "array" + "team": { + "$ref": "#/definitions/mlb.TeamRef" }, - "total": { + "wins": { "type": "integer" } }, "type": "object" }, - "moncler.Product": { + "mlb.GameStatus": { "properties": { - "brand": { + "abstract": { "type": "string" }, - "care_instructions": { + "code": { "type": "string" }, - "collection": { + "detailed": { "type": "string" }, - "color": { + "reason": { "type": "string" + } + }, + "type": "object" + }, + "mlb.GameSummary": { + "properties": { + "away": { + "$ref": "#/definitions/mlb.GameSide" }, - "composition": { + "day_night": { "type": "string" }, - "currency": { + "double_header": { "type": "string" }, - "gender": { + "game_date": { "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/moncler.ProductImageGroup" - }, - "type": "array" - }, - "in_stock": { - "type": "boolean" + "game_number": { + "type": "integer" }, - "long_description": { + "game_type": { "type": "string" }, - "made_in": { - "type": "string" + "home": { + "$ref": "#/definitions/mlb.GameSide" }, - "master_id": { - "type": "string" + "id": { + "type": "integer" }, - "name": { + "official_date": { "type": "string" }, - "price": { - "type": "number" - }, - "product_id": { - "type": "string" + "scheduled_innings": { + "type": "integer" }, - "product_url": { + "season": { "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": { + "series_description": { "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" + "status": { + "$ref": "#/definitions/mlb.GameStatus" }, - "variation_attributes": { - "items": { - "$ref": "#/definitions/moncler.ProductVariationAttribute" - }, - "type": "array" + "venue": { + "$ref": "#/definitions/mlb.VenueRef" } }, "type": "object" }, - "moncler.ProductImage": { + "mlb.ImageRef": { "properties": { - "alt": { + "type": { "type": "string" }, "url": { @@ -101855,2211 +104080,2155 @@ }, "type": "object" }, - "moncler.ProductImageGroup": { + "mlb.Inning": { "properties": { - "color": { - "type": "string" + "away_errors": { + "type": "integer" }, - "images": { - "items": { - "$ref": "#/definitions/moncler.ProductImage" - }, - "type": "array" + "away_hits": { + "type": "integer" }, - "view_type": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.ProductVariant": { - "properties": { - "orderable": { - "type": "boolean" + "away_runs": { + "type": "integer" }, - "price": { - "type": "number" + "home_errors": { + "type": "integer" }, - "product_id": { - "type": "string" + "home_hits": { + "type": "integer" }, - "variation_values": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "home_runs": { + "type": "integer" + }, + "number": { + "type": "integer" } }, "type": "object" }, - "moncler.ProductVariationAttribute": { + "mlb.LeaderCategory": { "properties": { - "id": { + "category": { "type": "string" }, - "label": { + "game_type": { "type": "string" }, - "values": { + "group": { + "type": "string" + }, + "leaders": { "items": { - "$ref": "#/definitions/moncler.ProductVariationValue" + "$ref": "#/definitions/mlb.LeaderEntry" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.ProductVariationValue": { - "properties": { - "label": { - "type": "string" }, - "orderable": { - "type": "boolean" - }, - "value": { + "season": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "moncler.RelatedProduct": { + "mlb.LeaderEntry": { "properties": { - "currency": { - "type": "string" + "league": { + "$ref": "#/definitions/mlb.NamedRef" }, - "image_url": { - "type": "string" + "player": { + "$ref": "#/definitions/mlb.NamedRef" }, - "name": { + "rank": { + "type": "integer" + }, + "season": { "type": "string" }, - "price": { - "type": "number" + "stats": { + "additionalProperties": {}, + "type": "object" }, - "product_id": { + "team": { + "$ref": "#/definitions/mlb.TeamRef" + }, + "value": { "type": "string" } }, "type": "object" }, - "moncler.SearchFacet": { + "mlb.LeagueLeadersResponse": { "properties": { - "id": { - "type": "string" - }, - "label": { - "type": "string" - }, - "values": { + "categories": { "items": { - "$ref": "#/definitions/moncler.SearchFacetValue" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.SearchFacetValue": { - "properties": { + }, "count": { "type": "integer" }, - "label": { + "fetched_at": { "type": "string" }, - "value": { + "results": { + "items": { + "$ref": "#/definitions/mlb.LeaderCategory" + }, + "type": "array" + }, + "season": { + "type": "integer" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "moncler.SearchHit": { + "mlb.Linescore": { "properties": { - "currency": { - "type": "string" + "away_errors": { + "type": "integer" }, - "image_alt": { - "type": "string" + "away_hits": { + "type": "integer" }, - "image_url": { - "type": "string" + "away_runs": { + "type": "integer" }, - "name": { - "type": "string" + "current_inning": { + "type": "integer" }, - "orderable": { - "type": "boolean" + "home_errors": { + "type": "integer" }, - "price": { - "type": "number" + "home_hits": { + "type": "integer" }, - "product_id": { - "type": "string" + "home_runs": { + "type": "integer" }, - "stock_level": { - "type": "number" + "inning_state": { + "type": "string" }, - "variant_ids": { + "innings": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.Inning" }, "type": "array" + }, + "scheduled_innings": { + "type": "integer" } }, "type": "object" }, - "moncler.SearchResponse": { + "mlb.MLBDiscoveryResponse": { "properties": { - "facets": { + "divisions": { "items": { - "$ref": "#/definitions/moncler.SearchFacet" + "$ref": "#/definitions/mlb.NamedRef" }, "type": "array" }, - "limit": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "offset": { - "type": "integer" + "game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "query": { - "type": "string" + "leader_categories": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "results": { + "leagues": { "items": { - "$ref": "#/definitions/moncler.SearchHit" + "$ref": "#/definitions/mlb.NamedRef" }, "type": "array" }, - "sort_options": { + "prospect_date_ranges": { "items": { - "$ref": "#/definitions/moncler.SortOption" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "moncler.SizeGuide": { - "properties": { - "country_sizes": { + "prospect_minimum_pa": { "items": { - "$ref": "#/definitions/moncler.SizeGuideCountrySizes" + "type": "integer" }, "type": "array" }, - "description": { - "type": "string" + "prospect_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "rows": { + "prospect_ranking_positions": { "items": { - "$ref": "#/definitions/moncler.SizeGuideRow" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.SizeGuideCountrySizes": { - "properties": { - "country": { - "type": "string" }, - "sizes": { + "prospect_ranking_sort_directions": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.SizeGuideMeasurement": { - "properties": { - "cm": { - "type": "string" }, - "inches": { - "type": "string" + "prospect_ranking_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "label": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.SizeGuideRow": { - "properties": { - "measurements": { + "prospect_ranking_teams": { "items": { - "$ref": "#/definitions/moncler.SizeGuideMeasurement" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "size": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.SortOption": { - "properties": { - "id": { - "type": "string" + "prospect_ranking_views": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "label": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.Store": { - "properties": { - "address": { - "type": "string" + "prospect_ranking_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "city": { - "type": "string" + "roster_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "country_code": { - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/mlb.NavigationItem" + }, + "type": "array" }, - "country_name": { + "source_url": { "type": "string" }, - "email": { - "type": "string" + "sports": { + "items": { + "$ref": "#/definitions/mlb.NamedRef" + }, + "type": "array" }, - "hours": { + "standings_types": { "items": { - "$ref": "#/definitions/moncler.StoreHours" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "hours_schedule": { + "stat_groups": { "items": { - "$ref": "#/definitions/moncler.StoreDaySchedule" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "latitude": { - "type": "number" + "stat_hitter_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "longitude": { - "type": "number" + "stat_player_pools": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "stat_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "phone": { - "type": "string" + "statcast_abs_challenge_filters": { + "$ref": "#/definitions/mlb.StatcastABSChallengeFilters" }, - "postal_code": { - "type": "string" + "statcast_active_spin_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "region": { - "type": "string" + "statcast_active_spin_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "state_code": { - "type": "string" + "statcast_active_spin_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "store_id": { - "type": "string" + "statcast_active_spin_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "store_type": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.StoreDaySchedule": { - "properties": { - "day": { - "type": "string" + "statcast_active_spin_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "is_closed": { - "type": "boolean" + "statcast_arm_angle_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slots": { + "statcast_arm_angle_group_by": { "items": { - "$ref": "#/definitions/moncler.StoreHoursSlot" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.StoreHours": { - "properties": { - "day": { - "type": "string" }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.StoreHoursSlot": { - "properties": { - "end": { - "type": "string" + "statcast_arm_angle_group_minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "start": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.StoresResponse": { - "properties": { - "stores": { + "statcast_arm_angle_hands": { "items": { - "$ref": "#/definitions/moncler.Store" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.SuggestResponse": { - "properties": { - "categories": { + }, + "statcast_arm_angle_minimums": { "items": { - "$ref": "#/definitions/moncler.SuggestedCategory" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "phrases": { + "statcast_arm_angle_pitch_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "query": { - "type": "string" + "statcast_arm_angle_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "terms": { + "statcast_arm_angle_sort_directions": { "items": { - "$ref": "#/definitions/moncler.SuggestedTerm" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.SuggestedCategory": { - "properties": { - "category_id": { - "type": "string" }, - "name": { - "type": "string" + "statcast_arm_angle_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "parent_category_name": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.SuggestedTerm": { - "properties": { - "corrected": { - "type": "boolean" + "statcast_arm_angle_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "term": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_arm_strength_min_throws": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/moncler.CategoriesResponse" + "statcast_arm_strength_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "moncler.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_arm_strength_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/moncler.CategoryResponse" + "statcast_arm_strength_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "moncler.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_arm_strength_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/moncler.Product" + "statcast_arm_strength_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "moncler.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_arm_strength_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/moncler.SearchResponse" + "statcast_arm_value_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "moncler.storesResponseDoc": { - "properties": { - "code": { - "example": 200, + "statcast_arm_value_max_year": { "type": "integer" }, - "data": { - "$ref": "#/definitions/moncler.StoresResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "moncler.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, + "statcast_arm_value_min_year": { "type": "integer" }, - "data": { - "$ref": "#/definitions/moncler.SuggestResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "moneycontrol.AuthorResponse": { - "properties": { - "articles": { + "statcast_arm_value_minimum_opportunities": { "items": { - "$ref": "#/definitions/moneycontrol.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "statcast_arm_value_situations": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "job_title": { - "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" }, - "social_links": { + "statcast_arm_value_split_years": { "items": { - "$ref": "#/definitions/moneycontrol.AuthorSocialLink" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "moneycontrol.AuthorSocialLink": { - "properties": { - "type": { - "type": "string" + "statcast_arm_value_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "moneycontrol.HeadlineItem": { - "properties": { - "author": { - "type": "string" + "statcast_arm_value_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_arm_value_with_team_only": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_arm_value_years": { + "items": { + "type": "integer" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_baserunning_filters": { + "$ref": "#/definitions/mlb.StatcastBaserunningFilters" }, - "title": { - "type": "string" + "statcast_bat_tracking_attack_zones": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "type": { - "type": "string" + "statcast_bat_tracking_bat_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "motleyfool.AuthorResponse": { - "properties": { - "articles": { + "statcast_bat_tracking_contact_types": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "statcast_bat_tracking_counts": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "image_url": { - "type": "string" + "statcast_bat_tracking_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_bat_tracking_group_by": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nationafrica.AuthorArticle": { - "properties": { - "premium": { - "type": "boolean" + "statcast_bat_tracking_hard_hit_values": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_bat_tracking_min_group_swings": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_bat_tracking_min_swings": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nationafrica.AuthorResponse": { - "properties": { - "articles": { + "statcast_bat_tracking_pitch_hands": { "items": { - "$ref": "#/definitions/nationafrica.AuthorArticle" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "bio": { - "type": "string" + "statcast_bat_tracking_pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_bat_tracking_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_bat_tracking_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "type": "string" + "statcast_bat_tracking_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nationalpost.AuthorArticle": { - "properties": { - "category": { - "type": "string" + "statcast_bat_tracking_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_bat_tracking_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_batted_ball_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nationalpost.AuthorResponse": { - "properties": { - "article_count": { + "statcast_batted_ball_max_year": { "type": "integer" }, - "articles": { + "statcast_batted_ball_min_splits": { "items": { - "$ref": "#/definitions/nationalpost.AuthorArticle" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "bio": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" + "statcast_batted_ball_min_year": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nbc.ArticleResponse": { - "properties": { - "authors": { + "statcast_batted_ball_minimums": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "paragraphs": { + "statcast_batted_ball_pitch_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "published_at": { - "type": "string" + "statcast_batted_ball_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "section": { - "type": "string" + "statcast_batted_ball_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_batted_ball_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "updated_at": { - "type": "string" + "statcast_batted_ball_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nbc.AuthorArticle": { - "properties": { - "image_url": { - "type": "string" + "statcast_batted_ball_split_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "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" + "statcast_batted_ball_splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "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" + "statcast_batted_ball_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_batted_ball_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nbc.AuthorResponse": { - "properties": { - "articles": { + "statcast_catcher_blocking_game_types": { "items": { - "$ref": "#/definitions/nbc.AuthorArticle" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "bio": { - "type": "string" + "statcast_catcher_blocking_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_catcher_blocking_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "job_title": { - "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" }, - "social_links": { + "statcast_catcher_blocking_types": { "items": { - "$ref": "#/definitions/nbc.AuthorSocialLink" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nbc.AuthorSocialLink": { - "properties": { - "platform": { - "type": "string" + "statcast_catcher_blocking_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nbc.HeadlineItem": { - "properties": { - "author": { - "type": "string" + "statcast_catcher_framing_ball_strike": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_catcher_framing_bat_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_catcher_framing_calls": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_catcher_framing_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_catcher_framing_min_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nbc.HeadlinesResponse": { - "properties": { - "items": { + "statcast_catcher_framing_min_results": { "items": { - "$ref": "#/definitions/nbc.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "section": { - "type": "string" - } - }, - "type": "object" - }, - "nbc.NewsResponse": { - "properties": { - "items": { + "statcast_catcher_framing_pitch_hands": { "items": { - "$ref": "#/definitions/nbc.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "nbc.Section": { - "properties": { - "name": { - "type": "string" }, - "slug": { - "type": "string" + "statcast_catcher_framing_pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nbc.SectionsResponse": { - "properties": { - "sections": { + "statcast_catcher_framing_sort_directions": { "items": { - "$ref": "#/definitions/nbc.Section" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "nbc.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nbc.ArticleResponse" + "statcast_catcher_framing_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "nbc.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_catcher_framing_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/nbc.AuthorResponse" + "statcast_catcher_framing_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "nbc.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_catcher_framing_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/nbc.HeadlinesResponse" + "statcast_catcher_pop_time_min_2b_attempts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "nbc.newsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_catcher_pop_time_min_3b_attempts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/nbc.NewsResponse" + "statcast_catcher_pop_time_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "nbc.sectionsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_catcher_pop_time_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/nbc.SectionsResponse" + "statcast_catcher_pop_time_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "ndtv.ArticleResponse": { - "properties": { - "authors": { + "statcast_catcher_pop_time_years": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "description": { - "type": "string" + "statcast_catcher_stance_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_catcher_stance_group_by": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "paragraphs": { + "statcast_catcher_stance_knee_codes": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "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" + "statcast_catcher_stance_min_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "premium": { - "type": "boolean" + "statcast_catcher_stance_min_results": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_catcher_stance_pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "section": { - "type": "string" + "statcast_catcher_stance_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_catcher_stance_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "updated_at": { - "type": "string" + "statcast_catcher_stance_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ndtv.AuthorArticle": { - "properties": { - "image_url": { - "type": "string" + "statcast_catcher_stance_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_on": { - "type": "string" + "statcast_catcher_stance_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "section": { - "type": "string" + "statcast_catcher_stance_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_catcher_throwing_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_catcher_throwing_minimum_attempts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ndtv.AuthorResponse": { - "properties": { - "articles": { + "statcast_catcher_throwing_seasons": { "items": { - "$ref": "#/definitions/ndtv.AuthorArticle" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "bio": { - "type": "string" + "statcast_catcher_throwing_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_catcher_throwing_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "job_title": { - "type": "string" + "statcast_catcher_throwing_target_bases": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_catcher_throwing_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "same_as": { + "statcast_catcher_throwing_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ndtv.HeadlineItem": { - "properties": { - "author": { - "type": "string" + "statcast_entity_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_expected_filter_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_expected_max_year": { + "type": "integer" }, - "summary": { - "type": "string" + "statcast_expected_min_year": { + "type": "integer" }, - "title": { - "type": "string" + "statcast_expected_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "type": { - "type": "string" + "statcast_expected_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ndtv.SearchResponse": { - "properties": { - "has_more": { - "type": "boolean" + "statcast_expected_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "items": { + "statcast_expected_types": { "items": { - "$ref": "#/definitions/ndtv.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "page": { - "type": "integer" + "statcast_fielding_run_value_batting_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "query": { - "type": "string" + "statcast_fielding_run_value_fielding_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "total_results": { - "type": "integer" - } - }, - "type": "object" - }, - "news18.AuthorResponse": { - "properties": { - "articles": { + "statcast_fielding_run_value_game_types": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "statcast_fielding_run_value_group_by": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "image_url": { - "type": "string" + "statcast_fielding_run_value_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_fielding_run_value_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "social_links": { + "statcast_fielding_run_value_sort_directions": { "items": { - "$ref": "#/definitions/news18.AuthorSocialLink" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "news18.AuthorSocialLink": { - "properties": { - "type": { - "type": "string" + "statcast_fielding_run_value_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newscomau.AuthorResponse": { - "properties": { - "articles": { + "statcast_fielding_run_value_team_ids": { "items": { - "$ref": "#/definitions/newscomau.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "statcast_fielding_run_value_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "image_url": { - "type": "string" + "statcast_first_base_receiving_field_out_values": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "job_title": { - "type": "string" + "statcast_first_base_receiving_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_first_base_receiving_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "social_urls": { + "statcast_first_base_receiving_minimum_heights": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newscomau.HeadlineItem": { - "properties": { - "author": { - "type": "string" + "statcast_first_base_receiving_minimum_split_values": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_first_base_receiving_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_first_base_receiving_runner_states": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_first_base_receiving_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_first_base_receiving_secondary_splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "type": { - "type": "string" + "statcast_first_base_receiving_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newsmax.AuthorResponse": { - "properties": { - "articles": { + "statcast_first_base_receiving_sort_fields": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "statcast_first_base_receiving_split_year_values": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "image_url": { - "type": "string" + "statcast_first_base_receiving_throw_heights": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_first_base_receiving_throw_locations": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newsplatform.ArticleResponse": { - "properties": { - "authors": { + "statcast_first_base_receiving_throw_positions": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "description": { - "type": "string" + "statcast_first_base_receiving_time_bins": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_first_base_receiving_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "paragraphs": { + "statcast_home_runs_categories": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "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" + "statcast_home_runs_minimum_home_runs": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_home_runs_player_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "section": { - "type": "string" + "statcast_home_runs_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_home_runs_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "updated_at": { - "type": "string" + "statcast_home_runs_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newsplatform.HeadlineItem": { - "properties": { - "author": { - "type": "string" + "statcast_home_runs_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_leaderboards": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_max_year": { + "type": "integer" }, - "summary": { - "type": "string" + "statcast_min_year": { + "type": "integer" }, - "title": { - "type": "string" + "statcast_minimum_bbe": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "type": { - "type": "string" + "statcast_oaa_max_year": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newsplatform.HeadlinesResponse": { - "properties": { - "items": { + "statcast_oaa_min_year": { + "type": "integer" + }, + "statcast_oaa_minimums": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "section": { - "type": "string" - } - }, - "type": "object" - }, - "newsplatform.NewsResponse": { - "properties": { - "items": { + "statcast_oaa_positions": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "newsplatform.Section": { - "properties": { - "name": { - "type": "string" }, - "slug": { - "type": "string" + "statcast_oaa_ranges": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newsplatform.SectionsResponse": { - "properties": { - "sections": { + "statcast_oaa_roles": { "items": { - "$ref": "#/definitions/newsplatform.Section" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "newsweek.AuthorArticle": { - "properties": { - "section": { - "type": "string" }, - "section_url": { - "type": "string" + "statcast_oaa_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_oaa_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_oaa_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newsweek.AuthorResponse": { - "properties": { - "articles": { + "statcast_park_factor_bat_sides": { "items": { - "$ref": "#/definitions/newsweek.AuthorArticle" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "bio": { - "type": "string" + "statcast_park_factor_conditions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "email": { - "type": "string" + "statcast_park_factor_dimension_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "has_next_page": { - "type": "boolean" + "statcast_park_factor_parks": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_park_factor_rolling_windows": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "job_title": { - "type": "string" + "statcast_park_factor_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_park_factor_statcast_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "page": { - "type": "integer" + "statcast_park_factor_stats": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "type": "string" + "statcast_park_factor_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newyorker.ArticleResponse": { - "properties": { - "authors": { + "statcast_park_factor_years": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "description": { - "type": "string" + "statcast_percentile_batter_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_percentile_batter_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "is_accessible_for_free": { - "type": "boolean" + "statcast_percentile_comparators": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "is_truncated": { - "type": "boolean" + "statcast_percentile_pitcher_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "paragraphs": { + "statcast_percentile_pitcher_sort_fields": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "published_at": { - "type": "string" + "statcast_percentile_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "section": { - "type": "string" + "statcast_percentile_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_percentile_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "updated_at": { - "type": "string" + "statcast_percentile_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newyorker.AuthorLink": { - "properties": { - "type": { - "type": "string" + "statcast_pitch_arsenal_min_pa": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newyorker.AuthorResponse": { - "properties": { - "articles": { + "statcast_pitch_arsenal_min_pitches": { "items": { - "$ref": "#/definitions/newyorker.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "statcast_pitch_arsenal_pitch_aliases": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "image_url": { - "type": "string" + "statcast_pitch_arsenal_pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "links": { + "statcast_pitch_arsenal_sort_directions": { "items": { - "$ref": "#/definitions/newyorker.AuthorLink" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "name": { - "type": "string" + "statcast_pitch_arsenal_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newyorker.HeadlineItem": { - "properties": { - "author": { - "type": "string" + "statcast_pitch_arsenal_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_pitch_arsenal_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_pitch_arsenals_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_pitch_arsenals_minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_pitch_arsenals_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "type": { - "type": "string" + "statcast_pitch_arsenals_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nike.AvailabilityResponse": { - "properties": { - "count": { + "statcast_pitch_arsenals_spin_cutoff_year": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "group_key": { - "type": "string" - }, - "sizes": { + "statcast_pitch_arsenals_team_abbreviations": { "items": { - "$ref": "#/definitions/nike.SizeAvailability" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "nike.Breadcrumb": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "type": "object" - }, - "nike.CategoriesResponse": { - "properties": { - "categories": { + "statcast_pitch_arsenals_types": { "items": { - "$ref": "#/definitions/nike.TopLevelCategory" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "nike.CategoryGroup": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" + "statcast_pitch_arsenals_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "type": "string" + "statcast_pitch_movement_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "subcategories": { + "statcast_pitch_movement_minimums": { "items": { - "$ref": "#/definitions/nike.CategorySubcategory" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "nike.CategorySubcategory": { - "properties": { - "name": { - "type": "string" }, - "path": { - "type": "string" + "statcast_pitch_movement_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "nike.ColorDetail": { - "properties": { - "color_code": { - "type": "string" + "statcast_pitch_movement_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "color_description": { - "type": "string" + "statcast_pitch_movement_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "currency": { - "type": "string" + "statcast_pitch_movement_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "discount_percentage": { - "type": "integer" + "statcast_pitch_tempo_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "grouping_label": { - "type": "string" + "statcast_pitch_tempo_minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "images": { + "statcast_pitch_tempo_player_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "initial_price": { - "type": "number" + "statcast_pitch_tempo_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "is_buyable": { - "type": "boolean" + "statcast_pitch_tempo_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "price": { - "type": "number" + "statcast_pitch_tempo_split_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "size_chart_url": { - "type": "string" + "statcast_pitch_tempo_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sizes": { + "statcast_pitch_tempo_types": { "items": { - "$ref": "#/definitions/nike.ProductSize" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "style_code": { - "type": "string" + "statcast_pitch_tempo_with_team_only": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "style_color": { - "type": "string" + "statcast_pitch_tempo_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nike.ColorVariant": { - "properties": { - "color_description": { - "type": "string" + "statcast_pitch_timer_chart_sorts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "color_label": { - "type": "string" + "statcast_pitch_timer_include_zeroes": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "currency": { - "type": "string" + "statcast_pitch_timer_minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "discount_percentage": { - "type": "integer" + "statcast_pitch_timer_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_pitch_timer_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "initial_price": { - "type": "number" + "statcast_pitch_timer_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "price": { - "type": "number" + "statcast_pitch_timer_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "type": "string" + "statcast_player_detail_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "style_color": { - "type": "string" + "statcast_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nike.FacetNav": { - "properties": { - "breadcrumbs": { + "statcast_rolling_metrics": { "items": { - "$ref": "#/definitions/nike.Breadcrumb" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "categories": { + "statcast_rolling_roles": { "items": { - "$ref": "#/definitions/nike.FacetOption" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "filters": { + "statcast_rolling_window_pa_values": { "items": { - "$ref": "#/definitions/nike.Filter" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "nike.FacetOption": { - "properties": { - "label": { - "type": "string" }, - "path": { - "type": "string" + "statcast_run_value_groups": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "result_count": { - "type": "integer" + "statcast_run_value_leverages": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "selected": { - "type": "boolean" - } - }, - "type": "object" - }, - "nike.Filter": { - "properties": { - "name": { - "type": "string" + "statcast_run_value_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "options": { + "statcast_run_value_sort_directions": { "items": { - "$ref": "#/definitions/nike.FacetOption" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "nike.ProductDetailResponse": { - "properties": { - "color_code": { - "type": "string" }, - "color_description": { - "type": "string" + "statcast_run_value_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "colors": { + "statcast_run_value_subtypes": { "items": { - "$ref": "#/definitions/nike.ColorVariant" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "currency": { - "type": "string" + "statcast_run_value_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "description": { - "type": "string" + "statcast_run_value_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "discount_percentage": { - "type": "integer" + "statcast_running_game_filters": { + "$ref": "#/definitions/mlb.StatcastRunningGameFilters" }, - "fetched_at": { - "type": "string" + "statcast_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "genders": { + "statcast_sort_fields": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "images": { + "statcast_sprint_speed_minimum_runs": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "initial_price": { - "type": "number" + "statcast_sprint_speed_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "is_buyable": { - "type": "boolean" + "statcast_sprint_speed_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "price": { - "type": "number" + "statcast_sprint_speed_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "product_details": { + "statcast_sprint_speed_sort_fields": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "product_type": { - "type": "string" + "statcast_sprint_speed_team_abbreviations": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "reason_to_buy": { - "type": "string" + "statcast_sprint_speed_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sizes": { + "statcast_sprint_speed_team_sort_fields": { "items": { - "$ref": "#/definitions/nike.ProductSize" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "slug": { - "type": "string" + "statcast_swing_path_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "type": "string" + "statcast_swing_path_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sport_tags": { + "statcast_swing_path_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "style_code": { - "type": "string" + "statcast_swing_timing_flags": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "style_color": { - "type": "string" + "statcast_swing_timing_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "subtitle": { - "type": "string" + "statcast_swing_timing_groups_x": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_swing_timing_groups_y": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nike.ProductDetailsResponse": { - "properties": { - "colors": { + "statcast_swing_timing_groups_z": { "items": { - "$ref": "#/definitions/nike.ColorDetail" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "count": { - "type": "integer" + "statcast_swing_timing_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "description": { - "type": "string" + "statcast_swing_timing_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "statcast_swing_timing_splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "genders": { + "statcast_swing_timing_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "group_key": { - "type": "string" + "statcast_top_performers_years": { + "items": { + "type": "integer" + }, + "type": "array" }, - "product_type": { - "type": "string" + "statcast_year_to_year_comparison_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "reason_to_buy": { - "type": "string" + "statcast_year_to_year_groups": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "type": "string" + "statcast_year_to_year_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "subtitle": { - "type": "string" + "statcast_year_to_year_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "mlb.NamedRef": { + "properties": { + "id": { + "type": "integer" }, - "title": { + "name": { "type": "string" } }, "type": "object" }, - "nike.ProductGroup": { + "mlb.NavigationItem": { "properties": { - "badge_label": { - "type": "string" - }, - "colors": { + "children": { "items": { - "$ref": "#/definitions/nike.ColorVariant" + "$ref": "#/definitions/mlb.NavigationItem" }, "type": "array" }, - "group_key": { - "type": "string" - }, - "product_type": { + "label": { "type": "string" }, - "subtitle": { + "url": { "type": "string" }, - "title": { - "type": "string" + "visible": { + "type": "boolean" } }, "type": "object" }, - "nike.ProductReview": { + "mlb.Play": { "properties": { - "author": { - "type": "string" + "at_bat_index": { + "type": "integer" }, - "body": { - "type": "string" + "batter": { + "$ref": "#/definitions/mlb.NamedRef" }, - "created_at": { + "description": { "type": "string" }, - "headline": { + "event": { "type": "string" }, - "helpful_votes": { - "type": "integer" - }, - "id": { + "event_type": { "type": "string" }, - "location": { - "type": "string" + "events": { + "items": { + "$ref": "#/definitions/mlb.PlayEvent" + }, + "type": "array" }, - "not_helpful_votes": { - "type": "integer" + "half_inning": { + "type": "string" }, - "rating": { + "inning": { "type": "integer" }, - "recommended": { + "is_complete": { "type": "boolean" + }, + "pitcher": { + "$ref": "#/definitions/mlb.NamedRef" } }, "type": "object" }, - "nike.ProductReviewsResponse": { + "mlb.PlayByPlayResponse": { "properties": { - "average_rating": { - "type": "number" - }, - "count": { - "type": "integer" - }, "fetched_at": { "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { + "game_id": { "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" - }, - "reviews": { + "plays": { "items": { - "$ref": "#/definitions/nike.ProductReview" + "$ref": "#/definitions/mlb.Play" }, "type": "array" }, - "slug": { - "type": "string" - }, "source_url": { "type": "string" }, - "style_color": { - "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_reviews": { + "total": { "type": "integer" } }, "type": "object" }, - "nike.ProductSize": { + "mlb.PlayEvent": { "properties": { - "label": { + "description": { "type": "string" }, - "localized_label": { - "type": "string" + "details": { + "additionalProperties": {}, + "type": "object" }, - "sku_id": { + "end_time": { "type": "string" }, - "status": { - "type": "string" - } - }, - "type": "object" - }, - "nike.RecommendationsResponse": { - "properties": { - "count": { + "index": { "type": "integer" }, - "fetched_at": { - "type": "string" + "is_pitch": { + "type": "boolean" }, - "recommendations": { - "items": { - "$ref": "#/definitions/nike.RecommendedProduct" - }, - "type": "array" + "pitch_data": { + "additionalProperties": {}, + "type": "object" }, - "source_url": { + "pitch_number": { + "type": "integer" + }, + "start_time": { "type": "string" }, - "style_color": { + "type": { "type": "string" } }, "type": "object" }, - "nike.RecommendedProduct": { + "mlb.Player": { "properties": { - "currency": { + "active": { + "type": "boolean" + }, + "bat_side": { "type": "string" }, - "image_url": { + "birth_city": { "type": "string" }, - "initial_price": { - "type": "number" + "birth_country": { + "type": "string" }, - "price": { - "type": "number" + "birth_date": { + "type": "string" }, - "price_type": { + "current_age": { + "type": "integer" + }, + "current_team": { + "$ref": "#/definitions/mlb.TeamRef" + }, + "full_name": { "type": "string" }, - "rank": { + "height": { + "type": "string" + }, + "id": { "type": "integer" }, - "style_color": { + "mlb_debut_date": { "type": "string" }, - "style_type": { + "pitch_hand": { "type": "string" }, - "subtitle": { + "position": { "type": "string" }, - "title": { + "position_code": { "type": "string" }, - "url": { + "primary_number": { "type": "string" + }, + "weight": { + "type": "integer" } }, "type": "object" }, - "nike.SearchResponse": { + "mlb.PlayerResponse": { "properties": { - "category": { + "fetched_at": { "type": "string" }, - "count": { - "type": "integer" + "player": { + "$ref": "#/definitions/mlb.Player" }, - "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": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "mlb.PlayerSuggestion": { + "properties": { + "active": { + "type": "boolean" }, - "keyword": { + "boxscore_name": { "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "display_name": { + "type": "string" }, - "products": { + "headshots": { "items": { - "$ref": "#/definitions/nike.ProductGroup" + "$ref": "#/definitions/mlb.ImageRef" }, "type": "array" }, - "source_url": { + "id": { + "type": "integer" + }, + "name": { "type": "string" }, - "total_pages": { + "team_id": { "type": "integer" }, - "total_products": { - "type": "integer" + "team_tri_code": { + "type": "string" + }, + "use_last_name": { + "type": "string" + }, + "use_name": { + "type": "string" } }, "type": "object" }, - "nike.SizeAvailability": { + "mlb.ProspectRanking": { "properties": { - "available": { - "type": "boolean" - }, - "grouping_label": { + "affiliate": { "type": "string" }, - "gtin": { - "type": "string" + "affiliate_id": { + "type": "integer" }, - "label": { - "type": "string" + "age": { + "type": "integer" }, - "localized_label": { + "bats": { "type": "string" }, - "ship": { + "birth_city": { "type": "string" }, - "style_color": { - "type": "string" - } - }, - "type": "object" - }, - "nike.Store": { - "properties": { - "address": { + "birth_country": { "type": "string" }, - "business_concept": { + "birth_date": { "type": "string" }, - "city": { + "college": { "type": "string" }, - "country": { + "draft_pick": { + "type": "integer" + }, + "draft_round": { "type": "string" }, - "distance_miles": { - "type": "number" + "draft_year": { + "type": "integer" }, - "facility_type": { + "eta": { "type": "string" }, - "image_url": { + "headshot_url": { "type": "string" }, - "latitude": { - "type": "number" + "height": { + "type": "string" }, - "longitude": { - "type": "number" + "level": { + "type": "string" }, "name": { "type": "string" }, - "phone": { - "type": "string" + "player_id": { + "type": "integer" }, - "postal_code": { + "position": { "type": "string" }, - "region": { + "rank": { + "type": "integer" + }, + "school": { "type": "string" }, "slug": { "type": "string" }, - "store_concept": { + "team": { "type": "string" }, - "store_number": { - "type": "string" + "team_id": { + "type": "integer" }, - "url": { + "throws": { "type": "string" + }, + "weight": { + "type": "integer" } }, "type": "object" }, - "nike.StoreResponse": { + "mlb.ProspectRankingsResponse": { "properties": { "count": { "type": "integer" @@ -104067,2215 +106236,2314 @@ "fetched_at": { "type": "string" }, - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - }, - "page": { - "type": "integer" - }, - "page_size": { + "limit": { "type": "integer" }, - "radius_miles": { + "offset": { "type": "integer" }, - "source_url": { - "type": "string" - }, - "stores": { + "players": { "items": { - "$ref": "#/definitions/nike.Store" + "$ref": "#/definitions/mlb.ProspectRanking" }, "type": "array" }, - "total_stores": { - "type": "integer" - } - }, - "type": "object" - }, - "nike.SuggestResponse": { - "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "position": { "type": "string" }, "query": { "type": "string" }, - "source_url": { + "sort": { "type": "string" }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "nike.TopLevelCategory": { - "properties": { - "groups": { - "items": { - "$ref": "#/definitions/nike.CategoryGroup" - }, - "type": "array" + "sort_dir": { + "type": "string" }, - "name": { + "source_url": { "type": "string" }, - "path": { + "team_slug": { "type": "string" - } - }, - "type": "object" - }, - "nike.availabilityResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.AvailabilityResponse" + "total": { + "type": "integer" }, - "msg": { - "example": "OK", + "view": { "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "nike.categoriesResponseDoc": { + "mlb.ProspectStat": { "properties": { - "code": { - "example": 200, + "age": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.CategoriesResponse" + "average": { + "type": "string" }, - "msg": { - "example": "OK", + "batting_stats": { + "additionalProperties": {}, + "type": "object" + }, + "blown_saves": { + "type": "integer" + }, + "era": { "type": "string" - } - }, - "type": "object" - }, - "nike.productDetailsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "holds": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.ProductDetailsResponse" + "losses": { + "type": "integer" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "nike.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.ProductDetailResponse" + "pitching_stats": { + "additionalProperties": {}, + "type": "object" }, - "msg": { - "example": "OK", + "player_id": { + "type": "integer" + }, + "position": { "type": "string" - } - }, - "type": "object" - }, - "nike.productReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "rank": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.ProductReviewsResponse" + "saves": { + "type": "integer" }, - "msg": { - "example": "OK", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "nike.recommendationsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.RecommendationsResponse" + "team": { + "type": "string" }, - "msg": { - "example": "OK", + "team_id": { + "type": "integer" + }, + "team_level": { "type": "string" + }, + "wins": { + "type": "integer" } }, "type": "object" }, - "nike.searchResponseDoc": { + "mlb.ProspectStatsResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.SearchResponse" + "date_range": { + "type": "string" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "nike.storesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.StoreResponse" + "limit": { + "type": "integer" }, - "msg": { - "example": "OK", + "list_type": { "type": "string" - } - }, - "type": "object" - }, - "nike.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "min_pa": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.SuggestResponse" + "offset": { + "type": "integer" }, - "msg": { - "example": "OK", + "player_type": { "type": "string" - } - }, - "type": "object" - }, - "ninetofivemac.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/ninetofivemac.HeadlineItem" - }, - "type": "array" }, - "biography": { + "players": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.ProspectStat" }, "type": "array" }, - "image_url": { + "position": { "type": "string" }, - "name": { + "query": { "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/ninetofivemac.AuthorSocialLink" - }, - "type": "array" - }, - "url": { + "source_url": { "type": "string" + }, + "team_id": { + "type": "integer" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "ninetofivemac.AuthorSocialLink": { + "mlb.Record": { "properties": { - "type": { - "type": "string" + "losses": { + "type": "integer" }, - "url": { + "pct": { "type": "string" + }, + "wins": { + "type": "integer" } }, "type": "object" }, - "ninetofivemac.HeadlineItem": { + "mlb.RosterPlayer": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { + "jersey_number": { "type": "string" }, - "summary": { - "type": "string" + "person": { + "$ref": "#/definitions/mlb.NamedRef" }, - "title": { + "position": { "type": "string" }, - "type": { + "position_code": { "type": "string" }, - "url": { + "status": { "type": "string" } }, "type": "object" }, - "npr.ArticleResponse": { + "mlb.RosterResponse": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" + "count": { + "type": "integer" }, - "image_url": { + "fetched_at": { "type": "string" }, - "paragraphs": { + "players": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.RosterPlayer" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "section": { + "roster_type": { "type": "string" }, - "title": { - "type": "string" + "season": { + "type": "integer" }, - "updated_at": { + "source_url": { "type": "string" }, - "url": { - "type": "string" + "team_id": { + "type": "integer" } }, "type": "object" }, - "npr.AuthorArticle": { + "mlb.ScheduleResponse": { "properties": { - "image_url": { - "type": "string" - }, - "published_at": { + "date": { "type": "string" }, - "summary": { + "end_date": { "type": "string" }, - "title": { + "fetched_at": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "npr.AuthorResponse": { - "properties": { - "articles": { + "games": { "items": { - "$ref": "#/definitions/npr.AuthorArticle" + "$ref": "#/definitions/mlb.GameSummary" }, "type": "array" }, - "bio": { + "source_url": { "type": "string" }, - "job_title": { + "start_date": { "type": "string" }, - "name": { - "type": "string" + "team_id": { + "type": "integer" }, - "url": { - "type": "string" + "total_games": { + "type": "integer" } }, "type": "object" }, - "npr.CategoriesResponse": { + "mlb.SearchResponse": { "properties": { - "categories": { + "fetched_at": { + "type": "string" + }, + "players": { "items": { - "$ref": "#/definitions/npr.Category" + "$ref": "#/definitions/mlb.PlayerSuggestion" }, "type": "array" - } - }, - "type": "object" - }, - "npr.Category": { - "properties": { - "name": { - "type": "string" }, - "slug": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "npr.HeadlineItem": { - "properties": { - "author": { + "query": { "type": "string" }, - "published_at": { - "type": "string" + "search_terms": { + "items": { + "$ref": "#/definitions/mlb.TermSuggestion" + }, + "type": "array" }, - "summary": { + "source_url": { "type": "string" }, - "title": { - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/mlb.TeamSuggestion" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "npr.HeadlinesResponse": { - "properties": { - "items": { + "topics": { "items": { - "$ref": "#/definitions/npr.HeadlineItem" + "$ref": "#/definitions/mlb.TopicSuggestion" }, "type": "array" } }, "type": "object" }, - "npr.TopicItem": { + "mlb.StandingsGroup": { "properties": { - "published_at": { - "type": "string" + "division": { + "$ref": "#/definitions/mlb.NamedRef" }, - "summary": { - "type": "string" + "league": { + "$ref": "#/definitions/mlb.NamedRef" }, - "title": { - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/mlb.StandingsTeam" + }, + "type": "array" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "npr.TopicResponse": { + "mlb.StandingsResponse": { "properties": { - "items": { + "date": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "groups": { "items": { - "$ref": "#/definitions/npr.TopicItem" + "$ref": "#/definitions/mlb.StandingsGroup" }, "type": "array" }, - "topic": { - "type": "string" - } - }, - "type": "object" - }, - "npr.articleResponseDoc": { - "properties": { - "code": { - "example": 200, + "season": { "type": "integer" }, - "data": { - "$ref": "#/definitions/npr.ArticleResponse" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "type": { "type": "string" } }, "type": "object" }, - "npr.authorResponseDoc": { + "mlb.StandingsTeam": { "properties": { - "code": { - "example": 200, - "type": "integer" + "away_record": { + "$ref": "#/definitions/mlb.Record" }, - "data": { - "$ref": "#/definitions/npr.AuthorResponse" + "clinched": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "npr.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "division_leader": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/npr.CategoriesResponse" + "division_rank": { + "type": "string" }, - "msg": { - "example": "OK", + "elimination_number": { "type": "string" - } - }, - "type": "object" - }, - "npr.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/npr.HeadlinesResponse" + "expected_record": { + "$ref": "#/definitions/mlb.Record" }, - "msg": { - "example": "OK", + "games_back": { "type": "string" - } - }, - "type": "object" - }, - "npr.topicResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "games_played": { "type": "integer" }, - "data": { - "$ref": "#/definitions/npr.TopicResponse" + "home_record": { + "$ref": "#/definitions/mlb.Record" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "numbeo.CityIndexEntry": { - "properties": { - "city": { - "type": "string" + "last_ten_record": { + "$ref": "#/definitions/mlb.Record" }, - "city_slug": { + "league_rank": { "type": "string" }, - "cost_of_living_index": { - "type": "number" + "losses": { + "type": "integer" }, - "cost_of_living_plus_rent_index": { - "type": "number" + "magic_number": { + "type": "string" }, - "groceries_index": { - "type": "number" + "run_differential": { + "type": "integer" }, - "local_purchasing_power_index": { - "type": "number" + "runs_allowed": { + "type": "integer" }, - "rank": { + "runs_scored": { "type": "integer" }, - "rent_index": { - "type": "number" + "streak": { + "type": "string" }, - "restaurant_price_index": { - "type": "number" + "team": { + "$ref": "#/definitions/mlb.TeamRef" + }, + "wild_card_games_back": { + "type": "string" + }, + "winning_percentage": { + "type": "string" + }, + "wins": { + "type": "integer" } }, "type": "object" }, - "numbeo.CostOfLivingCityResponse": { + "mlb.StatSplit": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/numbeo.PriceCategory" - }, - "type": "array" + "league": { + "$ref": "#/definitions/mlb.NamedRef" }, - "city": { - "type": "string" + "player": { + "$ref": "#/definitions/mlb.NamedRef" }, - "city_slug": { + "position": { "type": "string" }, - "contributors_12mo": { + "rank": { "type": "integer" }, - "country": { + "season": { "type": "string" }, - "last_update": { - "type": "string" + "stats": { + "additionalProperties": {}, + "type": "object" }, - "source_url": { - "type": "string" + "team": { + "$ref": "#/definitions/mlb.TeamRef" } }, "type": "object" }, - "numbeo.CostOfLivingCountryResponse": { + "mlb.StatcastABSChallengeFilters": { "properties": { - "categories": { + "ball_strike": { "items": { - "$ref": "#/definitions/numbeo.PriceCategory" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "cities": { + "breakeven": { "items": { - "$ref": "#/definitions/numbeo.CityIndexEntry" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "contributors_12mo": { - "type": "integer" - }, - "country": { - "type": "string" - }, - "last_update": { - "type": "string" + "challenge_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "numbeo.CountryIndexEntry": { - "properties": { - "cost_of_living_index": { - "type": "number" + "data_counts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "cost_of_living_plus_rent_index": { - "type": "number" + "data_modes": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "country": { - "type": "string" + "game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "groceries_index": { - "type": "number" + "levels": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "local_purchasing_power_index": { - "type": "number" + "leverage": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "rank": { - "type": "integer" + "minimum_challenges": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "rent_index": { - "type": "number" + "pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "restaurant_price_index": { - "type": "number" - } - }, - "type": "object" - }, - "numbeo.IndexRankingEntry": { - "properties": { - "city": { - "type": "string" + "seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "city_slug": { - "type": "string" + "shadow_zones": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "country": { - "type": "string" + "split_year": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "indices": { + "splits": { "items": { - "$ref": "#/definitions/numbeo.NamedValue" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "rank": { - "type": "integer" + "team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" } }, "type": "object" }, - "numbeo.IndexRow": { + "mlb.StatcastABSChallengesOption": { "properties": { - "name": { + "ball_strike": { "type": "string" }, - "qualifier": { + "breakeven": { "type": "string" }, - "value": { - "type": "number" - } - }, - "type": "object" - }, - "numbeo.IndexSection": { - "properties": { - "rows": { + "challenge_team_ids": { "items": { - "$ref": "#/definitions/numbeo.IndexRow" + "type": "string" }, "type": "array" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "numbeo.IndicesCityResponse": { - "properties": { - "city": { - "type": "string" - }, - "city_slug": { + "challenge_type": { "type": "string" }, - "contributors_note": { + "data_count": { "type": "string" }, - "country": { + "data_mode": { "type": "string" }, - "headline_indices": { + "game_types": { "items": { - "$ref": "#/definitions/numbeo.NamedValue" + "type": "string" }, "type": "array" }, - "index": { + "level": { "type": "string" }, - "last_update": { + "leverage": { "type": "string" }, - "price_categories": { + "min_challenges": { + "type": "string" + }, + "min_opponent_challenges": { + "type": "string" + }, + "opponent_team_ids": { "items": { - "$ref": "#/definitions/numbeo.PriceCategory" + "type": "string" }, "type": "array" }, - "sections": { + "pitch_types": { "items": { - "$ref": "#/definitions/numbeo.IndexSection" + "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "numbeo.IndicesCountryResponse": { - "properties": { - "cities": { + "seasons": { "items": { - "$ref": "#/definitions/numbeo.IndexRankingEntry" + "type": "string" }, "type": "array" }, - "contributors_note": { - "type": "string" + "shadow_zones": { + "items": { + "type": "string" + }, + "type": "array" }, - "country": { + "split_year": { "type": "string" }, - "headline_indices": { + "splits": { "items": { - "$ref": "#/definitions/numbeo.NamedValue" + "type": "string" }, "type": "array" - }, - "index": { + } + }, + "type": "object" + }, + "mlb.StatcastABSChallengesResponse": { + "properties": { + "board": { "type": "string" }, - "last_update": { + "fetched_at": { "type": "string" }, - "price_categories": { - "items": { - "$ref": "#/definitions/numbeo.PriceCategory" - }, - "type": "array" + "filters": { + "$ref": "#/definitions/mlb.StatcastABSChallengesOption" }, - "sections": { + "rows": { "items": { - "$ref": "#/definitions/numbeo.IndexSection" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, "source_url": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "numbeo.IndicesRankingsByCountryResponse": { + "mlb.StatcastArmStrengthPlayerResponse": { "properties": { - "countries": { - "items": { - "$ref": "#/definitions/numbeo.IndexRankingEntry" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "index": { + "player_id": { "type": "string" }, "source_url": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.IndicesRankingsResponse": { - "properties": { - "cities": { + }, + "throws": { "items": { - "$ref": "#/definitions/numbeo.IndexRankingEntry" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "index": { - "type": "string" - }, - "period": { - "type": "string" - }, - "scope": { - "type": "string" + "total": { + "type": "integer" }, - "source_url": { + "year": { "type": "string" } }, "type": "object" }, - "numbeo.NamedValue": { + "mlb.StatcastArmStrengthResponse": { "properties": { - "name": { + "board": { "type": "string" }, - "value": { - "type": "number" - } - }, - "type": "object" - }, - "numbeo.PriceCategory": { - "properties": { - "category": { + "fetched_at": { "type": "string" }, - "items": { + "limit": { + "type": "integer" + }, + "min_throws": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/numbeo.PriceItem" + "additionalProperties": {}, + "type": "object" }, "type": "array" - } - }, - "type": "object" - }, - "numbeo.PriceItem": { - "properties": { - "currency_symbol": { + }, + "sort": { "type": "string" }, - "name": { + "sort_dir": { "type": "string" }, - "price": { - "type": "number" + "source_url": { + "type": "string" }, - "range_high": { - "type": "number" + "team_id": { + "type": "string" }, - "range_low": { - "type": "number" + "total": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "year": { + "type": "string" } }, "type": "object" }, - "numbeo.RankingsByCountryResponse": { + "mlb.StatcastArmValueDetailsResponse": { "properties": { - "countries": { + "entity_id": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "plays": { "items": { - "$ref": "#/definitions/numbeo.CountryIndexEntry" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, "source_url": { "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { + "type": "string" } }, "type": "object" }, - "numbeo.RankingsResponse": { + "mlb.StatcastArmValueResponse": { "properties": { - "cities": { - "items": { - "$ref": "#/definitions/numbeo.CityIndexEntry" - }, - "type": "array" + "board": { + "type": "string" }, - "period": { + "end_year": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "scope": { + "game_type": { "type": "string" }, - "source_url": { + "key_base_out": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.costOfLivingCityResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/numbeo.CostOfLivingCityResponse" + "limit": { + "type": "integer" }, - "msg": { - "example": "OK", + "minimum_opps": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.costOfLivingCountryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/numbeo.CostOfLivingCountryResponse" + "offset": { + "type": "integer" }, - "msg": { - "example": "OK", + "q": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.indicesCityResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/numbeo.IndicesCityResponse" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "msg": { - "example": "OK", + "sort": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.indicesCountryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/numbeo.IndicesCountryResponse" }, - "msg": { - "example": "OK", + "sort_dir": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.indicesRankingsByCountryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/numbeo.IndicesRankingsByCountryResponse" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "split": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.indicesRankingsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/numbeo.IndicesRankingsResponse" + "start_year": { + "type": "integer" }, - "msg": { - "example": "OK", + "team_id": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.rankingsByCountryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/numbeo.RankingsByCountryResponse" + "total": { + "type": "integer" }, - "msg": { - "example": "OK", + "type": { "type": "string" + }, + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "numbeo.rankingsResponseDoc": { + "mlb.StatcastBaserunningFilters": { "properties": { - "code": { - "example": 200, - "type": "integer" + "boards": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/numbeo.RankingsResponse" + "game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "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" } }, "type": "object" }, - "nydailynews.AuthorArticle": { + "mlb.StatcastBaserunningOption": { "properties": { - "published_at": { + "board": { "type": "string" }, - "summary": { + "game_type": { "type": "string" }, - "title": { + "key_base_out": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nydailynews.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/nydailynews.AuthorArticle" - }, - "type": "array" + "limit": { + "type": "integer" }, - "bio": { + "n": { "type": "string" }, - "email": { - "type": "string" + "offset": { + "type": "integer" }, - "job_title": { + "pitch_hand": { "type": "string" }, - "name": { + "prior_pk": { "type": "string" }, - "slug": { + "runner_moved": { "type": "string" }, - "twitter": { + "search": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nymag.AuthorArticle": { - "properties": { - "excerpt": { - "type": "string" + "season_end": { + "type": "integer" }, - "published_at": { - "type": "string" + "season_start": { + "type": "integer" }, - "section": { + "sort": { "type": "string" }, - "title": { + "sort_dir": { "type": "string" }, - "url": { + "split": { "type": "string" - } - }, - "type": "object" - }, - "nymag.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/nymag.AuthorArticle" - }, - "type": "array" }, - "bio": { + "target_base": { "type": "string" }, - "job_title": { + "team": { "type": "string" }, - "name": { + "type": { "type": "string" }, - "url": { - "type": "string" + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "nypost.AuthorResponse": { + "mlb.StatcastBaserunningResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { + "board": { "type": "string" }, - "name": { + "fetched_at": { "type": "string" }, - "social_links": { + "filters": { + "$ref": "#/definitions/mlb.StatcastBaserunningOption" + }, + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/nypost.AuthorSocialLink" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "url": { + "source_url": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "nypost.AuthorSocialLink": { + "mlb.StatcastBoardResponse": { "properties": { - "type": { + "board": { "type": "string" }, - "url": { + "end_year": { + "type": "integer" + }, + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "nyt.ArticleResponse": { - "properties": { - "authors": { - "items": { - "type": "string" - }, + }, + "filter_type": { + "type": "string" + }, + "league_average": { + "items": {}, "type": "array" }, - "description": { + "limit": { + "type": "integer" + }, + "minimum": { "type": "string" }, - "image_url": { + "offset": { + "type": "integer" + }, + "position": { "type": "string" }, - "keywords": { + "range": { + "type": "string" + }, + "roles": { "items": { "type": "string" }, "type": "array" }, - "paragraphs": { + "rows": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.StatcastRow" }, "type": "array" }, - "published_at": { + "sort": { "type": "string" }, - "section": { + "sort_dir": { "type": "string" }, - "title": { + "source_url": { "type": "string" }, - "updated_at": { + "split": { "type": "string" }, - "url": { + "start_year": { + "type": "integer" + }, + "team_id": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "type": { "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "nyt.AuthorAboutSection": { + "mlb.StatcastCatcherPopTimeResponse": { "properties": { - "heading": { + "board": { "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "nyt.AuthorArticle": { - "properties": { - "authors": { + "fetched_at": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "min_2b_attempts": { + "type": "string" + }, + "min_3b_attempts": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "rows": { "items": { - "type": "string" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "description": { + "sort": { "type": "string" }, - "image_url": { + "sort_dir": { "type": "string" }, - "title": { + "source_url": { "type": "string" }, - "url": { + "team_id": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "year": { "type": "string" } }, "type": "object" }, - "nyt.AuthorContactItem": { + "mlb.StatcastCatcherStanceResponse": { "properties": { - "label": { + "board": { "type": "string" }, - "url": { + "fetched_at": { "type": "string" }, - "value": { + "game_type": { "type": "string" - } - }, - "type": "object" - }, - "nyt.AuthorResponse": { - "properties": { - "about": { - "items": { - "$ref": "#/definitions/nyt.AuthorAboutSection" - }, - "type": "array" }, - "articles": { + "group_by": { "items": { - "$ref": "#/definitions/nyt.AuthorArticle" + "type": "string" }, "type": "array" }, - "contact": { + "limit": { + "type": "integer" + }, + "min_pitches": { + "type": "string" + }, + "min_results": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/nyt.AuthorContactItem" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "image_url": { + "season_end": { "type": "string" }, - "name": { + "season_start": { "type": "string" }, - "tagline": { + "sort": { "type": "string" }, - "url": { + "sort_dir": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "nyt.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/nyt.Category" - }, - "type": "array" - } - }, - "type": "object" - }, - "nyt.Category": { + "mlb.StatcastCatcherThrowingDetailsResponse": { "properties": { - "name": { + "entity_id": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "sections": { + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/nyt.CategoryLink" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "slug": { + "source_url": { "type": "string" }, - "url": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "nyt.CategoryLink": { + "mlb.StatcastCatcherThrowingResponse": { "properties": { - "name": { - "type": "string" - }, - "slug": { + "board": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nyt.HeadlineItem": { - "properties": { - "author": { + "fetched_at": { "type": "string" }, - "description": { + "game_type": { "type": "string" }, - "image_url": { - "type": "string" + "limit": { + "type": "integer" }, - "published_at": { + "minimum_attempts": { "type": "string" }, - "title": { - "type": "string" + "offset": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nyt.HeadlinesResponse": { - "properties": { - "items": { + "rows": { "items": { - "$ref": "#/definitions/nyt.HeadlineItem" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "section": { + "season_end": { "type": "string" - } - }, - "type": "object" - }, - "nyt.Section": { - "properties": { - "name": { + }, + "season_start": { "type": "string" }, - "slug": { + "sort": { "type": "string" }, - "url": { + "sort_dir": { "type": "string" - } - }, - "type": "object" - }, - "nyt.SectionsResponse": { - "properties": { - "sections": { - "items": { - "$ref": "#/definitions/nyt.Section" - }, - "type": "array" - } - }, - "type": "object" - }, - "nyt.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nyt.ArticleResponse" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "split": { "type": "string" - } - }, - "type": "object" - }, - "nyt.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nyt.AuthorResponse" + "target_base": { + "type": "string" }, - "msg": { - "example": "OK", + "team": { "type": "string" - } - }, - "type": "object" - }, - "nyt.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nyt.CategoriesResponse" + "total": { + "type": "integer" }, - "msg": { - "example": "OK", + "type": { "type": "string" + }, + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "nyt.headlinesResponseDoc": { + "mlb.StatcastFieldingRunValueResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "type": "string" }, - "data": { - "$ref": "#/definitions/nyt.HeadlinesResponse" + "date_end": { + "type": "string" }, - "msg": { - "example": "OK", + "date_start": { "type": "string" - } - }, - "type": "object" - }, - "nyt.sectionsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nyt.SectionsResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "game_type": { "type": "string" - } - }, - "type": "object" - }, - "nzherald.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" }, - "biography": { + "group_by": { "items": { "type": "string" }, "type": "array" }, - "email": { - "type": "string" + "limit": { + "type": "integer" }, - "image_url": { + "minimum": { "type": "string" }, - "job_title": { + "minimum_split": { "type": "string" }, - "location": { - "type": "string" + "offset": { + "type": "integer" }, - "name": { + "position": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "oldnavy.AvailabilityResponse": { - "properties": { - "brand": { + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "season_end": { "type": "string" }, - "count": { - "type": "integer" + "season_start": { + "type": "string" }, - "fetched_at": { + "sort": { "type": "string" }, - "pid": { + "sort_dir": { "type": "string" }, "source_url": { "type": "string" }, - "stores": { + "teams": { "items": { - "$ref": "#/definitions/oldnavy.StoreStockSummary" + "type": "string" }, "type": "array" }, - "style_id": { + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "oldnavy.CategoriesResponse": { + "mlb.StatcastFirstBaseReceivingDetailsResponse": { "properties": { - "brand": { + "fetched_at": { "type": "string" }, - "categories": { + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "player_id": { + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/oldnavy.CategoryNavEntry" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "cid": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, "source_url": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "oldnavy.CategoryColorSummary": { + "mlb.StatcastFirstBaseReceivingResponse": { "properties": { - "back_order_inventory_count": { - "type": "integer" - }, - "back_order_inventory_status": { + "board": { "type": "string" }, - "id": { + "fetched_at": { "type": "string" }, - "image_url": { - "type": "string" + "game_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "inventory_count": { + "limit": { "type": "integer" }, - "inventory_status": { + "minimum": { "type": "string" }, - "name": { + "minimum_split": { "type": "string" }, - "percentage_off": { + "offset": { "type": "integer" }, - "price": { - "type": "number" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "regular_price": { - "type": "number" + "seasons": { + "items": { + "type": "string" + }, + "type": "array" }, - "short_description": { + "sort": { "type": "string" - } - }, - "type": "object" - }, - "oldnavy.CategoryGroup": { - "properties": { - "category_id": { + }, + "sort_direction": { "type": "string" }, - "category_name": { + "source_url": { "type": "string" }, - "items": { + "split_year": { + "type": "string" + }, + "splits": { "items": { - "$ref": "#/definitions/oldnavy.CategoryGroupItem" + "type": "string" }, "type": "array" }, - "sub_category_id": { - "type": "string" + "total": { + "type": "integer" }, - "sub_category_name": { + "type": { "type": "string" } }, "type": "object" }, - "oldnavy.CategoryGroupItem": { + "mlb.StatcastPercentileFilter": { "properties": { - "cc_id": { + "comparator": { "type": "string" }, - "style_id": { + "field": { "type": "string" + }, + "value": { + "type": "number" } }, "type": "object" }, - "oldnavy.CategoryNavEntry": { + "mlb.StatcastPlayerDetailsResponse": { "properties": { - "cid": { + "fetched_at": { "type": "string" }, - "name": { + "player_id": { "type": "string" }, - "url": { + "player_type": { "type": "string" - } - }, - "type": "object" - }, - "oldnavy.CategoryProductSummary": { - "properties": { - "colors": { + }, + "plays": { "items": { - "$ref": "#/definitions/oldnavy.CategoryColorSummary" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "id": { - "type": "string" - }, - "name": { + "source_url": { "type": "string" }, - "review_count": { + "total": { "type": "integer" }, - "review_score": { - "type": "number" - }, - "url": { - "type": "string" - }, - "web_product_type": { - "type": "string" + "year": { + "type": "integer" } }, "type": "object" }, - "oldnavy.CategoryResponse": { + "mlb.StatcastResponse": { "properties": { - "brand": { + "fetched_at": { "type": "string" }, - "categories": { - "items": { - "$ref": "#/definitions/oldnavy.CategoryGroup" - }, - "type": "array" + "limit": { + "type": "integer" }, - "category_id": { + "min_bbe": { "type": "string" }, - "count": { + "offset": { "type": "integer" }, - "facets": { + "position": { + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/oldnavy.Facet" + "$ref": "#/definitions/mlb.StatcastRow" }, "type": "array" }, - "fetched_at": { + "sort": { "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/oldnavy.CategoryProductSummary" - }, - "type": "array" + "sort_dir": { + "type": "string" }, "source_url": { "type": "string" }, - "total_colors": { + "team_id": { "type": "integer" }, - "total_pages": { + "total": { "type": "integer" - } - }, - "type": "object" - }, - "oldnavy.ColorSummary": { - "properties": { - "id": { - "type": "string" }, - "image_url": { - "type": "string" - }, - "name": { + "type": { "type": "string" }, - "percentage_off": { + "year": { "type": "integer" - }, - "price": { - "type": "number" - }, - "regular_price": { - "type": "number" - }, - "short_description": { - "type": "string" } }, "type": "object" }, - "oldnavy.Facet": { + "mlb.StatcastRollingGroup": { "properties": { - "is_range": { - "type": "boolean" + "limit": { + "type": "integer" }, - "label": { - "type": "string" + "offset": { + "type": "integer" }, - "name": { + "role": { "type": "string" }, - "options": { + "rows": { "items": { - "$ref": "#/definitions/oldnavy.FacetOption" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "range_max": { - "type": "number" - }, - "range_min": { - "type": "number" + "total": { + "type": "integer" }, - "type": { - "type": "string" + "window_pa": { + "type": "integer" } }, "type": "object" }, - "oldnavy.FacetOption": { + "mlb.StatcastRow": { "properties": { - "count": { + "entity_id": { + "type": "string" + }, + "metrics": { + "additionalProperties": {}, + "type": "object" + }, + "name": { + "type": "string" + }, + "position": { + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "rank": { "type": "integer" }, - "label": { + "team": { "type": "string" }, - "value": { + "team_id": { "type": "string" } }, "type": "object" }, - "oldnavy.ProductDetailResponse": { + "mlb.StatcastRunningGameDetailsOption": { "properties": { - "brand": { + "entity_id": { "type": "string" }, - "color": { + "game_type": { "type": "string" }, - "description": { - "type": "string" + "limit": { + "type": "integer" }, - "fetched_at": { + "min_pitches": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "offset": { + "type": "integer" }, - "name": { + "pitch_hand": { "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/oldnavy.ProductOffer" - }, - "type": "array" + "prior_pk": { + "type": "string" }, - "pid": { + "runner_moved": { "type": "string" }, - "rating_count": { + "season_end": { "type": "integer" }, - "rating_value": { - "type": "number" - }, - "related_items": { - "items": { - "$ref": "#/definitions/oldnavy.RelatedItem" - }, - "type": "array" + "season_start": { + "type": "integer" }, - "source_url": { + "split": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "oldnavy.ProductOffer": { - "properties": { - "availability": { + "target_base": { "type": "string" }, - "currency": { + "team": { "type": "string" }, - "price": { - "type": "number" - }, - "sku": { + "type": { "type": "string" }, - "url": { - "type": "string" + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "oldnavy.ProductReviewsResponse": { + "mlb.StatcastRunningGameDetailsResponse": { "properties": { - "average_rating": { - "type": "number" - }, - "brand": { + "board": { "type": "string" }, - "count": { + "entity_id": { "type": "integer" }, "fetched_at": { "type": "string" }, - "page": { - "type": "integer" + "filters": { + "$ref": "#/definitions/mlb.StatcastRunningGameDetailsOption" }, - "page_size": { + "limit": { "type": "integer" }, - "pid": { - "type": "string" + "offset": { + "type": "integer" }, - "rating_count": { + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total": { "type": "integer" }, - "rating_histogram": { - "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "type": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.StatcastRunningGameFilters": { + "properties": { + "game_types": { "items": { - "type": "integer" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "recommended_ratio": { - "type": "number" + "minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "reviews": { + "pitch_hands": { "items": { - "$ref": "#/definitions/oldnavy.Review" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "source_url": { - "type": "string" + "prior_pickoffs": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "total_pages": { - "type": "integer" + "runner_moved": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "total_reviews": { - "type": "integer" + "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" }, - "oldnavy.ProductSummary": { + "mlb.StatcastRunningGameOption": { "properties": { - "colors": { - "items": { - "$ref": "#/definitions/oldnavy.ColorSummary" - }, - "type": "array" + "game_type": { + "type": "string" }, - "id": { + "limit": { + "type": "integer" + }, + "min_pitches": { "type": "string" }, - "name": { + "offset": { + "type": "integer" + }, + "pitch_hand": { "type": "string" }, - "price_max": { - "type": "number" + "prior_pk": { + "type": "string" }, - "price_min": { - "type": "number" + "runner_moved": { + "type": "string" }, - "review_count": { + "search": { + "type": "string" + }, + "season_end": { "type": "integer" }, - "review_score": { - "type": "number" + "season_start": { + "type": "integer" }, - "sale_price_max": { - "type": "number" + "sort": { + "type": "string" }, - "sale_price_min": { - "type": "number" + "sort_dir": { + "type": "string" }, - "thumbnail_url": { + "split": { "type": "string" }, - "url": { + "target_base": { "type": "string" }, - "web_product_type": { + "team": { + "type": "string" + }, + "type": { "type": "string" + }, + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "oldnavy.RelatedItem": { + "mlb.StatcastRunningGameResponse": { "properties": { - "name": { + "board": { "type": "string" }, - "pid": { + "fetched_at": { "type": "string" }, - "url": { + "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" } }, "type": "object" }, - "oldnavy.Review": { + "mlb.StatcastSprintSpeedResponse": { "properties": { - "author": { + "board": { "type": "string" }, - "body": { + "fetched_at": { "type": "string" }, - "created_at": { + "limit": { + "type": "integer" + }, + "max_season": { "type": "string" }, - "headline": { + "min_season": { "type": "string" }, - "helpful_votes": { + "minimum_runs": { + "type": "string" + }, + "offset": { "type": "integer" }, - "id": { + "position": { "type": "string" }, - "location": { + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "sort": { "type": "string" }, - "not_helpful_votes": { + "sort_dir": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "type": "string" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "mlb.StatcastSprintSpeedTeamsResponse": { + "properties": { + "board": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "limit": { "type": "integer" }, - "rating": { + "offset": { "type": "integer" }, - "updated_at": { + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "season": { "type": "string" }, - "verified_purchase": { - "type": "boolean" + "sort": { + "type": "string" + }, + "sort_dir": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "oldnavy.SearchResponse": { + "mlb.StatcastTopPerformerCard": { "properties": { - "brand": { + "complete_leaderboard_url": { "type": "string" }, - "count": { - "type": "integer" + "definition_url": { + "type": "string" }, - "facets": { + "id": { + "type": "string" + }, + "leaders": { "items": { - "$ref": "#/definitions/oldnavy.Facet" + "$ref": "#/definitions/mlb.StatcastTopPerformerLeader" }, "type": "array" }, - "fetched_at": { + "metric": { "type": "string" }, - "keyword": { + "player_type": { "type": "string" }, - "page": { + "title": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.StatcastTopPerformerLeader": { + "properties": { + "headshot_url": { + "type": "string" + }, + "player_id": { + "type": "string" + }, + "player_name": { + "type": "string" + }, + "player_url": { + "type": "string" + }, + "rank": { "type": "integer" }, - "page_size": { + "team_id": { + "type": "string" + }, + "team_logo_url": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.StatcastTopPerformersResponse": { + "properties": { + "card_count": { "type": "integer" }, - "products": { + "cards": { "items": { - "$ref": "#/definitions/oldnavy.ProductSummary" + "$ref": "#/definitions/mlb.StatcastTopPerformerCard" }, "type": "array" }, - "source_url": { + "fetched_at": { "type": "string" }, - "total_pages": { - "type": "integer" + "source_url": { + "type": "string" }, - "total_products": { + "year": { "type": "integer" } }, "type": "object" }, - "oldnavy.SizeStock": { + "mlb.StatsResponse": { "properties": { - "fit": { + "fetched_at": { "type": "string" }, - "sku": { + "group": { "type": "string" }, - "status": { + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "player_id": { + "type": "integer" + }, + "season": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "splits": { + "items": { + "$ref": "#/definitions/mlb.StatSplit" + }, + "type": "array" + }, + "team_id": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "oldnavy.Store": { + "mlb.Team": { "properties": { - "address": { + "abbreviation": { "type": "string" }, - "city": { + "active": { + "type": "boolean" + }, + "club_name": { "type": "string" }, - "country": { + "division": { + "$ref": "#/definitions/mlb.NamedRef" + }, + "first_year_of_play": { "type": "string" }, - "distance_miles": { - "type": "number" + "id": { + "type": "integer" }, - "latitude": { - "type": "number" + "league": { + "$ref": "#/definitions/mlb.NamedRef" }, - "longitude": { - "type": "number" + "location_name": { + "type": "string" }, "name": { "type": "string" }, - "phone": { + "season": { + "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": { + "type": "integer" + }, + "team": { + "$ref": "#/definitions/mlb.TeamRef" + }, + "team_stats": { + "additionalProperties": { + "additionalProperties": {}, + "type": "object" + }, + "type": "object" + } + }, + "type": "object" + }, + "mlb.TeamRef": { + "properties": { + "abbreviation": { "type": "string" }, - "postal_code": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.TeamSuggestion": { + "properties": { + "club_name": { "type": "string" }, - "region": { + "display_name": { "type": "string" }, - "specialties": { + "franchise_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "logos": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.ImageRef" }, "type": "array" }, - "url": { + "name": { + "type": "string" + }, + "sport_id": { + "type": "integer" + }, + "team_name": { + "type": "string" + }, + "tri_code": { "type": "string" } }, "type": "object" }, - "oldnavy.StoreResponse": { + "mlb.TeamsResponse": { "properties": { - "brand": { - "type": "string" - }, "count": { "type": "integer" }, "fetched_at": { "type": "string" }, - "lat": { - "type": "number" + "season": { + "type": "integer" }, - "lng": { - "type": "number" + "source_url": { + "type": "string" }, - "search": { + "teams": { + "items": { + "$ref": "#/definitions/mlb.Team" + }, + "type": "array" + } + }, + "type": "object" + }, + "mlb.TermSuggestion": { + "properties": { + "display_name": { "type": "string" }, - "source_url": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.TopicSuggestion": { + "properties": { + "display_name": { "type": "string" }, - "stores": { + "fields": { "items": { - "$ref": "#/definitions/oldnavy.Store" + "type": "integer" }, "type": "array" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "oldnavy.StoreStockSummary": { + "mlb.Transaction": { "properties": { - "address": { + "date": { "type": "string" }, - "city": { + "description": { "type": "string" }, - "distance_miles": { - "type": "number" + "effective_date": { + "type": "string" }, - "name": { + "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" + }, + "mlb.TransactionsResponse": { + "properties": { + "count": { + "type": "integer" }, - "phone": { + "end_date": { "type": "string" }, - "postal_code": { + "fetched_at": { "type": "string" }, - "region": { + "source_url": { "type": "string" }, - "sizes": { + "start_date": { + "type": "string" + }, + "transactions": { "items": { - "$ref": "#/definitions/oldnavy.SizeStock" + "$ref": "#/definitions/mlb.Transaction" }, "type": "array" + } + }, + "type": "object" + }, + "mlb.VenueRef": { + "properties": { + "id": { + "type": "integer" }, - "store_id": { + "name": { "type": "string" } }, "type": "object" }, - "oldnavy.availabilityResponseDoc": { + "mlb.boxscoreResponseDoc": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "$ref": "#/definitions/mlb.BoxscoreResponse" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.discoveryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.AvailabilityResponse" + "$ref": "#/definitions/mlb.MLBDiscoveryResponse" }, "msg": { "example": "OK", @@ -106284,14 +108552,14 @@ }, "type": "object" }, - "oldnavy.categoriesResponseDoc": { + "mlb.editorialFeedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.CategoriesResponse" + "$ref": "#/definitions/mlb.EditorialFeedResponse" }, "msg": { "example": "OK", @@ -106300,14 +108568,14 @@ }, "type": "object" }, - "oldnavy.categoryResponseDoc": { + "mlb.gameResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.CategoryResponse" + "$ref": "#/definitions/mlb.GameResponse" }, "msg": { "example": "OK", @@ -106316,14 +108584,14 @@ }, "type": "object" }, - "oldnavy.productResponseDoc": { + "mlb.leagueLeadersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.ProductDetailResponse" + "$ref": "#/definitions/mlb.LeagueLeadersResponse" }, "msg": { "example": "OK", @@ -106332,14 +108600,28 @@ }, "type": "object" }, - "oldnavy.productReviewsResponseDoc": { + "mlb.playByPlayResponseDoc": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "$ref": "#/definitions/mlb.PlayByPlayResponse" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.playerResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.ProductReviewsResponse" + "$ref": "#/definitions/mlb.PlayerResponse" }, "msg": { "example": "OK", @@ -106348,14 +108630,14 @@ }, "type": "object" }, - "oldnavy.searchResponseDoc": { + "mlb.prospectRankingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.SearchResponse" + "$ref": "#/definitions/mlb.ProspectRankingsResponse" }, "msg": { "example": "OK", @@ -106364,14 +108646,14 @@ }, "type": "object" }, - "oldnavy.storesResponseDoc": { + "mlb.prospectStatsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.StoreResponse" + "$ref": "#/definitions/mlb.ProspectStatsResponse" }, "msg": { "example": "OK", @@ -106380,1165 +108662,1293 @@ }, "type": "object" }, - "opensea.Account": { + "mlb.rosterResponseDoc": { "properties": { - "address": { - "example": "0x46efbaedc92067e6d60e84ed6395099723252496", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "display_name": { - "example": "gordongoner", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.RosterResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.ActivityEvent": { + "mlb.scheduleResponseDoc": { "properties": { - "chain": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "collection_name": { - "type": "string" + "data": { + "$ref": "#/definitions/mlb.ScheduleResponse" }, - "collection_slug": { - "example": "boredapeyachtclub", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "mlb.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "contract_address": { - "type": "string" + "data": { + "$ref": "#/definitions/mlb.SearchResponse" }, - "event_time": { - "example": "2026-08-30T08:38:47.235Z", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "mlb.standingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "from": { - "$ref": "#/definitions/opensea.Account" + "data": { + "$ref": "#/definitions/mlb.StandingsResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "mlb.statcastABSChallengesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "item_image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastABSChallengesResponse" }, - "item_name": { + "msg": { + "example": "OK", "type": "string" - }, - "marketplace": { - "example": "opensea", + } + }, + "type": "object" + }, + "mlb.statcastActiveSpinResponseDoc": { + "properties": { + "board": { + "example": "active-spin", "type": "string" }, - "price": { - "$ref": "#/definitions/opensea.Price" - }, - "quantity": { - "example": "1", + "hand": { + "example": "R", "type": "string" }, - "sale_type": { + "min": { + "example": "50", "type": "string" }, - "to": { - "$ref": "#/definitions/opensea.Account" - }, - "token_id": { - "example": "3766", - "type": "string" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "transaction_hash": { - "type": "string" + "total": { + "example": 712, + "type": "integer" }, - "type": { - "example": "Sale", + "year": { + "example": "2026_spin-based", "type": "string" } }, "type": "object" }, - "opensea.ActivityResponse": { + "mlb.statcastArmAngleResponseDoc": { "properties": { - "events": { + "bat_side": { + "example": "L", + "type": "string" + }, + "board": { + "example": "pitcher-arm-angle", + "type": "string" + }, + "date_end": { + "example": "2026-04-15", + "type": "string" + }, + "date_start": { + "example": "2026-03-25", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "game_types": { + "example": [ + "R" + ], "items": { - "$ref": "#/definitions/opensea.ActivityEvent" + "type": "string" }, "type": "array" }, - "next_page_cursor": { + "group_by": { + "items": { + "type": "string" + }, + "type": "array" + }, + "league_average": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "limit": { + "example": 100, + "type": "integer" + }, + "min": { + "example": "q", "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "min_group_pitches": { + "example": "1", "type": "string" }, - "token_id": { + "offset": { + "example": 0, + "type": "integer" + }, + "pitch_hand": { + "example": "R", "type": "string" - } - }, - "type": "object" - }, - "opensea.CategoriesResponse": { - "properties": { - "categories": { + }, + "pitch_types": { + "example": [ + "FF" + ], "items": { - "$ref": "#/definitions/opensea.Category" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "opensea.Category": { - "properties": { - "children": { + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.CategoryChild" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "slug": { - "example": "collections", + "seasons": { + "example": [ + "2026" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "sort": { + "example": "arm_angle", + "type": "string" + }, + "sort_dir": { + "example": "asc", "type": "string" + }, + "source_url": { + "type": "string" + }, + "teams": { + "example": [ + "147" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "total": { + "example": 276, + "type": "integer" } }, "type": "object" }, - "opensea.CategoryChild": { + "mlb.statcastArmStrengthPlayerResponseDoc": { "properties": { - "display_name": { - "example": "PFPs", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "pfps", + "data": { + "$ref": "#/definitions/mlb.StatcastArmStrengthPlayerResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.Chain": { + "mlb.statcastArmStrengthResponseDoc": { "properties": { - "arch": { - "example": "EVM", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "identifier": { - "example": "ethereum", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastArmStrengthResponse" }, - "name": { - "example": "Ethereum", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.ChainsResponse": { + "mlb.statcastArmValueDetailsResponseDoc": { "properties": { - "chains": { - "items": { - "$ref": "#/definitions/opensea.Chain" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/mlb.StatcastArmValueDetailsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "opensea.ChartPoint": { + "mlb.statcastArmValueResponseDoc": { "properties": { - "currency": { - "example": "ETH", - "type": "string" - }, - "time": { - "example": "2026-08-23T13:11:15.715Z", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "usd": { - "example": 19182.64, - "type": "number" + "data": { + "$ref": "#/definitions/mlb.StatcastArmValueResponse" }, - "value": { - "example": 7.899, - "type": "number" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "opensea.ChartResponse": { + "mlb.statcastBaserunningResponseDoc": { "properties": { - "metric": { - "example": "floor_price", - "type": "string" - }, - "points": { - "items": { - "$ref": "#/definitions/opensea.ChartPoint" - }, - "type": "array" + "code": { + "type": "integer" }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastBaserunningResponse" }, - "timeframe": { - "example": "SEVEN_DAYS", + "msg": { "type": "string" } }, "type": "object" }, - "opensea.Collection": { + "mlb.statcastBatTrackingResponseDoc": { "properties": { - "banner_image_url": { + "board": { "type": "string" }, - "category": { - "example": "PFPS", + "date_end": { "type": "string" }, - "chain": { - "example": "ethereum", + "date_start": { "type": "string" }, - "contract_address": { - "example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", + "fetched_at": { "type": "string" }, - "created_at": { - "example": "2021-04-22T23:14:24.000Z", + "game_type": { "type": "string" }, - "description": { - "type": "string" + "limit": { + "type": "integer" }, - "discord_url": { + "min_group_swings": { "type": "string" }, - "external_url": { + "min_swings": { "type": "string" }, - "floor_price": { - "$ref": "#/definitions/opensea.Price" + "offset": { + "type": "integer" }, - "id": { - "example": "46188685bcac4206ace63c9d017abbb7", - "type": "string" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "image_url": { + "season_end": { "type": "string" }, - "instagram_username": { + "season_start": { "type": "string" }, - "is_verified": { - "example": true, - "type": "boolean" - }, - "name": { - "example": "Bored Ape Yacht Club", + "sort": { "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "sort_dir": { "type": "string" }, - "stats": { - "$ref": "#/definitions/opensea.CollectionStats" + "source_url": { + "type": "string" }, - "top_offer": { - "$ref": "#/definitions/opensea.Price" + "total": { + "type": "integer" }, - "twitter_username": { + "type": { "type": "string" } }, "type": "object" }, - "opensea.CollectionHoldersResponse": { + "mlb.statcastBattedBallResponseDoc": { "properties": { - "holders": { + "board": { + "example": "batted-ball", + "type": "string" + }, + "game_types": { + "example": [ + "R" + ], "items": { - "$ref": "#/definitions/opensea.Holder" + "type": "string" }, "type": "array" }, - "next_page_cursor": { - "type": "string" - }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionItemsResponse": { - "properties": { - "items": { + "league_average": { "items": { - "$ref": "#/definitions/opensea.Item" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "next_page_cursor": { + "min": { + "example": "q", "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "min_split": { + "example": "1", "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionItemsShelfResponse": { - "properties": { - "items": { + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.Item" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "shelf": { - "example": "best_deals", - "type": "string" + "seasons": { + "example": [ + "2026" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { - "example": "boredapeyachtclub", + "show_league_average": { + "example": true, + "type": "boolean" + }, + "total": { + "example": 346, + "type": "integer" + }, + "type": { + "example": "batter", "type": "string" } }, "type": "object" }, - "opensea.CollectionOffersResponse": { + "mlb.statcastBirthdayIndexResponseDoc": { "properties": { - "next_page_cursor": { - "type": "string" - }, - "offers": { - "items": { - "$ref": "#/definitions/opensea.OfferAggregate" - }, - "type": "array" - }, - "slug": { - "example": "boredapeyachtclub", + "date": { + "example": "5-2", "type": "string" }, - "total_currency": { - "example": "WETH", + "fetched_at": { "type": "string" }, - "total_offers": { - "example": 314, + "limit": { + "example": 100, "type": "integer" }, - "total_value_token": { - "example": 55.0032, - "type": "number" + "min_games": { + "example": 1, + "type": "integer" }, - "total_value_usd": { - "example": 135216.02, - "type": "number" - } - }, - "type": "object" - }, - "opensea.CollectionSearchResponse": { - "properties": { - "collections": { + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.CollectionSummary" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "query": { - "example": "ape", + "show_inactives": { + "example": false, + "type": "boolean" + }, + "sort": { + "example": "daysUntil", "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionShelfResponse": { - "properties": { - "collections": { + }, + "sort_dir": { + "example": "asc", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "today_batters": { "items": { - "$ref": "#/definitions/opensea.CollectionSummary" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "next_page_cursor": { - "type": "string" + "today_pitchers": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "shelf": { - "example": "top_movers", + "total": { + "example": 241, + "type": "integer" + }, + "type": { + "example": "batter", "type": "string" } }, "type": "object" }, - "opensea.CollectionStats": { + "mlb.statcastBoardResponseDoc": { "properties": { - "listed_item_count": { - "example": 298, + "code": { + "example": 200, "type": "integer" }, - "one_day": { - "$ref": "#/definitions/opensea.WindowStats" + "data": { + "$ref": "#/definitions/mlb.StatcastBoardResponse" }, - "one_hour": { - "$ref": "#/definitions/opensea.WindowStats" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "mlb.statcastCatcherBlockingDetailsResponseDoc": { + "properties": { + "board": { + "example": "catcher-blocking-details", + "type": "string" }, - "sales": { - "example": 57369, + "entity_id": { + "example": 682626, "type": "integer" }, - "seven_days": { - "$ref": "#/definitions/opensea.WindowStats" - }, - "thirty_days": { - "$ref": "#/definitions/opensea.WindowStats" + "fetched_at": { + "type": "string" }, - "total_supply": { - "example": 9998, + "limit": { + "example": 100, "type": "integer" }, - "unique_item_count": { - "example": 9998, + "offset": { + "example": 0, "type": "integer" }, - "volume_currency": { - "example": "ETH", - "type": "string" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "volume_native": { - "example": 1580610.96, - "type": "number" + "source_url": { + "type": "string" }, - "volume_usd": { - "example": 3756342321.66, - "type": "number" + "total": { + "example": 3319, + "type": "integer" } }, "type": "object" }, - "opensea.CollectionSummary": { + "mlb.statcastCatcherBlockingResponseDoc": { "properties": { - "category": { - "example": "PFPS", - "type": "string" - }, - "chain": { - "example": "ethereum", + "board": { + "example": "catcher-blocking", "type": "string" }, - "contract_address": { + "fetched_at": { "type": "string" }, - "floor_price": { - "$ref": "#/definitions/opensea.Price" - }, - "id": { + "game_type": { + "example": "Regular", "type": "string" }, - "image_url": { + "minimum": { + "example": "q", "type": "string" }, - "is_verified": { - "type": "boolean" - }, - "markets": { + "rows": { "items": { - "$ref": "#/definitions/opensea.MarketListing" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "name": { - "example": "Bored Ape Yacht Club", + "source_url": { "type": "string" }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" + "total": { + "example": 74, + "type": "integer" }, - "stats": { - "$ref": "#/definitions/opensea.CollectionStats" + "type": { + "example": "Cat", + "type": "string" } }, "type": "object" }, - "opensea.CollectionTopSalesResponse": { + "mlb.statcastCatcherFramingDetailsResponseDoc": { "properties": { - "sales": { + "board": { + "example": "catcher-framing-details", + "type": "string" + }, + "entity_id": { + "example": 663886, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "limit": { + "example": 100, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.ActivityEvent" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "slug": { - "example": "boredapeyachtclub", + "source_url": { "type": "string" + }, + "total": { + "example": 8570, + "type": "integer" } }, "type": "object" }, - "opensea.CollectionTrait": { + "mlb.statcastCatcherFramingResponseDoc": { "properties": { - "comparison_operator": { + "board": { + "example": "catcher-framing", "type": "string" }, - "trait_type": { - "example": "Background", + "fetched_at": { "type": "string" }, - "values": { - "items": { - "$ref": "#/definitions/opensea.TraitValue" - }, - "type": "array" - } - }, - "type": "object" - }, - "opensea.CollectionTraitOffersResponse": { - "properties": { - "next_page_cursor": { + "game_type": { + "example": "Regular", "type": "string" }, - "offers": { + "limit": { + "example": 100, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.TraitOfferAggregate" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" - }, - "total_currency": { - "example": "WETH", + "source_url": { "type": "string" }, - "total_offers": { - "example": 6, + "total": { + "example": 56, "type": "integer" }, - "total_value_token": { - "example": 96.13, - "type": "number" - }, - "total_value_usd": { - "example": 96.13, - "type": "number" + "type": { + "example": "catcher", + "type": "string" } }, "type": "object" }, - "opensea.CollectionTraitsResponse": { + "mlb.statcastCatcherPopTimeResponseDoc": { "properties": { - "next_page_cursor": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastCatcherPopTimeResponse" }, - "traits": { - "items": { - "$ref": "#/definitions/opensea.CollectionTrait" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "opensea.CollectionsResponse": { + "mlb.statcastCatcherStanceResponseDoc": { "properties": { - "collections": { - "items": { - "$ref": "#/definitions/opensea.CollectionSummary" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/mlb.StatcastCatcherStanceResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "opensea.DepthLevel": { + "mlb.statcastCatcherThrowingDetailsResponseDoc": { "properties": { - "price": { - "$ref": "#/definitions/opensea.Price" - }, - "quantity": { - "example": 2, + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/mlb.StatcastCatcherThrowingDetailsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "opensea.DepthResponse": { + "mlb.statcastCatcherThrowingResponseDoc": { "properties": { - "chain": { - "type": "string" - }, - "contract_address": { - "type": "string" - }, - "listings": { - "items": { - "$ref": "#/definitions/opensea.DepthLevel" - }, - "type": "array" - }, - "offers": { - "items": { - "$ref": "#/definitions/opensea.DepthLevel" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastCatcherThrowingResponse" }, - "token_id": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.Drop": { + "mlb.statcastFieldingRunValueResponseDoc": { "properties": { - "chain": { - "example": "base", - "type": "string" - }, - "collection": { - "$ref": "#/definitions/opensea.CollectionSummary" + "code": { + "example": 200, + "type": "integer" }, - "contract_address": { - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastFieldingRunValueResponse" }, - "type": { - "example": "Erc721SeaDropV1", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.DropsResponse": { + "mlb.statcastFirstBaseReceivingDetailsResponseDoc": { "properties": { - "drops": { - "items": { - "$ref": "#/definitions/opensea.Drop" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "next_page_cursor": { - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastFirstBaseReceivingDetailsResponse" }, - "type": { - "example": "UPCOMING", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.Holder": { + "mlb.statcastFirstBaseReceivingResponseDoc": { "properties": { - "account": { - "$ref": "#/definitions/opensea.Account" - }, - "quantity": { - "example": 143, + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/mlb.StatcastFirstBaseReceivingResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "opensea.Item": { + "mlb.statcastHomeRunsDetailsResponseDoc": { "properties": { - "best_listing": { - "$ref": "#/definitions/opensea.Price" - }, - "best_offer": { - "$ref": "#/definitions/opensea.Price" - }, - "chain": { - "example": "ethereum", + "cat": { + "example": "adj_xhr", "type": "string" }, - "collection_name": { - "example": "Bored Ape Yacht Club", + "player_id": { + "example": "691718", "type": "string" }, - "collection_slug": { - "example": "boredapeyachtclub", + "player_type": { + "example": "Batter", "type": "string" }, - "contract_address": { - "type": "string" + "plays": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "created_at": { - "type": "string" + "total": { + "example": 61, + "type": "integer" }, - "description": { + "year": { + "example": "2026", + "type": "string" + } + }, + "type": "object" + }, + "mlb.statcastHomeRunsResponseDoc": { + "properties": { + "board": { + "example": "home-runs", "type": "string" }, - "id": { + "cat": { + "example": "adj_xhr", "type": "string" }, - "image_url": { + "min": { + "example": "10", "type": "string" }, - "is_fungible": { - "type": "boolean" + "player_type": { + "example": "Batter", + "type": "string" }, - "last_sale": { - "$ref": "#/definitions/opensea.Price" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "last_sale_at": { + "sort": { + "example": "xhr", "type": "string" }, - "marketplace": { - "example": "opensea", + "sort_dir": { + "example": "desc", "type": "string" }, - "name": { - "example": "#1", + "team": { + "example": "112", "type": "string" }, - "owner": { - "$ref": "#/definitions/opensea.Account" - }, - "rarity_rank": { - "example": 1204, + "total": { + "example": 49, "type": "integer" }, - "token_id": { - "example": "1", + "year": { + "example": "2026", "type": "string" - }, - "traits": { - "items": { - "$ref": "#/definitions/opensea.Trait" - }, - "type": "array" } }, "type": "object" }, - "opensea.ItemOrdersResponse": { + "mlb.statcastParkFactorsResponseDoc": { "properties": { - "chain": { - "example": "ethereum", - "type": "string" - }, - "contract_address": { - "example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - "type": "string" - }, - "next_page_cursor": { + "board": { + "example": "statcast-park-factors", "type": "string" }, - "orders": { + "rows": { "items": { - "$ref": "#/definitions/opensea.Order" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "token_id": { - "example": "1", - "type": "string" - } - }, - "type": "object" - }, - "opensea.ItemOwner": { - "properties": { - "account": { - "$ref": "#/definitions/opensea.Account" + "total": { + "example": 29, + "type": "integer" }, - "quantity": { - "example": "1", + "type": { + "example": "year", "type": "string" } }, "type": "object" }, - "opensea.ItemOwnersResponse": { + "mlb.statcastPercentileResponseDoc": { "properties": { - "chain": { - "example": "ethereum", - "type": "string" - }, - "contract_address": { + "board": { + "example": "percentile-rankings", "type": "string" }, - "has_more": { - "type": "boolean" - }, - "next_page_cursor": { + "fetched_at": { "type": "string" }, - "owners": { + "filters": { "items": { - "$ref": "#/definitions/opensea.ItemOwner" + "$ref": "#/definitions/mlb.StatcastPercentileFilter" }, "type": "array" }, - "token_id": { - "example": "1", - "type": "string" + "limit": { + "example": 100, + "type": "integer" }, - "total_owners": { - "example": 1, + "offset": { + "example": 0, "type": "integer" - } - }, - "type": "object" - }, - "opensea.ItemSearchResponse": { - "properties": { - "items": { + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.Item" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "query": { - "example": "gold", + "sort": { + "example": "percent_rank_xwoba", "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "sort_dir": { + "example": "desc", "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" - } - }, - "type": "object" - }, - "opensea.OfferAggregate": { - "properties": { - "id": { + "team": { + "example": "147", "type": "string" }, - "price": { - "$ref": "#/definitions/opensea.Price" - }, - "total_offers": { - "example": 1, + "total": { + "example": 28, "type": "integer" + }, + "type": { + "example": "batter", + "type": "string" + }, + "year": { + "example": "2026", + "type": "string" } }, "type": "object" }, - "opensea.Order": { + "mlb.statcastPitchArsenalDetailsResponseDoc": { "properties": { - "end_time": { + "pitch_type": { + "example": "FF", "type": "string" }, - "id": { + "player_id": { + "example": "592332", "type": "string" }, - "maker": { - "$ref": "#/definitions/opensea.Account" - }, - "marketplace": { - "example": "opensea", + "player_type": { + "example": "pitcher", "type": "string" }, - "price": { - "$ref": "#/definitions/opensea.Price" + "plays": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "quantity": { - "example": "1", - "type": "string" + "total": { + "example": 416, + "type": "integer" }, - "start_time": { + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "opensea.Price": { + "mlb.statcastPitchArsenalResponseDoc": { "properties": { - "amount": { - "example": 7.85, - "type": "number" + "board": { + "example": "pitch-arsenal-stats", + "type": "string" }, - "chain": { - "example": "ethereum", + "min_pa": { + "example": "1", "type": "string" }, - "contract_address": { - "example": "0x0000000000000000000000000000000000000000", + "min_pitches": { + "example": "q", "type": "string" }, - "currency": { - "example": "ETH", + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "total": { + "example": 523, + "type": "integer" + }, + "type": { + "example": "pitcher", "type": "string" }, - "usd": { - "example": 19295.3, - "type": "number" + "year": { + "example": "2026", + "type": "string" } }, "type": "object" }, - "opensea.Profile": { + "mlb.statcastPitchArsenalsResponseDoc": { "properties": { - "address": { - "example": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", - "type": "string" - }, - "banner_image_url": { - "type": "string" - }, - "display_name": { - "example": "vitalik.eth", + "board": { + "example": "pitch-arsenals", "type": "string" }, - "external_url": { + "hand": { + "example": "R", "type": "string" }, - "image_url": { + "min_pitches": { + "example": "q", "type": "string" }, - "is_verified": { - "type": "boolean" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "kind": { - "example": "WALLET", - "type": "string" + "total": { + "example": 231, + "type": "integer" }, - "twitter_username": { + "type": { + "example": "avg_speed", "type": "string" }, - "username": { + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "opensea.ProfileCollection": { + "mlb.statcastPitchMovementResponseDoc": { "properties": { - "collection": { - "$ref": "#/definitions/opensea.CollectionSummary" + "board": { + "example": "pitch-movement", + "type": "string" }, - "item_count": { - "example": 1, - "type": "integer" + "hand": { + "example": "R", + "type": "string" }, - "total_quantity": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "opensea.ProfileCollectionsResponse": { - "properties": { - "address": { + "min": { + "example": "q", "type": "string" }, - "collections": { + "pitch_type": { + "example": "FF", + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.ProfileCollection" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "next_page_cursor": { + "total": { + "example": 431, + "type": "integer" + }, + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "opensea.ProfileItemsResponse": { + "mlb.statcastPitchTempoPlayerResponseDoc": { "properties": { - "address": { - "example": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", + "entity_id": { + "example": "608718", "type": "string" }, - "items": { + "game_type": { + "example": "Regular", + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.Item" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "next_page_cursor": { + "season_end": { + "example": "2026", "type": "string" }, - "total_items": { - "example": 3441, + "season_start": { + "example": "2026", + "type": "string" + }, + "total": { + "example": 10, "type": "integer" - } - }, - "type": "object" - }, - "opensea.RankedCollection": { - "properties": { - "collection": { - "$ref": "#/definitions/opensea.CollectionSummary" }, - "score": { - "example": "28.3713030851", + "type": { + "example": "Pit", "type": "string" } }, "type": "object" }, - "opensea.RankingsResponse": { + "mlb.statcastPitchTempoResponseDoc": { "properties": { - "collections": { + "board": { + "example": "pitch_tempo", + "type": "string" + }, + "game_type": { + "example": "Regular", + "type": "string" + }, + "minimum_pitches": { + "example": "q", + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.RankedCollection" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "next_page_cursor": { + "season_end": { + "example": "2026", "type": "string" }, - "ranking": { - "example": "TRENDING", + "season_start": { + "example": "2026", "type": "string" }, - "timeframe": { - "example": "ONE_DAY", + "total": { + "example": 348, + "type": "integer" + }, + "type": { + "example": "Pit", "type": "string" } }, "type": "object" }, - "opensea.SocialProofResponse": { + "mlb.statcastPitchTimerResponseDoc": { "properties": { - "notable_collectors": { + "board": { + "example": "pitch-timer-infractions", + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/opensea.Account" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "slug": { - "example": "boredapeyachtclub", + "season": { + "example": "2026", "type": "string" }, - "social_count": { - "example": 5605, + "total": { + "example": 30, "type": "integer" - } - }, - "type": "object" - }, - "opensea.Trait": { - "properties": { - "trait_type": { - "example": "Background", - "type": "string" }, - "value": { - "example": "Orange", + "type": { + "example": "Team", "type": "string" } }, "type": "object" }, - "opensea.TraitOfferAggregate": { + "mlb.statcastPlayerDetailsResponseDoc": { "properties": { - "id": { - "type": "string" - }, - "price": { - "$ref": "#/definitions/opensea.Price" - }, - "total_offers": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "trait_type": { - "example": "Fur", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastPlayerDetailsResponse" }, - "trait_value": { - "example": "Solid Gold", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.TraitValue": { + "mlb.statcastResponseDoc": { "properties": { - "count": { - "example": 1170, + "code": { + "example": 200, "type": "integer" }, - "value": { - "example": "Gray", + "data": { + "$ref": "#/definitions/mlb.StatcastResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.WindowStats": { + "mlb.statcastRollingResponseDoc": { "properties": { - "floor_price_change": { - "example": 0.0065, - "type": "number" + "fetched_at": { + "type": "string" }, - "sales": { - "example": 42, + "groups": { + "items": { + "$ref": "#/definitions/mlb.StatcastRollingGroup" + }, + "type": "array" + }, + "limit": { + "example": 100, "type": "integer" }, - "volume_native": { - "example": 318.4, - "type": "number" + "metric": { + "example": "xwoba", + "type": "string" }, - "volume_usd": { - "example": 782344.1, - "type": "number" + "offset": { + "example": 0, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 2509, + "type": "integer" } }, "type": "object" }, - "opensea.activityResponseDoc": { + "mlb.statcastRunValueResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "example": "swing-take", + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.ActivityResponse" + "group": { + "example": "Batter", + "type": "string" }, - "msg": { - "example": "OK", + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "total": { + "example": 300, + "type": "integer" + }, + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "opensea.categoriesResponseDoc": { + "mlb.statcastRunningGameDetailsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.CategoriesResponse" + "$ref": "#/definitions/mlb.StatcastRunningGameDetailsResponse" }, "msg": { "example": "OK", @@ -107547,14 +109957,14 @@ }, "type": "object" }, - "opensea.chainsResponseDoc": { + "mlb.statcastRunningGameResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.ChainsResponse" + "$ref": "#/definitions/mlb.StatcastRunningGameResponse" }, "msg": { "example": "OK", @@ -107563,14 +109973,14 @@ }, "type": "object" }, - "opensea.chartResponseDoc": { + "mlb.statcastSprintSpeedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.ChartResponse" + "$ref": "#/definitions/mlb.StatcastSprintSpeedResponse" }, "msg": { "example": "OK", @@ -107579,14 +109989,14 @@ }, "type": "object" }, - "opensea.collectionHoldersResponseDoc": { + "mlb.statcastSprintSpeedTeamsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.CollectionHoldersResponse" + "$ref": "#/definitions/mlb.StatcastSprintSpeedTeamsResponse" }, "msg": { "example": "OK", @@ -107595,62 +110005,131 @@ }, "type": "object" }, - "opensea.collectionItemsResponseDoc": { + "mlb.statcastSwingPathResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "example": "swing-path-attack-angle", + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.CollectionItemsResponse" + "game_type": { + "example": "Regular", + "type": "string" }, - "msg": { - "example": "OK", + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "season_end": { + "example": "2026", + "type": "string" + }, + "season_start": { + "example": "2026", + "type": "string" + }, + "total": { + "example": 203, + "type": "integer" + }, + "type": { + "example": "batter", "type": "string" } }, "type": "object" }, - "opensea.collectionOffersResponseDoc": { + "mlb.statcastSwingTimingDetailsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "details": { + "additionalProperties": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "type": "object" }, - "data": { - "$ref": "#/definitions/opensea.CollectionOffersResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "row_id": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "opensea.collectionResponseDoc": { + "mlb.statcastSwingTimingResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "example": "swing-timing-miss-distance", + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.Collection" + "game_types": { + "example": [ + "R" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "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" + }, + "type": { + "example": "batter", "type": "string" } }, "type": "object" }, - "opensea.collectionSearchResponseDoc": { + "mlb.statcastTopPerformersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.CollectionSearchResponse" + "$ref": "#/definitions/mlb.StatcastTopPerformersResponse" }, "msg": { "example": "OK", @@ -107659,30 +110138,72 @@ }, "type": "object" }, - "opensea.collectionShelfResponseDoc": { + "mlb.statcastYearToYearResponseDoc": { "properties": { - "code": { - "example": 200, + "board": { + "example": "year-to-year", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "group": { + "example": "Batter", + "type": "string" + }, + "limit": { + "example": 100, "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionShelfResponse" + "next_year": { + "example": 2026, + "type": "integer" }, - "msg": { - "example": "OK", + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { + "items": { + "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" }, - "opensea.collectionTopSalesResponseDoc": { + "mlb.statsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.CollectionTopSalesResponse" + "$ref": "#/definitions/mlb.StatsResponse" }, "msg": { "example": "OK", @@ -107691,14 +110212,14 @@ }, "type": "object" }, - "opensea.collectionTraitOffersResponseDoc": { + "mlb.teamsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.CollectionTraitOffersResponse" + "$ref": "#/definitions/mlb.TeamsResponse" }, "msg": { "example": "OK", @@ -107707,174 +110228,284 @@ }, "type": "object" }, - "opensea.collectionTraitsResponseDoc": { + "mlb.transactionsResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.CollectionTraitsResponse" + "$ref": "#/definitions/mlb.TransactionsResponse" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "opensea.collectionsResponseDoc": { + "modaoperandi.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "availability": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" }, - "data": { - "$ref": "#/definitions/opensea.CollectionsResponse" + "categories": { + "items": { + "$ref": "#/definitions/modaoperandi.Category" + }, + "type": "array" }, - "msg": { - "example": "OK", + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "designers": { + "items": { + "$ref": "#/definitions/modaoperandi.Designer" + }, + "type": "array" + }, + "gender": { "type": "string" + }, + "sizes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sorts": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "opensea.depthResponseDoc": { + "modaoperandi.Category": { "properties": { - "code": { - "example": 200, - "type": "integer" + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.DepthResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "total_items": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "opensea.dropsResponseDoc": { + "modaoperandi.Designer": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/opensea.DropsResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" + }, + "total_items": { + "type": "integer" } }, "type": "object" }, - "opensea.itemOrdersResponseDoc": { + "modaoperandi.DesignersResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.ItemOrdersResponse" + "designers": { + "items": { + "$ref": "#/definitions/modaoperandi.Designer" + }, + "type": "array" }, - "msg": { - "example": "OK", + "gender": { "type": "string" } }, "type": "object" }, - "opensea.itemOwnersResponseDoc": { + "modaoperandi.Detail": { "properties": { - "code": { - "example": 200, - "type": "integer" + "availability": { + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.ItemOwnersResponse" + "color": { + "type": "string" }, - "msg": { - "example": "OK", + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "designer": { + "type": "string" + }, + "details": { + "type": "string" + }, + "id": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "sizes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "opensea.itemResponseDoc": { + "modaoperandi.Facets": { "properties": { - "code": { - "example": 200, - "type": "integer" + "availability": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" }, - "data": { - "$ref": "#/definitions/opensea.Item" + "categories": { + "items": { + "$ref": "#/definitions/modaoperandi.Category" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "designers": { + "items": { + "$ref": "#/definitions/modaoperandi.Designer" + }, + "type": "array" + }, + "sizes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sorts": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "opensea.itemSearchResponseDoc": { + "modaoperandi.Product": { "properties": { - "code": { - "example": 200, - "type": "integer" + "availability": { + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.ItemSearchResponse" + "color": { + "type": "string" }, - "msg": { - "example": "OK", + "currency": { + "type": "string" + }, + "designer": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "url": { "type": "string" } }, "type": "object" }, - "opensea.itemsShelfResponseDoc": { + "modaoperandi.SearchResponse": { "properties": { - "code": { - "example": 200, + "category": { + "type": "string" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionItemsShelfResponse" + "facets": { + "$ref": "#/definitions/modaoperandi.Facets" }, - "msg": { - "example": "OK", + "gender": { "type": "string" - } - }, - "type": "object" - }, - "opensea.profileCollectionsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.ProfileCollectionsResponse" + "page": { + "type": "integer" }, - "msg": { - "example": "OK", + "products": { + "items": { + "$ref": "#/definitions/modaoperandi.Product" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "opensea.profileItemsResponseDoc": { + "modaoperandi.categoriesDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.ProfileItemsResponse" + "$ref": "#/definitions/modaoperandi.CategoriesResponse" }, "msg": { "example": "OK", @@ -107883,14 +110514,14 @@ }, "type": "object" }, - "opensea.profileResponseDoc": { + "modaoperandi.designersDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.Profile" + "$ref": "#/definitions/modaoperandi.DesignersResponse" }, "msg": { "example": "OK", @@ -107899,14 +110530,14 @@ }, "type": "object" }, - "opensea.rankingsResponseDoc": { + "modaoperandi.productDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.RankingsResponse" + "$ref": "#/definitions/modaoperandi.Detail" }, "msg": { "example": "OK", @@ -107915,14 +110546,14 @@ }, "type": "object" }, - "opensea.socialProofResponseDoc": { + "modaoperandi.searchDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.SocialProofResponse" + "$ref": "#/definitions/modaoperandi.SearchResponse" }, "msg": { "example": "OK", @@ -107931,592 +110562,653 @@ }, "type": "object" }, - "opentable.Cuisine": { + "moncler.CategoriesResponse": { "properties": { - "id": { - "type": "string" - }, - "name": { - "example": "Steakhouse", - "type": "string" - }, - "primary": { - "type": "boolean" + "categories": { + "items": { + "$ref": "#/definitions/moncler.Category" + }, + "type": "array" } }, "type": "object" }, - "opentable.Menu": { + "moncler.Category": { "properties": { - "currency": { + "category_id": { "type": "string" }, - "sections": { + "children": { "items": { - "$ref": "#/definitions/opentable.MenuSection" + "$ref": "#/definitions/moncler.Category" }, "type": "array" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "opentable.MenuItem": { - "properties": { "description": { "type": "string" }, - "price": { + "name": { "type": "string" }, - "title": { + "parent_id": { "type": "string" } }, "type": "object" }, - "opentable.MenuSection": { + "moncler.CategoryResponse": { "properties": { - "items": { + "category_id": { + "type": "string" + }, + "facets": { "items": { - "$ref": "#/definitions/opentable.MenuItem" + "$ref": "#/definitions/moncler.SearchFacet" }, "type": "array" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "opentable.MenusResponse": { - "properties": { - "menus": { + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "results": { "items": { - "$ref": "#/definitions/opentable.Menu" + "$ref": "#/definitions/moncler.SearchHit" }, "type": "array" }, - "restaurant_id": { - "type": "string" - } - }, - "type": "object" - }, - "opentable.PriceBand": { - "properties": { - "band": { - "example": "3", - "type": "string" + "sort_options": { + "items": { + "$ref": "#/definitions/moncler.SortOption" + }, + "type": "array" }, - "label": { - "example": "$31 to $50", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "opentable.RestaurantResponse": { + "moncler.Product": { "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" - }, - "city": { - "type": "string" - }, - "country": { + "brand": { "type": "string" }, - "country_code": { + "care_instructions": { "type": "string" }, - "cuisines": { - "items": { - "$ref": "#/definitions/opentable.Cuisine" - }, - "type": "array" - }, - "currency_code": { + "collection": { "type": "string" }, - "description": { + "color": { "type": "string" }, - "dining_style": { + "composition": { "type": "string" }, - "dress_code": { + "currency": { "type": "string" }, - "email": { + "gender": { "type": "string" }, - "features": { + "images": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.ProductImageGroup" }, "type": "array" }, - "hours": { - "type": "string" + "in_stock": { + "type": "boolean" }, - "id": { + "long_description": { "type": "string" }, - "latitude": { - "type": "number" + "made_in": { + "type": "string" }, - "line1": { + "master_id": { "type": "string" }, - "line2": { + "name": { "type": "string" }, - "longitude": { + "price": { "type": "number" }, - "max_advance_days": { - "type": "integer" - }, - "max_party_size": { - "type": "integer" - }, - "name": { + "product_id": { "type": "string" }, - "phone_number": { + "product_url": { "type": "string" }, - "photos_count": { - "type": "integer" + "related_products": { + "description": "RelatedProducts are \"styled with\" items Moncler's own product page\nsuggests alongside this product.", + "items": { + "$ref": "#/definitions/moncler.RelatedProduct" + }, + "type": "array" }, - "postal_code": { + "short_description": { "type": "string" }, - "price_band": { - "$ref": "#/definitions/opentable.PriceBand" - }, - "reviews": { - "$ref": "#/definitions/opentable.ReviewSummary" + "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." }, - "state": { - "type": "string" + "stock_level": { + "type": "number" }, - "timeslots": { + "variants": { "items": { - "$ref": "#/definitions/opentable.Timeslot" + "$ref": "#/definitions/moncler.ProductVariant" }, "type": "array" }, - "website": { - "type": "string" + "variation_attributes": { + "items": { + "$ref": "#/definitions/moncler.ProductVariationAttribute" + }, + "type": "array" } }, "type": "object" }, - "opentable.Review": { + "moncler.ProductImage": { "properties": { - "author": { - "type": "string" - }, - "author_metro": { - "type": "string" - }, - "id": { + "alt": { "type": "string" }, - "posted_date": { + "url": { "type": "string" - }, - "recommended": { - "type": "boolean" - }, - "reservation_date": { + } + }, + "type": "object" + }, + "moncler.ProductImageGroup": { + "properties": { + "color": { "type": "string" }, - "statistics": { - "$ref": "#/definitions/opentable.ReviewStatistics" + "images": { + "items": { + "$ref": "#/definitions/moncler.ProductImage" + }, + "type": "array" }, - "text": { + "view_type": { "type": "string" } }, "type": "object" }, - "opentable.ReviewStatistics": { + "moncler.ProductVariant": { "properties": { - "ambience": { - "type": "number" + "orderable": { + "type": "boolean" }, - "food": { + "price": { "type": "number" }, - "noise": { - "type": "number" + "product_id": { + "type": "string" }, - "overall_rating": { - "type": "number" + "variation_values": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + }, + "moncler.ProductVariationAttribute": { + "properties": { + "id": { + "type": "string" }, - "service": { - "type": "number" + "label": { + "type": "string" }, - "value": { - "type": "number" + "values": { + "items": { + "$ref": "#/definitions/moncler.ProductVariationValue" + }, + "type": "array" } }, "type": "object" }, - "opentable.ReviewSummary": { + "moncler.ProductVariationValue": { "properties": { - "ambience": { - "type": "number" - }, - "count": { - "type": "integer" + "label": { + "type": "string" }, - "food": { - "type": "number" + "orderable": { + "type": "boolean" }, - "noise": { - "type": "number" + "value": { + "type": "string" + } + }, + "type": "object" + }, + "moncler.RelatedProduct": { + "properties": { + "currency": { + "type": "string" }, - "overall_rating": { - "example": 4.8, - "type": "number" + "image_url": { + "type": "string" }, - "review_count": { - "type": "integer" + "name": { + "type": "string" }, - "service": { + "price": { "type": "number" }, - "value": { - "type": "number" + "product_id": { + "type": "string" } }, "type": "object" }, - "opentable.ReviewsResponse": { + "moncler.SearchFacet": { "properties": { - "page": { - "type": "integer" + "id": { + "type": "string" }, - "restaurant_id": { + "label": { "type": "string" }, - "reviews": { + "values": { "items": { - "$ref": "#/definitions/opentable.Review" + "$ref": "#/definitions/moncler.SearchFacetValue" }, "type": "array" } }, "type": "object" }, - "opentable.SearchResponse": { + "moncler.SearchFacetValue": { "properties": { - "results": { - "items": { - "$ref": "#/definitions/opentable.SearchResult" - }, - "type": "array" + "count": { + "type": "integer" }, - "term": { + "label": { + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "opentable.SearchResult": { + "moncler.SearchHit": { "properties": { - "availability_date_time": { - "description": "AvailabilityDateTime/Timeslots mirror RestaurantResponse's inline\navailability -- search returns the same nested shape per result.", + "currency": { "type": "string" }, - "city": { + "image_alt": { "type": "string" }, - "country": { + "image_url": { "type": "string" }, - "description": { + "name": { "type": "string" }, - "id": { - "type": "string" + "orderable": { + "type": "boolean" }, - "latitude": { + "price": { "type": "number" }, - "line1": { - "type": "string" - }, - "line2": { + "product_id": { "type": "string" }, - "longitude": { + "stock_level": { "type": "number" }, - "name": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "state": { - "type": "string" - }, - "timeslots": { + "variant_ids": { "items": { - "$ref": "#/definitions/opentable.Timeslot" + "type": "string" }, "type": "array" } }, "type": "object" }, - "opentable.Timeslot": { + "moncler.SearchResponse": { "properties": { - "available": { - "type": "boolean" - }, - "date_time": { - "example": "2026-08-03T19:00", - "type": "string" + "facets": { + "items": { + "$ref": "#/definitions/moncler.SearchFacet" + }, + "type": "array" }, - "points": { + "limit": { "type": "integer" }, - "price_amount": { + "offset": { "type": "integer" }, - "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.", + "query": { "type": "string" }, - "type": { - "example": "Standard", - "type": "string" - } - }, - "type": "object" - }, - "opentable.menusResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "results": { + "items": { + "$ref": "#/definitions/moncler.SearchHit" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/opentable.MenusResponse" + "sort_options": { + "items": { + "$ref": "#/definitions/moncler.SortOption" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "opentable.restaurantResponseDoc": { + "moncler.SizeGuide": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/opentable.RestaurantResponse" + "country_sizes": { + "items": { + "$ref": "#/definitions/moncler.SizeGuideCountrySizes" + }, + "type": "array" }, - "msg": { - "example": "OK", + "description": { "type": "string" + }, + "rows": { + "items": { + "$ref": "#/definitions/moncler.SizeGuideRow" + }, + "type": "array" } }, "type": "object" }, - "opentable.reviewsResponseDoc": { + "moncler.SizeGuideCountrySizes": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/opentable.ReviewsResponse" - }, - "msg": { - "example": "OK", + "country": { "type": "string" + }, + "sizes": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "opentable.searchResponseDoc": { + "moncler.SizeGuideMeasurement": { "properties": { - "code": { - "example": 200, - "type": "integer" + "cm": { + "type": "string" }, - "data": { - "$ref": "#/definitions/opentable.SearchResponse" + "inches": { + "type": "string" }, - "msg": { - "example": "OK", + "label": { "type": "string" } }, "type": "object" }, - "otto.CategoriesResponse": { + "moncler.SizeGuideRow": { "properties": { - "categories": { + "measurements": { "items": { - "$ref": "#/definitions/otto.Category" + "$ref": "#/definitions/moncler.SizeGuideMeasurement" }, "type": "array" }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "size": { "type": "string" } }, "type": "object" }, - "otto.Category": { + "moncler.SortOption": { "properties": { - "name": { + "id": { "type": "string" }, - "url": { + "label": { "type": "string" } }, "type": "object" }, - "otto.Product": { + "moncler.Store": { "properties": { - "brand": { + "address": { "type": "string" }, - "colors": { + "city": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "country_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "hours": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.StoreHours" }, "type": "array" }, - "currency": { - "type": "string" - }, - "images": { + "hours_schedule": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.StoreDaySchedule" }, "type": "array" }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, "name": { "type": "string" }, - "price": { - "type": "number" + "phone": { + "type": "string" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "postal_code": { + "type": "string" }, - "url": { + "region": { + "type": "string" + }, + "state_code": { + "type": "string" + }, + "store_id": { + "type": "string" + }, + "store_type": { "type": "string" } }, "type": "object" }, - "otto.ProductResponse": { + "moncler.StoreDaySchedule": { "properties": { - "browser_rendered": { + "day": { + "type": "string" + }, + "is_closed": { "type": "boolean" }, - "fetched_at": { + "slots": { + "items": { + "$ref": "#/definitions/moncler.StoreHoursSlot" + }, + "type": "array" + } + }, + "type": "object" + }, + "moncler.StoreHours": { + "properties": { + "day": { "type": "string" }, - "product": { - "$ref": "#/definitions/otto.Product" + "text": { + "type": "string" } }, "type": "object" }, - "otto.ProductSummary": { + "moncler.StoreHoursSlot": { "properties": { - "brand": { + "end": { "type": "string" }, - "currency": { + "start": { "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" }, - "image": { - "type": "string" + "phrases": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { + "query": { "type": "string" }, - "price": { - "type": "number" + "terms": { + "items": { + "$ref": "#/definitions/moncler.SuggestedTerm" + }, + "type": "array" + } + }, + "type": "object" + }, + "moncler.SuggestedCategory": { + "properties": { + "category_id": { + "type": "string" }, - "product_id": { + "name": { "type": "string" }, - "url": { + "parent_category_name": { "type": "string" + } + }, + "type": "object" + }, + "moncler.SuggestedTerm": { + "properties": { + "corrected": { + "type": "boolean" }, - "variation_id": { + "term": { "type": "string" } }, "type": "object" }, - "otto.SearchResponse": { + "moncler.categoriesResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/moncler.CategoriesResponse" }, - "offset": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "moncler.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/otto.ProductSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/moncler.CategoryResponse" }, - "query": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "moncler.productResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { + "data": { + "$ref": "#/definitions/moncler.Product" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "otto.categoriesResponseDoc": { + "moncler.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/otto.CategoriesResponse" + "$ref": "#/definitions/moncler.SearchResponse" }, "msg": { "example": "OK", @@ -108525,14 +111217,14 @@ }, "type": "object" }, - "otto.productResponseDoc": { + "moncler.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/otto.ProductResponse" + "$ref": "#/definitions/moncler.StoresResponse" }, "msg": { "example": "OK", @@ -108541,14 +111233,14 @@ }, "type": "object" }, - "otto.searchResponseDoc": { + "moncler.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/otto.SearchResponse" + "$ref": "#/definitions/moncler.SuggestResponse" }, "msg": { "example": "OK", @@ -108557,11 +111249,11 @@ }, "type": "object" }, - "pagesix.AuthorResponse": { + "moneycontrol.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/moneycontrol.HeadlineItem" }, "type": "array" }, @@ -108571,7 +111263,7 @@ }, "type": "array" }, - "image_url": { + "job_title": { "type": "string" }, "name": { @@ -108579,7 +111271,7 @@ }, "social_links": { "items": { - "$ref": "#/definitions/pagesix.AuthorSocialLink" + "$ref": "#/definitions/moneycontrol.AuthorSocialLink" }, "type": "array" }, @@ -108589,7 +111281,7 @@ }, "type": "object" }, - "pagesix.AuthorSocialLink": { + "moneycontrol.AuthorSocialLink": { "properties": { "type": { "type": "string" @@ -108600,27 +111292,45 @@ }, "type": "object" }, - "pandamart.CategoriesResponse": { + "moneycontrol.HeadlineItem": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/pandamart.Category" - }, - "type": "array" + "author": { + "type": "string" }, - "code": { + "image_url": { "type": "string" }, - "market": { + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "pandamart.Category": { + "motleyfool.AuthorResponse": { "properties": { - "id": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, "image_url": { "type": "string" @@ -108628,2003 +111338,2240 @@ "name": { "type": "string" }, - "product_count": { - "type": "integer" - }, - "sub_categories": { - "items": { - "$ref": "#/definitions/pandamart.Category" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "pandamart.Chain": { + "nationafrica.AuthorArticle": { "properties": { - "code": { + "premium": { + "type": "boolean" + }, + "summary": { "type": "string" }, - "name": { + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "pandamart.Product": { + "nationafrica.AuthorResponse": { "properties": { - "description": { - "type": "string" - }, - "discount_badge": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/nationafrica.AuthorArticle" + }, + "type": "array" }, - "id": { + "bio": { "type": "string" }, "image_url": { "type": "string" }, - "is_available": { - "type": "boolean" - }, "name": { "type": "string" }, - "original_price": { - "type": "number" - }, - "price": { - "type": "number" - }, - "sku": { + "slug": { "type": "string" }, - "stock_amount": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "pandamart.ProductAttributes": { + "national.AuthorResponse": { "properties": { - "base_content_value": { - "type": "number" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "base_unit": { + "image_url": { "type": "string" }, - "nutrition_grade": { + "name": { "type": "string" }, - "price_per_base_unit": { - "type": "number" + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "pandamart.ProductDetailResponse": { + "nationalpost.AuthorArticle": { "properties": { - "attributes": { - "$ref": "#/definitions/pandamart.ProductAttributes" - }, - "category_id": { - "type": "string" - }, - "code": { - "type": "string" - }, - "description": { + "category": { "type": "string" }, - "discount_badge": { + "summary": { "type": "string" }, - "id": { + "title": { "type": "string" }, - "image_url": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "nationalpost.AuthorResponse": { + "properties": { + "article_count": { + "type": "integer" }, - "is_available": { - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/nationalpost.AuthorArticle" + }, + "type": "array" }, - "market": { + "bio": { "type": "string" }, "name": { "type": "string" }, - "original_price": { - "type": "number" - }, - "price": { - "type": "number" - }, - "sku": { + "slug": { "type": "string" }, - "stock_amount": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "pandamart.ProductShelf": { + "nbc.ArticleResponse": { "properties": { - "items": { + "authors": { "items": { - "$ref": "#/definitions/pandamart.Product" + "type": "string" }, "type": "array" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "pandamart.ProductsResponse": { - "properties": { - "code": { + "description": { "type": "string" }, - "item_count": { - "type": "integer" - }, - "market": { + "image_url": { "type": "string" }, - "shelves": { + "paragraphs": { "items": { - "$ref": "#/definitions/pandamart.ProductShelf" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "pandamart.SearchResponse": { - "properties": { - "available_count": { - "type": "integer" }, - "market": { + "published_at": { "type": "string" }, - "offset": { - "type": "integer" + "section": { + "type": "string" }, - "returned_count": { - "type": "integer" + "title": { + "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/pandamart.Store" - }, - "type": "array" + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "pandamart.Store": { + "nbc.AuthorArticle": { "properties": { - "address": { + "image_url": { "type": "string" }, - "budget": { - "type": "integer" - }, - "chain": { - "$ref": "#/definitions/pandamart.Chain" - }, - "city": { + "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" }, - "code": { + "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" }, - "distance_km": { - "type": "number" - }, - "has_discount": { - "type": "boolean" - }, - "hero_image_url": { + "title": { "type": "string" }, - "is_delivery_available": { - "type": "boolean" - }, - "is_pickup_available": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "nbc.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/nbc.AuthorArticle" + }, + "type": "array" }, - "minimum_delivery_fee": { - "type": "number" + "bio": { + "type": "string" }, - "minimum_delivery_time_minutes": { - "type": "number" + "image_url": { + "type": "string" }, - "minimum_order_amount": { - "type": "number" + "job_title": { + "type": "string" }, "name": { "type": "string" }, - "tags": { + "social_links": { "items": { - "$ref": "#/definitions/pandamart.Tag" + "$ref": "#/definitions/nbc.AuthorSocialLink" }, "type": "array" }, - "timezone": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "nbc.AuthorSocialLink": { + "properties": { + "platform": { "type": "string" }, - "web_path": { + "url": { "type": "string" } }, "type": "object" }, - "pandamart.StoreResponse": { + "nbc.HeadlineItem": { "properties": { - "address": { + "author": { "type": "string" }, - "budget": { - "type": "integer" - }, - "chain": { - "$ref": "#/definitions/pandamart.Chain" - }, - "city": { + "image_url": { "type": "string" }, - "code": { + "published_at": { "type": "string" }, - "distance_km": { - "type": "number" - }, - "has_discount": { - "type": "boolean" - }, - "hero_image_url": { + "summary": { "type": "string" }, - "is_delivery_available": { - "type": "boolean" - }, - "is_pickup_available": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "market": { + "title": { "type": "string" }, - "minimum_delivery_fee": { - "type": "number" - }, - "minimum_delivery_time_minutes": { - "type": "number" - }, - "minimum_order_amount": { - "type": "number" - }, - "name": { + "url": { "type": "string" - }, - "tags": { + } + }, + "type": "object" + }, + "nbc.HeadlinesResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/pandamart.Tag" + "$ref": "#/definitions/nbc.HeadlineItem" }, "type": "array" }, - "timezone": { - "type": "string" - }, - "web_path": { + "section": { "type": "string" } }, "type": "object" }, - "pandamart.StoreSearchResponse": { + "nbc.NewsResponse": { "properties": { - "code": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "limit": { - "type": "integer" - }, - "market": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "products": { + "items": { "items": { - "$ref": "#/definitions/pandamart.Product" + "$ref": "#/definitions/nbc.HeadlineItem" }, "type": "array" - }, - "query": { - "type": "string" - }, - "sort": { - "type": "string" - }, - "total_products": { - "type": "integer" } }, "type": "object" }, - "pandamart.Tag": { + "nbc.Section": { "properties": { - "code": { + "name": { "type": "string" }, - "text": { + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "pandamart.categoriesResponseDoc": { + "nbc.SectionsResponse": { "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" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "sections": { + "items": { + "$ref": "#/definitions/nbc.Section" + }, + "type": "array" } }, "type": "object" }, - "pandamart.productDetailResponseDoc": { + "nbc.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/pandamart.ProductDetailResponse" + "$ref": "#/definitions/nbc.ArticleResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "pandamart.productsResponseDoc": { + "nbc.authorResponseDoc": { "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/pandamart.ProductsResponse" + "$ref": "#/definitions/nbc.AuthorResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "pandamart.searchResponseDoc": { + "nbc.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/pandamart.SearchResponse" + "$ref": "#/definitions/nbc.HeadlinesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "pandamart.storeResponseDoc": { + "nbc.newsResponseDoc": { "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/pandamart.StoreResponse" + "$ref": "#/definitions/nbc.NewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "pandamart.storeSearchResponseDoc": { + "nbc.sectionsResponseDoc": { "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/pandamart.StoreSearchResponse" + "$ref": "#/definitions/nbc.SectionsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.AtWorkDropOff": { + "ndtv.ArticleResponse": { "properties": { - "cutoff_time": { - "example": "09:00", + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "image_url": { "type": "string" }, - "drop_off_time": { - "example": "10:45", + "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" }, - "panera.AtWorkLocation": { + "ndtv.AuthorArticle": { "properties": { - "active": { - "example": true, - "type": "boolean" + "image_url": { + "type": "string" }, - "city": { - "example": "Fenton", + "published_on": { "type": "string" }, - "contact_name": { + "section": { "type": "string" }, - "contact_phone": { + "summary": { "type": "string" }, - "country": { - "example": "US", + "title": { "type": "string" }, - "drop_off_schedule": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ndtv.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/panera.AtWorkDropOff" + "$ref": "#/definitions/ndtv.AuthorArticle" }, "type": "array" }, - "id": { - "example": "P2U-000320", + "bio": { "type": "string" }, - "latitude": { - "example": 38.5401336, - "type": "number" + "image_url": { + "type": "string" }, - "lead_time_minutes": { - "example": 90, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { "type": "integer" }, - "location_type": { - "example": "Office/Production Facility/Other", + "same_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ndtv.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "longitude": { - "example": -90.4772361, - "type": "number" + "image_url": { + "type": "string" }, - "name": { - "example": "Panera Bread Support Center", + "published_at": { "type": "string" }, - "postal_code": { - "example": "63026", + "summary": { "type": "string" }, - "service_cafe_id": { - "example": "600668", + "title": { "type": "string" }, - "state": { - "example": "MO", + "type": { "type": "string" }, - "street": { - "example": "1400 S Hwy Dr", + "url": { "type": "string" } }, "type": "object" }, - "panera.AtWorkLocationsResponse": { + "ndtv.LatestVideosResponse": { "properties": { - "count": { - "example": 2, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "locations": { + "items": { "items": { - "$ref": "#/definitions/panera.AtWorkLocation" + "$ref": "#/definitions/ndtv.VideoCard" }, "type": "array" }, - "source_url": { - "type": "string" + "page": { + "type": "integer" } }, "type": "object" }, - "panera.CafeResponse": { + "ndtv.LiveBlogCard": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "cafe_id": { - "example": 601447, - "type": "integer" + "image_url": { + "type": "string" }, - "city": { - "example": "Addison", + "published_at": { "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).", - "items": { - "type": "string" - }, - "type": "array" + "summary": { + "type": "string" }, - "fetched_at": { + "title": { "type": "string" }, - "fulfillment": { - "description": "Fulfillment is one entry per channel Panera publishes availability\nfor at this cafe.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ndtv.LiveBlogResponse": { + "properties": { + "authors": { "items": { - "$ref": "#/definitions/panera.Fulfillment" + "type": "string" }, "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, - "type": "boolean" - }, - "phone": { - "example": "630-250-4952", + "description": { "type": "string" }, - "postal_code": { - "example": "60101", + "image_url": { "type": "string" }, - "source_url": { + "published_at": { "type": "string" }, - "state": { - "example": "IL", + "section": { "type": "string" }, - "street": { - "example": "1600 West Lake Street", + "title": { "type": "string" }, - "timezone": { - "example": "America/Chicago", + "updated_at": { "type": "string" }, - "upcoming_hours": { - "description": "UpcomingHours is the published storefront schedule for the next\ncalendar week, with concrete dates rather than abstract weekdays.", + "updates": { "items": { - "$ref": "#/definitions/panera.UpcomingDay" + "$ref": "#/definitions/ndtv.LiveBlogUpdate" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "panera.CateringCategory": { + "ndtv.LiveBlogUpdate": { "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.", + "authors": { "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "name": { - "example": "Sandwiches", + "body": { "type": "string" }, - "sort_weight": { - "type": "integer" + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "panera.CateringDeliveryInfoResponse": { + "ndtv.LiveBlogsResponse": { "properties": { - "available_dates": { + "items": { "items": { - "$ref": "#/definitions/panera.CateringDeliverySlotDay" + "$ref": "#/definitions/ndtv.LiveBlogCard" }, "type": "array" }, - "cafe_id": { - "example": 606477, + "page": { "type": "integer" + } + }, + "type": "object" + }, + "ndtv.SearchResponse": { + "properties": { + "has_more": { + "type": "boolean" }, - "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/ndtv.HeadlineItem" }, "type": "array" }, - "min_order_amount": { - "example": 50, - "type": "number" + "page": { + "type": "integer" }, - "source_url": { + "query": { "type": "string" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "panera.CateringDeliveryLeadTime": { + "ndtv.VideoCard": { "properties": { - "is_large_order_tier": { - "example": true, - "type": "boolean" + "duration": { + "type": "string" }, - "lead_time_minutes": { - "example": 240, - "type": "integer" + "image_url": { + "type": "string" }, - "min_order_amount": { - "example": 750, - "type": "number" + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "panera.CateringDeliverySlotDay": { + "ndtv.VideoCategoriesResponse": { "properties": { - "date": { - "example": "2026-09-10", - "type": "string" - }, - "ranges": { + "categories": { "items": { - "$ref": "#/definitions/panera.HourRange" + "$ref": "#/definitions/ndtv.VideoCategory" }, "type": "array" } }, "type": "object" }, - "panera.CateringMenuItem": { + "ndtv.VideoCategory": { "properties": { - "allergens": { - "$ref": "#/definitions/panera.MenuAllergens" + "name": { + "type": "string" }, - "customizable": { - "example": true, - "type": "boolean" + "slug": { + "type": "string" }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ndtv.VideoResponse": { + "properties": { "description": { "type": "string" }, - "image_key": { + "duration": { "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" + "image_url": { + "type": "string" }, - "item_id": { - "example": 647093, - "type": "integer" + "published_at": { + "type": "string" }, - "name": { - "example": "Ciabatta Sausage, Egg & Cheese Sandwich", + "title": { "type": "string" }, - "nutrients": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ndtv.VideosResponse": { + "properties": { + "category": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/panera.MenuNutrient" + "$ref": "#/definitions/ndtv.VideoCard" }, "type": "array" }, - "portion": { - "example": "Individual", - "type": "string" - }, - "price": { - "example": 10.99, - "type": "number" - }, - "product_type": { - "example": "SANDWICH", - "type": "string" + "page": { + "type": "integer" } }, "type": "object" }, - "panera.CateringMenuResponse": { + "news18.AuthorResponse": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "categories": { + "biography": { "items": { - "$ref": "#/definitions/panera.CateringCategory" + "type": "string" }, "type": "array" }, - "count": { - "example": 257, - "type": "integer" + "image_url": { + "type": "string" }, - "fetched_at": { + "name": { "type": "string" }, - "items": { + "social_links": { "items": { - "$ref": "#/definitions/panera.CateringMenuItem" + "$ref": "#/definitions/news18.AuthorSocialLink" }, "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "panera.DayHours": { + "news18.AuthorSocialLink": { "properties": { - "day_of_week": { - "example": "Monday", + "type": { "type": "string" }, - "ranges": { - "items": { - "$ref": "#/definitions/panera.HourRange" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "panera.Fulfillment": { + "newscomau.AuthorResponse": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "hours": { + "articles": { "items": { - "$ref": "#/definitions/panera.DayHours" + "$ref": "#/definitions/newscomau.HeadlineItem" }, "type": "array" }, - "lead_time_minutes": { - "example": 20, - "type": "integer" - }, - "open_now": { - "example": true, - "type": "boolean" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": { - "example": "delivery", - "type": "string" - } - }, - "type": "object" - }, - "panera.GeocodeResponse": { - "properties": { - "address": { - "example": "Chicago, IL", + "image_url": { "type": "string" }, - "count": { - "example": 1, - "type": "integer" + "job_title": { + "type": "string" }, - "fetched_at": { + "name": { "type": "string" }, - "results": { + "social_urls": { "items": { - "$ref": "#/definitions/panera.GeocodeResult" + "type": "string" }, "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "panera.GeocodeResult": { + "newscomau.HeadlineItem": { "properties": { - "city": { - "example": "Chicago", + "author": { "type": "string" }, - "country": { - "example": "US", + "image_url": { "type": "string" }, - "formatted_address": { - "example": "Chicago, IL US", + "published_at": { "type": "string" }, - "latitude": { - "example": 41.85003, - "type": "number" + "summary": { + "type": "string" }, - "longitude": { - "example": -87.65005, - "type": "number" + "title": { + "type": "string" }, - "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" + "type": { + "type": "string" }, - "state": { - "example": "IL", + "url": { "type": "string" } }, "type": "object" }, - "panera.HourRange": { + "newsmax.AuthorResponse": { "properties": { - "close": { - "example": "21:00", + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { "type": "string" }, - "open": { - "example": "06:00", + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "panera.ItemDetailResponse": { + "newsplatform.ArticleResponse": { "properties": { - "allergens": { - "$ref": "#/definitions/panera.MenuAllergens" - }, - "cafe_id": { - "example": 601447, - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, "description": { "type": "string" }, - "fetched_at": { - "type": "string" - }, - "ingredient_statement": { - "type": "string" - }, - "item_id": { - "example": 650115, - "type": "integer" - }, - "name": { - "example": "Almond Pastry", + "image_url": { "type": "string" }, - "nutrients": { + "paragraphs": { "items": { - "$ref": "#/definitions/panera.MenuNutrient" + "type": "string" }, "type": "array" }, - "sizes": { - "items": { - "$ref": "#/definitions/panera.ItemDetailSize" - }, - "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" }, - "source_url": { + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "panera.ItemDetailSize": { - "properties": { - "calories": { - "example": 120, - "type": "number" }, - "is_default": { - "example": true, - "type": "boolean" + "section": { + "type": "string" }, - "item_id": { - "example": 646541, - "type": "integer" + "title": { + "type": "string" }, - "name": { - "example": "Regular", + "updated_at": { "type": "string" }, - "price": { - "example": 3.49, - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "panera.ItemOption": { + "newsplatform.HeadlineItem": { "properties": { - "allergens": { - "$ref": "#/definitions/panera.MenuAllergens" + "author": { + "type": "string" }, - "default_qty": { - "example": 1, - "type": "integer" + "image_url": { + "type": "string" }, - "image_key": { - "example": "pecans-whole-r", + "published_at": { "type": "string" }, - "is_default": { - "example": true, - "type": "boolean" + "summary": { + "type": "string" }, - "item_id": { - "example": 4266, - "type": "integer" + "title": { + "type": "string" }, - "variants": { + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newsplatform.HeadlinesResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/panera.ItemOptionVariant" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" + }, + "section": { + "type": "string" } }, "type": "object" }, - "panera.ItemOptionGroup": { + "newsplatform.NewsResponse": { "properties": { - "group_id": { - "example": 1080, - "type": "integer" - }, - "max_allowed": { - "example": 5, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "newsplatform.Section": { + "properties": { + "name": { + "type": "string" }, - "min_allowed": { - "example": 0, - "type": "integer" + "slug": { + "type": "string" }, - "options": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newsplatform.SectionsResponse": { + "properties": { + "sections": { "items": { - "$ref": "#/definitions/panera.ItemOption" + "$ref": "#/definitions/newsplatform.Section" }, "type": "array" } }, "type": "object" }, - "panera.ItemOptionVariant": { + "newsweek.AuthorArticle": { "properties": { - "item_id": { - "example": 5741, - "type": "integer" + "section": { + "type": "string" }, - "price": { - "example": 0.69, - "type": "number" + "section_url": { + "type": "string" }, - "variant_type": { - "example": "Light", + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "panera.ItemOptionsResponse": { + "newsweek.AuthorResponse": { "properties": { - "cafe_id": { - "example": 601447, + "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": { "type": "integer" }, - "fetched_at": { + "slug": { "type": "string" }, - "groups": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newyorker.ArticleResponse": { + "properties": { + "authors": { "items": { - "$ref": "#/definitions/panera.ItemOptionGroup" + "type": "string" }, "type": "array" }, - "item_id": { - "example": 643423, - "type": "integer" + "description": { + "type": "string" }, - "source_url": { + "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" + }, + "updated_at": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "panera.LocationCafe": { + "newyorker.AuthorLink": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" - }, - "city": { - "example": "Addison", + "type": { "type": "string" }, - "country_code": { - "example": "US", + "url": { "type": "string" + } + }, + "type": "object" + }, + "newyorker.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newyorker.HeadlineItem" + }, + "type": "array" }, - "features": { - "description": "Features are Panera's own per-cafe capability flags that are true for\nthis cafe (e.g. hasDriveThru, hasDelivery, hasCurbside, hasKiosk).", + "biography": { "items": { "type": "string" }, "type": "array" }, - "latitude": { - "example": 41.948594, - "type": "number" + "image_url": { + "type": "string" }, - "longitude": { - "example": -88.026398, - "type": "number" + "links": { + "items": { + "$ref": "#/definitions/newyorker.AuthorLink" + }, + "type": "array" }, "name": { - "example": "Addison - W Lake St east of Rohlwing Rd", "type": "string" }, - "phone": { - "example": "630-250-4952", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newyorker.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "postal_code": { - "example": "60101", + "image_url": { "type": "string" }, - "state": { - "example": "IL", + "published_at": { "type": "string" }, - "street": { - "example": "1600 West Lake Street", + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "panera.LocationCity": { + "nike.AvailabilityResponse": { "properties": { - "cafe_count": { - "example": 1, + "count": { "type": "integer" }, - "cafes": { + "fetched_at": { + "type": "string" + }, + "group_key": { + "type": "string" + }, + "sizes": { "items": { - "$ref": "#/definitions/panera.LocationCafe" + "$ref": "#/definitions/nike.SizeAvailability" }, "type": "array" }, - "city": { - "example": "Addison", + "source_url": { "type": "string" } }, "type": "object" }, - "panera.LocationsResponse": { + "nike.Breadcrumb": { "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.", + "name": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "type": "object" + }, + "nike.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/panera.LocationCity" + "$ref": "#/definitions/nike.TopLevelCategory" }, "type": "array" }, - "city": { - "example": "Addison", - "type": "string" - }, - "count": { - "example": 50, - "type": "integer" - }, "fetched_at": { "type": "string" }, "source_url": { "type": "string" + } + }, + "type": "object" + }, + "nike.CategoryGroup": { + "properties": { + "name": { + "type": "string" }, - "state": { - "example": "IL", + "path": { "type": "string" }, - "states": { - "description": "States lists every state Panera serves, with its cafe count. Populated\nonly when neither state nor city is given.", + "slug": { + "type": "string" + }, + "subcategories": { "items": { - "$ref": "#/definitions/panera.StateSummary" + "$ref": "#/definitions/nike.CategorySubcategory" }, "type": "array" } }, "type": "object" }, - "panera.MenuAllergenEntry": { + "nike.CategorySubcategory": { "properties": { - "id": { - "example": "TREENUTS", + "name": { "type": "string" }, - "name": { - "example": "Tree Nuts", + "path": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "panera.MenuAllergens": { + "nike.ColorDetail": { "properties": { - "contains": { + "color_code": { + "type": "string" + }, + "color_description": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "discount_percentage": { + "type": "integer" + }, + "grouping_label": { + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/panera.MenuAllergenEntry" + "type": "string" }, "type": "array" }, - "may_contain": { + "initial_price": { + "type": "number" + }, + "is_buyable": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "size_chart_url": { + "type": "string" + }, + "sizes": { "items": { - "$ref": "#/definitions/panera.MenuAllergenEntry" + "$ref": "#/definitions/nike.ProductSize" }, "type": "array" + }, + "style_code": { + "type": "string" + }, + "style_color": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "panera.MenuCategory": { + "nike.ColorVariant": { "properties": { - "cat_id": { - "example": 20, + "color_description": { + "type": "string" + }, + "color_label": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "discount_percentage": { "type": "integer" }, - "image_key": { - "example": "panini-and-sandwiches", + "image_url": { "type": "string" }, - "item_ids": { - "description": "ItemIDs are the items directly under this category. Look them up in\nthe response's top-level Items list.", + "initial_price": { + "type": "number" + }, + "price": { + "type": "number" + }, + "slug": { + "type": "string" + }, + "style_color": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "nike.FacetNav": { + "properties": { + "breadcrumbs": { "items": { - "type": "integer" + "$ref": "#/definitions/nike.Breadcrumb" }, "type": "array" }, - "name": { - "example": "Sandwiches", + "categories": { + "items": { + "$ref": "#/definitions/nike.FacetOption" + }, + "type": "array" + }, + "filters": { + "items": { + "$ref": "#/definitions/nike.Filter" + }, + "type": "array" + } + }, + "type": "object" + }, + "nike.FacetOption": { + "properties": { + "label": { "type": "string" }, - "sort_weight": { - "example": 6, + "path": { + "type": "string" + }, + "result_count": { "type": "integer" }, - "subcategories": { + "selected": { + "type": "boolean" + } + }, + "type": "object" + }, + "nike.Filter": { + "properties": { + "name": { + "type": "string" + }, + "options": { "items": { - "$ref": "#/definitions/panera.MenuCategory" + "$ref": "#/definitions/nike.FacetOption" }, "type": "array" } }, "type": "object" }, - "panera.MenuItem": { + "nike.ProductDetailResponse": { "properties": { - "allergens": { - "$ref": "#/definitions/panera.MenuAllergens" - }, - "customizable": { - "example": true, - "type": "boolean" + "color_code": { + "type": "string" }, - "description": { + "color_description": { "type": "string" }, - "image_key": { - "example": "strawberry-poppyseed-salad-pantry-reno-half", + "colors": { + "items": { + "$ref": "#/definitions/nike.ColorVariant" + }, + "type": "array" + }, + "currency": { "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" + "description": { + "type": "string" }, - "item_id": { - "example": 1805, + "discount_percentage": { "type": "integer" }, - "name": { - "example": "Half Strawberry Poppyseed Salad", + "fetched_at": { "type": "string" }, - "nutrients": { + "genders": { "items": { - "$ref": "#/definitions/panera.MenuNutrient" + "type": "string" + }, + "type": "array" + }, + "images": { + "items": { + "type": "string" }, "type": "array" }, + "initial_price": { + "type": "number" + }, + "is_buyable": { + "type": "boolean" + }, "price": { - "example": 6.19, "type": "number" }, + "product_details": { + "items": { + "type": "string" + }, + "type": "array" + }, "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.", + "reason_to_buy": { + "type": "string" + }, + "sizes": { "items": { - "type": "string" + "$ref": "#/definitions/nike.ProductSize" }, "type": "array" }, - "wellness": { - "description": "Wellness are Panera's own dietary labels (e.g. Vegan, Vegetarian,\nGluten Conscious).", + "slug": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "sport_tags": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "panera.MenuNutrient": { - "properties": { - "name": { - "example": "Calories", + }, + "style_code": { "type": "string" }, - "unit": { - "example": "Cal", + "style_color": { "type": "string" }, - "value": { - "example": 580, - "type": "number" + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "panera.MenuResponse": { + "nike.ProductDetailsResponse": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" - }, - "categories": { + "colors": { "items": { - "$ref": "#/definitions/panera.MenuCategory" + "$ref": "#/definitions/nike.ColorDetail" }, "type": "array" }, "count": { - "example": 343, "type": "integer" }, + "description": { + "type": "string" + }, "fetched_at": { "type": "string" }, - "items": { + "genders": { "items": { - "$ref": "#/definitions/panera.MenuItem" + "type": "string" }, "type": "array" }, + "group_key": { + "type": "string" + }, + "product_type": { + "type": "string" + }, + "reason_to_buy": { + "type": "string" + }, "source_url": { "type": "string" + }, + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "panera.QuantityRule": { + "nike.ProductGroup": { "properties": { - "item_ids": { + "badge_label": { + "type": "string" + }, + "colors": { "items": { - "type": "integer" + "$ref": "#/definitions/nike.ColorVariant" }, "type": "array" }, - "name": { - "example": "Souffle", + "group_key": { "type": "string" }, - "scope": { - "example": "group", + "product_type": { "type": "string" }, - "windows": { - "items": { - "$ref": "#/definitions/panera.QuantityRuleWindow" - }, - "type": "array" + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "panera.QuantityRuleWindow": { + "nike.ProductReview": { "properties": { - "from_offset_days": { - "example": 0, + "author": { + "type": "string" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "headline": { + "type": "string" + }, + "helpful_votes": { "type": "integer" }, - "max_quantity": { - "example": 6, + "id": { + "type": "string" + }, + "location": { + "type": "string" + }, + "not_helpful_votes": { "type": "integer" }, - "to_offset_days": { - "example": 2, + "rating": { "type": "integer" + }, + "recommended": { + "type": "boolean" } }, "type": "object" }, - "panera.QuantityRulesResponse": { + "nike.ProductReviewsResponse": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" + "average_rating": { + "type": "number" }, "count": { - "example": 3, "type": "integer" }, "fetched_at": { "type": "string" }, - "rules": { + "page": { + "type": "integer" + }, + "page_size": { + "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": { - "$ref": "#/definitions/panera.QuantityRule" + "type": "integer" }, "type": "array" }, + "reviews": { + "items": { + "$ref": "#/definitions/nike.ProductReview" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, "source_url": { "type": "string" + }, + "style_color": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_reviews": { + "type": "integer" } }, "type": "object" }, - "panera.RetiredProduct": { + "nike.ProductSize": { "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", - "type": "string" - }, - "description": { + "label": { "type": "string" }, - "image_key": { + "localized_label": { "type": "string" }, - "item_id": { - "example": 650699, - "type": "integer" - }, - "name": { - "example": "Italian Steak & Mozz", + "sku_id": { "type": "string" }, - "portion": { - "example": "Whole", + "status": { "type": "string" } }, "type": "object" }, - "panera.RetiredProductsResponse": { + "nike.RecommendationsResponse": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" - }, "count": { - "example": 332, "type": "integer" }, "fetched_at": { "type": "string" }, - "items": { + "recommendations": { "items": { - "$ref": "#/definitions/panera.RetiredProduct" + "$ref": "#/definitions/nike.RecommendedProduct" }, "type": "array" }, "source_url": { "type": "string" + }, + "style_color": { + "type": "string" } }, "type": "object" }, - "panera.StateSummary": { + "nike.RecommendedProduct": { "properties": { - "cafe_count": { - "example": 85, + "currency": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "initial_price": { + "type": "number" + }, + "price": { + "type": "number" + }, + "price_type": { + "type": "string" + }, + "rank": { "type": "integer" }, - "country_code": { - "example": "US", + "style_color": { "type": "string" }, - "state": { - "example": "IL", + "style_type": { "type": "string" - } - }, - "type": "object" - }, - "panera.TimeSlotWindow": { - "properties": { - "end_time": { - "example": "2026-09-10T11:15:00-05:00", + }, + "subtitle": { "type": "string" }, - "start_time": { - "example": "2026-09-10T11:10:00-05:00", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "panera.TimeSlotsResponse": { + "nike.SearchResponse": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" - }, - "close": { - "example": "21:00", + "category": { "type": "string" }, "count": { - "example": 178, "type": "integer" }, - "date": { - "example": "2026-09-10", - "type": "string" + "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" }, - "open": { - "example": "06:00", + "keyword": { "type": "string" }, - "source_url": { - "type": "string" + "page": { + "type": "integer" }, - "windows": { + "page_size": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/panera.TimeSlotWindow" + "$ref": "#/definitions/nike.ProductGroup" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_products": { + "type": "integer" } }, "type": "object" }, - "panera.UpcomingDay": { + "nike.SizeAvailability": { "properties": { - "close": { - "example": "21:00", + "available": { + "type": "boolean" + }, + "grouping_label": { "type": "string" }, - "closed": { - "example": false, - "type": "boolean" + "gtin": { + "type": "string" }, - "date": { - "example": "2026-09-02", + "label": { "type": "string" }, - "day_of_week": { - "example": "Wednesday", + "localized_label": { "type": "string" }, - "open": { - "example": "06:00", + "ship": { + "type": "string" + }, + "style_color": { "type": "string" } }, "type": "object" }, - "panera.UpsellSuggestion": { + "nike.Store": { "properties": { - "item_id": { - "example": 7392, - "type": "integer" + "address": { + "type": "string" }, - "item_name": { - "example": "Bacon Turkey Bravo Sandwich on Thin Tom Basil - Retail - Half Portion", + "business_concept": { "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/panera.UpsellSuggestionItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "panera.UpsellSuggestionItem": { - "properties": { - "item_id": { - "example": 801215, - "type": "integer" + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "distance_miles": { + "type": "number" + }, + "facility_type": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" }, "name": { - "example": "Extra Turkey", + "type": "string" + }, + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "store_concept": { + "type": "string" + }, + "store_number": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "panera.UpsellSuggestionsResponse": { + "nike.StoreResponse": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" - }, "count": { - "example": 513, "type": "integer" }, "fetched_at": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/panera.UpsellSuggestion" - }, - "type": "array" + "lat": { + "type": "number" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "panera.atWorkLocationsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "lng": { + "type": "number" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.AtWorkLocationsResponse" + "page_size": { + "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", + "radius_miles": { "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.CafeResponse" + "source_url": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "stores": { + "items": { + "$ref": "#/definitions/nike.Store" + }, + "type": "array" + }, + "total_stores": { + "type": "integer" } }, "type": "object" }, - "panera.cateringDeliveryInfoResponseDoc": { + "nike.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", + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.CateringDeliveryInfoResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "query": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "panera.cateringMenuResponseDoc": { + "nike.TopLevelCategory": { "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" + "groups": { + "items": { + "$ref": "#/definitions/nike.CategoryGroup" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/panera.CateringMenuResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "path": { + "type": "string" } }, "type": "object" }, - "panera.geocodeResponseDoc": { + "nike.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", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/panera.GeocodeResponse" + "$ref": "#/definitions/nike.AvailabilityResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.itemDetailResponseDoc": { + "nike.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/panera.ItemDetailResponse" + "$ref": "#/definitions/nike.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.itemOptionsResponseDoc": { + "nike.productDetailsResponseDoc": { "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.ItemOptionsResponse" + "$ref": "#/definitions/nike.ProductDetailsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.locationsResponseDoc": { + "nike.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.LocationsResponse" + "$ref": "#/definitions/nike.ProductDetailResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.menuResponseDoc": { + "nike.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/panera.MenuResponse" + "$ref": "#/definitions/nike.ProductReviewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.quantityRulesResponseDoc": { + "nike.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/panera.QuantityRulesResponse" + "$ref": "#/definitions/nike.RecommendationsResponse" }, "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": { + "nike.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/panera.RetiredProductsResponse" + "$ref": "#/definitions/nike.SearchResponse" }, "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": { + "nike.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/panera.TimeSlotsResponse" + "$ref": "#/definitions/nike.StoreResponse" }, "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": { + "nike.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/panera.UpsellSuggestionsResponse" + "$ref": "#/definitions/nike.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.AllergenFlags": { + "ninetofivegoogle.AuthorResponse": { "properties": { - "egg": { - "type": "boolean" - }, - "fish": { - "type": "boolean" - }, - "milk": { - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/ninetofivegoogle.HeadlineItem" + }, + "type": "array" }, - "peanut": { - "type": "boolean" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "sesame": { - "type": "boolean" + "image_url": { + "type": "string" }, - "shellfish": { - "type": "boolean" + "name": { + "type": "string" }, - "soy": { - "type": "boolean" + "social_links": { + "items": { + "$ref": "#/definitions/ninetofivegoogle.AuthorSocialLink" + }, + "type": "array" }, - "tree_nut": { - "type": "boolean" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ninetofivegoogle.AuthorSocialLink": { + "properties": { + "type": { + "type": "string" }, - "wheat": { - "type": "boolean" + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.AllergenItem": { + "ninetofivegoogle.HeadlineItem": { "properties": { - "allergens": { - "$ref": "#/definitions/papajohns.AllergenFlags" + "author": { + "type": "string" }, - "name": { - "example": "Original Crust", + "image_url": { "type": "string" }, - "section": { - "example": "Crust Options", + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "papajohns.AllergensResponse": { + "ninetofivemac.AuthorResponse": { "properties": { - "count": { - "example": 170, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/ninetofivemac.HeadlineItem" + }, + "type": "array" }, - "fetched_at": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { "type": "string" }, - "items": { + "name": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/papajohns.AllergenItem" + "$ref": "#/definitions/ninetofivemac.AuthorSocialLink" }, "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "papajohns.Deal": { + "ninetofivemac.AuthorSocialLink": { "properties": { - "description": { + "type": { "type": "string" }, - "id": { - "example": "66262", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ninetofivemac.HeadlineItem": { + "properties": { + "author": { "type": "string" }, "image_url": { "type": "string" }, - "offer_code": { - "description": "OfferCode is the code the offer is redeemed with.", - "example": "EDNJX", + "published_at": { "type": "string" }, - "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" - }, - "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" - }, - "tag": { - "description": "Tag is the merchandising label, e.g. \"Featured Deal\".", - "example": "Featured Deal", + "summary": { "type": "string" }, "title": { - "example": "Ultimate Pepperoni Pizza", + "type": "string" + }, + "type": { "type": "string" }, "url": { - "description": "URL is the deal-builder link for this offer.", "type": "string" } }, "type": "object" }, - "papajohns.DealsResponse": { + "npr.ArticleResponse": { "properties": { - "count": { - "example": 16, - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "deals": { + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "paragraphs": { "items": { - "$ref": "#/definitions/papajohns.Deal" + "type": "string" }, "type": "array" }, - "fetched_at": { + "published_at": { "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" + "section": { + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "store_id": { - "example": 5054, - "type": "integer" + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.DirectoryChild": { + "npr.AuthorArticle": { "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" + "image_url": { + "type": "string" }, - "name": { - "example": "CA", + "published_at": { "type": "string" }, - "path": { - "example": "united-states/ca", + "summary": { "type": "string" }, - "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" + "title": { + "type": "string" }, "url": { "type": "string" @@ -110632,778 +113579,565 @@ }, "type": "object" }, - "papajohns.DirectoryResponse": { + "npr.AuthorResponse": { "properties": { - "children": { + "articles": { "items": { - "$ref": "#/definitions/papajohns.DirectoryChild" + "$ref": "#/definitions/npr.AuthorArticle" }, "type": "array" }, - "count": { - "example": 120, - "type": "integer" - }, - "fetched_at": { + "bio": { "type": "string" }, - "name": { + "job_title": { "type": "string" }, - "path": { - "example": "united-states/ca", + "name": { "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IndiaAvailability": { + "npr.CategoriesResponse": { "properties": { - "blacked_out_channel_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "blacked_out_days": { - "items": { - "type": "string" - }, - "type": "array" - }, - "blacked_out_store_ids": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/npr.Category" }, "type": "array" } }, "type": "object" }, - "papajohns.IndiaCurrency": { + "npr.Category": { "properties": { - "code": { - "example": "₹", - "type": "string" - }, - "country_code": { - "example": "91", + "name": { "type": "string" }, - "locale": { - "example": "en-IN", + "slug": { "type": "string" }, - "name": { - "example": "Indian Rupee", + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IndiaDealChoice": { + "npr.HeadlineItem": { "properties": { - "category": { - "example": "Pizzas", + "author": { "type": "string" }, - "item_id": { - "example": "71", + "published_at": { "type": "string" }, - "name": { - "example": "MARGHERITA", + "summary": { "type": "string" }, - "price": { - "example": 399, - "type": "number" - }, - "size": { - "example": "Medium", + "title": { "type": "string" }, - "size_id": { - "example": "2", + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IndiaDealResponse": { + "npr.HeadlinesResponse": { "properties": { - "buy_x": { - "type": "integer" - }, - "category_id": { - "example": "11", - "type": "string" - }, - "currency": { - "$ref": "#/definitions/papajohns.IndiaCurrency" - }, - "description": { - "example": "Sakkath Combo", - "type": "string" - }, - "end_time": { - "example": "23:59:59", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "get_y": { - "type": "integer" - }, - "highest_of_two": { - "type": "boolean" - }, - "id": { - "example": "17", - "type": "string" - }, - "image_url": { + "items": { + "items": { + "$ref": "#/definitions/npr.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "npr.TopicItem": { + "properties": { + "published_at": { "type": "string" }, - "market": { - "example": "india", + "summary": { "type": "string" }, - "name": { - "example": "Sakkath Veg Combo - Dine In", + "title": { "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" - }, - "price_type": { - "example": "fixedPrice", + "url": { "type": "string" - }, - "slots": { + } + }, + "type": "object" + }, + "npr.TopicResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/papajohns.IndiaDealSlot" + "$ref": "#/definitions/npr.TopicItem" }, "type": "array" }, - "source_url": { + "topic": { "type": "string" + } + }, + "type": "object" + }, + "npr.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "start_time": { - "example": "00:00:00", - "type": "string" + "data": { + "$ref": "#/definitions/npr.ArticleResponse" }, - "sum_of_two": { - "description": "SumOfTwo and HighestOfTwo describe how a two-item deal is priced when\nprice_type is HalfAndHalf.", - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.IndiaDealSlot": { + "npr.authorResponseDoc": { "properties": { - "choice_count": { - "example": 5, + "code": { + "example": 200, "type": "integer" }, - "choices": { - "items": { - "$ref": "#/definitions/papajohns.IndiaDealChoice" - }, - "type": "array" + "data": { + "$ref": "#/definitions/npr.AuthorResponse" }, - "id": { - "example": "1376", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "npr.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/npr.CategoriesResponse" }, - "optional": { - "example": false, - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "npr.headlinesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "percentage_off": { - "type": "number" + "data": { + "$ref": "#/definitions/npr.HeadlinesResponse" }, - "quantity": { - "example": 1, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "npr.topicResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "size": { - "example": "Medium", + "data": { + "$ref": "#/definitions/npr.TopicResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "papajohns.IndiaMenuCategory": { + "numbeo.CityIndexEntry": { "properties": { - "description": { + "city": { "type": "string" }, - "id": { - "example": "6", + "city_slug": { "type": "string" }, - "image_url": { - "type": "string" + "cost_of_living_index": { + "type": "number" }, - "item_count": { - "example": 29, - "type": "integer" + "cost_of_living_plus_rent_index": { + "type": "number" }, - "items": { - "items": { - "$ref": "#/definitions/papajohns.IndiaMenuItem" - }, - "type": "array" + "groceries_index": { + "type": "number" }, - "name": { - "example": "Pizzas", - "type": "string" + "local_purchasing_power_index": { + "type": "number" }, "rank": { - "example": 7, "type": "integer" }, - "subcategories": { - "items": { - "$ref": "#/definitions/papajohns.IndiaMenuSubcategory" - }, - "type": "array" + "rent_index": { + "type": "number" + }, + "restaurant_price_index": { + "type": "number" } }, "type": "object" }, - "papajohns.IndiaMenuFilters": { + "numbeo.CostOfLivingCityResponse": { "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.", - "example": false, - "type": "boolean" - }, - "category_id": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/numbeo.PriceCategory" + }, + "type": "array" }, - "channel": { - "example": "Delivery", + "city": { "type": "string" }, - "channel_id": { + "city_slug": { "type": "string" }, - "day": { - "type": "string" + "contributors_12mo": { + "type": "integer" }, - "day_name": { - "example": "Monday", + "country": { "type": "string" }, - "store_id": { + "last_update": { "type": "string" }, - "tag": { + "source_url": { "type": "string" } }, "type": "object" }, - "papajohns.IndiaMenuItem": { + "numbeo.CostOfLivingCountryResponse": { "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." - }, - "buy_x": { - "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" - }, - "description": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/numbeo.PriceCategory" + }, + "type": "array" }, - "discounted": { - "example": false, - "type": "boolean" + "cities": { + "items": { + "$ref": "#/definitions/numbeo.CityIndexEntry" + }, + "type": "array" }, - "get_y": { + "contributors_12mo": { "type": "integer" }, - "id": { - "example": "71", + "country": { "type": "string" }, - "image_url": { + "last_update": { "type": "string" }, - "kind": { - "description": "Kind is \"item\" for an a la carte product or \"deal\" for a combo/offer.", - "example": "item", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "numbeo.CountryIndexEntry": { + "properties": { + "cost_of_living_index": { + "type": "number" }, - "name": { - "example": "MARGHERITA", + "cost_of_living_plus_rent_index": { + "type": "number" + }, + "country": { "type": "string" }, - "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, + "groceries_index": { "type": "number" }, - "price_type": { - "description": "PriceType is set on deals only: fixedPrice, BuyXGetY, HalfAndHalf, or\nvariablePrice.", - "example": "BuyXGetY", - "type": "string" + "local_purchasing_power_index": { + "type": "number" }, "rank": { - "example": 1, "type": "integer" }, - "sizes": { - "description": "Sizes is populated only when include_options=true.", - "items": { - "$ref": "#/definitions/papajohns.IndiaMenuSize" - }, - "type": "array" - }, - "strike_off_price": { - "example": 499, + "rent_index": { "type": "number" }, - "sub_category_id": { - "example": "4", - "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" + "restaurant_price_index": { + "type": "number" } }, "type": "object" }, - "papajohns.IndiaMenuItemResponse": { + "numbeo.IndexRankingEntry": { "properties": { - "category": { - "description": "Category is the section this item was found under.", - "example": "Pizzas", - "type": "string" - }, - "currency": { - "$ref": "#/definitions/papajohns.IndiaCurrency" - }, - "fetched_at": { + "city": { "type": "string" }, - "item": { - "$ref": "#/definitions/papajohns.IndiaMenuItem" - }, - "market": { - "example": "india", + "city_slug": { "type": "string" }, - "source_url": { + "country": { "type": "string" }, - "taxes": { + "indices": { "items": { - "$ref": "#/definitions/papajohns.IndiaTax" + "$ref": "#/definitions/numbeo.NamedValue" }, "type": "array" + }, + "rank": { + "type": "integer" } }, "type": "object" }, - "papajohns.IndiaMenuOptionChoice": { + "numbeo.IndexRow": { "properties": { - "default": { - "example": true, - "type": "boolean" - }, - "extra": { - "example": false, - "type": "boolean" - }, - "half_price": { - "example": 399.5, - "type": "number" - }, - "id": { - "example": "1", - "type": "string" - }, - "image_url": { - "type": "string" - }, "name": { - "example": "Original Crust", "type": "string" }, - "price": { - "example": 799, - "type": "number" - }, - "removable": { - "example": false, - "type": "boolean" + "qualifier": { + "type": "string" }, - "strike_off_price": { + "value": { "type": "number" } }, "type": "object" }, - "papajohns.IndiaMenuOptionGroup": { + "numbeo.IndexSection": { "properties": { - "base_price": { - "example": true, - "type": "boolean" - }, - "choices": { + "rows": { "items": { - "$ref": "#/definitions/papajohns.IndiaMenuOptionChoice" + "$ref": "#/definitions/numbeo.IndexRow" }, "type": "array" }, - "halves_enabled": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "1", - "type": "string" - }, - "name": { - "example": "Crust", - "type": "string" - }, - "selection_rule": { - "example": "Exactly", - "type": "string" - }, - "selection_spec": { - "example": "1", + "title": { "type": "string" } }, "type": "object" }, - "papajohns.IndiaMenuResponse": { + "numbeo.IndicesCityResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/papajohns.IndiaMenuCategory" - }, - "type": "array" + "city": { + "type": "string" }, - "currency": { - "$ref": "#/definitions/papajohns.IndiaCurrency" + "city_slug": { + "type": "string" }, - "fetched_at": { + "contributors_note": { "type": "string" }, - "filters": { - "$ref": "#/definitions/papajohns.IndiaMenuFilters" + "country": { + "type": "string" }, - "item_count": { - "example": 114, - "type": "integer" + "headline_indices": { + "items": { + "$ref": "#/definitions/numbeo.NamedValue" + }, + "type": "array" }, - "market": { - "example": "india", + "index": { "type": "string" }, - "source_url": { + "last_update": { "type": "string" }, - "tags": { + "price_categories": { "items": { - "type": "string" + "$ref": "#/definitions/numbeo.PriceCategory" }, "type": "array" }, - "taxes": { + "sections": { "items": { - "$ref": "#/definitions/papajohns.IndiaTax" + "$ref": "#/definitions/numbeo.IndexSection" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "papajohns.IndiaMenuSize": { + "numbeo.IndicesCountryResponse": { "properties": { - "default": { - "example": true, - "type": "boolean" + "cities": { + "items": { + "$ref": "#/definitions/numbeo.IndexRankingEntry" + }, + "type": "array" }, - "id": { - "example": "3", + "contributors_note": { "type": "string" }, - "name": { - "example": "Large", + "country": { "type": "string" }, - "option_groups": { + "headline_indices": { "items": { - "$ref": "#/definitions/papajohns.IndiaMenuOptionGroup" + "$ref": "#/definitions/numbeo.NamedValue" }, "type": "array" }, - "rank": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "papajohns.IndiaMenuSubcategory": { - "properties": { - "id": { - "example": "8", + "index": { "type": "string" }, - "items": { + "last_update": { + "type": "string" + }, + "price_categories": { "items": { - "$ref": "#/definitions/papajohns.IndiaMenuItem" + "$ref": "#/definitions/numbeo.PriceCategory" }, "type": "array" }, - "name": { - "example": "India Special", + "sections": { + "items": { + "$ref": "#/definitions/numbeo.IndexSection" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "papajohns.IndiaStore": { + "numbeo.IndicesRankingsByCountryResponse": { "properties": { - "address": { - "type": "string" - }, - "channels": { - "description": "Channels lists the order channels this store publishes hours for.", + "countries": { "items": { - "type": "string" + "$ref": "#/definitions/numbeo.IndexRankingEntry" }, "type": "array" }, - "email": { + "index": { "type": "string" }, - "hours": { + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "numbeo.IndicesRankingsResponse": { + "properties": { + "cities": { "items": { - "$ref": "#/definitions/papajohns.IndiaStoreHours" + "$ref": "#/definitions/numbeo.IndexRankingEntry" }, "type": "array" }, - "id": { - "example": "7", + "index": { "type": "string" }, - "latitude": { - "example": 12.840903161072498, - "type": "number" - }, - "longitude": { - "example": 77.65593675511532, - "type": "number" - }, - "name": { - "example": "PJPB - 360° Business Park, Electronics City BLR", + "period": { "type": "string" }, - "phone": { - "example": "9240244043", + "scope": { "type": "string" }, - "store_code": { - "example": "QRyCHD", + "source_url": { "type": "string" } }, "type": "object" }, - "papajohns.IndiaStoreHours": { + "numbeo.NamedValue": { "properties": { - "channel": { - "example": "Take Away", - "type": "string" - }, - "channel_id": { - "example": "2", - "type": "string" - }, - "closes": { - "example": "23:00:59", - "type": "string" - }, - "day": { - "example": "Monday", + "name": { "type": "string" }, - "opens": { - "example": "11:00:00", - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "papajohns.IndiaStoresResponse": { + "numbeo.PriceCategory": { "properties": { - "channel": { - "example": "Delivery", - "type": "string" - }, - "channel_id": { - "type": "string" - }, - "count": { - "example": 9, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "market": { - "example": "india", - "type": "string" - }, - "source_url": { + "category": { "type": "string" }, - "stores": { + "items": { "items": { - "$ref": "#/definitions/papajohns.IndiaStore" + "$ref": "#/definitions/numbeo.PriceItem" }, "type": "array" } }, "type": "object" }, - "papajohns.IndiaTax": { + "numbeo.PriceItem": { "properties": { - "inclusive": { - "example": false, - "type": "boolean" + "currency_symbol": { + "type": "string" }, "name": { - "example": "GST", "type": "string" }, - "type": { - "example": "percentage", - "type": "string" + "price": { + "type": "number" }, - "value": { - "example": 5, + "range_high": { + "type": "number" + }, + "range_low": { "type": "number" } }, "type": "object" }, - "papajohns.IntlDeal": { + "numbeo.RankingsByCountryResponse": { "properties": { - "availability": { - "description": "Availability lists the weekdays the offer runs on.", + "countries": { "items": { - "type": "string" + "$ref": "#/definitions/numbeo.CountryIndexEntry" }, "type": "array" }, - "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" - }, - "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" - }, - "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": { + "source_url": { "type": "string" } }, "type": "object" }, - "papajohns.IntlDealsResponse": { + "numbeo.RankingsResponse": { "properties": { - "count": { - "example": 1, - "type": "integer" - }, - "deals": { + "cities": { "items": { - "$ref": "#/definitions/papajohns.IntlDeal" + "$ref": "#/definitions/numbeo.CityIndexEntry" }, "type": "array" }, - "dispatch_method": { - "example": "pj_delivery", - "type": "string" - }, - "fetched_at": { + "period": { "type": "string" }, - "market": { - "example": "spain", + "scope": { "type": "string" }, "source_url": { @@ -111412,2980 +114146,2554 @@ }, "type": "object" }, - "papajohns.IntlDeliveryZone": { + "numbeo.costOfLivingCityResponseDoc": { "properties": { - "delivery_price": { - "example": 0, - "type": "number" - }, - "minimum_order_for_delivery": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "minimum_order_for_free_delivery": { - "type": "number" + "data": { + "$ref": "#/definitions/numbeo.CostOfLivingCityResponse" }, - "name": { - "example": "Zona 1", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "papajohns.IntlIngredient": { + "numbeo.costOfLivingCountryResponseDoc": { "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" + "code": { + "example": 200, + "type": "integer" }, - "category": { - "description": "Category is the ingredient family, e.g. meat or vegetable.", - "example": "base_sauce", - "type": "string" + "data": { + "$ref": "#/definitions/numbeo.CostOfLivingCountryResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" - }, - "id": { - "example": 25, + } + }, + "type": "object" + }, + "numbeo.indicesCityResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/numbeo.IndicesCityResponse" }, - "name": { - "example": "Salsa de Tomate", + "msg": { + "example": "OK", "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": { + "numbeo.indicesCountryResponseDoc": { "properties": { - "normal": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "code": { + "example": 200, + "type": "integer" }, - "premium": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "data": { + "$ref": "#/definitions/numbeo.IndicesCountryResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.IntlIngredientsResponse": { + "numbeo.indicesRankingsByCountryResponseDoc": { "properties": { - "category": { - "example": "meat", - "type": "string" - }, - "count": { - "example": 39, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "ingredients": { - "items": { - "$ref": "#/definitions/papajohns.IntlIngredient" - }, - "type": "array" + "data": { + "$ref": "#/definitions/numbeo.IndicesRankingsByCountryResponse" }, - "market": { - "example": "spain", + "msg": { + "example": "OK", "type": "string" - }, - "menu_id": { - "example": 8, + } + }, + "type": "object" + }, + "numbeo.indicesRankingsResponseDoc": { + "properties": { + "code": { + "example": 200, "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" + "data": { + "$ref": "#/definitions/numbeo.IndicesRankingsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "papajohns.IntlMenuProduct": { + "numbeo.rankingsByCountryResponseDoc": { "properties": { - "alcohol": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "category": { - "example": "pizza", - "type": "string" + "data": { + "$ref": "#/definitions/numbeo.RankingsByCountryResponse" }, - "currency": { - "example": "EUR", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "numbeo.rankingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "customizable": { - "type": "boolean" + "data": { + "$ref": "#/definitions/numbeo.RankingsResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" - }, - "discount": { - "type": "number" - }, - "food_type": { - "description": "FoodType carries dietary markers the platform publishes, e.g. vegetarian.", - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "example": 8, - "type": "integer" - }, - "image_url": { + } + }, + "type": "object" + }, + "nydailynews.AuthorArticle": { + "properties": { + "published_at": { "type": "string" }, - "initial_price": { - "type": "number" - }, - "kind": { - "description": "Kind is \"pizza\" or \"side\" -- the platform's two product families.", - "example": "pizza", + "summary": { "type": "string" }, - "name": { - "example": "Super Papa", + "title": { "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" - }, - "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" + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.IntlMenuResponse": { + "nydailynews.AuthorResponse": { "properties": { - "count": { - "example": 43, - "type": "integer" - }, - "crusts": { - "additionalProperties": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/nydailynews.AuthorArticle" }, - "type": "object" + "type": "array" }, - "currency": { - "example": "EUR", + "bio": { "type": "string" }, - "fetched_at": { + "email": { "type": "string" }, - "food_type": { - "example": "vegetarian", + "job_title": { "type": "string" }, - "kind": { - "example": "pizza", + "name": { "type": "string" }, - "market": { - "example": "spain", + "slug": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/papajohns.IntlMenuProduct" - }, - "type": "array" - }, - "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" - }, - "source_url": { + "twitter": { "type": "string" }, - "store_id": { - "example": 9, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.IntlMenuVariant": { + "nymag.AuthorArticle": { "properties": { - "crust": { - "example": "traditional", - "type": "string" - }, - "crust_label": { - "example": "Original", + "excerpt": { "type": "string" }, - "currency": { - "example": "EUR", + "published_at": { "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", + "section": { "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", + "title": { "type": "string" }, - "size_label": { - "description": "SizeLabel and CrustLabel are the market's own display names for those\ncodes, in the local language.", - "example": "Familiar", + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IntlNutrition": { + "nymag.AuthorResponse": { "properties": { - "calories": { - "example": 1090, - "type": "number" + "articles": { + "items": { + "$ref": "#/definitions/nymag.AuthorArticle" + }, + "type": "array" }, - "grams": { - "example": 470, - "type": "number" + "bio": { + "type": "string" }, - "portions": { - "example": "8", + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IntlOfferChoice": { + "nypost.AuthorResponse": { "properties": { - "crust": { - "example": "traditional", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "crust_label": { - "example": "Original", - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "description": { + "image_url": { "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" + "social_links": { + "items": { + "$ref": "#/definitions/nypost.AuthorSocialLink" + }, + "type": "array" }, - "size": { - "example": "family", + "url": { "type": "string" - }, - "size_label": { - "description": "SizeLabel and CrustLabel are the market's own display names.", - "example": "Familiar", + } + }, + "type": "object" + }, + "nypost.AuthorSocialLink": { + "properties": { + "type": { "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" + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.IntlOfferResponse": { + "nyt.ArticleResponse": { "properties": { - "availability": { - "description": "Availability lists the weekdays the offer runs on.", + "authors": { "items": { "type": "string" }, "type": "array" }, - "currency": { - "example": "EUR", - "type": "string" - }, - "customizable": { - "example": true, - "type": "boolean" - }, "description": { "type": "string" }, - "discount": { - "type": "number" - }, - "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" - }, - "id": { - "example": 660, - "type": "integer" - }, "image_url": { "type": "string" }, - "ingredient_categories": { - "description": "IngredientCategories lists the ingredient families this offer allows.", + "keywords": { "items": { "type": "string" }, "type": "array" }, - "market": { - "example": "spain", - "type": "string" - }, - "max_ingredients": { - "example": 10, - "type": "integer" - }, - "min_ingredients": { - "example": 1, - "type": "integer" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { - "example": "Combo Veranito", + "published_at": { "type": "string" }, - "offer_type": { - "description": "OfferType is the platform's own classification, e.g. Combo.", - "example": "Combo", + "section": { "type": "string" }, - "price": { - "example": 19.98, - "type": "number" - }, - "promoted": { - "example": true, - "type": "boolean" + "title": { + "type": "string" }, - "source_url": { + "updated_at": { "type": "string" }, - "start_date": { - "example": "2023-09-19T01:00:00Z", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "nyt.AuthorAboutSection": { + "properties": { + "heading": { "type": "string" }, - "steps": { + "paragraphs": { "items": { - "$ref": "#/definitions/papajohns.IntlOfferStep" + "type": "string" }, "type": "array" } }, "type": "object" }, - "papajohns.IntlOfferStep": { + "nyt.AuthorArticle": { "properties": { - "choice_count": { - "example": 12, - "type": "integer" - }, - "choices": { + "authors": { "items": { - "$ref": "#/definitions/papajohns.IntlOfferChoice" + "type": "string" }, "type": "array" }, - "id": { - "example": 1919, - "type": "integer" + "description": { + "type": "string" }, - "name": { - "example": "❶ Elige tu pizza familiar", + "image_url": { "type": "string" }, - "optional": { - "description": "Optional reports whether the step may be skipped.", - "example": false, - "type": "boolean" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.IntlProductResponse": { + "nyt.AuthorContactItem": { "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", + "label": { "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": { + "url": { "type": "string" }, - "fetched_at": { + "value": { "type": "string" - }, - "food_type": { + } + }, + "type": "object" + }, + "nyt.AuthorResponse": { + "properties": { + "about": { "items": { - "type": "string" + "$ref": "#/definitions/nyt.AuthorAboutSection" }, "type": "array" }, - "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" + "articles": { + "items": { + "$ref": "#/definitions/nyt.AuthorArticle" + }, + "type": "array" }, - "image_urls": { + "contact": { "items": { - "type": "string" + "$ref": "#/definitions/nyt.AuthorContactItem" }, "type": "array" }, - "market": { - "example": "spain", + "image_url": { "type": "string" }, "name": { - "example": "Super Papa", "type": "string" }, - "slug": { - "example": "super-papa", + "tagline": { "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IntlStore": { + "nyt.CategoriesResponse": { "properties": { - "address": { - "type": "string" - }, - "city": { - "example": "Madrid", - "type": "string" - }, - "delivery_open": { - "example": true, - "type": "boolean" - }, - "delivery_wait_minutes": { - "example": 30, - "type": "integer" - }, - "delivery_zones": { - "items": { - "$ref": "#/definitions/papajohns.IntlDeliveryZone" - }, - "type": "array" - }, - "external_delivery": { - "example": true, - "type": "boolean" - }, - "future_orders": { - "example": true, - "type": "boolean" - }, - "hours": { + "categories": { "items": { - "$ref": "#/definitions/papajohns.IntlStoreHours" + "$ref": "#/definitions/nyt.Category" }, "type": "array" - }, - "id": { - "example": 9, - "type": "integer" - }, - "latitude": { - "example": 40.401686, - "type": "number" - }, - "longitude": { - "example": -3.708348, - "type": "number" - }, - "map_url": { - "type": "string" - }, - "menu_id": { - "description": "MenuID identifies the catalog this restaurant serves. Several\nrestaurants usually share one.", - "example": 8, - "type": "integer" - }, + } + }, + "type": "object" + }, + "nyt.Category": { + "properties": { "name": { - "example": "Vallejo Nájera", - "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", "type": "string" }, - "payment_methods": { - "description": "PaymentMethods lists only the methods this restaurant actually accepts.", + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/nyt.CategoryLink" }, "type": "array" }, - "phone": { - "example": "+34910493017", + "slug": { "type": "string" }, - "pickup_open": { - "example": true, - "type": "boolean" - }, - "pickup_wait_minutes": { - "example": 15, - "type": "integer" - }, - "region": { - "example": "Madrid", + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IntlStoreHours": { + "nyt.CategoryLink": { "properties": { - "closes": { - "example": "23:59:59", - "type": "string" - }, - "day": { - "example": "monday", + "name": { "type": "string" }, - "dispatch_method": { - "description": "DispatchMethod is the fulfillment channel this window applies to,\ne.g. in_store or pj_delivery.", - "example": "in_store", + "slug": { "type": "string" }, - "opens": { - "example": "12:00:00", + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IntlStoresResponse": { + "nyt.HeadlineItem": { "properties": { - "count": { - "description": "Count is how many restaurants this response carries.", - "example": 5, - "type": "integer" - }, - "fetched_at": { + "author": { "type": "string" }, - "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", + "description": { "type": "string" }, - "latitude": { - "example": 40.4168, - "type": "number" - }, - "longitude": { - "example": -3.7038, - "type": "number" - }, - "market": { - "example": "spain", + "image_url": { "type": "string" }, - "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" + "published_at": { + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "stores": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "nyt.HeadlinesResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/papajohns.IntlStore" + "$ref": "#/definitions/nyt.HeadlineItem" }, "type": "array" }, - "total_count": { - "example": 97, - "type": "integer" - }, - "total_pages": { - "example": 20, - "type": "integer" + "section": { + "type": "string" } }, "type": "object" }, - "papajohns.LatamCategory": { + "nyt.Section": { "properties": { - "id": { - "example": "1", - "type": "string" - }, "name": { - "example": "Pizzas", "type": "string" }, - "product_count": { - "example": 25, - "type": "integer" + "slug": { + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/papajohns.LatamProduct" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.LatamMenuResponse": { + "nyt.SectionsResponse": { "properties": { - "categories": { + "sections": { "items": { - "$ref": "#/definitions/papajohns.LatamCategory" + "$ref": "#/definitions/nyt.Section" }, "type": "array" + } + }, + "type": "object" + }, + "nyt.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "category": { - "type": "string" + "data": { + "$ref": "#/definitions/nyt.ArticleResponse" }, - "currency": { - "example": "USD", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "nyt.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/nyt.AuthorResponse" }, - "market": { - "example": "el-salvador", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "nyt.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "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" + "data": { + "$ref": "#/definitions/nyt.CategoriesResponse" }, - "product_count": { - "description": "ProductCount is how many products the response carries. Where the\nupstream paginates, every page is followed before returning.", - "example": 25, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "nyt.headlinesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { + "data": { + "$ref": "#/definitions/nyt.HeadlinesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "papajohns.LatamProduct": { + "nyt.sectionsResponseDoc": { "properties": { - "category": { - "example": "Pizzas", + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/nyt.SectionsResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "nzherald.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "currency": { - "example": "USD", + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "email": { "type": "string" }, - "description": { + "image_url": { "type": "string" }, - "id": { - "example": "8", + "job_title": { "type": "string" }, - "image_url": { + "location": { "type": "string" }, "name": { - "example": "The Works", "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": { "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/papajohns.LatamVariant" - }, - "type": "array" } }, "type": "object" }, - "papajohns.LatamVariant": { + "oldnavy.AvailabilityResponse": { "properties": { - "available": { - "example": true, - "type": "boolean" + "brand": { + "type": "string" }, - "crust": { - "example": "Masa Original", + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "currency": { - "example": "USD", + "pid": { "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", + "source_url": { "type": "string" }, - "list_price": { - "description": "ListPrice is the pre-discount price where the market publishes one and\nit actually differs from price.", - "type": "number" + "stores": { + "items": { + "$ref": "#/definitions/oldnavy.StoreStockSummary" + }, + "type": "array" }, - "name": { - "description": "Name is the market's own label for the variant where it gives one.", - "example": "Gigante", + "style_id": { + "type": "string" + } + }, + "type": "object" + }, + "oldnavy.CategoriesResponse": { + "properties": { + "brand": { "type": "string" }, - "price": { - "example": 14.99, - "type": "number" + "categories": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryNavEntry" + }, + "type": "array" }, - "sauce": { - "description": "Sauce is populated only by Colombia, whose SKUs vary by sauce too.", - "example": "Salsa Pizza", + "cid": { "type": "string" }, - "size": { - "description": "Size and Crust are populated where the market distinguishes them.", - "example": "GIGANTE", + "fetched_at": { "type": "string" }, - "sku": { + "source_url": { "type": "string" } }, "type": "object" }, - "papajohns.MenuCategory": { + "oldnavy.CategoryColorSummary": { "properties": { + "back_order_inventory_count": { + "type": "integer" + }, + "back_order_inventory_status": { + "type": "string" + }, "id": { - "example": "pizza", "type": "string" }, "image_url": { "type": "string" }, + "inventory_count": { + "type": "integer" + }, + "inventory_status": { + "type": "string" + }, "name": { - "example": "Pizza", "type": "string" }, - "product_count": { - "description": "ProductCount is how many priced SKUs this category contains.", - "example": 96, + "percentage_off": { "type": "integer" }, - "sections": { - "items": { - "$ref": "#/definitions/papajohns.MenuSection" - }, - "type": "array" + "price": { + "type": "number" + }, + "regular_price": { + "type": "number" + }, + "short_description": { + "type": "string" } }, "type": "object" }, - "papajohns.MenuCrust": { + "oldnavy.CategoryGroup": { "properties": { - "code": { - "example": "PIZZA_ORIGINAL", + "category_id": { "type": "string" }, - "default": { - "example": true, - "type": "boolean" + "category_name": { + "type": "string" }, - "id": { - "example": 1, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryGroupItem" + }, + "type": "array" }, - "name": { - "example": "Original Crust", + "sub_category_id": { "type": "string" }, - "sub_type": { - "example": "Original", + "sub_category_name": { "type": "string" } }, "type": "object" }, - "papajohns.MenuInstruction": { + "oldnavy.CategoryGroupItem": { "properties": { - "choices": { - "items": { - "$ref": "#/definitions/papajohns.MenuInstructionChoice" - }, - "type": "array" - }, - "description": { - "example": "How much cheese?", + "cc_id": { "type": "string" }, - "id": { - "example": 2, - "type": "integer" - }, - "name": { - "example": "CHEESE", + "style_id": { "type": "string" } }, "type": "object" }, - "papajohns.MenuInstructionChoice": { + "oldnavy.CategoryNavEntry": { "properties": { - "code": { - "example": "ILC", + "cid": { "type": "string" }, - "default": { - "example": false, - "type": "boolean" - }, - "id": { - "example": 6, - "type": "integer" - }, "name": { - "example": "Light Cheese", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "papajohns.MenuItemResponse": { + "oldnavy.CategoryProductSummary": { "properties": { - "category": { - "example": "pizza", - "type": "string" + "colors": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryColorSummary" + }, + "type": "array" }, - "fetched_at": { + "id": { "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." + "name": { + "type": "string" }, - "national_default": { - "example": false, - "type": "boolean" + "review_count": { + "type": "integer" }, - "product": { - "$ref": "#/definitions/papajohns.MenuProduct" + "review_score": { + "type": "number" }, - "section": { - "example": "Most Popular", + "url": { "type": "string" }, - "source_url": { + "web_product_type": { "type": "string" - }, - "store_id": { - "example": 5054, - "type": "integer" } }, "type": "object" }, - "papajohns.MenuProduct": { + "oldnavy.CategoryResponse": { "properties": { - "calories": { - "description": "Calories is per the serving described by serving_label.", - "example": 210, - "type": "integer" - }, - "code": { - "example": "PR10Q1", + "brand": { "type": "string" }, - "crust_id": { - "example": 1, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryGroup" + }, + "type": "array" }, - "description": { + "category_id": { "type": "string" }, - "disclaimer": { - "type": "string" + "count": { + "type": "integer" }, - "image_url": { - "type": "string" + "facets": { + "items": { + "$ref": "#/definitions/oldnavy.Facet" + }, + "type": "array" }, - "name": { - "example": "10 Inch Original Pepperoni Pizza", + "fetched_at": { "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" + "page": { + "type": "integer" }, - "regular_price": { - "description": "RegularPrice is the pre-promotion menu price where it differs.", - "example": 14.99, - "type": "number" + "page_size": { + "type": "integer" }, - "serving_label": { - "description": "ServingLabel describes what calories are counted per, e.g. \"/slice, 6 slices\".", - "example": "/slice, 6 slices", - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryProductSummary" + }, + "type": "array" }, - "size": { - "description": "Size is the size label this SKU represents within its group.", - "example": "Small", + "source_url": { "type": "string" }, - "size_id": { - "example": 2, + "total_colors": { "type": "integer" }, - "sku": { - "example": "1-1-2-115", + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "oldnavy.ColorSummary": { + "properties": { + "id": { "type": "string" }, - "slices": { - "example": 6, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "percentage_off": { "type": "integer" }, - "surcharge": { + "price": { "type": "number" }, - "title": { - "description": "Title is the shorter in-menu label, e.g. \"Small Original Crust - Pepperoni\".", + "regular_price": { + "type": "number" + }, + "short_description": { "type": "string" } }, "type": "object" }, - "papajohns.MenuProductGroup": { + "oldnavy.Facet": { "properties": { - "allow_half_toppings": { - "example": true, - "type": "boolean" - }, - "available_topping_ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "crusts": { - "items": { - "$ref": "#/definitions/papajohns.MenuCrust" - }, - "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": { - "type": "string" - }, - "featured": { + "is_range": { "type": "boolean" }, - "free_toppings": { - "type": "integer" - }, - "id": { - "example": "cyo", + "label": { "type": "string" }, - "image_url": { + "name": { "type": "string" }, - "instructions": { + "options": { "items": { - "$ref": "#/definitions/papajohns.MenuInstruction" + "$ref": "#/definitions/oldnavy.FacetOption" }, "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, + "range_max": { "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" + "range_min": { + "type": "number" }, - "title": { - "example": "Create Your Own Pizza", + "type": { "type": "string" } }, "type": "object" }, - "papajohns.MenuResponse": { + "oldnavy.FacetOption": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/papajohns.MenuCategory" - }, - "type": "array" - }, - "category": { - "example": "pizza", - "type": "string" - }, - "fetched_at": { - "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, + "count": { "type": "integer" }, - "source_url": { + "label": { "type": "string" }, - "store_id": { - "description": "StoreID echoes the restaurant the prices belong to. 0 is the national\ndefault menu.", - "example": 5054, - "type": "integer" + "value": { + "type": "string" } }, "type": "object" }, - "papajohns.MenuSection": { + "oldnavy.ProductDetailResponse": { "properties": { + "brand": { + "type": "string" + }, + "color": { + "type": "string" + }, "description": { "type": "string" }, - "id": { - "example": "most_popular", + "fetched_at": { "type": "string" }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, "name": { - "example": "Most Popular", "type": "string" }, - "product_groups": { + "offers": { "items": { - "$ref": "#/definitions/papajohns.MenuProductGroup" + "$ref": "#/definitions/oldnavy.ProductOffer" }, "type": "array" - } - }, - "type": "object" - }, - "papajohns.MenuSize": { - "properties": { - "default": { - "example": false, - "type": "boolean" }, - "id": { - "example": 2, + "pid": { + "type": "string" + }, + "rating_count": { "type": "integer" }, - "measure": { - "description": "Measure is the physical size where the group has one, e.g. 10\".", - "example": "10\"", + "rating_value": { + "type": "number" + }, + "related_items": { + "items": { + "$ref": "#/definitions/oldnavy.RelatedItem" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "name": { - "description": "Name is the size's marketing name, e.g. Small.", - "example": "Small", + "url": { "type": "string" } }, "type": "object" }, - "papajohns.NearbyResponse": { + "oldnavy.ProductOffer": { "properties": { - "count": { - "example": 10, - "type": "integer" + "availability": { + "type": "string" }, - "fetched_at": { + "currency": { "type": "string" }, - "radius": { - "example": 25, - "type": "integer" + "price": { + "type": "number" }, - "source_url": { + "sku": { "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, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.NearbyStore": { + "oldnavy.ProductReviewsResponse": { "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, + "average_rating": { "type": "number" }, - "distance_miles": { - "description": "DistanceMiles and DistanceKilometers are measured from the requested\ncoordinate.", - "example": 0.6, - "type": "number" + "brand": { + "type": "string" }, - "hours": { - "description": "Hours is the store's general published week of hours.", - "items": { - "$ref": "#/definitions/papajohns.StoreHours" - }, - "type": "array" + "count": { + "type": "integer" }, - "latitude": { - "example": 34.0614412, - "type": "number" + "fetched_at": { + "type": "string" }, - "longitude": { - "example": -118.2439367, - "type": "number" + "page": { + "type": "integer" }, - "name": { - "example": "Papa Johns Pizza", - "type": "string" + "page_size": { + "type": "integer" }, - "order_url": { - "description": "OrderURL is Papa John's own carryout ordering deep link for this\nstore.", + "pid": { "type": "string" }, - "path": { - "description": "Path is the /papajohns/store path for this store, so a caller can go\nstraight to the detail endpoint.", - "type": "string" + "rating_count": { + "type": "integer" }, - "payment_options": { - "description": "PaymentOptions are the payment methods this store accepts, e.g.\nAPPLEPAY, CASH, VISA.", + "rating_histogram": { + "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "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" + "recommended_ratio": { + "type": "number" }, - "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.", + "reviews": { "items": { - "type": "string" + "$ref": "#/definitions/oldnavy.Review" }, "type": "array" }, - "price_range": { - "description": "PriceRange is Papa John's own relative price tier, e.g. ONE, TWO.", - "example": "TWO", - "type": "string" - }, - "store_id": { - "example": "4269", + "source_url": { "type": "string" }, - "takeout_hours": { - "items": { - "$ref": "#/definitions/papajohns.StoreHours" - }, - "type": "array" + "total_pages": { + "type": "integer" }, - "timezone": { - "example": "America/Los_Angeles", - "type": "string" + "total_reviews": { + "type": "integer" } }, "type": "object" }, - "papajohns.NutritionFacts": { + "oldnavy.ProductSummary": { "properties": { - "calories": { - "example": 200, - "type": "number" - }, - "calories_from_fat": { - "example": 25, - "type": "number" - }, - "cholesterol_mg": { - "type": "number" + "colors": { + "items": { + "$ref": "#/definitions/oldnavy.ColorSummary" + }, + "type": "array" }, - "dietary_fiber_g": { - "example": 1, - "type": "number" + "id": { + "type": "string" }, - "protein_g": { - "example": 6, - "type": "number" + "name": { + "type": "string" }, - "saturated_fat_g": { - "example": 0.5, + "price_max": { "type": "number" }, - "sodium_mg": { - "example": 360, + "price_min": { "type": "number" }, - "sugars_g": { - "example": 3, - "type": "number" + "review_count": { + "type": "integer" }, - "total_carbohydrate_g": { - "example": 36, + "review_score": { "type": "number" }, - "total_fat_g": { - "example": 3, + "sale_price_max": { "type": "number" }, - "trans_fat_g": { + "sale_price_min": { "type": "number" - } - }, - "type": "object" - }, - "papajohns.NutritionItem": { - "properties": { - "name": { - "example": "Cheese Pizza", - "type": "string" }, - "variants": { - "items": { - "$ref": "#/definitions/papajohns.NutritionVariant" - }, - "type": "array" - } - }, - "type": "object" - }, - "papajohns.NutritionResponse": { - "properties": { - "category": { - "example": "pizzas", + "thumbnail_url": { "type": "string" }, - "count": { - "example": 34, - "type": "integer" - }, - "fetched_at": { + "url": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/papajohns.NutritionItem" - }, - "type": "array" - }, - "source_url": { + "web_product_type": { "type": "string" } }, "type": "object" }, - "papajohns.NutritionVariant": { + "oldnavy.RelatedItem": { "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", + "name": { "type": "string" }, - "nutrition": { - "$ref": "#/definitions/papajohns.NutritionFacts" - }, - "serving_size": { - "example": "1 slice", + "pid": { "type": "string" }, - "servings": { - "example": "8 slices per pizza", + "url": { "type": "string" } }, "type": "object" }, - "papajohns.StoreAddress": { + "oldnavy.Review": { "properties": { - "city": { - "example": "Alhambra", + "author": { "type": "string" }, - "country": { - "example": "US", + "body": { "type": "string" }, - "line1": { - "example": "2136 S FREMONT AVE", + "created_at": { "type": "string" }, - "postal_code": { - "example": "91803", + "headline": { "type": "string" }, - "region": { - "example": "CA", - "type": "string" - } - }, - "type": "object" - }, - "papajohns.StoreHours": { - "properties": { - "closed": { - "description": "Closed is true when Papa John's publishes the day with no open\ninterval.", - "example": false, - "type": "boolean" + "helpful_votes": { + "type": "integer" }, - "closes": { - "example": "00:15", + "id": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "location": { "type": "string" }, - "opens": { - "example": "10:30", + "not_helpful_votes": { + "type": "integer" + }, + "rating": { + "type": "integer" + }, + "updated_at": { "type": "string" + }, + "verified_purchase": { + "type": "boolean" } }, "type": "object" }, - "papajohns.StoreResponse": { + "oldnavy.SearchResponse": { "properties": { - "address": { - "$ref": "#/definitions/papajohns.StoreAddress" - }, - "fetched_at": { + "brand": { "type": "string" }, - "google_place_id": { - "type": "string" + "count": { + "type": "integer" }, - "hours": { - "description": "Hours is the store's general published week of hours.", + "facets": { "items": { - "$ref": "#/definitions/papajohns.StoreHours" + "$ref": "#/definitions/oldnavy.Facet" }, "type": "array" }, - "latitude": { - "example": 34.06838390790909, - "type": "number" - }, - "longitude": { - "example": -118.14934906165672, - "type": "number" - }, - "name": { - "example": "Papa Johns Pizza", + "fetched_at": { "type": "string" }, - "order_url": { - "description": "OrderURL is Papa John's own carryout ordering deep link for this\nstore, which embeds the same store_id.", + "keyword": { "type": "string" }, - "path": { - "type": "string" + "page": { + "type": "integer" }, - "phone_number": { - "example": "(626) 642-5645", - "type": "string" + "page_size": { + "type": "integer" }, - "pickup_hours": { - "description": "PickupHours is Papa John's own published carryout/pickup hours,\npublished separately from Hours and sometimes shorter.", + "products": { "items": { - "$ref": "#/definitions/papajohns.StoreHours" + "$ref": "#/definitions/oldnavy.ProductSummary" }, "type": "array" }, "source_url": { "type": "string" }, - "store_id": { - "example": "5054", - "type": "string" + "total_pages": { + "type": "integer" }, - "timezone": { - "example": "America/Los_Angeles", - "type": "string" + "total_products": { + "type": "integer" } }, "type": "object" }, - "papajohns.StorefrontCategory": { + "oldnavy.SizeStock": { "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", + "fit": { "type": "string" }, - "id": { - "example": "1", + "sku": { "type": "string" }, - "name": { - "example": "Пицца", + "status": { "type": "string" - }, - "product_count": { - "example": 25, - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/papajohns.StorefrontProduct" - }, - "type": "array" } }, "type": "object" }, - "papajohns.StorefrontMenuResponse": { + "oldnavy.Store": { "properties": { - "categories": { - "description": "Categories carry the whole national catalog. The menu does not vary by\ncity, so there is no city to report.", - "items": { - "$ref": "#/definitions/papajohns.StorefrontCategory" - }, - "type": "array" + "address": { + "type": "string" }, - "category": { + "city": { "type": "string" }, - "currency": { - "example": "RUB", + "country": { "type": "string" }, - "fetched_at": { + "distance_miles": { + "type": "number" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "market": { - "example": "russia", + "phone": { "type": "string" }, - "product_count": { - "example": 185, - "type": "integer" + "postal_code": { + "type": "string" }, - "source_url": { + "region": { "type": "string" }, - "variant_count": { - "example": 892, - "type": "integer" + "specialties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.StorefrontProduct": { + "oldnavy.StoreResponse": { "properties": { - "category": { - "example": "Пицца", + "brand": { "type": "string" }, - "currency": { - "example": "RUB", - "type": "string" + "count": { + "type": "integer" }, - "description": { + "fetched_at": { "type": "string" }, - "id": { - "example": "12345", - "type": "string" + "lat": { + "type": "number" }, - "image_url": { - "type": "string" + "lng": { + "type": "number" }, - "name": { - "example": "Прайм говядина Барбекю", + "search": { "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" - }, - "url": { + "source_url": { "type": "string" }, - "variants": { + "stores": { "items": { - "$ref": "#/definitions/papajohns.StorefrontVariant" + "$ref": "#/definitions/oldnavy.Store" }, "type": "array" } }, "type": "object" }, - "papajohns.StorefrontVariant": { + "oldnavy.StoreStockSummary": { "properties": { - "available": { - "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": "Традиционное", + "address": { "type": "string" }, - "currency": { - "example": "RUB", + "city": { "type": "string" }, - "price": { - "example": 680, + "distance_miles": { "type": "number" }, - "size": { - "description": "Size is the pizza diameter where the market publishes one, with its own\nunit (\"23 см\").", - "example": "23 см", + "name": { "type": "string" }, - "sku": { - "example": "172764", + "phone": { "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", + "postal_code": { "type": "string" - } - }, - "type": "object" - }, - "papajohns.allergensResponseDoc": { - "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.AllergensResponse" + "region": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "sizes": { + "items": { + "$ref": "#/definitions/oldnavy.SizeStock" + }, + "type": "array" + }, + "store_id": { + "type": "string" } }, "type": "object" }, - "papajohns.dealsResponseDoc": { + "oldnavy.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", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.DealsResponse" + "$ref": "#/definitions/oldnavy.AvailabilityResponse" }, "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": { + "oldnavy.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.DirectoryResponse" + "$ref": "#/definitions/oldnavy.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.indiaDealResponseDoc": { + "oldnavy.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.IndiaDealResponse" + "$ref": "#/definitions/oldnavy.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.indiaMenuItemResponseDoc": { + "oldnavy.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.IndiaMenuItemResponse" + "$ref": "#/definitions/oldnavy.ProductDetailResponse" }, "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": { + "oldnavy.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/papajohns.IndiaMenuResponse" + "$ref": "#/definitions/oldnavy.ProductReviewsResponse" }, "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": { + "oldnavy.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.IndiaStoresResponse" + "$ref": "#/definitions/oldnavy.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.intlDealsResponseDoc": { + "oldnavy.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/papajohns.IntlDealsResponse" + "$ref": "#/definitions/oldnavy.StoreResponse" }, "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": { + "opensea.Account": { "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": "0x46efbaedc92067e6d60e84ed6395099723252496", + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.IntlIngredientsResponse" + "display_name": { + "example": "gordongoner", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "image_url": { + "type": "string" } }, "type": "object" }, - "papajohns.intlMenuResponseDoc": { + "opensea.ActivityEvent": { "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" + "chain": { + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.IntlMenuResponse" + "collection_name": { + "type": "string" }, - "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" + "collection_slug": { + "example": "boredapeyachtclub", + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.IntlOfferResponse" + "contract_address": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "papajohns.intlProductResponseDoc": { - "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" + "event_time": { + "example": "2026-08-30T08:38:47.235Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.IntlProductResponse" + "from": { + "$ref": "#/definitions/opensea.Account" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "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" }, - "papajohns.intlStoresResponseDoc": { + "opensea.ActivityResponse": { "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" + "events": { + "items": { + "$ref": "#/definitions/opensea.ActivityEvent" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/papajohns.IntlStoresResponse" + "next_page_cursor": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "token_id": { + "type": "string" } }, "type": "object" }, - "papajohns.latamMenuResponseDoc": { + "opensea.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/papajohns.LatamMenuResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "categories": { + "items": { + "$ref": "#/definitions/opensea.Category" + }, + "type": "array" } }, "type": "object" }, - "papajohns.menuItemResponseDoc": { + "opensea.Category": { "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.MenuItemResponse" + "children": { + "items": { + "$ref": "#/definitions/opensea.CategoryChild" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "slug": { + "example": "collections", + "type": "string" } }, "type": "object" }, - "papajohns.menuResponseDoc": { + "opensea.CategoryChild": { "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.MenuResponse" + "display_name": { + "example": "PFPs", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "slug": { + "example": "pfps", + "type": "string" } }, "type": "object" }, - "papajohns.nearbyResponseDoc": { + "opensea.Chain": { "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" + "arch": { + "example": "EVM", + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.NearbyResponse" + "identifier": { + "example": "ethereum", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "name": { + "example": "Ethereum", + "type": "string" } }, "type": "object" }, - "papajohns.nutritionResponseDoc": { + "opensea.ChainsResponse": { "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.NutritionResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "chains": { + "items": { + "$ref": "#/definitions/opensea.Chain" + }, + "type": "array" } }, "type": "object" }, - "papajohns.storeResponseDoc": { + "opensea.ChartPoint": { "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": { + "example": "ETH", + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.StoreResponse" + "time": { + "example": "2026-08-23T13:11:15.715Z", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "usd": { + "example": 19182.64, + "type": "number" + }, + "value": { + "example": 7.899, + "type": "number" } }, "type": "object" }, - "papajohns.storefrontMenuResponseDoc": { + "opensea.ChartResponse": { "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" + "metric": { + "example": "floor_price", + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.StorefrontMenuResponse" + "points": { + "items": { + "$ref": "#/definitions/opensea.ChartPoint" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "timeframe": { + "example": "SEVEN_DAYS", + "type": "string" } }, "type": "object" }, - "patreon.Creator": { + "opensea.Collection": { "properties": { - "avatar_url": { + "banner_image_url": { "type": "string" }, - "collection_count": { - "type": "integer" + "category": { + "example": "PFPS", + "type": "string" }, - "cover_url": { + "chain": { + "example": "ethereum", "type": "string" }, - "creation_count": { - "type": "integer" + "contract_address": { + "example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", + "type": "string" }, - "currency": { - "example": "EUR", + "created_at": { + "example": "2021-04-22T23:14:24.000Z", "type": "string" }, - "handle": { - "example": "CachyOS", + "description": { "type": "string" }, - "has_public_rss": { - "type": "boolean" + "discord_url": { + "type": "string" }, - "id": { - "example": "8655479", + "external_url": { "type": "string" }, - "is_monthly": { - "type": "boolean" + "floor_price": { + "$ref": "#/definitions/opensea.Price" }, - "is_nsfw": { - "type": "boolean" + "id": { + "example": "46188685bcac4206ace63c9d017abbb7", + "type": "string" }, - "name": { - "example": "CachyOS", + "image_url": { "type": "string" }, - "offers_free_membership": { - "type": "boolean" + "instagram_username": { + "type": "string" }, - "offers_paid_membership": { + "is_verified": { + "example": true, "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/patreon.CreatorSocialLink" - }, - "type": "array" - }, - "summary": { + "name": { + "example": "Bored Ape Yacht Club", "type": "string" }, - "url": { - "example": "https://www.patreon.com/CachyOS", - "type": "string" - } - }, - "type": "object" - }, - "patreon.CreatorSocialLink": { - "properties": { - "label": { - "example": "CachyOS", + "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "platform": { - "example": "twitter", - "type": "string" + "stats": { + "$ref": "#/definitions/opensea.CollectionStats" }, - "url": { - "example": "https://twitter.com/CachyOS", + "top_offer": { + "$ref": "#/definitions/opensea.Price" + }, + "twitter_username": { "type": "string" } }, "type": "object" }, - "patreon.ExploreCreator": { + "opensea.CollectionHoldersResponse": { "properties": { - "avatar_url": { - "type": "string" - }, - "creation_name": { - "example": "creating YouTube videos", - "type": "string" - }, - "id": { - "example": "4270549", - "type": "string" - }, - "is_nsfw": { - "type": "boolean" + "holders": { + "items": { + "$ref": "#/definitions/opensea.Holder" + }, + "type": "array" }, - "name": { - "example": "Reckless Ben", + "next_page_cursor": { "type": "string" }, - "url": { - "example": "https://www.patreon.com/RecklessBen", + "slug": { + "example": "boredapeyachtclub", "type": "string" } }, "type": "object" }, - "patreon.ExploreResult": { + "opensea.CollectionItemsResponse": { "properties": { - "sections": { + "items": { "items": { - "$ref": "#/definitions/patreon.ExploreSection" + "$ref": "#/definitions/opensea.Item" }, "type": "array" }, - "topic": { - "example": "podcasts_and_shows", + "next_page_cursor": { + "type": "string" + }, + "slug": { + "example": "boredapeyachtclub", "type": "string" } }, "type": "object" }, - "patreon.ExploreSection": { + "opensea.CollectionItemsShelfResponse": { "properties": { - "creators": { + "items": { "items": { - "$ref": "#/definitions/patreon.ExploreCreator" + "$ref": "#/definitions/opensea.Item" }, "type": "array" }, - "title": { - "example": "Top creators", + "shelf": { + "example": "best_deals", "type": "string" }, - "type": { - "enum": [ - "popular-campaigns", - "trending-campaigns", - "new-campaigns" - ], - "example": "popular-campaigns", + "slug": { + "example": "boredapeyachtclub", "type": "string" } }, "type": "object" }, - "patreon.MembershipTier": { + "opensea.CollectionOffersResponse": { "properties": { - "amount_cents": { - "example": 500, - "type": "integer" + "next_page_cursor": { + "type": "string" }, - "benefits": { + "offers": { "items": { - "$ref": "#/definitions/patreon.MembershipTierBenefit" + "$ref": "#/definitions/opensea.OfferAggregate" }, "type": "array" }, - "currency": { - "example": "USD", + "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "description": { + "total_currency": { + "example": "WETH", "type": "string" }, - "id": { - "example": "17218833", - "type": "string" + "total_offers": { + "example": 314, + "type": "integer" }, - "title": { - "example": "Supporter", - "type": "string" + "total_value_token": { + "example": 55.0032, + "type": "number" + }, + "total_value_usd": { + "example": 135216.02, + "type": "number" } }, "type": "object" }, - "patreon.MembershipTierBenefit": { + "opensea.CollectionSearchResponse": { "properties": { - "description": { - "type": "string" + "collections": { + "items": { + "$ref": "#/definitions/opensea.CollectionSummary" + }, + "type": "array" }, - "title": { - "example": "Support the project", + "query": { + "example": "ape", "type": "string" } }, "type": "object" }, - "patreon.MembershipTiersResult": { + "opensea.CollectionShelfResponse": { "properties": { - "creator_id": { - "example": "8655479", - "type": "string" - }, - "handle": { - "example": "CachyOS", - "type": "string" - }, - "tiers": { + "collections": { "items": { - "$ref": "#/definitions/patreon.MembershipTier" + "$ref": "#/definitions/opensea.CollectionSummary" }, "type": "array" + }, + "next_page_cursor": { + "type": "string" + }, + "shelf": { + "example": "top_movers", + "type": "string" } }, "type": "object" }, - "patreon.PublicRSSEpisode": { + "opensea.CollectionStats": { "properties": { - "description": { - "type": "string" + "listed_item_count": { + "example": 298, + "type": "integer" }, - "duration": { - "type": "string" + "one_day": { + "$ref": "#/definitions/opensea.WindowStats" }, - "enclosure_type": { - "type": "string" + "one_hour": { + "$ref": "#/definitions/opensea.WindowStats" }, - "enclosure_url": { - "type": "string" + "sales": { + "example": 57369, + "type": "integer" }, - "episode_type": { - "type": "string" + "seven_days": { + "$ref": "#/definitions/opensea.WindowStats" }, - "guid": { - "type": "string" + "thirty_days": { + "$ref": "#/definitions/opensea.WindowStats" }, - "image_url": { - "type": "string" + "total_supply": { + "example": 9998, + "type": "integer" }, - "link": { - "type": "string" + "unique_item_count": { + "example": 9998, + "type": "integer" }, - "published_at": { + "volume_currency": { + "example": "ETH", "type": "string" }, - "title": { - "type": "string" + "volume_native": { + "example": 1580610.96, + "type": "number" + }, + "volume_usd": { + "example": 3756342321.66, + "type": "number" } }, "type": "object" }, - "patreon.PublicRSSFeed": { + "opensea.CollectionSummary": { "properties": { - "author": { - "type": "string" - }, - "campaign_id": { - "example": "80117", + "category": { + "example": "PFPS", "type": "string" }, - "copyright": { + "chain": { + "example": "ethereum", "type": "string" }, - "description": { + "contract_address": { "type": "string" }, - "episodes": { - "items": { - "$ref": "#/definitions/patreon.PublicRSSEpisode" - }, - "type": "array" + "floor_price": { + "$ref": "#/definitions/opensea.Price" }, - "explicit": { + "id": { "type": "string" }, "image_url": { "type": "string" }, - "language": { - "type": "string" + "is_verified": { + "type": "boolean" }, - "link": { - "type": "string" + "markets": { + "items": { + "$ref": "#/definitions/opensea.MarketListing" + }, + "type": "array" }, - "show_id": { - "example": "1322380", + "name": { + "example": "Bored Ape Yacht Club", "type": "string" }, - "title": { + "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "type": { - "type": "string" + "stats": { + "$ref": "#/definitions/opensea.CollectionStats" } }, "type": "object" }, - "patreon.creatorResponseDoc": { + "opensea.CollectionTopSalesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/patreon.Creator" + "sales": { + "items": { + "$ref": "#/definitions/opensea.ActivityEvent" + }, + "type": "array" }, - "msg": { - "example": "success", + "slug": { + "example": "boredapeyachtclub", "type": "string" } }, "type": "object" }, - "patreon.exploreResponseDoc": { + "opensea.CollectionTrait": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/patreon.ExploreResult" - }, - "msg": { - "example": "success", + "comparison_operator": { "type": "string" - } - }, - "type": "object" - }, - "patreon.membershipTiersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/patreon.MembershipTiersResult" }, - "msg": { - "example": "success", + "trait_type": { + "example": "Background", "type": "string" - } - }, - "type": "object" - }, - "patreon.publicRSSResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/patreon.PublicRSSFeed" }, - "msg": { - "example": "success", - "type": "string" + "values": { + "items": { + "$ref": "#/definitions/opensea.TraitValue" + }, + "type": "array" } }, "type": "object" }, - "pcgamer.AuthorResponse": { + "opensea.CollectionTraitOffersResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "next_page_cursor": { + "type": "string" }, - "biography": { + "offers": { "items": { - "type": "string" + "$ref": "#/definitions/opensea.TraitOfferAggregate" }, "type": "array" }, - "has_next_page": { - "type": "boolean" - }, - "job_title": { + "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "name": { + "total_currency": { + "example": "WETH", "type": "string" }, - "page": { + "total_offers": { + "example": 6, "type": "integer" }, - "slug": { - "type": "string" - }, - "social_links": { - "items": { - "$ref": "#/definitions/pcgamer.AuthorSocialLink" - }, - "type": "array" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pcgamer.AuthorSocialLink": { - "properties": { - "platform": { - "type": "string" + "total_value_token": { + "example": 96.13, + "type": "number" }, - "url": { - "type": "string" + "total_value_usd": { + "example": 96.13, + "type": "number" } }, "type": "object" }, - "pcmag.AuthorResponse": { + "opensea.CollectionTraitsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "type": "string" - }, - "expertise": { - "items": { - "$ref": "#/definitions/pcmag.AuthorTopic" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "role": { + "next_page_cursor": { "type": "string" }, "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "social_links": { + "traits": { "items": { - "$ref": "#/definitions/pcmag.AuthorSocialLink" + "$ref": "#/definitions/opensea.CollectionTrait" }, "type": "array" - }, - "url": { - "type": "string" } }, "type": "object" }, - "pcmag.AuthorSocialLink": { + "opensea.CollectionsResponse": { "properties": { - "platform": { - "type": "string" - }, - "url": { - "type": "string" + "collections": { + "items": { + "$ref": "#/definitions/opensea.CollectionSummary" + }, + "type": "array" } }, "type": "object" }, - "pcmag.AuthorTopic": { + "opensea.DepthLevel": { "properties": { - "name": { - "type": "string" + "price": { + "$ref": "#/definitions/opensea.Price" }, - "url": { - "type": "string" + "quantity": { + "example": 2, + "type": "integer" } }, "type": "object" }, - "people.AuthorInfoItem": { + "opensea.DepthResponse": { "properties": { - "label": { - "type": "string" - }, - "url": { + "chain": { "type": "string" }, - "value": { + "contract_address": { "type": "string" - } - }, - "type": "object" - }, - "people.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/people.HeadlineItem" - }, - "type": "array" }, - "biography": { + "listings": { "items": { - "type": "string" + "$ref": "#/definitions/opensea.DepthLevel" }, "type": "array" }, - "info": { + "offers": { "items": { - "$ref": "#/definitions/people.AuthorInfoItem" + "$ref": "#/definitions/opensea.DepthLevel" }, "type": "array" }, - "job_title": { - "type": "string" - }, - "name": { + "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "url": { + "token_id": { "type": "string" } }, "type": "object" }, - "people.HeadlineItem": { + "opensea.Drop": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { + "chain": { + "example": "base", "type": "string" }, - "summary": { - "type": "string" + "collection": { + "$ref": "#/definitions/opensea.CollectionSummary" }, - "title": { + "contract_address": { "type": "string" }, "type": { - "type": "string" - }, - "url": { + "example": "Erc721SeaDropV1", "type": "string" } }, "type": "object" }, - "phillyinquirer.AuthorResponse": { + "opensea.DropsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { + "drops": { "items": { - "type": "string" + "$ref": "#/definitions/opensea.Drop" }, "type": "array" }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "role": { - "type": "string" - }, - "slug": { + "next_page_cursor": { "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/phillyinquirer.AuthorSocialLink" - }, - "type": "array" - }, - "url": { + "type": { + "example": "UPCOMING", "type": "string" } }, "type": "object" }, - "phillyinquirer.AuthorSocialLink": { + "opensea.Holder": { "properties": { - "platform": { - "type": "string" + "account": { + "$ref": "#/definitions/opensea.Account" }, - "url": { - "type": "string" + "quantity": { + "example": 143, + "type": "integer" } }, "type": "object" }, - "philstar.AuthorArticle": { + "opensea.Item": { "properties": { - "published_at": { + "best_listing": { + "$ref": "#/definitions/opensea.Price" + }, + "best_offer": { + "$ref": "#/definitions/opensea.Price" + }, + "chain": { + "example": "ethereum", "type": "string" }, - "section": { + "collection_name": { + "example": "Bored Ape Yacht Club", "type": "string" }, - "summary": { + "collection_slug": { + "example": "boredapeyachtclub", "type": "string" }, - "title": { + "contract_address": { "type": "string" }, - "url": { + "created_at": { + "type": "string" + }, + "description": { "type": "string" - } - }, - "type": "object" - }, - "philstar.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/philstar.AuthorArticle" - }, - "type": "array" }, "id": { "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "photo_url": { + "is_fungible": { + "type": "boolean" + }, + "last_sale": { + "$ref": "#/definitions/opensea.Price" + }, + "last_sale_at": { "type": "string" }, - "url": { + "marketplace": { + "example": "opensea", + "type": "string" + }, + "name": { + "example": "#1", + "type": "string" + }, + "owner": { + "$ref": "#/definitions/opensea.Account" + }, + "rarity_rank": { + "example": 1204, + "type": "integer" + }, + "token_id": { + "example": "1", "type": "string" + }, + "traits": { + "items": { + "$ref": "#/definitions/opensea.Trait" + }, + "type": "array" } }, "type": "object" }, - "phonearena.AuthorResponse": { + "opensea.ItemOrdersResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "name": { + "chain": { + "example": "ethereum", "type": "string" }, - "role": { + "contract_address": { + "example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", "type": "string" }, - "slug": { + "next_page_cursor": { "type": "string" }, - "social_links": { + "orders": { "items": { - "$ref": "#/definitions/phonearena.AuthorSocialLink" + "$ref": "#/definitions/opensea.Order" }, "type": "array" }, - "url": { + "token_id": { + "example": "1", "type": "string" } }, "type": "object" }, - "phonearena.AuthorSocialLink": { + "opensea.ItemOwner": { "properties": { - "platform": { - "type": "string" + "account": { + "$ref": "#/definitions/opensea.Account" }, - "url": { + "quantity": { + "example": "1", "type": "string" } }, "type": "object" }, - "pinterest.Board": { + "opensea.ItemOwnersResponse": { "properties": { - "cover_image_url": { + "chain": { + "example": "ethereum", "type": "string" }, - "description": { + "contract_address": { "type": "string" }, - "follower_count": { - "type": "integer" + "has_more": { + "type": "boolean" }, - "id": { + "next_page_cursor": { "type": "string" }, - "name": { - "type": "string" + "owners": { + "items": { + "$ref": "#/definitions/opensea.ItemOwner" + }, + "type": "array" }, - "owner_username": { + "token_id": { + "example": "1", "type": "string" }, - "pin_count": { + "total_owners": { + "example": 1, "type": "integer" + } + }, + "type": "object" + }, + "opensea.ItemSearchResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/opensea.Item" + }, + "type": "array" }, - "privacy": { + "query": { + "example": "gold", "type": "string" }, - "url": { + "slug": { + "example": "boredapeyachtclub", "type": "string" } }, "type": "object" }, - "pinterest.BoardResponse": { + "opensea.MarketListing": { "properties": { - "cover_image_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "follower_count": { + "listed_item_count": { + "example": 190, "type": "integer" }, - "id": { + "marketplace": { + "example": "opensea", "type": "string" }, "name": { - "type": "string" - }, - "owner_username": { - "type": "string" - }, - "pin_count": { - "type": "integer" - }, - "pins": { - "items": { - "$ref": "#/definitions/pinterest.PinSummary" - }, - "type": "array" - }, - "privacy": { - "type": "string" - }, - "url": { + "example": "OpenSea", "type": "string" } }, "type": "object" }, - "pinterest.CategoriesResponse": { + "opensea.OfferAggregate": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/pinterest.Category" - }, - "type": "array" + "id": { + "type": "string" + }, + "price": { + "$ref": "#/definitions/opensea.Price" + }, + "total_offers": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "pinterest.Category": { + "opensea.Order": { "properties": { + "end_time": { + "type": "string" + }, "id": { "type": "string" }, - "name": { + "maker": { + "$ref": "#/definitions/opensea.Account" + }, + "marketplace": { + "example": "opensea", "type": "string" }, - "slug": { + "price": { + "$ref": "#/definitions/opensea.Price" + }, + "quantity": { + "example": "1", + "type": "string" + }, + "start_time": { "type": "string" } }, "type": "object" }, - "pinterest.IdeaResponse": { + "opensea.Price": { "properties": { - "description": { - "type": "string" + "amount": { + "example": 7.85, + "type": "number" }, - "follower_count": { - "type": "integer" + "chain": { + "example": "ethereum", + "type": "string" }, - "id": { + "contract_address": { + "example": "0x0000000000000000000000000000000000000000", "type": "string" }, - "name": { + "currency": { + "example": "ETH", "type": "string" }, - "pins": { - "items": { - "$ref": "#/definitions/pinterest.PinSummary" - }, - "type": "array" + "usd": { + "example": 19295.3, + "type": "number" } }, "type": "object" }, - "pinterest.PinDetail": { + "opensea.Profile": { "properties": { - "board_name": { + "address": { + "example": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "type": "string" }, - "comment_count": { - "type": "integer" - }, - "created_at": { + "banner_image_url": { "type": "string" }, - "description": { + "display_name": { + "example": "vitalik.eth", "type": "string" }, - "domain": { + "external_url": { "type": "string" }, - "dominant_color": { + "image_url": { "type": "string" }, - "id": { - "type": "string" + "is_verified": { + "type": "boolean" }, - "image_url": { + "kind": { + "example": "WALLET", "type": "string" }, - "link": { + "twitter_username": { "type": "string" }, - "pinner_username": { + "username": { "type": "string" + } + }, + "type": "object" + }, + "opensea.ProfileCollection": { + "properties": { + "collection": { + "$ref": "#/definitions/opensea.CollectionSummary" }, - "repin_count": { + "item_count": { + "example": 1, "type": "integer" }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "total_quantity": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "pinterest.PinSummary": { + "opensea.ProfileCollectionsResponse": { "properties": { - "board_name": { + "address": { "type": "string" }, - "description": { - "type": "string" + "collections": { + "items": { + "$ref": "#/definitions/opensea.ProfileCollection" + }, + "type": "array" }, - "domain": { + "next_page_cursor": { "type": "string" - }, - "dominant_color": { + } + }, + "type": "object" + }, + "opensea.ProfileItemsResponse": { + "properties": { + "address": { + "example": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "type": "string" }, - "id": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/opensea.Item" + }, + "type": "array" }, - "image_url": { + "next_page_cursor": { "type": "string" }, - "link": { + "total_items": { + "example": 3441, + "type": "integer" + } + }, + "type": "object" + }, + "opensea.RankedCollection": { + "properties": { + "collection": { + "$ref": "#/definitions/opensea.CollectionSummary" + }, + "score": { + "example": "28.3713030851", "type": "string" + } + }, + "type": "object" + }, + "opensea.RankingsResponse": { + "properties": { + "collections": { + "items": { + "$ref": "#/definitions/opensea.RankedCollection" + }, + "type": "array" }, - "pinner_username": { + "next_page_cursor": { "type": "string" }, - "title": { + "ranking": { + "example": "TRENDING", "type": "string" }, - "url": { + "timeframe": { + "example": "ONE_DAY", "type": "string" } }, "type": "object" }, - "pinterest.SearchResponse": { + "opensea.SocialProofResponse": { "properties": { - "pins": { + "notable_collectors": { "items": { - "$ref": "#/definitions/pinterest.PinSummary" + "$ref": "#/definitions/opensea.Account" }, "type": "array" }, - "query": { + "slug": { + "example": "boredapeyachtclub", "type": "string" + }, + "social_count": { + "example": 5605, + "type": "integer" } }, "type": "object" }, - "pinterest.User": { + "opensea.Trait": { "properties": { - "about": { + "trait_type": { + "example": "Background", "type": "string" }, - "avatar_url": { + "value": { + "example": "Orange", "type": "string" - }, - "board_count": { - "type": "integer" - }, - "follower_count": { - "type": "integer" - }, - "following_count": { - "type": "integer" - }, - "full_name": { + } + }, + "type": "object" + }, + "opensea.TraitOfferAggregate": { + "properties": { + "id": { "type": "string" }, - "is_verified_merchant": { - "type": "boolean" + "price": { + "$ref": "#/definitions/opensea.Price" }, - "pin_count": { + "total_offers": { + "example": 1, "type": "integer" }, - "username": { + "trait_type": { + "example": "Fur", "type": "string" }, - "website_url": { + "trait_value": { + "example": "Solid Gold", "type": "string" } }, "type": "object" }, - "pinterest.UserBoardsResponse": { + "opensea.TraitValue": { "properties": { - "boards": { - "items": { - "$ref": "#/definitions/pinterest.Board" - }, - "type": "array" + "count": { + "example": 1170, + "type": "integer" }, - "username": { + "value": { + "example": "Gray", "type": "string" } }, "type": "object" }, - "pinterest.UserPinsResponse": { + "opensea.WindowStats": { "properties": { - "pins": { - "items": { - "$ref": "#/definitions/pinterest.PinSummary" - }, - "type": "array" + "floor_price_change": { + "example": 0.0065, + "type": "number" }, - "username": { - "type": "string" + "sales": { + "example": 42, + "type": "integer" + }, + "volume_native": { + "example": 318.4, + "type": "number" + }, + "volume_usd": { + "example": 782344.1, + "type": "number" } }, "type": "object" }, - "pinterest.boardResponseDoc": { + "opensea.activityResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pinterest.BoardResponse" + "$ref": "#/definitions/opensea.ActivityResponse" }, "msg": { "example": "OK", @@ -114394,14 +116702,14 @@ }, "type": "object" }, - "pinterest.categoriesResponseDoc": { + "opensea.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pinterest.CategoriesResponse" + "$ref": "#/definitions/opensea.CategoriesResponse" }, "msg": { "example": "OK", @@ -114410,14 +116718,14 @@ }, "type": "object" }, - "pinterest.ideaResponseDoc": { + "opensea.chainsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pinterest.IdeaResponse" + "$ref": "#/definitions/opensea.ChainsResponse" }, "msg": { "example": "OK", @@ -114426,14 +116734,14 @@ }, "type": "object" }, - "pinterest.pinResponseDoc": { + "opensea.chartResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pinterest.PinDetail" + "$ref": "#/definitions/opensea.ChartResponse" }, "msg": { "example": "OK", @@ -114442,14 +116750,14 @@ }, "type": "object" }, - "pinterest.searchResponseDoc": { + "opensea.collectionHoldersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pinterest.SearchResponse" + "$ref": "#/definitions/opensea.CollectionHoldersResponse" }, "msg": { "example": "OK", @@ -114458,14 +116766,14 @@ }, "type": "object" }, - "pinterest.userBoardsResponseDoc": { + "opensea.collectionItemsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pinterest.UserBoardsResponse" + "$ref": "#/definitions/opensea.CollectionItemsResponse" }, "msg": { "example": "OK", @@ -114474,14 +116782,14 @@ }, "type": "object" }, - "pinterest.userPinsResponseDoc": { + "opensea.collectionOffersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pinterest.UserPinsResponse" + "$ref": "#/definitions/opensea.CollectionOffersResponse" }, "msg": { "example": "OK", @@ -114490,14 +116798,14 @@ }, "type": "object" }, - "pinterest.userResponseDoc": { + "opensea.collectionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pinterest.User" + "$ref": "#/definitions/opensea.Collection" }, "msg": { "example": "OK", @@ -114506,116 +116814,94 @@ }, "type": "object" }, - "pitchbook.DataTable": { + "opensea.collectionSearchResponseDoc": { "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "example": "Investors", - "type": "string" - }, - "row_ids": { - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "rows": { - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "array" + "data": { + "$ref": "#/definitions/opensea.CollectionSearchResponse" }, - "total": { - "example": 23, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "pitchbook.FAQ": { + "opensea.collectionShelfResponseDoc": { "properties": { - "answer": { - "example": "Thinking Machines Lab was founded in 2024.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "question": { - "example": "When was Thinking Machines Lab founded?", + "data": { + "$ref": "#/definitions/opensea.CollectionShelfResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "pitchbook.ProfileResponse": { + "opensea.collectionTopSalesResponseDoc": { "properties": { - "contact": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "description": { - "type": "string" - }, - "faqs": { - "items": { - "$ref": "#/definitions/pitchbook.FAQ" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { - "example": "2026-07-08T20:00:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/opensea.CollectionTopSalesResponse" }, - "id": { - "example": "752821-12", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "opensea.collectionTraitOffersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "kind": { - "example": "company", - "type": "string" + "data": { + "$ref": "#/definitions/opensea.CollectionTraitOffersResponse" }, - "name": { - "example": "Thinking Machines Lab", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "opensea.collectionTraitsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "overview": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "data": { + "$ref": "#/definitions/opensea.CollectionTraitsResponse" }, - "source_url": { - "example": "https://pitchbook.com/profiles/company/752821-12", + "msg": { + "example": "OK", "type": "string" - }, - "tables": { - "items": { - "$ref": "#/definitions/pitchbook.DataTable" - }, - "type": "array" } }, "type": "object" }, - "pitchbook.advisorResponseDoc": { + "opensea.collectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" + "$ref": "#/definitions/opensea.CollectionsResponse" }, "msg": { "example": "OK", @@ -114624,14 +116910,14 @@ }, "type": "object" }, - "pitchbook.companyResponseDoc": { + "opensea.depthResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" + "$ref": "#/definitions/opensea.DepthResponse" }, "msg": { "example": "OK", @@ -114640,14 +116926,14 @@ }, "type": "object" }, - "pitchbook.fundResponseDoc": { + "opensea.dropsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" + "$ref": "#/definitions/opensea.DropsResponse" }, "msg": { "example": "OK", @@ -114656,14 +116942,14 @@ }, "type": "object" }, - "pitchbook.investorResponseDoc": { + "opensea.itemOrdersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" + "$ref": "#/definitions/opensea.ItemOrdersResponse" }, "msg": { "example": "OK", @@ -114672,14 +116958,14 @@ }, "type": "object" }, - "pitchbook.limitedPartnerResponseDoc": { + "opensea.itemOwnersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" + "$ref": "#/definitions/opensea.ItemOwnersResponse" }, "msg": { "example": "OK", @@ -114688,6413 +116974,6331 @@ }, "type": "object" }, - "pizzahut.Address": { + "opensea.itemResponseDoc": { "properties": { - "address1": { - "example": "932 8th Ave", - "type": "string" - }, - "address2": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "city": { - "example": "New York", - "type": "string" + "data": { + "$ref": "#/definitions/opensea.Item" }, - "country_code": { - "example": "US", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "opensea.itemSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "latitude": { - "example": 40.7655, - "type": "number" - }, - "longitude": { - "example": -73.9835, - "type": "number" + "data": { + "$ref": "#/definitions/opensea.ItemSearchResponse" }, - "phone": { - "example": "+19296452154", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "opensea.itemsShelfResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "postal_code": { - "example": "10019", - "type": "string" + "data": { + "$ref": "#/definitions/opensea.CollectionItemsShelfResponse" }, - "state": { - "example": "NY", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "pizzahut.BundleChoice": { + "opensea.profileCollectionsResponseDoc": { "properties": { - "choice_code": { - "example": "748", - "type": "string" - }, - "max_allowed_selections": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "min_allowed_selections": { - "example": 1, - "type": "integer" + "data": { + "$ref": "#/definitions/opensea.ProfileCollectionsResponse" }, - "name": { - "example": "1st Pizza", + "msg": { + "example": "OK", "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/pizzahut.BundleChoiceVariant" - }, - "type": "array" } }, "type": "object" }, - "pizzahut.BundleChoiceVariant": { + "opensea.profileItemsResponseDoc": { "properties": { - "name": { - "example": "Medium Hand-Tossed Create Your Own 1-Top Pizza", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "upcharge": { - "$ref": "#/definitions/pizzahut.Money" + "data": { + "$ref": "#/definitions/opensea.ProfileItemsResponse" }, - "variant_code": { - "example": "variant_CLSS001_010BCYO1T_SIZE050M_BASE020H", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "pizzahut.BundleChoicesResponse": { + "opensea.profileResponseDoc": { "properties": { - "bundle_code": { - "example": "MEAL501BD", - "type": "string" - }, - "channel": { - "example": "WEB", - "type": "string" - }, - "choice_count": { - "example": 4, + "code": { + "example": 200, "type": "integer" }, - "choices": { - "items": { - "$ref": "#/definitions/pizzahut.BundleChoice" - }, - "type": "array" + "data": { + "$ref": "#/definitions/opensea.Profile" }, - "description": { - "example": "All your faves - 2 medium 1-topping pizzas, 8 boneless wings, and 5 breadsticks!", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "opensea.rankingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/opensea.RankingsResponse" }, - "name": { - "example": "Big Dinner Box", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "opensea.socialProofResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/opensea.SocialProofResponse" }, - "store_number": { - "example": "040937", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "pizzahut.DeliveryEstimateResponse": { + "opentable.Cuisine": { "properties": { - "delivery_provider": { - "example": "INTERNAL", + "id": { "type": "string" }, - "dropoff_at": { + "name": { + "example": "Steakhouse", "type": "string" }, - "fee": { - "allOf": [ - { - "$ref": "#/definitions/pizzahut.Money" - } - ], - "description": "Fee is the total delivery fee; Fees breaks it down by line item." + "primary": { + "type": "boolean" + } + }, + "type": "object" + }, + "opentable.Menu": { + "properties": { + "currency": { + "type": "string" }, - "fees": { + "sections": { "items": { - "$ref": "#/definitions/pizzahut.DeliveryFeeLine" + "$ref": "#/definitions/opentable.MenuSection" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "pickup_at": { - "type": "string" - }, - "reason": { - "example": "The requested StoreDeliveryProvider has not be enabled at this store", - "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" - }, - "source_url": { - "type": "string" - }, - "store_number": { - "example": "040937", + "title": { "type": "string" } }, "type": "object" }, - "pizzahut.DeliveryFeeLine": { + "opentable.MenuItem": { "properties": { - "amount": { - "$ref": "#/definitions/pizzahut.Money" + "description": { + "type": "string" }, - "name": { - "example": "Delivery fee", + "price": { "type": "string" }, - "type": { - "example": "DELIVERY_FEE", + "title": { "type": "string" } }, "type": "object" }, - "pizzahut.DeliveryProvider": { + "opentable.MenuSection": { "properties": { - "enabled": { - "example": true, - "type": "boolean" + "items": { + "items": { + "$ref": "#/definitions/opentable.MenuItem" + }, + "type": "array" }, - "provider": { - "example": "INTERNAL", + "title": { "type": "string" } }, "type": "object" }, - "pizzahut.MenuCategory": { + "opentable.MenusResponse": { "properties": { - "category_code": { - "example": "pizza", - "type": "string" - }, - "description": { - "type": "string" - }, - "items": { + "menus": { "items": { - "$ref": "#/definitions/pizzahut.MenuItem" + "$ref": "#/definitions/opentable.Menu" }, "type": "array" }, - "name": { - "example": "Pizza", + "restaurant_id": { "type": "string" } }, "type": "object" }, - "pizzahut.MenuItem": { + "opentable.PriceBand": { "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" - }, - "code": { - "example": "CLSS001P|PROD220P", + "band": { + "example": "3", "type": "string" }, - "description": { + "label": { + "example": "$31 to $50", "type": "string" - }, - "image_url": { + } + }, + "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" }, - "name": { - "example": "Pepperoni Pizza", + "city": { "type": "string" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" - }, - "type": { - "example": "product", + "country": { "type": "string" }, - "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", + "country_code": { "type": "string" }, - "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/pizzahut.MenuVariant" - }, - "type": "array" - } - }, - "type": "object" - }, - "pizzahut.MenuResponse": { - "properties": { - "categories": { + "cuisines": { "items": { - "$ref": "#/definitions/pizzahut.MenuCategory" + "$ref": "#/definitions/opentable.Cuisine" }, "type": "array" }, - "channel": { - "example": "WEB", - "type": "string" - }, - "currency": { - "example": "USD", + "currency_code": { "type": "string" }, - "fetched_at": { + "description": { "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" - }, - "menu_id": { - "example": "22590d80-9482-4f7b-9594-d7ba2885b928", + "dining_style": { "type": "string" }, - "source_url": { + "dress_code": { "type": "string" }, - "store_number": { - "example": "040937", + "email": { "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).", + "features": { "items": { - "$ref": "#/definitions/pizzahut.MenuItem" + "type": "string" }, "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", + "hours": { "type": "string" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" - }, - "variant_code": { - "example": "variant_CLSS001_220P_SIZE060L_BASE431S", + "id": { "type": "string" - } - }, - "type": "object" - }, - "pizzahut.Modifier": { - "properties": { - "modifier_code": { - "example": "CLSS001P|TOPP012P", + }, + "latitude": { + "type": "number" + }, + "line1": { "type": "string" }, - "name": { - "example": "Pepperoni", + "line2": { "type": "string" }, - "weights": { - "items": { - "$ref": "#/definitions/pizzahut.ModifierWeight" - }, - "type": "array" - } - }, - "type": "object" - }, - "pizzahut.ModifierSlot": { - "properties": { - "max_allowed_selections": { - "example": 5, - "type": "integer" + "longitude": { + "type": "number" }, - "min_allowed_selections": { - "example": 0, + "max_advance_days": { "type": "integer" }, - "modifiers": { - "items": { - "$ref": "#/definitions/pizzahut.Modifier" - }, - "type": "array" + "max_party_size": { + "type": "integer" }, "name": { - "example": "Pizza Toppings", "type": "string" }, - "slot_code": { - "example": "slot_pizza_toppings", + "phone_number": { "type": "string" - } - }, - "type": "object" - }, - "pizzahut.ModifierWeight": { - "properties": { - "modifier_weight_code": { - "example": "CLSS001P|TOPP200XC", + }, + "photos_count": { + "type": "integer" + }, + "postal_code": { "type": "string" }, - "name": { - "example": "Extra Cheese", + "price_band": { + "$ref": "#/definitions/opentable.PriceBand" + }, + "reviews": { + "$ref": "#/definitions/opentable.ReviewSummary" + }, + "state": { "type": "string" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" + "timeslots": { + "items": { + "$ref": "#/definitions/opentable.Timeslot" + }, + "type": "array" + }, + "website": { + "type": "string" } }, "type": "object" }, - "pizzahut.ModifiersResponse": { + "opentable.Review": { "properties": { - "channel": { - "example": "WEB", + "author": { "type": "string" }, - "fetched_at": { + "author_metro": { "type": "string" }, - "name": { - "example": "Large Hand-Tossed Create Your Own 1-Top Pizza", + "id": { "type": "string" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" - }, - "slot_count": { - "example": 6, - "type": "integer" + "posted_date": { + "type": "string" }, - "slots": { - "items": { - "$ref": "#/definitions/pizzahut.ModifierSlot" - }, - "type": "array" + "recommended": { + "type": "boolean" }, - "source_url": { + "reservation_date": { "type": "string" }, - "store_number": { - "example": "040937", - "type": "string" + "statistics": { + "$ref": "#/definitions/opentable.ReviewStatistics" }, - "variant_code": { - "example": "variant_CLSS001_010BCYO1T_SIZE060L_BASE020H", + "text": { "type": "string" } }, "type": "object" }, - "pizzahut.Money": { + "opentable.ReviewStatistics": { "properties": { - "amount": { - "example": 20.99, + "ambience": { "type": "number" }, - "amount_cents": { - "example": 2099, - "type": "integer" + "food": { + "type": "number" }, - "currency_code": { - "example": "USD", - "type": "string" + "noise": { + "type": "number" + }, + "overall_rating": { + "type": "number" + }, + "service": { + "type": "number" + }, + "value": { + "type": "number" } }, "type": "object" }, - "pizzahut.OccasionHours": { + "opentable.ReviewSummary": { "properties": { - "allow_tip": { - "example": true, - "type": "boolean" + "ambience": { + "type": "number" }, - "enabled": { - "example": true, - "type": "boolean" + "count": { + "type": "integer" }, - "max_order_amount": { - "$ref": "#/definitions/pizzahut.Money" + "food": { + "type": "number" }, - "min_order_amount": { - "$ref": "#/definitions/pizzahut.Money" + "noise": { + "type": "number" }, - "occasion": { - "example": "CARRYOUT", - "type": "string" + "overall_rating": { + "example": 4.8, + "type": "number" }, - "payment_types": { - "items": { - "$ref": "#/definitions/pizzahut.PaymentType" - }, - "type": "array" + "review_count": { + "type": "integer" }, - "windows": { - "items": { - "$ref": "#/definitions/pizzahut.TimeWindow" - }, - "type": "array" + "service": { + "type": "number" + }, + "value": { + "type": "number" } }, "type": "object" }, - "pizzahut.PaymentType": { + "opentable.ReviewsResponse": { "properties": { - "name": { - "example": "APPLEPAY", - "type": "string" + "page": { + "type": "integer" }, - "type": { - "example": "CARD", + "restaurant_id": { "type": "string" + }, + "reviews": { + "items": { + "$ref": "#/definitions/opentable.Review" + }, + "type": "array" } }, "type": "object" }, - "pizzahut.Store": { + "opentable.SearchResponse": { "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" - }, - "address": { - "$ref": "#/definitions/pizzahut.Address" - }, - "archived": { - "example": false, - "type": "boolean" - }, - "delivery_providers": { + "results": { "items": { - "$ref": "#/definitions/pizzahut.DeliveryProvider" + "$ref": "#/definitions/opentable.SearchResult" }, "type": "array" }, - "name": { - "example": "040937", - "type": "string" - }, - "store_number": { - "example": "040937", - "type": "string" - }, - "timezone": { - "example": "America/New_York", + "term": { "type": "string" } }, "type": "object" }, - "pizzahut.StoreResponse": { + "opentable.SearchResult": { "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" + "availability_date_time": { + "description": "AvailabilityDateTime/Timeslots mirror RestaurantResponse's inline\navailability -- search returns the same nested shape per result.", + "type": "string" }, - "address": { - "$ref": "#/definitions/pizzahut.Address" + "city": { + "type": "string" }, - "archived": { - "example": false, - "type": "boolean" + "country": { + "type": "string" }, - "delivery_providers": { - "items": { - "$ref": "#/definitions/pizzahut.DeliveryProvider" - }, - "type": "array" + "description": { + "type": "string" }, - "fetched_at": { + "id": { "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 -- 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/pizzahut.OccasionHours" - }, - "type": "array" + "latitude": { + "type": "number" }, - "name": { - "example": "040937", + "line1": { "type": "string" }, - "source_url": { + "line2": { "type": "string" }, - "store_number": { - "example": "040937", - "type": "string" + "longitude": { + "type": "number" }, - "timezone": { - "example": "America/New_York", + "name": { "type": "string" - } - }, - "type": "object" - }, - "pizzahut.StoresResponse": { - "properties": { - "count": { - "example": 5, - "type": "integer" }, - "fetched_at": { + "postal_code": { "type": "string" }, - "has_more": { - "example": false, - "type": "boolean" - }, - "source_url": { + "state": { "type": "string" }, - "stores": { + "timeslots": { "items": { - "$ref": "#/definitions/pizzahut.Store" + "$ref": "#/definitions/opentable.Timeslot" }, "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": { + "opentable.Timeslot": { "properties": { - "blackout": { - "example": false, + "available": { "type": "boolean" }, - "days": { - "example": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "items": { - "type": "integer" - }, - "type": "array" - }, - "duration": { - "example": "16:00:00", + "date_time": { + "example": "2026-08-03T19:00", "type": "string" }, - "start_time": { - "example": "11:00:00", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.bundleChoicesResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "points": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pizzahut.BundleChoicesResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "pizzahut.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", + "price_amount": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pizzahut.DeliveryEstimateResponse" + "redemption_tier": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "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" }, - "pizzahut.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/pizzahut.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" }, - "pizzahut.modifiersResponseDoc": { + "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/pizzahut.ModifiersResponse" + "$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" }, - "pizzahut.storeResponseDoc": { + "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/pizzahut.StoreResponse" + "$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" }, - "pizzahut.storesResponseDoc": { + "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/pizzahut.StoresResponse" + "$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" }, - "playstation.AddOn": { + "otto.CategoriesResponse": { "properties": { - "classification": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/otto.Category" + }, + "type": "array" }, - "name": { - "type": "string" + "count": { + "type": "integer" }, - "price": { - "$ref": "#/definitions/playstation.DetailPrice" + "fetched_at": { + "type": "string" }, - "product_id": { + "source_url": { "type": "string" } }, "type": "object" }, - "playstation.CollectionLink": { + "otto.Category": { "properties": { - "category_id": { - "type": "string" - }, - "link_type": { + "name": { "type": "string" }, - "name": { + "url": { "type": "string" } }, "type": "object" }, - "playstation.ConceptDetail": { + "otto.Product": { "properties": { - "add_ons": { - "items": { - "$ref": "#/definitions/playstation.AddOn" - }, - "type": "array" - }, - "content_rating": { - "$ref": "#/definitions/playstation.ContentRating" - }, - "default_product_id": { - "type": "string" - }, - "description": { + "brand": { "type": "string" }, - "editions": { - "items": { - "$ref": "#/definitions/playstation.Edition" - }, - "type": "array" - }, - "genres": { + "colors": { "items": { "type": "string" }, "type": "array" }, - "id": { - "type": "string" - }, - "invariant_name": { + "currency": { "type": "string" }, - "media": { + "images": { "items": { - "$ref": "#/definitions/playstation.Media" + "type": "string" }, "type": "array" }, "name": { "type": "string" }, - "platforms": { + "price": { + "type": "number" + }, + "sizes": { "items": { "type": "string" }, "type": "array" }, - "price": { - "$ref": "#/definitions/playstation.DetailPrice" - }, - "publisher": { - "type": "string" - }, - "release_date": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "otto.ProductResponse": { + "properties": { + "browser_rendered": { + "type": "boolean" }, - "source_url": { + "fetched_at": { "type": "string" }, - "star_rating": { - "$ref": "#/definitions/playstation.StarRating" + "product": { + "$ref": "#/definitions/otto.Product" } }, "type": "object" }, - "playstation.ConceptReview": { + "otto.ProductSummary": { "properties": { - "author": { - "$ref": "#/definitions/playstation.ReviewAuthor" - }, - "comment": { + "brand": { "type": "string" }, - "edition_name": { + "currency": { "type": "string" }, - "helpful_count": { - "type": "integer" - }, - "id": { + "image": { "type": "string" }, - "is_spoiler": { - "type": "boolean" - }, - "last_updated": { + "name": { "type": "string" }, - "product_name": { + "price": { + "type": "number" + }, + "product_id": { "type": "string" }, - "rating": { - "type": "integer" + "url": { + "type": "string" }, - "title": { + "variation_id": { "type": "string" } }, "type": "object" }, - "playstation.ConceptReviewsResponse": { + "otto.SearchResponse": { "properties": { - "concept_id": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "page_size": { + "count": { "type": "integer" }, - "rating": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "returned": { + "offset": { "type": "integer" }, - "reviews": { + "products": { "items": { - "$ref": "#/definitions/playstation.ConceptReview" + "$ref": "#/definitions/otto.ProductSummary" }, "type": "array" }, - "sort": { + "query": { "type": "string" }, "source_url": { "type": "string" - }, - "star_rating": { - "$ref": "#/definitions/playstation.StarRating" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "playstation.ContentRating": { + "otto.categoriesResponseDoc": { "properties": { - "authority": { - "type": "string" - }, - "description": { - "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.", - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/otto.CategoriesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "playstation.DetailPrice": { + "otto.productResponseDoc": { "properties": { - "applicability": { - "type": "string" - }, - "base_price": { - "type": "string" - }, - "base_price_value": { + "code": { + "example": 200, "type": "integer" }, - "currency_code": { - "type": "string" - }, - "discount_text": { - "type": "string" + "data": { + "$ref": "#/definitions/otto.ProductResponse" }, - "discounted_price": { + "msg": { + "example": "OK", "type": "string" - }, - "discounted_value": { + } + }, + "type": "object" + }, + "otto.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "end_time": { - "type": "string" - }, - "is_exclusive": { - "type": "boolean" - }, - "is_free": { - "type": "boolean" - }, - "is_tied_to_subscription": { - "type": "boolean" - }, - "service_branding": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/otto.SearchResponse" }, - "upsell_text": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "playstation.Edition": { + "pagesix.AuthorResponse": { "properties": { - "classification": { - "type": "string" - }, - "name": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "platforms": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "price": { - "$ref": "#/definitions/playstation.DetailPrice" - }, - "product_id": { - "type": "string" - } - }, - "type": "object" - }, - "playstation.Facet": { - "properties": { - "display_name": { + "image_url": { "type": "string" }, "name": { "type": "string" }, - "values": { + "social_links": { "items": { - "$ref": "#/definitions/playstation.FacetValue" + "$ref": "#/definitions/pagesix.AuthorSocialLink" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "playstation.FacetValue": { + "pagesix.AuthorSocialLink": { "properties": { - "count": { - "type": "integer" - }, - "display_name": { + "type": { "type": "string" }, - "key": { + "url": { "type": "string" } }, "type": "object" }, - "playstation.GridResponse": { + "pandamart.CategoriesResponse": { "properties": { - "count": { - "type": "integer" - }, - "facets": { - "items": { - "$ref": "#/definitions/playstation.Facet" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "items": { + "categories": { "items": { - "$ref": "#/definitions/playstation.StoreItem" + "$ref": "#/definitions/pandamart.Category" }, "type": "array" }, - "name": { + "code": { "type": "string" }, - "next_page": { - "type": "integer" - }, - "page_info": { - "$ref": "#/definitions/playstation.PageInfo" - }, - "source_url": { + "market": { "type": "string" } }, "type": "object" }, - "playstation.ListPrice": { + "pandamart.Category": { "properties": { - "base_price": { + "id": { "type": "string" }, - "discount_text": { + "image_url": { "type": "string" }, - "discounted_price": { + "name": { "type": "string" }, - "is_exclusive": { - "type": "boolean" - }, - "is_free": { - "type": "boolean" - }, - "is_tied_to_subscription": { - "type": "boolean" - }, - "service_branding": { - "items": { - "type": "string" - }, - "type": "array" + "product_count": { + "type": "integer" }, - "upsell_service_branding": { + "sub_categories": { "items": { - "type": "string" + "$ref": "#/definitions/pandamart.Category" }, "type": "array" - }, - "upsell_text": { - "type": "string" } }, "type": "object" }, - "playstation.Media": { + "pandamart.Chain": { "properties": { - "role": { - "type": "string" - }, - "type": { + "code": { "type": "string" }, - "url": { + "name": { "type": "string" } }, "type": "object" }, - "playstation.MerchResponse": { + "pandamart.Product": { "properties": { - "collections": { - "items": { - "$ref": "#/definitions/playstation.CollectionLink" - }, - "type": "array" - }, - "count": { - "type": "integer" + "description": { + "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/playstation.StoreItem" - }, - "type": "array" + "discount_badge": { + "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/playstation.Section" - }, - "type": "array" + "id": { + "type": "string" }, - "source_url": { + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "playstation.PageInfo": { - "properties": { - "is_last": { + }, + "is_available": { "type": "boolean" }, - "offset": { - "type": "integer" + "name": { + "type": "string" }, - "size": { - "type": "integer" + "original_price": { + "type": "number" }, - "total_count": { + "price": { + "type": "number" + }, + "sku": { + "type": "string" + }, + "stock_amount": { "type": "integer" } }, "type": "object" }, - "playstation.ProductDetail": { + "pandamart.ProductAttributes": { "properties": { - "classification": { - "type": "string" + "base_content_value": { + "type": "number" }, - "concept_id": { + "base_unit": { "type": "string" }, - "content_rating": { - "$ref": "#/definitions/playstation.ContentRating" - }, - "edition_name": { + "nutrition_grade": { "type": "string" }, - "genres": { - "items": { - "type": "string" - }, - "type": "array" + "price_per_base_unit": { + "type": "number" + } + }, + "type": "object" + }, + "pandamart.ProductDetailResponse": { + "properties": { + "attributes": { + "$ref": "#/definitions/pandamart.ProductAttributes" }, - "id": { + "category_id": { "type": "string" }, - "media": { - "items": { - "$ref": "#/definitions/playstation.Media" - }, - "type": "array" - }, - "name": { + "code": { "type": "string" }, - "np_title_id": { + "description": { "type": "string" }, - "platforms": { - "items": { - "type": "string" - }, - "type": "array" - }, - "price": { - "$ref": "#/definitions/playstation.DetailPrice" - }, - "publisher": { + "discount_badge": { "type": "string" }, - "release_date": { + "id": { "type": "string" }, - "screen_languages": { - "items": { - "type": "string" - }, - "type": "array" - }, - "source_url": { + "image_url": { "type": "string" }, - "spoken_languages": { - "items": { - "type": "string" - }, - "type": "array" - }, - "star_rating": { - "$ref": "#/definitions/playstation.StarRating" + "is_available": { + "type": "boolean" }, - "type": { + "market": { "type": "string" - } - }, - "type": "object" - }, - "playstation.ReviewAuthor": { - "properties": { - "avatar_url": { + }, + "name": { "type": "string" }, - "is_officially_verified": { - "type": "boolean" + "original_price": { + "type": "number" }, - "is_ps_plus_subscriber": { - "type": "boolean" + "price": { + "type": "number" }, - "online_id": { + "sku": { "type": "string" + }, + "stock_amount": { + "type": "integer" } }, "type": "object" }, - "playstation.SearchResponse": { + "pandamart.ProductShelf": { "properties": { - "count": { - "type": "integer" - }, "items": { "items": { - "$ref": "#/definitions/playstation.StoreItem" + "$ref": "#/definitions/pandamart.Product" }, "type": "array" }, - "next_page": { - "type": "integer" - }, - "page_info": { - "$ref": "#/definitions/playstation.PageInfo" - }, - "source_url": { - "type": "string" - }, - "term": { + "title": { "type": "string" } }, "type": "object" }, - "playstation.Section": { + "pandamart.ProductsResponse": { "properties": { - "count": { + "code": { + "type": "string" + }, + "item_count": { "type": "integer" }, - "id": { + "market": { "type": "string" }, - "items": { + "shelves": { "items": { - "$ref": "#/definitions/playstation.StoreItem" + "$ref": "#/definitions/pandamart.ProductShelf" }, "type": "array" - }, - "name": { - "type": "string" } }, "type": "object" }, - "playstation.StarRating": { + "pandamart.SearchResponse": { "properties": { - "average": { - "type": "number" + "available_count": { + "type": "integer" }, - "count": { + "market": { + "type": "string" + }, + "offset": { "type": "integer" }, - "distribution": { + "returned_count": { + "type": "integer" + }, + "stores": { "items": { - "$ref": "#/definitions/playstation.StarRatingCount" + "$ref": "#/definitions/pandamart.Store" }, "type": "array" } }, "type": "object" }, - "playstation.StarRatingCount": { + "pandamart.Store": { "properties": { - "percent": { - "type": "integer" + "address": { + "type": "string" }, - "stars": { + "budget": { "type": "integer" - } - }, - "type": "object" - }, - "playstation.StoreItem": { - "properties": { - "classification": { - "type": "string" }, - "id": { + "chain": { + "$ref": "#/definitions/pandamart.Chain" + }, + "city": { "type": "string" }, - "kind": { + "code": { "type": "string" }, - "media": { - "items": { - "$ref": "#/definitions/playstation.Media" - }, - "type": "array" + "distance_km": { + "type": "number" }, - "name": { + "has_discount": { + "type": "boolean" + }, + "hero_image_url": { "type": "string" }, - "np_title_id": { + "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" }, - "platforms": { + "tags": { "items": { - "type": "string" + "$ref": "#/definitions/pandamart.Tag" }, "type": "array" }, - "price": { - "$ref": "#/definitions/playstation.ListPrice" + "timezone": { + "type": "string" + }, + "web_path": { + "type": "string" } }, "type": "object" }, - "playstation.SuggestItem": { + "pandamart.StoreResponse": { "properties": { - "classification": { + "address": { "type": "string" }, - "id": { + "budget": { + "type": "integer" + }, + "chain": { + "$ref": "#/definitions/pandamart.Chain" + }, + "city": { "type": "string" }, - "image": { - "$ref": "#/definitions/playstation.Media" + "code": { + "type": "string" }, - "name": { + "distance_km": { + "type": "number" + }, + "has_discount": { + "type": "boolean" + }, + "hero_image_url": { "type": "string" }, - "platforms": { - "items": { - "type": "string" - }, - "type": "array" + "is_delivery_available": { + "type": "boolean" }, - "price": { - "$ref": "#/definitions/playstation.SuggestPrice" + "is_pickup_available": { + "type": "boolean" }, - "publisher": { + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "market": { "type": "string" }, - "release_date": { + "minimum_delivery_fee": { + "type": "number" + }, + "minimum_delivery_time_minutes": { + "type": "number" + }, + "minimum_order_amount": { + "type": "number" + }, + "name": { "type": "string" }, - "short_name": { + "tags": { + "items": { + "$ref": "#/definitions/pandamart.Tag" + }, + "type": "array" + }, + "timezone": { "type": "string" }, - "store_url": { + "web_path": { "type": "string" } }, "type": "object" }, - "playstation.SuggestPrice": { + "pandamart.StoreSearchResponse": { "properties": { - "display": { + "code": { "type": "string" }, - "value": { + "has_more": { + "type": "boolean" + }, + "limit": { "type": "integer" - } - }, - "type": "object" - }, - "playstation.SuggestResponse": { - "properties": { - "cc": { + }, + "market": { "type": "string" }, - "items": { + "page": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/playstation.SuggestItem" + "$ref": "#/definitions/pandamart.Product" }, "type": "array" }, - "l": { - "type": "string" - }, - "source_url": { + "query": { "type": "string" }, - "term": { + "sort": { "type": "string" }, - "total": { + "total_products": { "type": "integer" } }, "type": "object" }, - "playstation.conceptResponseDoc": { + "pandamart.Tag": { "properties": { "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/playstation.ConceptDetail" + "type": "string" }, - "msg": { - "example": "OK", + "text": { "type": "string" } }, "type": "object" }, - "playstation.conceptReviewsResponseDoc": { + "pandamart.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/playstation.ConceptReviewsResponse" + "$ref": "#/definitions/pandamart.CategoriesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "playstation.gridResponseDoc": { + "pandamart.productDetailResponseDoc": { "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/playstation.GridResponse" + "$ref": "#/definitions/pandamart.ProductDetailResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "playstation.merchResponseDoc": { + "pandamart.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/playstation.MerchResponse" + "$ref": "#/definitions/pandamart.ProductsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "playstation.productResponseDoc": { + "pandamart.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/playstation.ProductDetail" + "$ref": "#/definitions/pandamart.SearchResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "playstation.searchResponseDoc": { + "pandamart.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/playstation.SearchResponse" + "$ref": "#/definitions/pandamart.StoreResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "playstation.suggestResponseDoc": { + "pandamart.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/playstation.SuggestResponse" + "$ref": "#/definitions/pandamart.StoreSearchResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "politico.ArticleResponse": { + "panera.AtWorkDropOff": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "type": "string" - }, - "title": { + "cutoff_time": { + "example": "09:00", "type": "string" }, - "updated_at": { + "day_of_week": { + "example": "Monday", "type": "string" }, - "url": { + "drop_off_time": { + "example": "10:45", "type": "string" } }, "type": "object" }, - "politico.AuthorArticle": { + "panera.AtWorkLocation": { "properties": { - "published_at": { + "active": { + "example": true, + "type": "boolean" + }, + "city": { + "example": "Fenton", "type": "string" }, - "title": { + "contact_name": { "type": "string" }, - "url": { + "contact_phone": { "type": "string" - } - }, - "type": "object" - }, - "politico.AuthorResponse": { - "properties": { - "articles": { + }, + "country": { + "example": "US", + "type": "string" + }, + "drop_off_schedule": { "items": { - "$ref": "#/definitions/politico.AuthorArticle" + "$ref": "#/definitions/panera.AtWorkDropOff" }, "type": "array" }, - "bio": { + "id": { + "example": "P2U-000320", "type": "string" }, - "image_url": { - "type": "string" + "latitude": { + "example": 38.5401336, + "type": "number" }, - "job_title": { + "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" }, - "slug": { + "postal_code": { + "example": "63026", "type": "string" }, - "url": { + "service_cafe_id": { + "example": "600668", + "type": "string" + }, + "state": { + "example": "MO", + "type": "string" + }, + "street": { + "example": "1400 S Hwy Dr", "type": "string" } }, "type": "object" }, - "politico.CategoriesResponse": { + "panera.AtWorkLocationsResponse": { "properties": { - "groups": { + "count": { + "example": 2, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "locations": { "items": { - "$ref": "#/definitions/politico.CategoryGroup" + "$ref": "#/definitions/panera.AtWorkLocation" }, "type": "array" - } - }, - "type": "object" - }, - "politico.Category": { - "properties": { - "name": { - "type": "string" }, - "slug": { + "source_url": { "type": "string" } }, "type": "object" }, - "politico.CategoryGroup": { + "panera.CafeResponse": { "properties": { - "name": { + "available": { + "example": true, + "type": "boolean" + }, + "cafe_id": { + "example": 601447, + "type": "integer" + }, + "city": { + "example": "Addison", "type": "string" }, - "sections": { + "features": { + "description": "Features are Panera's own per-cafe amenity flags that are true for\nthis cafe (e.g. hasDriveThru, hasDelivery, hasCurbside, hasKiosk).", "items": { - "$ref": "#/definitions/politico.Category" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "politico.HeadlineItem": { - "properties": { - "author": { + }, + "fetched_at": { "type": "string" }, - "published_at": { + "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" }, - "summary": { + "open_now": { + "example": true, + "type": "boolean" + }, + "phone": { + "example": "630-250-4952", "type": "string" }, - "title": { + "postal_code": { + "example": "60101", "type": "string" }, - "url": { + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "politico.HeadlinesResponse": { - "properties": { - "items": { + }, + "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/politico.HeadlineItem" + "$ref": "#/definitions/panera.UpcomingDay" }, "type": "array" } }, "type": "object" }, - "politico.TopicItem": { + "panera.CateringCategory": { "properties": { - "authors": { + "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": { - "type": "string" + "type": "integer" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "title": { + "name": { + "example": "Sandwiches", "type": "string" }, - "url": { - "type": "string" + "sort_weight": { + "type": "integer" } }, "type": "object" }, - "politico.TopicResponse": { + "panera.CateringDeliveryInfoResponse": { "properties": { - "items": { + "available_dates": { "items": { - "$ref": "#/definitions/politico.TopicItem" + "$ref": "#/definitions/panera.CateringDeliverySlotDay" }, "type": "array" }, - "topic": { - "type": "string" - } - }, - "type": "object" - }, - "politico.articleResponseDoc": { - "properties": { - "code": { - "example": 200, + "cafe_id": { + "example": 606477, "type": "integer" }, - "data": { - "$ref": "#/definitions/politico.ArticleResponse" + "delivery_fee": { + "example": 15, + "type": "number" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "politico.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/politico.AuthorResponse" + "hours": { + "items": { + "$ref": "#/definitions/panera.DayHours" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "politico.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "lead_times": { + "items": { + "$ref": "#/definitions/panera.CateringDeliveryLeadTime" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/politico.CategoriesResponse" + "min_order_amount": { + "example": 50, + "type": "number" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "politico.headlinesResponseDoc": { + "panera.CateringDeliveryLeadTime": { "properties": { - "code": { - "example": 200, - "type": "integer" + "is_large_order_tier": { + "example": true, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/politico.HeadlinesResponse" + "lead_time_minutes": { + "example": 240, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "min_order_amount": { + "example": 750, + "type": "number" } }, "type": "object" }, - "politico.topicResponseDoc": { + "panera.CateringDeliverySlotDay": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/politico.TopicResponse" - }, - "msg": { - "example": "OK", + "date": { + "example": "2026-09-10", "type": "string" + }, + "ranges": { + "items": { + "$ref": "#/definitions/panera.HourRange" + }, + "type": "array" } }, "type": "object" }, - "polygon.AuthorResponse": { + "panera.CateringMenuItem": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "allergens": { + "$ref": "#/definitions/panera.MenuAllergens" }, - "biography": { + "customizable": { + "example": true, + "type": "boolean" + }, + "description": { "type": "string" }, - "image_url": { + "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, + "type": "integer" + }, "name": { + "example": "Ciabatta Sausage, Egg & Cheese Sandwich", "type": "string" }, - "social_links": { + "nutrients": { "items": { - "$ref": "#/definitions/polygon.AuthorSocialLink" + "$ref": "#/definitions/panera.MenuNutrient" }, "type": "array" }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "polygon.AuthorSocialLink": { - "properties": { - "type": { + "portion": { + "example": "Individual", "type": "string" }, - "url": { + "price": { + "example": 10.99, + "type": "number" + }, + "product_type": { + "example": "SANDWICH", "type": "string" } }, "type": "object" }, - "polymarket.ActivityTradesResponse": { + "panera.CateringMenuResponse": { "properties": { - "event_id": { - "example": "101772", - "type": "string" - }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "filter_amount": { - "example": "1", - "type": "string" - }, - "filter_type": { - "example": "CASH", - "type": "string" - }, - "limit": { - "example": 50, + "cafe_id": { + "example": 601447, "type": "integer" }, - "market": { - "example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/panera.CateringCategory" + }, + "type": "array" }, - "offset": { - "example": 0, + "count": { + "example": 257, "type": "integer" }, - "source_url": { - "example": "https://data-api.polymarket.com/trades?takerOnly=true&limit=50&offset=0&filterType=CASH&filterAmount=1", - "type": "string" - }, - "taker_only": { - "example": "true", + "fetched_at": { "type": "string" }, - "trades": { + "items": { "items": { - "$ref": "#/definitions/polymarket.TradeSummary" + "$ref": "#/definitions/panera.CateringMenuItem" }, "type": "array" - } - }, - "type": "object" - }, - "polymarket.BatchTokenMidpoint": { - "properties": { - "midpoint": { - "example": 0.285, - "type": "number" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "source_url": { "type": "string" } }, "type": "object" }, - "polymarket.BatchTokenMidpointsOption": { + "panera.DayHours": { "properties": { - "token_ids": { + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "ranges": { "items": { - "type": "string" + "$ref": "#/definitions/panera.HourRange" }, "type": "array" } }, - "required": [ - "token_ids" - ], "type": "object" }, - "polymarket.BatchTokenMidpointsResponse": { + "panera.Fulfillment": { "properties": { - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "available": { + "example": true, + "type": "boolean" }, - "midpoints": { + "hours": { "items": { - "$ref": "#/definitions/polymarket.BatchTokenMidpoint" + "$ref": "#/definitions/panera.DayHours" }, "type": "array" }, - "missing": { - "items": { - "type": "string" - }, - "type": "array" + "lead_time_minutes": { + "example": 20, + "type": "integer" }, - "source_url": { - "example": "https://clob.polymarket.com/midpoints", - "type": "string" + "open_now": { + "example": true, + "type": "boolean" }, - "token_ids": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "polymarket.BatchTokenOrderBooksOption": { - "properties": { - "token_ids": { - "items": { - "type": "string" - }, - "type": "array" + "type": { + "example": "delivery", + "type": "string" } }, - "required": [ - "token_ids" - ], "type": "object" }, - "polymarket.BatchTokenOrderBooksResponse": { + "panera.GeocodeResponse": { "properties": { - "books": { - "items": { - "$ref": "#/definitions/polymarket.OrderBookSummary" - }, - "type": "array" + "address": { + "example": "Chicago, IL", + "type": "string" + }, + "count": { + "example": 1, + "type": "integer" }, "fetched_at": { - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "missing": { + "results": { "items": { - "type": "string" + "$ref": "#/definitions/panera.GeocodeResult" }, "type": "array" }, "source_url": { - "example": "https://clob.polymarket.com/books", "type": "string" - }, - "token_ids": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "polymarket.BatchTokenPrice": { + "panera.GeocodeResult": { "properties": { - "buy_price": { - "example": 0.03, + "city": { + "example": "Chicago", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "formatted_address": { + "example": "Chicago, IL US", + "type": "string" + }, + "latitude": { + "example": 41.85003, "type": "number" }, - "sell_price": { - "example": 0.54, + "longitude": { + "example": -87.65005, "type": "number" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "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" }, - "polymarket.BatchTokenPricesOption": { + "panera.HourRange": { "properties": { - "side": { + "close": { + "example": "21:00", "type": "string" }, - "token_ids": { - "items": { - "type": "string" - }, - "type": "array" + "open": { + "example": "06:00", + "type": "string" } }, - "required": [ - "token_ids" - ], "type": "object" }, - "polymarket.BatchTokenPricesResponse": { + "panera.ItemDetailResponse": { "properties": { + "allergens": { + "$ref": "#/definitions/panera.MenuAllergens" + }, + "cafe_id": { + "example": 601447, + "type": "integer" + }, + "description": { + "type": "string" + }, "fetched_at": { - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "missing": { + "ingredient_statement": { + "type": "string" + }, + "item_id": { + "example": 650115, + "type": "integer" + }, + "name": { + "example": "Almond Pastry", + "type": "string" + }, + "nutrients": { "items": { - "type": "string" + "$ref": "#/definitions/panera.MenuNutrient" }, "type": "array" }, - "prices": { + "sizes": { "items": { - "$ref": "#/definitions/polymarket.BatchTokenPrice" + "$ref": "#/definitions/panera.ItemDetailSize" }, "type": "array" }, - "side": { - "example": "buy", - "type": "string" - }, "source_url": { - "example": "https://clob.polymarket.com/prices", "type": "string" - }, - "token_ids": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "polymarket.BatchTokenSpread": { + "panera.ItemDetailSize": { "properties": { - "spread": { - "example": 0.51, + "calories": { + "example": 120, "type": "number" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "is_default": { + "example": true, + "type": "boolean" + }, + "item_id": { + "example": 646541, + "type": "integer" + }, + "name": { + "example": "Regular", "type": "string" + }, + "price": { + "example": 3.49, + "type": "number" } }, "type": "object" }, - "polymarket.BatchTokenSpreadsOption": { + "panera.ItemOption": { "properties": { - "token_ids": { + "allergens": { + "$ref": "#/definitions/panera.MenuAllergens" + }, + "default_qty": { + "example": 1, + "type": "integer" + }, + "image_key": { + "example": "pecans-whole-r", + "type": "string" + }, + "is_default": { + "example": true, + "type": "boolean" + }, + "item_id": { + "example": 4266, + "type": "integer" + }, + "variants": { "items": { - "type": "string" + "$ref": "#/definitions/panera.ItemOptionVariant" }, "type": "array" } }, - "required": [ - "token_ids" - ], "type": "object" }, - "polymarket.BatchTokenSpreadsResponse": { + "panera.ItemOptionGroup": { "properties": { - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "missing": { - "items": { - "type": "string" - }, - "type": "array" + "group_id": { + "example": 1080, + "type": "integer" }, - "source_url": { - "example": "https://clob.polymarket.com/spreads", - "type": "string" + "max_allowed": { + "example": 5, + "type": "integer" }, - "spreads": { - "items": { - "$ref": "#/definitions/polymarket.BatchTokenSpread" - }, - "type": "array" + "min_allowed": { + "example": 0, + "type": "integer" }, - "token_ids": { + "options": { "items": { - "type": "string" + "$ref": "#/definitions/panera.ItemOption" }, "type": "array" } }, "type": "object" }, - "polymarket.ClobMarketResponse": { + "panera.ItemOptionVariant": { "properties": { - "condition_id": { - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", - "type": "string" - }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "item_id": { + "example": 5741, + "type": "integer" }, - "market": { - "$ref": "#/definitions/polymarket.ClobMarketSummary" + "price": { + "example": 0.69, + "type": "number" }, - "source_url": { - "example": "https://clob.polymarket.com/markets/0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "variant_type": { + "example": "Light", "type": "string" } }, "type": "object" }, - "polymarket.ClobMarketSummary": { + "panera.ItemOptionsResponse": { "properties": { - "accepting_order_timestamp": { - "type": "string" - }, - "accepting_orders": { - "type": "boolean" - }, - "active": { - "type": "boolean" - }, - "archived": { - "type": "boolean" - }, - "closed": { - "type": "boolean" - }, - "condition_id": { - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", - "type": "string" - }, - "description": { - "type": "string" - }, - "enable_order_book": { - "type": "boolean" + "cafe_id": { + "example": 601447, + "type": "integer" }, - "end_date": { - "example": "2026-06-08T00:00:00Z", + "fetched_at": { "type": "string" }, - "game_start_time": { - "example": "2026-06-07T20:30:00Z", - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/panera.ItemOptionGroup" + }, + "type": "array" }, - "icon_url": { - "type": "string" + "item_id": { + "example": 643423, + "type": "integer" }, - "image_url": { + "source_url": { "type": "string" - }, - "is_50_50_outcome": { - "type": "boolean" - }, - "maker_base_fee": { - "example": 1000, + } + }, + "type": "object" + }, + "panera.LocationCafe": { + "properties": { + "cafe_id": { + "example": 601447, "type": "integer" }, - "market_slug": { - "example": "codmw-par-tex-2026-06-07-game4", + "city": { + "example": "Addison", "type": "string" }, - "market_url": { - "example": "https://polymarket.com/event/codmw-par-tex-2026-06-07/codmw-par-tex-2026-06-07-game4", + "country_code": { + "example": "US", "type": "string" }, - "minimum_order_size": { - "example": 5, - "type": "number" + "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" }, - "minimum_tick_size": { - "example": 0.01, + "latitude": { + "example": 41.948594, "type": "number" }, - "neg_risk": { - "type": "boolean" + "longitude": { + "example": -88.026398, + "type": "number" }, - "neg_risk_market_id": { + "name": { + "example": "Addison - W Lake St east of Rohlwing Rd", "type": "string" }, - "neg_risk_request_id": { + "phone": { + "example": "630-250-4952", "type": "string" }, - "notifications_enabled": { - "type": "boolean" - }, - "question": { - "example": "Call of Duty: Paris Gentle Mates vs OpTic Texas - Game 4 Winner", + "postal_code": { + "example": "60101", "type": "string" }, - "question_id": { - "example": "0xf693b08c99a00ca87098bc122ccc956434c2ac8720d8ed77e612d008cf33c2c1", + "state": { + "example": "IL", "type": "string" }, - "rewards": { - "$ref": "#/definitions/polymarket.ClobRewardsSummary" - }, - "seconds_delay": { + "street": { + "example": "1600 West Lake Street", + "type": "string" + } + }, + "type": "object" + }, + "panera.LocationCity": { + "properties": { + "cafe_count": { "example": 1, "type": "integer" }, - "tags": { + "cafes": { "items": { - "type": "string" + "$ref": "#/definitions/panera.LocationCafe" }, "type": "array" }, - "taker_base_fee": { - "example": 1000, + "city": { + "example": "Addison", + "type": "string" + } + }, + "type": "object" + }, + "panera.LocationsResponse": { + "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": { + "$ref": "#/definitions/panera.LocationCity" + }, + "type": "array" + }, + "city": { + "example": "Addison", + "type": "string" + }, + "count": { + "example": 50, "type": "integer" }, - "tokens": { + "fetched_at": { + "type": "string" + }, + "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/polymarket.ClobTokenSummary" + "$ref": "#/definitions/panera.StateSummary" }, "type": "array" } }, "type": "object" }, - "polymarket.ClobRewardRate": { + "panera.MenuAllergenEntry": { "properties": { - "asset_address": { - "example": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "id": { + "example": "TREENUTS", "type": "string" }, - "rewards_daily_rate": { - "example": 5, - "type": "number" + "name": { + "example": "Tree Nuts", + "type": "string" } }, "type": "object" }, - "polymarket.ClobRewardsSummary": { + "panera.MenuAllergens": { "properties": { - "max_spread": { - "example": 2.5, - "type": "number" - }, - "min_size": { - "example": 500, - "type": "number" + "contains": { + "items": { + "$ref": "#/definitions/panera.MenuAllergenEntry" + }, + "type": "array" }, - "rates": { + "may_contain": { "items": { - "$ref": "#/definitions/polymarket.ClobRewardRate" + "$ref": "#/definitions/panera.MenuAllergenEntry" }, "type": "array" } }, "type": "object" }, - "polymarket.ClobTokenSummary": { + "panera.MenuCategory": { "properties": { - "outcome": { - "example": "Paris Gentle Mates", - "type": "string" - }, - "price": { - "example": 0.285, - "type": "number" + "cat_id": { + "example": 20, + "type": "integer" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "image_key": { + "example": "panini-and-sandwiches", "type": "string" }, - "winner": { - "type": "boolean" - } - }, - "type": "object" - }, - "polymarket.EventDetailResponse": { - "properties": { - "event": { - "$ref": "#/definitions/polymarket.EventSummary" + "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" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "name": { + "example": "Sandwiches", "type": "string" }, - "slug": { - "example": "world-cup-winner", - "type": "string" + "sort_weight": { + "example": 6, + "type": "integer" }, - "source_url": { - "example": "https://gamma-api.polymarket.com/events/slug/world-cup-winner", - "type": "string" + "subcategories": { + "items": { + "$ref": "#/definitions/panera.MenuCategory" + }, + "type": "array" } }, "type": "object" }, - "polymarket.EventSummary": { + "panera.MenuItem": { "properties": { - "active": { - "type": "boolean" + "allergens": { + "$ref": "#/definitions/panera.MenuAllergens" }, - "closed": { + "customizable": { + "example": true, "type": "boolean" }, - "comment_count": { - "type": "integer" - }, "description": { "type": "string" }, - "end_date": { + "image_key": { + "example": "strawberry-poppyseed-salad-pantry-reno-half", "type": "string" }, - "featured": { + "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" }, - "icon_url": { - "type": "string" - }, - "id": { - "example": "545095", - "type": "string" + "item_id": { + "example": 1805, + "type": "integer" }, - "image_url": { + "name": { + "example": "Half Strawberry Poppyseed Salad", "type": "string" }, - "liquidity": { - "type": "number" - }, - "markets": { + "nutrients": { "items": { - "$ref": "#/definitions/polymarket.MarketSummary" + "$ref": "#/definitions/panera.MenuNutrient" }, "type": "array" }, - "markets_count": { - "example": 15, - "type": "integer" - }, - "open_interest": { + "price": { + "example": 6.19, "type": "number" }, - "restricted": { - "type": "boolean" - }, - "slug": { - "example": "bitcoin-above-on-june-7-2026", - "type": "string" - }, - "start_date": { + "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": { - "$ref": "#/definitions/polymarket.TagSummary" + "type": "string" }, "type": "array" }, - "title": { - "example": "Bitcoin above ___ on June 7?", - "type": "string" - }, - "updated_at": { + "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": "string" }, - "url": { - "example": "https://polymarket.com/event/bitcoin-above-on-june-7-2026", + "unit": { + "example": "Cal", "type": "string" }, - "volume": { - "type": "number" - }, - "volume_24h": { + "value": { + "example": 580, "type": "number" } }, "type": "object" }, - "polymarket.EventsResponse": { + "panera.MenuResponse": { "properties": { - "ascending": { - "type": "boolean" - }, - "closed": { - "example": "false", - "type": "string" + "cafe_id": { + "example": 601447, + "type": "integer" }, - "events": { + "categories": { "items": { - "$ref": "#/definitions/polymarket.EventSummary" + "$ref": "#/definitions/panera.MenuCategory" }, "type": "array" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "limit": { - "example": 25, - "type": "integer" - }, - "offset": { - "example": 0, + "count": { + "example": 343, "type": "integer" }, - "order": { - "example": "volume24hr", + "fetched_at": { "type": "string" }, + "items": { + "items": { + "$ref": "#/definitions/panera.MenuItem" + }, + "type": "array" + }, "source_url": { - "example": "https://gamma-api.polymarket.com/events?limit=25", "type": "string" } }, "type": "object" }, - "polymarket.HomepageFeedResponse": { + "panera.QuantityRule": { "properties": { - "cursor": { - "type": "string" - }, - "events": { + "item_ids": { "items": { - "$ref": "#/definitions/polymarket.EventSummary" + "type": "integer" }, "type": "array" }, - "feed": { - "example": "politics", + "name": { + "example": "Souffle", "type": "string" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "scope": { + "example": "group", "type": "string" }, - "has_more": { - "type": "boolean" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "markets": { + "windows": { "items": { - "$ref": "#/definitions/polymarket.MarketSummary" + "$ref": "#/definitions/panera.QuantityRuleWindow" }, "type": "array" + } + }, + "type": "object" + }, + "panera.QuantityRuleWindow": { + "properties": { + "from_offset_days": { + "example": 0, + "type": "integer" }, - "next_cursor": { - "type": "string" + "max_quantity": { + "example": 6, + "type": "integer" }, - "source_kind": { - "example": "events_keyset", + "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": { - "example": "https://gamma-api.polymarket.com/events/keyset?limit=20&tag_slug=politics", "type": "string" } }, "type": "object" }, - "polymarket.LeaderboardEntry": { + "panera.RetiredProduct": { "properties": { - "profile_image_url": { - "type": "string" - }, - "profit_loss": { - "example": 322870.79601049656, - "type": "number" - }, - "proxy_wallet": { - "example": "0x4bff30af91642dc7d2b19a8664378fe55c45fc26", + "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" }, - "rank": { - "example": "1", + "description": { "type": "string" }, - "user_name": { - "example": "Sassy-Bucket", + "image_key": { "type": "string" }, - "verified_badge": { - "type": "boolean" + "item_id": { + "example": 650699, + "type": "integer" }, - "volume": { - "example": 770358.109102, - "type": "number" + "name": { + "example": "Italian Steak & Mozz", + "type": "string" }, - "x_username": { - "example": "polymarket", + "portion": { + "example": "Whole", "type": "string" } }, "type": "object" }, - "polymarket.LeaderboardResponse": { + "panera.RetiredProductsResponse": { "properties": { - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "cafe_id": { + "example": 601447, + "type": "integer" }, - "limit": { - "example": 20, + "count": { + "example": 332, "type": "integer" }, - "rows": { + "fetched_at": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/polymarket.LeaderboardEntry" + "$ref": "#/definitions/panera.RetiredProduct" }, "type": "array" }, - "sort_by": { - "example": "profit", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "panera.StateSummary": { + "properties": { + "cafe_count": { + "example": 85, + "type": "integer" }, - "source_url": { - "example": "https://data-api.polymarket.com/v1/leaderboard?window=30d&sortBy=profit&limit=20", + "country_code": { + "example": "US", "type": "string" }, - "window": { - "example": "30d", + "state": { + "example": "IL", "type": "string" } }, "type": "object" }, - "polymarket.MacroDashboardResponse": { + "panera.TimeSlotWindow": { "properties": { - "cursor": { + "end_time": { + "example": "2026-09-10T11:15:00-05:00", "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/polymarket.EventSummary" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "start_time": { + "example": "2026-09-10T11:10:00-05:00", "type": "string" + } + }, + "type": "object" + }, + "panera.TimeSlotsResponse": { + "properties": { + "cafe_id": { + "example": 601447, + "type": "integer" }, - "has_more": { - "type": "boolean" + "close": { + "example": "21:00", + "type": "string" }, - "limit": { - "example": 20, + "count": { + "example": 178, "type": "integer" }, - "next_cursor": { + "date": { + "example": "2026-09-10", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "open": { + "example": "06:00", "type": "string" }, "source_url": { - "example": "https://gamma-api.polymarket.com/events/keyset?tag_slug=macro&limit=20", "type": "string" + }, + "windows": { + "items": { + "$ref": "#/definitions/panera.TimeSlotWindow" + }, + "type": "array" } }, "type": "object" }, - "polymarket.MarketDetailResponse": { + "panera.UpcomingDay": { "properties": { - "condition_id": { - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "close": { + "example": "21:00", "type": "string" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "closed": { + "example": false, + "type": "boolean" }, - "id": { - "example": "558934", + "date": { + "example": "2026-09-02", "type": "string" }, - "market": { - "$ref": "#/definitions/polymarket.MarketSummary" - }, - "slug": { - "example": "will-spain-win-the-2026-fifa-world-cup-963", + "day_of_week": { + "example": "Wednesday", "type": "string" }, - "source_url": { - "example": "https://gamma-api.polymarket.com/markets/558934", + "open": { + "example": "06:00", "type": "string" } }, "type": "object" }, - "polymarket.MarketLiquidityResponse": { + "panera.UpsellSuggestion": { "properties": { - "clob_market": { - "$ref": "#/definitions/polymarket.ClobMarketSummary" + "item_id": { + "example": 7392, + "type": "integer" }, - "condition_id": { - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "item_name": { + "example": "Bacon Turkey Bravo Sandwich on Thin Tom Basil - Retail - Half Portion", "type": "string" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "suggestions": { + "items": { + "$ref": "#/definitions/panera.UpsellSuggestionItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "panera.UpsellSuggestionItem": { + "properties": { + "item_id": { + "example": 801215, + "type": "integer" }, - "id": { - "example": "558934", + "name": { + "example": "Extra Turkey", "type": "string" + } + }, + "type": "object" + }, + "panera.UpsellSuggestionsResponse": { + "properties": { + "cafe_id": { + "example": 601447, + "type": "integer" }, - "market": { - "$ref": "#/definitions/polymarket.MarketSummary" + "count": { + "example": 513, + "type": "integer" }, - "slug": { - "example": "will-spain-win-the-2026-fifa-world-cup-963", + "fetched_at": { "type": "string" }, - "source_urls": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/panera.UpsellSuggestion" }, "type": "array" }, - "tokens": { - "items": { - "$ref": "#/definitions/polymarket.MarketLiquidityTokenSummary" - }, - "type": "array" + "source_url": { + "type": "string" } }, "type": "object" }, - "polymarket.MarketLiquidityTokenSummary": { + "panera.atWorkLocationsResponseDoc": { "properties": { - "ask_depth": { - "example": 654.33, - "type": "number" - }, - "bid_depth": { - "example": 117.57, - "type": "number" - }, - "buy_price": { - "example": 0.16, - "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" }, - "clob_price": { - "example": 0.161, - "type": "number" + "data": { + "$ref": "#/definitions/panera.AtWorkLocationsResponse" }, - "gamma_price": { - "example": 0.16, - "type": "number" - }, - "last_trade_price": { - "example": 0.162, - "type": "number" - }, - "midpoint": { - "example": 0.165, - "type": "number" - }, - "orderbook_best_ask": { - "example": 0.17, - "type": "number" - }, - "orderbook_best_bid": { - "example": 0.16, - "type": "number" - }, - "orderbook_spread": { - "example": 0.01, - "type": "number" - }, - "outcome": { - "example": "Yes", - "type": "string" - }, - "sell_price": { - "example": 0.17, - "type": "number" + "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", + "type": "integer" }, - "spread": { - "example": 0.01, - "type": "number" + "data": { + "$ref": "#/definitions/panera.CafeResponse" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "polymarket.MarketSummary": { + "panera.cateringDeliveryInfoResponseDoc": { "properties": { - "active": { - "type": "boolean" - }, - "best_ask": { - "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" }, - "best_bid": { - "type": "number" + "data": { + "$ref": "#/definitions/panera.CateringDeliveryInfoResponse" }, - "closed": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "panera.cateringMenuResponseDoc": { + "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" }, - "condition_id": { - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", - "type": "string" + "data": { + "$ref": "#/definitions/panera.CateringMenuResponse" }, - "end_date": { - "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": { - "example": "558934", - "type": "string" + "data": { + "$ref": "#/definitions/panera.GeocodeResponse" }, - "last_trade_price": { - "type": "number" + "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", + "type": "integer" }, - "liquidity": { - "type": "number" + "data": { + "$ref": "#/definitions/panera.ItemDetailResponse" }, - "outcomes": { - "items": { - "$ref": "#/definitions/polymarket.OutcomePricePoint" - }, - "type": "array" + "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", + "type": "integer" }, - "question": { - "example": "Will Spain win the 2026 FIFA World Cup?", - "type": "string" + "data": { + "$ref": "#/definitions/panera.ItemOptionsResponse" }, - "slug": { - "example": "will-spain-win-the-2026-fifa-world-cup-963", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "panera.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" }, - "token_ids": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/panera.LocationsResponse" }, - "url": { - "example": "https://polymarket.com/event/world-cup-winner/will-spain-win-the-2026-fifa-world-cup-963", - "type": "string" + "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" }, - "volume": { - "type": "number" + "data": { + "$ref": "#/definitions/panera.MenuResponse" }, - "volume_24h": { - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "polymarket.MarketsResponse": { + "panera.quantityRulesResponseDoc": { "properties": { - "ascending": { - "type": "boolean" - }, - "closed": { - "example": "false", - "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": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/panera.QuantityRulesResponse" }, - "limit": { - "example": 25, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "panera.retiredProductsResponseDoc": { + "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" }, - "markets": { - "items": { - "$ref": "#/definitions/polymarket.MarketSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/panera.RetiredProductsResponse" }, - "offset": { - "example": 0, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "panera.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" }, - "order": { - "example": "volume24hr", - "type": "string" + "data": { + "$ref": "#/definitions/panera.TimeSlotsResponse" }, - "source_url": { - "example": "https://gamma-api.polymarket.com/markets?limit=25", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "polymarket.OrderBookLevel": { + "panera.upsellSuggestionsResponseDoc": { "properties": { - "price": { - "example": 0.03, - "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" }, - "size": { - "example": 5, - "type": "number" + "data": { + "$ref": "#/definitions/panera.UpsellSuggestionsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "polymarket.OrderBookSummary": { + "papajohns.AllergenFlags": { "properties": { - "asks": { - "items": { - "$ref": "#/definitions/polymarket.OrderBookLevel" - }, - "type": "array" + "egg": { + "type": "boolean" }, - "bids": { - "items": { - "$ref": "#/definitions/polymarket.OrderBookLevel" - }, - "type": "array" + "fish": { + "type": "boolean" }, - "condition_id": { - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", - "type": "string" + "milk": { + "type": "boolean" }, - "hash": { - "example": "31facd52b62495bbc142facb81275400d978f6bf", - "type": "string" + "peanut": { + "type": "boolean" }, - "last_trade_price": { - "example": 0.285, - "type": "number" + "sesame": { + "type": "boolean" }, - "min_order_size": { - "example": 5, - "type": "number" + "shellfish": { + "type": "boolean" }, - "neg_risk": { + "soy": { "type": "boolean" }, - "tick_size": { - "example": 0.01, - "type": "number" + "tree_nut": { + "type": "boolean" }, - "timestamp": { - "example": "1780837460175", + "wheat": { + "type": "boolean" + } + }, + "type": "object" + }, + "papajohns.AllergenItem": { + "properties": { + "allergens": { + "$ref": "#/definitions/papajohns.AllergenFlags" + }, + "name": { + "example": "Original Crust", "type": "string" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "section": { + "example": "Crust Options", "type": "string" } }, "type": "object" }, - "polymarket.OutcomePricePoint": { + "papajohns.AllergensResponse": { "properties": { - "best_ask": { - "example": 0.162, - "type": "number" + "count": { + "example": 170, + "type": "integer" }, - "best_bid": { - "example": 0.161, - "type": "number" + "fetched_at": { + "type": "string" }, - "last_trade_price": { - "example": 0.162, - "type": "number" + "items": { + "items": { + "$ref": "#/definitions/papajohns.AllergenItem" + }, + "type": "array" }, - "liquidity": { - "example": 1093391.84, - "type": "number" + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "papajohns.Deal": { + "properties": { + "description": { + "type": "string" }, - "market_id": { - "example": "558934", + "id": { + "example": "66262", "type": "string" }, - "market_slug": { - "example": "will-spain-win-the-2026-fifa-world-cup-963", + "image_url": { "type": "string" }, - "outcome": { - "example": "Yes", + "offer_code": { + "description": "OfferCode is the code the offer is redeemed with.", + "example": "EDNJX", "type": "string" }, "price": { - "example": 0.1615, + "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" }, - "question": { - "example": "Will Spain win the 2026 FIFA World Cup?", + "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" + }, + "tag": { + "description": "Tag is the merchandising label, e.g. \"Featured Deal\".", + "example": "Featured Deal", "type": "string" }, - "volume": { - "example": 30983849.24, - "type": "number" + "title": { + "example": "Ultimate Pepperoni Pizza", + "type": "string" + }, + "url": { + "description": "URL is the deal-builder link for this offer.", + "type": "string" } }, "type": "object" }, - "polymarket.PredictionsResponse": { + "papajohns.DealsResponse": { "properties": { - "cursor": { - "type": "string" + "count": { + "example": 16, + "type": "integer" }, - "events": { + "deals": { "items": { - "$ref": "#/definitions/polymarket.EventSummary" + "$ref": "#/definitions/papajohns.Deal" }, "type": "array" }, "fetched_at": { - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "has_more": { + "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" }, - "limit": { - "example": 20, - "type": "integer" - }, - "next_cursor": { + "source_url": { "type": "string" }, - "recurrence": { - "example": "daily", - "type": "string" + "store_id": { + "example": 5054, + "type": "integer" + } + }, + "type": "object" + }, + "papajohns.DirectoryChild": { + "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" }, - "sort": { - "example": "competitive", + "name": { + "example": "CA", "type": "string" }, - "source_url": { - "example": "https://gamma-api.polymarket.com/events/keyset?limit=20&order=competitive", + "path": { + "example": "united-states/ca", "type": "string" }, - "status": { - "example": "all", - "type": "string" + "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" }, - "tag": { - "example": "politics", + "url": { "type": "string" } }, "type": "object" }, - "polymarket.PriceHistoryPoint": { + "papajohns.DirectoryResponse": { "properties": { - "price": { - "example": 0.48, - "type": "number" + "children": { + "items": { + "$ref": "#/definitions/papajohns.DirectoryChild" + }, + "type": "array" }, - "timestamp": { - "example": 1780826405, + "count": { + "example": 120, "type": "integer" - } - }, - "type": "object" - }, - "polymarket.ProfileMatch": { - "properties": { - "id": { - "example": "123", + }, + "fetched_at": { "type": "string" }, "name": { - "example": "Trader", "type": "string" }, - "username": { - "example": "trader", + "path": { + "example": "united-states/ca", + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "polymarket.PublicDataResponse": { + "papajohns.IndiaAvailability": { "properties": { - "data": { - "type": "object" - }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "blacked_out_channel_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "route": { - "example": "sports", - "type": "string" + "blacked_out_days": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { - "example": "https://gamma-api.polymarket.com/sports", - "type": "string" + "blacked_out_store_ids": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "polymarket.RewardsConfigSummary": { + "papajohns.IndiaCurrency": { "properties": { - "asset_address": { - "example": "0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB", + "code": { + "example": "₹", "type": "string" }, - "end_date": { - "example": "2500-12-31", + "country_code": { + "example": "91", "type": "string" }, - "id": { - "example": 0, - "type": "integer" - }, - "rate_per_day": { - "example": 10.00036, - "type": "number" - }, - "start_date": { - "example": "2026-06-07", + "locale": { + "example": "en-IN", "type": "string" }, - "total_rewards": { - "example": 0, - "type": "number" + "name": { + "example": "Indian Rupee", + "type": "string" } }, "type": "object" }, - "polymarket.RewardsMarketResponse": { + "papajohns.IndiaDealChoice": { "properties": { - "condition_id": { - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "category": { + "example": "Pizzas", "type": "string" }, - "count": { - "example": 1, - "type": "integer" + "item_id": { + "example": "71", + "type": "string" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "name": { + "example": "MARGHERITA", "type": "string" }, - "market": { - "$ref": "#/definitions/polymarket.RewardsMarketSummary" + "price": { + "example": 399, + "type": "number" }, - "source_url": { - "example": "https://clob.polymarket.com/rewards/markets/0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327?sponsored=true", + "size": { + "example": "Medium", + "type": "string" + }, + "size_id": { + "example": "2", "type": "string" } }, "type": "object" }, - "polymarket.RewardsMarketSummary": { + "papajohns.IndiaDealResponse": { "properties": { - "condition_id": { - "example": "0x2d293b8d8141edcc3317f6e677a01623dc482e7fe8eb4c4e207c9a0987c37d22", - "type": "string" - }, - "daily_reward_rate": { - "example": 10.00036, - "type": "number" + "buy_x": { + "type": "integer" }, - "earning_percentage": { - "example": 0, - "type": "number" + "category_id": { + "example": "11", + "type": "string" }, - "earnings": { - "items": { - "type": "object" - }, - "type": "array" + "currency": { + "$ref": "#/definitions/papajohns.IndiaCurrency" }, - "event_id": { - "example": "568951", + "description": { + "example": "Sakkath Combo", "type": "string" }, - "event_slug": { - "example": "sc2-hero-cure-2026-06-07", + "end_time": { + "example": "23:59:59", "type": "string" }, - "event_url": { - "example": "https://polymarket.com/event/sc2-hero-cure-2026-06-07", + "fetched_at": { "type": "string" }, - "image_url": { - "type": "string" + "get_y": { + "type": "integer" }, - "maker_address": { - "example": "0x0000000000000000000000000000000000000000", - "type": "string" + "highest_of_two": { + "type": "boolean" }, - "market_competitiveness": { - "example": 2.83, - "type": "number" + "id": { + "example": "17", + "type": "string" }, - "market_id": { - "example": "2461586", + "image_url": { "type": "string" }, - "market_slug": { - "example": "sc2-hero-cure-2026-06-07", + "market": { + "example": "india", "type": "string" }, - "market_url": { - "example": "https://polymarket.com/event/sc2-hero-cure-2026-06-07/sc2-hero-cure-2026-06-07", + "name": { + "example": "Sakkath Veg Combo - Dine In", "type": "string" }, - "question": { - "example": "StarCraft II: herO vs Cure (BO7) - Global StarCraft II League Playoffs", + "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" + }, + "price_type": { + "example": "fixedPrice", "type": "string" }, - "rewards_config": { + "slots": { "items": { - "$ref": "#/definitions/polymarket.RewardsConfigSummary" + "$ref": "#/definitions/papajohns.IndiaDealSlot" }, "type": "array" }, - "rewards_max_spread": { - "example": 4.5, - "type": "number" + "source_url": { + "type": "string" }, - "rewards_min_size": { - "example": 50, - "type": "number" + "start_time": { + "example": "00:00:00", + "type": "string" }, - "spread": { - "example": 0.01, - "type": "number" + "sum_of_two": { + "description": "SumOfTwo and HighestOfTwo describe how a two-item deal is priced when\nprice_type is HalfAndHalf.", + "type": "boolean" + } + }, + "type": "object" + }, + "papajohns.IndiaDealSlot": { + "properties": { + "choice_count": { + "example": 5, + "type": "integer" }, - "tokens": { + "choices": { "items": { - "$ref": "#/definitions/polymarket.RewardsTokenSummary" + "$ref": "#/definitions/papajohns.IndiaDealChoice" }, "type": "array" }, - "total_configured_rewards": { - "example": 0, - "type": "number" + "id": { + "example": "1376", + "type": "string" }, - "volume_24h": { - "example": 79.9901, + "name": { + "type": "string" + }, + "optional": { + "example": false, + "type": "boolean" + }, + "percentage_off": { "type": "number" + }, + "quantity": { + "example": 1, + "type": "integer" + }, + "size": { + "example": "Medium", + "type": "string" } }, "type": "object" }, - "polymarket.RewardsMarketsResponse": { + "papajohns.IndiaMenuCategory": { "properties": { - "count": { - "example": 100, - "type": "integer" - }, - "cursor": { - "example": "MA==", + "description": { "type": "string" }, - "date": { - "example": "2026-06-07", + "id": { + "example": "6", "type": "string" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "image_url": { "type": "string" }, - "has_more": { - "type": "boolean" + "item_count": { + "example": 29, + "type": "integer" }, - "limit": { - "example": 100, + "items": { + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuItem" + }, + "type": "array" + }, + "name": { + "example": "Pizzas", + "type": "string" + }, + "rank": { + "example": 7, "type": "integer" }, - "markets": { + "subcategories": { "items": { - "$ref": "#/definitions/polymarket.RewardsMarketSummary" + "$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.", + "example": false, + "type": "boolean" }, - "next_cursor": { - "example": "MTAw", + "category_id": { "type": "string" }, - "order_by": { - "example": "market", + "channel": { + "example": "Delivery", "type": "string" }, - "position": { - "example": "desc", + "channel_id": { "type": "string" }, - "q": { - "example": "bitcoin", + "day": { "type": "string" }, - "source_url": { - "example": "https://polymarket.com/api/rewards/markets?orderBy=market", + "day_name": { + "example": "Monday", "type": "string" }, - "tag_slug": { - "example": "all", + "store_id": { "type": "string" }, - "total_count": { - "example": 5430, - "type": "integer" + "tag": { + "type": "string" } }, "type": "object" }, - "polymarket.RewardsTokenSummary": { + "papajohns.IndiaMenuItem": { "properties": { - "outcome": { - "example": "herO", - "type": "string" + "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." }, - "price": { - "example": 0.995, - "type": "number" + "buy_x": { + "type": "integer" }, - "token_id": { - "example": "49033998602764986470838384384660931821099068366428064235699748485619139146655", + "category_id": { + "example": "6", "type": "string" - } - }, - "type": "object" - }, - "polymarket.SearchResponse": { - "properties": { - "ascending": { - "type": "boolean" }, - "events": { - "items": { - "$ref": "#/definitions/polymarket.EventSummary" - }, - "type": "array" + "customizable": { + "description": "Customizable reports whether the item exposes a size/crust/topping tree.", + "example": true, + "type": "boolean" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "description": { "type": "string" }, - "has_more": { + "discounted": { + "example": false, "type": "boolean" }, - "limit": { - "example": 10, + "get_y": { "type": "integer" }, - "profiles": { - "items": { - "$ref": "#/definitions/polymarket.ProfileMatch" - }, - "type": "array" + "id": { + "example": "71", + "type": "string" }, - "query": { - "example": "bitcoin", + "image_url": { "type": "string" }, - "sort": { - "example": "relevance", + "kind": { + "description": "Kind is \"item\" for an a la carte product or \"deal\" for a combo/offer.", + "example": "item", "type": "string" }, - "source_url": { - "example": "https://gamma-api.polymarket.com/public-search?q=bitcoin&limit_per_type=10", + "name": { + "example": "MARGHERITA", "type": "string" }, - "status": { - "example": "open", + "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" + }, + "rank": { + "example": 1, + "type": "integer" + }, + "sizes": { + "description": "Sizes is populated only when include_options=true.", + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuSize" + }, + "type": "array" + }, + "strike_off_price": { + "example": 499, + "type": "number" + }, + "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/polymarket.TagSummary" + "type": "string" }, "type": "array" }, - "total_results": { - "example": 123, - "type": "integer" + "upsell": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "polymarket.SimilarEventsResponse": { + "papajohns.IndiaMenuItemResponse": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/polymarket.EventSummary" - }, - "type": "array" + "category": { + "description": "Category is the section this item was found under.", + "example": "Pizzas", + "type": "string" + }, + "currency": { + "$ref": "#/definitions/papajohns.IndiaCurrency" }, "fetched_at": { - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "limit": { - "example": 10, - "type": "integer" + "item": { + "$ref": "#/definitions/papajohns.IndiaMenuItem" + }, + "market": { + "example": "india", + "type": "string" }, "source_url": { - "example": "https://gamma-api.polymarket.com/events/similar?event_slug=world-cup-winner", "type": "string" + }, + "taxes": { + "items": { + "$ref": "#/definitions/papajohns.IndiaTax" + }, + "type": "array" } }, "type": "object" }, - "polymarket.TagResponse": { + "papajohns.IndiaMenuOptionChoice": { "properties": { - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "default": { + "example": true, + "type": "boolean" + }, + "extra": { + "example": false, + "type": "boolean" + }, + "half_price": { + "example": 399.5, + "type": "number" + }, + "id": { + "example": "1", "type": "string" }, - "source_url": { - "example": "https://gamma-api.polymarket.com/tags/slug/crypto", + "image_url": { "type": "string" }, - "tag": { - "$ref": "#/definitions/polymarket.TagSummary" + "name": { + "example": "Original Crust", + "type": "string" + }, + "price": { + "example": 799, + "type": "number" + }, + "removable": { + "example": false, + "type": "boolean" + }, + "strike_off_price": { + "type": "number" } }, "type": "object" }, - "polymarket.TagSummary": { + "papajohns.IndiaMenuOptionGroup": { "properties": { + "base_price": { + "example": true, + "type": "boolean" + }, + "choices": { + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuOptionChoice" + }, + "type": "array" + }, + "halves_enabled": { + "example": true, + "type": "boolean" + }, "id": { - "example": "21", + "example": "1", "type": "string" }, - "label": { - "example": "Crypto", + "name": { + "example": "Crust", "type": "string" }, - "slug": { - "example": "crypto", + "selection_rule": { + "example": "Exactly", + "type": "string" + }, + "selection_spec": { + "example": "1", "type": "string" } }, "type": "object" }, - "polymarket.TagsResponse": { + "papajohns.IndiaMenuResponse": { "properties": { + "categories": { + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuCategory" + }, + "type": "array" + }, + "currency": { + "$ref": "#/definitions/papajohns.IndiaCurrency" + }, "fetched_at": { - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "limit": { - "example": 25, - "type": "integer" + "filters": { + "$ref": "#/definitions/papajohns.IndiaMenuFilters" }, - "offset": { - "example": 0, + "item_count": { + "example": 114, "type": "integer" }, + "market": { + "example": "india", + "type": "string" + }, "source_url": { - "example": "https://gamma-api.polymarket.com/tags?limit=25", "type": "string" }, "tags": { "items": { - "$ref": "#/definitions/polymarket.TagSummary" + "type": "string" + }, + "type": "array" + }, + "taxes": { + "items": { + "$ref": "#/definitions/papajohns.IndiaTax" }, "type": "array" } }, "type": "object" }, - "polymarket.TokenMidpointResponse": { + "papajohns.IndiaMenuSize": { "properties": { - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "midpoint": { - "example": 0.285, - "type": "number" + "default": { + "example": true, + "type": "boolean" }, - "source_url": { - "example": "https://clob.polymarket.com/midpoint?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "id": { + "example": "3", "type": "string" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "name": { + "example": "Large", "type": "string" - } - }, - "type": "object" - }, - "polymarket.TokenOrderBookResponse": { - "properties": { - "book": { - "$ref": "#/definitions/polymarket.OrderBookSummary" }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "option_groups": { + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuOptionGroup" + }, + "type": "array" }, - "source_url": { - "example": "https://clob.polymarket.com/book?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "rank": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "papajohns.IndiaMenuSubcategory": { + "properties": { + "id": { + "example": "8", "type": "string" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "items": { + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuItem" + }, + "type": "array" + }, + "name": { + "example": "India Special", "type": "string" } }, "type": "object" }, - "polymarket.TokenPriceHistoryResponse": { + "papajohns.IndiaStore": { "properties": { - "end_ts": { - "example": 1780840800, - "type": "integer" - }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "address": { "type": "string" }, - "fidelity": { - "example": 60, - "type": "integer" + "channels": { + "description": "Channels lists the order channels this store publishes hours for.", + "items": { + "type": "string" + }, + "type": "array" }, - "interval": { - "example": "1d", + "email": { "type": "string" }, - "points": { + "hours": { "items": { - "$ref": "#/definitions/polymarket.PriceHistoryPoint" + "$ref": "#/definitions/papajohns.IndiaStoreHours" }, "type": "array" }, - "source_url": { - "example": "https://clob.polymarket.com/prices-history?fidelity=60&interval=1d&market=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "id": { + "example": "7", "type": "string" }, - "start_ts": { - "example": 1780754400, - "type": "integer" - }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", - "type": "string" - } - }, - "type": "object" - }, - "polymarket.TokenPriceResponse": { - "properties": { - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" + "latitude": { + "example": 12.840903161072498, + "type": "number" }, - "price": { - "example": 0.03, + "longitude": { + "example": 77.65593675511532, "type": "number" }, - "side": { - "example": "buy", + "name": { + "example": "PJPB - 360° Business Park, Electronics City BLR", "type": "string" }, - "source_url": { - "example": "https://clob.polymarket.com/price?side=buy&token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "phone": { + "example": "9240244043", "type": "string" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "store_code": { + "example": "QRyCHD", "type": "string" } }, "type": "object" }, - "polymarket.TokenSpreadResponse": { + "papajohns.IndiaStoreHours": { "properties": { - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "channel": { + "example": "Take Away", "type": "string" }, - "source_url": { - "example": "https://clob.polymarket.com/spread?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "channel_id": { + "example": "2", "type": "string" }, - "spread": { - "example": 0.51, - "type": "number" + "closes": { + "example": "23:00:59", + "type": "string" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "day": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "11:00:00", "type": "string" } }, "type": "object" }, - "polymarket.TradeSummary": { + "papajohns.IndiaStoresResponse": { "properties": { - "asset": { - "example": "90219780179584544303349592653084019110196125806694819219181473744581426681835", + "channel": { + "example": "Delivery", "type": "string" }, - "bio": { + "channel_id": { "type": "string" }, - "condition_id": { - "example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b", + "count": { + "example": 9, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "event_slug": { - "example": "btc-updown-15m-1780835400", + "market": { + "example": "india", "type": "string" }, - "icon_url": { + "source_url": { "type": "string" }, + "stores": { + "items": { + "$ref": "#/definitions/papajohns.IndiaStore" + }, + "type": "array" + } + }, + "type": "object" + }, + "papajohns.IndiaTax": { + "properties": { + "inclusive": { + "example": false, + "type": "boolean" + }, "name": { - "example": "trader", + "example": "GST", "type": "string" }, - "outcome": { - "example": "Up", + "type": { + "example": "percentage", "type": "string" }, - "outcome_index": { - "example": 0, - "type": "integer" - }, - "price": { - "example": 0.52744, + "value": { + "example": 5, "type": "number" + } + }, + "type": "object" + }, + "papajohns.IntlDeal": { + "properties": { + "availability": { + "description": "Availability lists the weekdays the offer runs on.", + "items": { + "type": "string" + }, + "type": "array" }, - "profile_image_optimized": { + "category": { + "example": "app", "type": "string" }, - "profile_image_url": { + "description": { "type": "string" }, - "proxy_wallet": { - "example": "0x400e9b5e37f7209adb6938d49d63c48f154319d2", + "dispatch_method": { + "description": "DispatchMethod is the fulfillment this offer applies to.", + "example": "pj_delivery", "type": "string" }, - "pseudonym": { - "example": "Noisy-Dimple", + "end_date": { + "example": "2026-09-30T23:45:00Z", "type": "string" }, - "side": { - "example": "BUY", - "type": "string" + "id": { + "example": 955, + "type": "integer" }, - "size": { - "example": 25, - "type": "number" + "image_url": { + "type": "string" }, - "slug": { - "example": "btc-updown-15m-1780835400", + "name": { + "example": "Combo Veranito delivery", "type": "string" }, - "timestamp": { - "example": 1780835568, + "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" }, - "title": { - "example": "Bitcoin Up or Down - June 7, 8:30AM-8:45AM ET", + "product": { + "description": "Product is the offer's headline product name.", + "example": "Combo Veranito", "type": "string" }, - "transaction_hash": { - "example": "0x7ef90efb7e9f921509d8e82ecc76ed3d8384a3740d7ebd81d3bbbfd017899245", + "start_date": { + "example": "2025-10-24T00:00:00Z", "type": "string" }, "url": { - "example": "https://polymarket.com/event/btc-updown-15m-1780835400", "type": "string" - }, - "value": { - "example": 13.186, - "type": "number" } }, "type": "object" }, - "polymarket.activityTradesResponseDoc": { + "papajohns.IntlDealsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.ActivityTradesResponse" + "deals": { + "items": { + "$ref": "#/definitions/papajohns.IntlDeal" + }, + "type": "array" }, - "msg": { - "example": "OK", + "dispatch_method": { + "example": "pj_delivery", "type": "string" - } - }, - "type": "object" - }, - "polymarket.batchTokenMidpointsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/polymarket.BatchTokenMidpointsResponse" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.batchTokenOrderBooksResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.BatchTokenOrderBooksResponse" + "market": { + "example": "spain", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "polymarket.batchTokenPricesResponseDoc": { + "papajohns.IntlDeliveryZone": { "properties": { - "code": { - "example": 200, - "type": "integer" + "delivery_price": { + "example": 0, + "type": "number" }, - "data": { - "$ref": "#/definitions/polymarket.BatchTokenPricesResponse" + "minimum_order_for_delivery": { + "type": "number" }, - "msg": { - "example": "OK", + "minimum_order_for_free_delivery": { + "type": "number" + }, + "name": { + "example": "Zona 1", "type": "string" } }, "type": "object" }, - "polymarket.batchTokenSpreadsResponseDoc": { + "papajohns.IntlIngredient": { "properties": { - "code": { - "example": 200, - "type": "integer" + "available_as_half": { + "description": "AvailableAsHalf reports whether it can be applied to just one half.", + "example": true, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/polymarket.BatchTokenSpreadsResponse" + "base": { + "description": "Base marks an ingredient included on the pizza by default.", + "example": false, + "type": "boolean" }, - "msg": { - "example": "OK", + "category": { + "description": "Category is the ingredient family, e.g. meat or vegetable.", + "example": "base_sauce", "type": "string" - } - }, - "type": "object" - }, - "polymarket.clobMarketResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.ClobMarketResponse" - }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.eventDetailResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "id": { + "example": 25, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.EventDetailResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Salsa de Tomate", "type": "string" + }, + "premium": { + "description": "Premium marks an ingredient charged at the premium rate rather than the\nnormal one.", + "example": false, + "type": "boolean" } }, "type": "object" }, - "polymarket.eventsResponseDoc": { + "papajohns.IntlIngredientPrices": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/polymarket.EventsResponse" + "normal": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" }, - "msg": { - "example": "OK", - "type": "string" + "premium": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" } }, "type": "object" }, - "polymarket.homepageFeedResponseDoc": { + "papajohns.IntlIngredientsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "example": "meat", + "type": "string" }, - "data": { - "$ref": "#/definitions/polymarket.HomepageFeedResponse" + "count": { + "example": 39, + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.leaderboardResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.LeaderboardResponse" + "ingredients": { + "items": { + "$ref": "#/definitions/papajohns.IntlIngredient" + }, + "type": "array" }, - "msg": { - "example": "OK", + "market": { + "example": "spain", "type": "string" - } - }, - "type": "object" - }, - "polymarket.macroDashboardResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "menu_id": { + "example": 8, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.MacroDashboardResponse" + "prices": { + "allOf": [ + { + "$ref": "#/definitions/papajohns.IntlIngredientPrices" + } + ], + "description": "Prices is what adding one extra ingredient costs, keyed by size code." }, - "msg": { - "example": "OK", + "sizes": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "polymarket.marketDetailResponseDoc": { + "papajohns.IntlMenuProduct": { "properties": { - "code": { - "example": 200, - "type": "integer" + "alcohol": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/polymarket.MarketDetailResponse" + "category": { + "example": "pizza", + "type": "string" }, - "msg": { - "example": "OK", + "currency": { + "example": "EUR", "type": "string" - } - }, - "type": "object" - }, - "polymarket.marketLiquidityResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.MarketLiquidityResponse" + "customizable": { + "type": "boolean" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.marketsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.MarketsResponse" + "discount": { + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "polymarket.predictionsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "food_type": { + "description": "FoodType carries dietary markers the platform publishes, e.g. vegetarian.", + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/polymarket.PredictionsResponse" + "id": { + "example": 8, + "type": "integer" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.publicDataResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.PublicDataResponse" + "initial_price": { + "type": "number" }, - "msg": { - "example": "OK", + "kind": { + "description": "Kind is \"pizza\" or \"side\" -- the platform's two product families.", + "example": "pizza", "type": "string" - } - }, - "type": "object" - }, - "polymarket.rewardsMarketResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.RewardsMarketResponse" - }, - "msg": { - "example": "OK", + "name": { + "example": "Super Papa", "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" + }, + "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" }, - "polymarket.rewardsMarketsResponseDoc": { + "papajohns.IntlMenuResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 43, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.RewardsMarketsResponse" + "crusts": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "msg": { - "example": "OK", + "currency": { + "example": "EUR", "type": "string" - } - }, - "type": "object" - }, - "polymarket.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.SearchResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "food_type": { + "example": "vegetarian", "type": "string" - } - }, - "type": "object" - }, - "polymarket.similarEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.SimilarEventsResponse" + "kind": { + "example": "pizza", + "type": "string" }, - "msg": { - "example": "OK", + "market": { + "example": "spain", "type": "string" - } - }, - "type": "object" - }, - "polymarket.tagResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.TagResponse" + "products": { + "items": { + "$ref": "#/definitions/papajohns.IntlMenuProduct" + }, + "type": "array" }, - "msg": { - "example": "OK", + "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" + }, + "source_url": { "type": "string" + }, + "store_id": { + "example": 9, + "type": "integer" } }, "type": "object" }, - "polymarket.tagsResponseDoc": { + "papajohns.IntlMenuVariant": { "properties": { - "code": { - "example": 200, - "type": "integer" + "crust": { + "example": "traditional", + "type": "string" }, - "data": { - "$ref": "#/definitions/polymarket.TagsResponse" + "crust_label": { + "example": "Original", + "type": "string" }, - "msg": { - "example": "OK", + "currency": { + "example": "EUR", "type": "string" - } - }, - "type": "object" - }, - "polymarket.tokenMidpointResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.TokenMidpointResponse" + "discount": { + "type": "number" }, - "msg": { - "example": "OK", + "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" - } - }, - "type": "object" - }, - "polymarket.tokenOrderBookResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.TokenOrderBookResponse" + "nutrition": { + "$ref": "#/definitions/papajohns.IntlNutrition" }, - "msg": { - "example": "OK", + "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" }, - "polymarket.tokenPriceHistoryResponseDoc": { + "papajohns.IntlNutrition": { "properties": { - "code": { - "example": 200, - "type": "integer" + "calories": { + "example": 1090, + "type": "number" }, - "data": { - "$ref": "#/definitions/polymarket.TokenPriceHistoryResponse" + "grams": { + "example": 470, + "type": "number" }, - "msg": { - "example": "OK", + "portions": { + "example": "8", "type": "string" } }, "type": "object" }, - "polymarket.tokenPriceResponseDoc": { + "papajohns.IntlOfferChoice": { "properties": { - "code": { - "example": 200, - "type": "integer" + "crust": { + "example": "traditional", + "type": "string" }, - "data": { - "$ref": "#/definitions/polymarket.TokenPriceResponse" + "crust_label": { + "example": "Original", + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.tokenSpreadResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "name": { + "example": "Italiana Ranch", + "type": "string" + }, + "product_id": { + "description": "ProductID is the underlying product, usable with\nGET /papajohns/intl/product.", + "example": 336, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.TokenSpreadResponse" + "size": { + "example": "family", + "type": "string" }, - "msg": { - "example": "OK", + "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" }, - "popeyes.Allergens": { + "papajohns.IntlOfferResponse": { "properties": { - "celery": { - "type": "number" - }, - "eggs": { - "type": "number" + "availability": { + "description": "Availability lists the weekdays the offer runs on.", + "items": { + "type": "string" + }, + "type": "array" }, - "fish": { - "type": "number" + "currency": { + "example": "EUR", + "type": "string" }, - "gluten": { - "type": "number" + "customizable": { + "example": true, + "type": "boolean" }, - "lupin": { - "type": "number" + "description": { + "type": "string" }, - "milk": { + "discount": { "type": "number" }, - "mustard": { - "type": "number" + "dispatch_method": { + "description": "DispatchMethod is the fulfillment this offer applies to, e.g. both.", + "example": "both", + "type": "string" }, - "peanuts": { - "type": "number" + "end_date": { + "example": "2026-09-21T23:45:00Z", + "type": "string" }, - "sesame": { - "type": "number" + "fetched_at": { + "type": "string" }, - "shellfish": { - "type": "number" + "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" }, - "soy": { - "type": "number" + "id": { + "example": 660, + "type": "integer" }, - "sulphur_dioxide": { - "type": "number" + "image_url": { + "type": "string" }, - "tree_nuts": { - "type": "number" + "ingredient_categories": { + "description": "IngredientCategories lists the ingredient families this offer allows.", + "items": { + "type": "string" + }, + "type": "array" }, - "wheat": { - "type": "number" - } - }, - "type": "object" - }, - "popeyes.DayHours": { - "properties": { - "close": { - "example": "23:00:00", + "market": { + "example": "spain", "type": "string" }, - "day": { - "example": "monday", - "type": "string" + "max_ingredients": { + "example": 10, + "type": "integer" }, - "open": { - "example": "07:00:00", + "min_ingredients": { + "example": 1, + "type": "integer" + }, + "name": { + "example": "Combo Veranito", "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).", + }, + "offer_type": { + "description": "OfferType is the platform's own classification, e.g. Combo.", + "example": "Combo", "type": "string" }, - "id": { - "example": "032999c6-ba27-4f8e-b20e-a4cb28e3c37c", + "price": { + "example": 19.98, + "type": "number" + }, + "promoted": { + "example": true, + "type": "boolean" + }, + "source_url": { "type": "string" }, - "question": { - "example": "How do I remove items from my cart?", + "start_date": { + "example": "2023-09-19T01:00:00Z", "type": "string" + }, + "steps": { + "items": { + "$ref": "#/definitions/papajohns.IntlOfferStep" + }, + "type": "array" } }, "type": "object" }, - "popeyes.FAQResponse": { + "papajohns.IntlOfferStep": { "properties": { - "count": { - "example": 20, + "choice_count": { + "example": 12, "type": "integer" }, - "entries": { + "choices": { "items": { - "$ref": "#/definitions/popeyes.FAQEntry" + "$ref": "#/definitions/papajohns.IntlOfferChoice" }, "type": "array" }, - "fetched_at": { + "id": { + "example": 1919, + "type": "integer" + }, + "name": { + "example": "❶ Elige tu pizza familiar", "type": "string" }, - "has_more": { - "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", - "example": true, + "optional": { + "description": "Optional reports whether the step may be skipped.", + "example": false, "type": "boolean" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "popeyes.LocationResponse": { + "papajohns.IntlProductResponse": { "properties": { - "fetched_at": { + "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" }, - "restaurant": { - "$ref": "#/definitions/popeyes.Restaurant" + "cheese_changeable": { + "example": true, + "type": "boolean" }, - "source_url": { + "customizable": { + "description": "Customizable reports whether toppings may be changed on this product.", + "example": true, + "type": "boolean" + }, + "description": { "type": "string" - } - }, - "type": "object" - }, - "popeyes.LocationsResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" }, "fetched_at": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "restaurants": { + "food_type": { "items": { - "$ref": "#/definitions/popeyes.Restaurant" + "type": "string" }, "type": "array" }, - "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, + "free_extras": { + "description": "FreeExtras is how many extra ingredients are included at no charge.", + "example": 2, "type": "integer" - } - }, - "type": "object" - }, - "popeyes.MenuCategory": { - "properties": { - "featured": { - "type": "boolean" }, "id": { + "example": 8, + "type": "integer" + }, + "image_url": { "type": "string" }, - "items": { + "image_urls": { "items": { - "$ref": "#/definitions/popeyes.MenuItem" + "type": "string" }, "type": "array" }, + "market": { + "example": "spain", + "type": "string" + }, "name": { - "example": "Chicken Wraps", + "example": "Super Papa", + "type": "string" + }, + "slug": { + "example": "super-papa", + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "popeyes.MenuItem": { + "papajohns.IntlStore": { "properties": { - "allergens": { - "$ref": "#/definitions/popeyes.Allergens" - }, - "id": { - "example": "item_103182", + "address": { "type": "string" }, - "image_url": { + "city": { + "example": "Madrid", "type": "string" }, - "name": { - "example": "Cheese Bites", - "type": "string" - }, - "nutrition": { - "$ref": "#/definitions/popeyes.Nutrition" + "delivery_open": { + "example": true, + "type": "boolean" }, - "price": { - "$ref": "#/definitions/popeyes.Price" + "delivery_wait_minutes": { + "example": 30, + "type": "integer" }, - "type": { - "example": "ITEM", - "type": "string" - } - }, - "type": "object" - }, - "popeyes.MenuResponse": { - "properties": { - "categories": { + "delivery_zones": { "items": { - "$ref": "#/definitions/popeyes.MenuCategory" + "$ref": "#/definitions/papajohns.IntlDeliveryZone" }, "type": "array" }, - "currency": { - "example": "USD", - "type": "string" + "external_delivery": { + "example": true, + "type": "boolean" }, - "fetched_at": { - "type": "string" + "future_orders": { + "example": true, + "type": "boolean" }, - "item_count": { - "example": 120, - "type": "integer" + "hours": { + "items": { + "$ref": "#/definitions/papajohns.IntlStoreHours" + }, + "type": "array" }, - "source_url": { - "type": "string" + "id": { + "example": 9, + "type": "integer" }, - "store_id": { - "example": "14156", - "type": "string" - } - }, - "type": "object" - }, - "popeyes.Nutrition": { - "properties": { - "calories": { - "example": 560, + "latitude": { + "example": 40.401686, "type": "number" }, - "carbohydrates_g": { - "example": 23, + "longitude": { + "example": -3.708348, "type": "number" }, - "cholesterol_mg": { - "example": 75, - "type": "number" + "map_url": { + "type": "string" }, - "fat_g": { - "example": 44, - "type": "number" + "menu_id": { + "description": "MenuID identifies the catalog this restaurant serves. Several\nrestaurants usually share one.", + "example": 8, + "type": "integer" }, - "fiber_g": { - "example": 2, - "type": "number" + "name": { + "example": "Vallejo Nájera", + "type": "string" }, - "proteins_g": { - "example": 17, - "type": "number" + "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" }, - "saturated_fat_g": { - "type": "number" + "payment_methods": { + "description": "PaymentMethods lists only the methods this restaurant actually accepts.", + "items": { + "type": "string" + }, + "type": "array" }, - "serving_weight_g": { - "type": "number" + "phone": { + "example": "+34910493017", + "type": "string" }, - "sodium_mg": { - "example": 1470, - "type": "number" + "pickup_open": { + "example": true, + "type": "boolean" }, - "sugar_g": { - "example": 2, - "type": "number" + "pickup_wait_minutes": { + "example": 15, + "type": "integer" }, - "trans_fat_g": { - "example": 1, - "type": "number" + "region": { + "example": "Madrid", + "type": "string" } }, "type": "object" }, - "popeyes.Offer": { + "papajohns.IntlStoreHours": { "properties": { - "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" + "closes": { + "example": "23:59:59", + "type": "string" }, - "description": { - "description": "Description is the offer's own short copy (e.g. what's included),\nwhen Popeyes publishes one.", - "example": "3 Piece Chicken", + "day": { + "example": "monday", "type": "string" }, - "id": { - "example": "00a369e5-1b33-4d35-b153-e372e3ebf17f", + "dispatch_method": { + "description": "DispatchMethod is the fulfillment channel this window applies to,\ne.g. in_store or pj_delivery.", + "example": "in_store", "type": "string" }, - "mobile_order_only": { - "description": "MobileOrderOnly is true when the offer is only redeemable through\nPopeyes' own mobile ordering flow.", - "type": "boolean" + "opens": { + "example": "12:00:00", + "type": "string" + } + }, + "type": "object" + }, + "papajohns.IntlStoresResponse": { + "properties": { + "count": { + "description": "Count is how many restaurants this response carries.", + "example": 5, + "type": "integer" }, - "name": { - "example": "3Pc Signature Chicken for $5", + "fetched_at": { "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", + "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" }, - "price": { - "example": 5, + "latitude": { + "example": 40.4168, "type": "number" }, - "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" + "longitude": { + "example": -3.7038, + "type": "number" }, - "redemption_type": { - "description": "RedemptionType is how the offer is redeemed -- observed live values\ninclude STANDARD (in-app/online) and PAPER_COUPON.", - "example": "STANDARD", + "market": { + "example": "spain", "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" + "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" }, - "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", + "source_url": { "type": "string" }, - "short_code": { - "description": "ShortCode is the offer's own promo/redemption code, when published.", - "example": "8438", - "type": "string" + "stores": { + "items": { + "$ref": "#/definitions/papajohns.IntlStore" + }, + "type": "array" + }, + "total_count": { + "example": 97, + "type": "integer" + }, + "total_pages": { + "example": 20, + "type": "integer" } }, "type": "object" }, - "popeyes.OffersResponse": { + "papajohns.LatamCategory": { "properties": { - "count": { - "example": 20, - "type": "integer" + "id": { + "example": "1", + "type": "string" }, - "fetched_at": { + "name": { + "example": "Pizzas", "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" + "product_count": { + "example": 25, + "type": "integer" }, - "offers": { + "products": { "items": { - "$ref": "#/definitions/popeyes.Offer" + "$ref": "#/definitions/papajohns.LatamProduct" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "popeyes.Price": { + "papajohns.LatamMenuResponse": { "properties": { - "default": { - "example": 3.99, - "type": "number" + "categories": { + "items": { + "$ref": "#/definitions/papajohns.LatamCategory" + }, + "type": "array" }, - "default_cents": { - "example": 399, - "type": "integer" + "category": { + "type": "string" }, - "max": { - "type": "number" + "currency": { + "example": "USD", + "type": "string" }, - "max_cents": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "min": { - "type": "number" + "market": { + "example": "el-salvador", + "type": "string" }, - "min_cents": { + "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" }, - "popeyes.Promotion": { + "papajohns.LatamProduct": { "properties": { - "bonus_points": { - "description": "BonusPoints is set for a flat bonus-points promotion.", - "example": 300, - "type": "integer" + "category": { + "example": "Pizzas", + "type": "string" }, - "end_date": { - "example": "2021-08-16T04:00:00.000Z", + "currency": { + "example": "USD", + "type": "string" + }, + "description": { "type": "string" }, "id": { - "example": "11d41e3c-75b5-458c-8166-7cdfb20a635a", + "example": "8", "type": "string" }, - "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", + "image_url": { "type": "string" }, "name": { - "description": "Name is the promotion's own internal/public label.", - "example": "Get Double Bonus Points on Your Cart, minimum $20", + "example": "The Works", "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, + "price_from": { + "description": "PriceFrom is the cheapest priced variant, so a caller can rank products\nwithout walking every variant.", + "example": 11.99, "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", + "url": { "type": "string" + }, + "variants": { + "items": { + "$ref": "#/definitions/papajohns.LatamVariant" + }, + "type": "array" } }, "type": "object" }, - "popeyes.PromotionsResponse": { + "papajohns.LatamVariant": { "properties": { - "count": { - "example": 20, - "type": "integer" + "available": { + "example": true, + "type": "boolean" }, - "fetched_at": { + "crust": { + "example": "Masa Original", "type": "string" }, - "has_more": { - "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", - "example": true, - "type": "boolean" + "currency": { + "example": "USD", + "type": "string" }, - "promotions": { - "items": { - "$ref": "#/definitions/popeyes.Promotion" - }, - "type": "array" + "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" }, - "source_url": { + "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" }, - "popeyes.Quest": { + "papajohns.MenuCategory": { "properties": { - "bonus_points": { - "description": "BonusPoints is the loyalty points awarded on completion, when the\nincentive is points-based.", - "example": 550, - "type": "integer" - }, "id": { - "example": "38fe1c9c-6c2b-4d1b-ab86-7bf61105fdfb", + "example": "pizza", "type": "string" }, - "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", + "image_url": { "type": "string" }, - "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.", + "name": { + "example": "Pizza", "type": "string" }, - "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", + "product_count": { + "description": "ProductCount is how many priced SKUs this category contains.", + "example": 96, + "type": "integer" + }, + "sections": { + "items": { + "$ref": "#/definitions/papajohns.MenuSection" + }, + "type": "array" + } + }, + "type": "object" + }, + "papajohns.MenuCrust": { + "properties": { + "code": { + "example": "PIZZA_ORIGINAL", "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).", + "default": { + "example": true, "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.", + "id": { + "example": 1, "type": "integer" + }, + "name": { + "example": "Original Crust", + "type": "string" + }, + "sub_type": { + "example": "Original", + "type": "string" } }, "type": "object" }, - "popeyes.QuestsResponse": { + "papajohns.MenuInstruction": { "properties": { - "count": { - "example": 10, + "choices": { + "items": { + "$ref": "#/definitions/papajohns.MenuInstructionChoice" + }, + "type": "array" + }, + "description": { + "example": "How much cheese?", + "type": "string" + }, + "id": { + "example": 2, "type": "integer" }, - "fetched_at": { + "name": { + "example": "CHEESE", + "type": "string" + } + }, + "type": "object" + }, + "papajohns.MenuInstructionChoice": { + "properties": { + "code": { + "example": "ILC", "type": "string" }, - "has_more": { - "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "default": { "example": false, "type": "boolean" }, - "quests": { - "items": { - "$ref": "#/definitions/popeyes.Quest" - }, - "type": "array" + "id": { + "example": 6, + "type": "integer" }, - "source_url": { + "name": { + "example": "Light Cheese", "type": "string" } }, "type": "object" }, - "popeyes.Restaurant": { + "papajohns.MenuItemResponse": { "properties": { - "address": { - "example": "111 Fulton St", - "type": "string" - }, - "address2": { + "category": { + "example": "pizza", "type": "string" }, - "city": { - "example": "New York", + "fetched_at": { "type": "string" }, - "country": { - "example": "USA", - "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." }, - "has_breakfast": { + "national_default": { "example": false, "type": "boolean" }, - "has_delivery": { - "example": true, - "type": "boolean" + "product": { + "$ref": "#/definitions/papajohns.MenuProduct" }, - "has_drive_thru": { - "example": false, - "type": "boolean" + "section": { + "example": "Most Popular", + "type": "string" }, - "has_playground": { - "example": false, - "type": "boolean" + "source_url": { + "type": "string" }, - "has_takeout": { - "example": true, - "type": "boolean" + "store_id": { + "example": 5054, + "type": "integer" + } + }, + "type": "object" + }, + "papajohns.MenuProduct": { + "properties": { + "calories": { + "description": "Calories is per the serving described by serving_label.", + "example": 210, + "type": "integer" }, - "has_wifi": { - "example": false, - "type": "boolean" + "code": { + "example": "PR10Q1", + "type": "string" }, - "hours": { - "$ref": "#/definitions/popeyes.RestaurantHours" + "crust_id": { + "example": 1, + "type": "integer" }, - "id": { - "example": "restaurant_242928", + "description": { "type": "string" }, - "is_dark_kitchen": { - "example": false, - "type": "boolean" + "disclaimer": { + "type": "string" }, - "is_halal": { - "example": false, - "type": "boolean" + "image_url": { + "type": "string" }, - "latitude": { - "example": 40.709873, + "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" }, - "longitude": { - "example": -74.006601, + "regular_price": { + "description": "RegularPrice is the pre-promotion menu price where it differs.", + "example": 14.99, "type": "number" }, - "name": { - "example": "111 Fulton St New York, New York 10038 - USA", + "serving_label": { + "description": "ServingLabel describes what calories are counted per, e.g. \"/slice, 6 slices\".", + "example": "/slice, 6 slices", "type": "string" }, - "operator": { - "description": "Operator is the franchise group operating this location, when RBI\npublishes one.", + "size": { + "description": "Size is the size label this SKU represents within its group.", + "example": "Small", "type": "string" }, - "phone": { - "example": "929-579-0553", - "type": "string" + "size_id": { + "example": 2, + "type": "integer" }, - "postal_code": { - "example": "10038", + "sku": { + "example": "1-1-2-115", "type": "string" }, - "state": { - "example": "NY", - "type": "string" + "slices": { + "example": 6, + "type": "integer" }, - "store_id": { - "example": "14156", - "type": "string" + "surcharge": { + "type": "number" }, - "website_url": { - "example": "https://www.popeyes.com/store-locator/store/restaurant_242928", + "title": { + "description": "Title is the shorter in-menu label, e.g. \"Small Original Crust - Pepperoni\".", "type": "string" } }, "type": "object" }, - "popeyes.RestaurantHours": { + "papajohns.MenuProductGroup": { "properties": { - "curbside": { + "allow_half_toppings": { + "example": true, + "type": "boolean" + }, + "available_topping_ids": { "items": { - "$ref": "#/definitions/popeyes.DayHours" + "type": "integer" }, "type": "array" }, - "delivery": { + "crusts": { "items": { - "$ref": "#/definitions/popeyes.DayHours" + "$ref": "#/definitions/papajohns.MenuCrust" }, "type": "array" }, - "dining_room": { + "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": { + "type": "string" + }, + "featured": { + "type": "boolean" + }, + "free_toppings": { + "type": "integer" + }, + "id": { + "example": "cyo", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "instructions": { "items": { - "$ref": "#/definitions/popeyes.DayHours" + "$ref": "#/definitions/papajohns.MenuInstruction" }, "type": "array" }, - "drive_thru": { + "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/popeyes.DayHours" + "$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", + "type": "string" } }, "type": "object" }, - "popeyes.Reward": { + "papajohns.MenuResponse": { "properties": { - "id": { - "example": "09acd09f-2ca5-4259-934c-0345356b2bb0", + "categories": { + "items": { + "$ref": "#/definitions/papajohns.MenuCategory" + }, + "type": "array" + }, + "category": { + "example": "pizza", "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" + "fetched_at": { + "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.", + "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" }, - "name": { - "description": "Name is the reward's own public display copy -- typically the menu\nitem or combo name it redeems.", - "example": "Large Mashed Potatoes", + "product_count": { + "example": 206, + "type": "integer" + }, + "source_url": { "type": "string" }, - "points": { - "description": "Points is the loyalty points cost to redeem, from the reward's own\nLoyaltyPoints rule.", - "example": 600, + "store_id": { + "description": "StoreID echoes the restaurant the prices belong to. 0 is the national\ndefault menu.", + "example": 5054, "type": "integer" } }, "type": "object" }, - "popeyes.RewardsResponse": { + "papajohns.MenuSection": { "properties": { - "count": { - "example": 20, - "type": "integer" + "description": { + "type": "string" }, - "fetched_at": { + "id": { + "example": "most_popular", "type": "string" }, - "has_more": { - "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", - "example": true, - "type": "boolean" + "name": { + "example": "Most Popular", + "type": "string" }, - "rewards": { + "product_groups": { "items": { - "$ref": "#/definitions/popeyes.Reward" + "$ref": "#/definitions/papajohns.MenuProductGroup" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "popeyes.faqResponseDoc": { + "papajohns.MenuSize": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "default": { + "example": false, + "type": "boolean" + }, + "id": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/popeyes.FAQResponse" + "measure": { + "description": "Measure is the physical size where the group has one, e.g. 10\".", + "example": "10\"", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "name": { + "description": "Name is the size's marketing name, e.g. Small.", + "example": "Small", + "type": "string" } }, "type": "object" }, - "popeyes.locationResponseDoc": { + "papajohns.NearbyResponse": { "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": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/popeyes.LocationResponse" + "fetched_at": { + "type": "string" }, - "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", + "radius": { + "example": 25, "type": "integer" }, - "data": { - "$ref": "#/definitions/popeyes.LocationsResponse" + "source_url": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "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, + "type": "integer" } }, "type": "object" }, - "popeyes.menuResponseDoc": { + "papajohns.NearbyStore": { "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": { + "$ref": "#/definitions/papajohns.StoreAddress" }, - "data": { - "$ref": "#/definitions/popeyes.MenuResponse" + "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" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "popeyes.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" + "distance_kilometers": { + "example": 0.97, + "type": "number" }, - "data": { - "$ref": "#/definitions/popeyes.OffersResponse" + "distance_miles": { + "description": "DistanceMiles and DistanceKilometers are measured from the requested\ncoordinate.", + "example": 0.6, + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "popeyes.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" + "hours": { + "description": "Hours is the store's general published week of hours.", + "items": { + "$ref": "#/definitions/papajohns.StoreHours" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/popeyes.PromotionsResponse" + "latitude": { + "example": 34.0614412, + "type": "number" }, - "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" + "longitude": { + "example": -118.2439367, + "type": "number" }, - "data": { - "$ref": "#/definitions/popeyes.QuestsResponse" + "name": { + "example": "Papa Johns Pizza", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "order_url": { + "description": "OrderURL is Papa John's own carryout ordering deep link for this\nstore.", + "type": "string" + }, + "path": { + "description": "Path is the /papajohns/store path for this store, so a caller can go\nstraight to the detail endpoint.", + "type": "string" + }, + "payment_options": { + "description": "PaymentOptions are the payment methods this store accepts, e.g.\nAPPLEPAY, CASH, VISA.", + "items": { + "type": "string" + }, + "type": "array" + }, + "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" + }, + "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" + }, + "store_id": { + "example": "4269", + "type": "string" + }, + "takeout_hours": { + "items": { + "$ref": "#/definitions/papajohns.StoreHours" + }, + "type": "array" + }, + "timezone": { + "example": "America/Los_Angeles", + "type": "string" } }, "type": "object" }, - "popeyes.rewardsResponseDoc": { + "papajohns.NutritionFacts": { "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" + "calories": { + "example": 200, + "type": "number" }, - "data": { - "$ref": "#/definitions/popeyes.RewardsResponse" + "calories_from_fat": { + "example": 25, + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "cholesterol_mg": { + "type": "number" + }, + "dietary_fiber_g": { + "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" + }, + "total_fat_g": { + "example": 3, + "type": "number" + }, + "trans_fat_g": { + "type": "number" } }, "type": "object" }, - "popularTrend.CountryIndustryMeta": { + "papajohns.NutritionItem": { "properties": { - "country": { - "items": { - "$ref": "#/definitions/popularTrend.CountryIndustryMetaItem" - }, - "type": "array" + "name": { + "example": "Cheese Pizza", + "type": "string" }, - "industry": { + "variants": { "items": { - "$ref": "#/definitions/popularTrend.CountryIndustryMetaItem" + "$ref": "#/definitions/papajohns.NutritionVariant" }, "type": "array" } }, "type": "object" }, - "popularTrend.CountryIndustryMetaItem": { + "papajohns.NutritionResponse": { "properties": { - "id": { + "category": { + "example": "pizzas", "type": "string" }, - "value": { + "count": { + "example": 34, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/papajohns.NutritionItem" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "popularTrend.TopAdsAnalysisPoint": { + "papajohns.NutritionVariant": { "properties": { - "second": { - "type": "integer" + "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" }, - "value": { - "type": "number" + "nutrition": { + "$ref": "#/definitions/papajohns.NutritionFacts" + }, + "serving_size": { + "example": "1 slice", + "type": "string" + }, + "servings": { + "example": "8 slices per pizza", + "type": "string" } }, "type": "object" }, - "popularTrend.TopAdsAnalysisResp": { + "papajohns.StoreAddress": { "properties": { - "code": { - "type": "integer" + "city": { + "example": "Alhambra", + "type": "string" }, - "data": { - "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": { + "country": { + "example": "US", "type": "string" }, - "request_id": { + "line1": { + "example": "2136 S FREMONT AVE", "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsDetailResp": { - "properties": { - "code": { - "type": "integer" }, - "data": { - "$ref": "#/definitions/popularTrend.TopAdsMaterial" - }, - "msg": { + "postal_code": { + "example": "91803", "type": "string" }, - "request_id": { + "region": { + "example": "CA", "type": "string" } }, "type": "object" }, - "popularTrend.TopAdsFilterItem": { + "papajohns.StoreHours": { "properties": { - "has_conversion": { + "closed": { + "description": "Closed is true when Papa John's publishes the day with no open\ninterval.", + "example": false, "type": "boolean" }, - "id": { - "type": "object" - }, - "label": { + "closes": { + "example": "00:15", "type": "string" }, - "parent_id": { - "type": "object" + "day_of_week": { + "example": "Monday", + "type": "string" }, - "value": { + "opens": { + "example": "10:30", "type": "string" } }, "type": "object" }, - "popularTrend.TopAdsFiltersResp": { + "papajohns.StoreResponse": { "properties": { - "code": { - "type": "integer" - }, - "data": { - "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" + "address": { + "$ref": "#/definitions/papajohns.StoreAddress" }, - "msg": { + "fetched_at": { "type": "string" }, - "request_id": { + "google_place_id": { "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsListResp": { - "properties": { - "code": { - "type": "integer" }, - "data": { - "properties": { - "materials": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsMaterial" - }, - "type": "array" - }, - "pagination": { - "$ref": "#/definitions/popularTrend.TopAdsPagination" - } + "hours": { + "description": "Hours is the store's general published week of hours.", + "items": { + "$ref": "#/definitions/papajohns.StoreHours" }, - "type": "object" + "type": "array" }, - "msg": { - "type": "string" + "latitude": { + "example": 34.06838390790909, + "type": "number" }, - "request_id": { + "longitude": { + "example": -118.14934906165672, + "type": "number" + }, + "name": { + "example": "Papa Johns Pizza", "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsLocationInfoResp": { - "properties": { - "code": { - "type": "integer" }, - "data": { - "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" + "order_url": { + "description": "OrderURL is Papa John's own carryout ordering deep link for this\nstore, which embeds the same store_id.", + "type": "string" }, - "msg": { + "path": { "type": "string" }, - "request_id": { + "phone_number": { + "example": "(626) 642-5645", "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsLocationsResp": { - "properties": { - "code": { - "type": "integer" }, - "data": { - "properties": { - "country": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - } + "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": "object" + "type": "array" }, - "msg": { + "source_url": { "type": "string" }, - "request_id": { + "store_id": { + "example": "5054", + "type": "string" + }, + "timezone": { + "example": "America/Los_Angeles", "type": "string" } }, "type": "object" }, - "popularTrend.TopAdsMaterial": { + "papajohns.StorefrontCategory": { "properties": { - "ad_title": { + "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" }, - "brand_name": { + "id": { + "example": "1", "type": "string" }, - "comment": { - "type": "integer" + "name": { + "example": "Пицца", + "type": "string" }, - "cost": { + "product_count": { + "example": 25, "type": "integer" }, - "country_code": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/papajohns.StorefrontProduct" + }, + "type": "array" + } + }, + "type": "object" + }, + "papajohns.StorefrontMenuResponse": { + "properties": { + "categories": { + "description": "Categories carry the whole national catalog. The menu does not vary by\ncity, so there is no city to report.", + "items": { + "$ref": "#/definitions/papajohns.StorefrontCategory" }, "type": "array" }, - "ctr": { - "type": "number" + "category": { + "type": "string" }, - "favorite": { - "type": "boolean" + "currency": { + "example": "RUB", + "type": "string" }, - "has_summary": { - "type": "boolean" + "fetched_at": { + "type": "string" }, - "highlight": { + "market": { + "example": "russia", "type": "string" }, - "highlight_text": { + "product_count": { + "example": 185, + "type": "integer" + }, + "source_url": { "type": "string" }, - "id": { + "variant_count": { + "example": 892, + "type": "integer" + } + }, + "type": "object" + }, + "papajohns.StorefrontProduct": { + "properties": { + "category": { + "example": "Пицца", "type": "string" }, - "industry_key": { + "currency": { + "example": "RUB", "type": "string" }, - "is_search": { - "type": "boolean" + "description": { + "type": "string" }, - "keyword_list": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "example": "12345", + "type": "string" }, - "landing_page": { + "image_url": { "type": "string" }, - "like": { - "type": "integer" + "name": { + "example": "Прайм говядина Барбекю", + "type": "string" }, - "objective_key": { + "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" }, - "objectives": { + "variants": { "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + "$ref": "#/definitions/papajohns.StorefrontVariant" }, "type": "array" + } + }, + "type": "object" + }, + "papajohns.StorefrontVariant": { + "properties": { + "available": { + "example": true, + "type": "boolean" }, - "pattern_label": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" + "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" }, - "share": { - "type": "integer" + "currency": { + "example": "RUB", + "type": "string" }, - "source": { + "price": { + "example": 680, + "type": "number" + }, + "size": { + "description": "Size is the pizza diameter where the market publishes one, with its own\nunit (\"23 см\").", + "example": "23 см", "type": "string" }, - "source_key": { + "sku": { + "example": "172764", + "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", + "type": "string" + } + }, + "type": "object" + }, + "papajohns.allergensResponseDoc": { + "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" }, - "video_info": { - "$ref": "#/definitions/popularTrend.TopAdsVideoInfo" + "data": { + "$ref": "#/definitions/papajohns.AllergensResponse" }, - "voice_over": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "popularTrend.TopAdsPagination": { + "papajohns.dealsResponseDoc": { "properties": { - "has_more": { - "type": "boolean" - }, - "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" }, - "size": { - "type": "integer" + "data": { + "$ref": "#/definitions/papajohns.DealsResponse" }, - "total": { + "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" }, - "total_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/papajohns.DirectoryResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "popularTrend.TopAdsRecommendResp": { + "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" }, "data": { - "properties": { - "materials": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsMaterial" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/definitions/papajohns.IndiaDealResponse" }, "msg": { - "type": "string" - }, - "request_id": { - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "popularTrend.TopAdsSafetyResp": { + "papajohns.indiaMenuItemResponseDoc": { "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": { - "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" + "$ref": "#/definitions/papajohns.IndiaMenuItemResponse" }, "msg": { - "type": "string" - }, - "request_id": { - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "popularTrend.TopAdsSpotlightResp": { + "papajohns.indiaMenuResponseDoc": { "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": { - "properties": { - "materials": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsMaterial" - }, - "type": "array" - }, - "pagination": { - "$ref": "#/definitions/popularTrend.TopAdsPagination" - } - }, - "type": "object" + "$ref": "#/definitions/papajohns.IndiaMenuResponse" }, "msg": { - "type": "string" - }, - "request_id": { - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "popularTrend.TopAdsSuggestionsResp": { + "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" }, "data": { - "properties": { - "query": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/definitions/papajohns.IndiaStoresResponse" }, "msg": { - "type": "string" - }, - "request_id": { - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "popularTrend.TopAdsVideoInfo": { + "papajohns.intlDealsResponseDoc": { "properties": { - "cover": { - "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" }, - "duration": { - "type": "number" + "data": { + "$ref": "#/definitions/papajohns.IntlDealsResponse" }, - "height": { + "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" }, - "vid": { - "type": "string" - }, - "video_url": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "data": { + "$ref": "#/definitions/papajohns.IntlIngredientsResponse" }, - "width": { - "type": "integer" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.countryIndustryMetaResponseDoc": { + "papajohns.intlMenuResponseDoc": { "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/popularTrend.CountryIndustryMeta" + "$ref": "#/definitions/papajohns.IntlMenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsAnalysisResponseDoc": { + "papajohns.intlOfferResponseDoc": { "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/popularTrend.TopAdsAnalysisResp" + "$ref": "#/definitions/papajohns.IntlOfferResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsDetailResponseDoc": { + "papajohns.intlProductResponseDoc": { "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/popularTrend.TopAdsDetailResp" + "$ref": "#/definitions/papajohns.IntlProductResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsFiltersResponseDoc": { + "papajohns.intlStoresResponseDoc": { "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/popularTrend.TopAdsFiltersResp" + "$ref": "#/definitions/papajohns.IntlStoresResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsListResponseDoc": { + "papajohns.latamMenuResponseDoc": { "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/popularTrend.TopAdsListResp" + "$ref": "#/definitions/papajohns.LatamMenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsLocationInfoResponseDoc": { + "papajohns.menuItemResponseDoc": { "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/popularTrend.TopAdsLocationInfoResp" + "$ref": "#/definitions/papajohns.MenuItemResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsLocationsResponseDoc": { + "papajohns.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/popularTrend.TopAdsLocationsResp" + "$ref": "#/definitions/papajohns.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsRecommendResponseDoc": { + "papajohns.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/popularTrend.TopAdsRecommendResp" + "$ref": "#/definitions/papajohns.NearbyResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsSafetyResponseDoc": { + "papajohns.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/popularTrend.TopAdsSafetyResp" + "$ref": "#/definitions/papajohns.NutritionResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsSpotlightResponseDoc": { + "papajohns.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/popularTrend.TopAdsSpotlightResp" + "$ref": "#/definitions/papajohns.StoreResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "populartrend.topAdsSuggestionsResponseDoc": { + "papajohns.storefrontMenuResponseDoc": { "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/popularTrend.TopAdsSuggestionsResp" + "$ref": "#/definitions/papajohns.StorefrontMenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "poshmark.BrandDirectoryEntry": { + "patreon.Creator": { "properties": { - "aliases": { - "items": { - "type": "string" - }, - "type": "array" + "avatar_url": { + "type": "string" }, - "id": { - "example": "4be6779b4630c50002000039", + "collection_count": { + "type": "integer" + }, + "cover_url": { "type": "string" }, - "logo_url": { + "creation_count": { + "type": "integer" + }, + "currency": { + "example": "EUR", "type": "string" }, - "name": { - "example": "Nike", + "handle": { + "example": "CachyOS", "type": "string" }, - "slug": { - "example": "Nike", + "has_public_rss": { + "type": "boolean" + }, + "id": { + "example": "8655479", "type": "string" - } - }, - "type": "object" - }, - "poshmark.BrandResponse": { - "properties": { - "has_more": { - "example": true, + }, + "is_monthly": { "type": "boolean" }, - "listings": { - "items": { - "$ref": "#/definitions/poshmark.Listing" - }, - "type": "array" + "is_nsfw": { + "type": "boolean" }, - "next_max_id": { + "name": { + "example": "CachyOS", "type": "string" }, - "source_url": { - "type": "string" + "offers_free_membership": { + "type": "boolean" }, - "total": { - "example": 210000, + "offers_paid_membership": { + "type": "boolean" + }, + "paid_member_count": { "type": "integer" - } - }, - "type": "object" - }, - "poshmark.BrandsResponse": { - "properties": { - "brands": { + }, + "patron_count": { + "type": "integer" + }, + "pledge_sum_cents": { + "type": "integer" + }, + "show_count": { + "type": "integer" + }, + "social_links": { "items": { - "$ref": "#/definitions/poshmark.BrandDirectoryEntry" + "$ref": "#/definitions/patreon.CreatorSocialLink" }, "type": "array" }, - "source_url": { + "summary": { "type": "string" }, - "total": { - "example": 29887, - "type": "integer" + "url": { + "example": "https://www.patreon.com/CachyOS", + "type": "string" } }, "type": "object" }, - "poshmark.CategoriesResponse": { + "patreon.CreatorSocialLink": { "properties": { - "departments": { - "items": { - "$ref": "#/definitions/poshmark.DepartmentTaxonomy" - }, - "type": "array" + "label": { + "example": "CachyOS", + "type": "string" + }, + "platform": { + "example": "twitter", + "type": "string" + }, + "url": { + "example": "https://twitter.com/CachyOS", + "type": "string" } }, "type": "object" }, - "poshmark.CategoryResponse": { + "patreon.ExploreCreator": { "properties": { - "has_more": { - "example": true, - "type": "boolean" + "avatar_url": { + "type": "string" }, - "listings": { - "items": { - "$ref": "#/definitions/poshmark.Listing" - }, - "type": "array" + "creation_name": { + "example": "creating YouTube videos", + "type": "string" }, - "next_max_id": { + "id": { + "example": "4270549", "type": "string" }, - "source_url": { + "is_nsfw": { + "type": "boolean" + }, + "name": { + "example": "Reckless Ben", "type": "string" }, - "total": { - "example": 84000, - "type": "integer" + "url": { + "example": "https://www.patreon.com/RecklessBen", + "type": "string" } }, "type": "object" }, - "poshmark.CategoryTaxonomyEntry": { + "patreon.ExploreResult": { "properties": { - "id": { - "example": "00268975d97b4e80ef00a955", - "type": "string" - }, - "name": { - "example": "Shoes", - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/patreon.ExploreSection" + }, + "type": "array" }, - "path": { - "description": "Path is the exact value the category endpoint's path parameter\nexpects, e.g. \"Women-Shoes\".", - "example": "Women-Shoes", + "topic": { + "example": "podcasts_and_shows", "type": "string" } }, "type": "object" }, - "poshmark.ClosetResponse": { + "patreon.ExploreSection": { "properties": { - "has_more": { - "example": true, - "type": "boolean" - }, - "listings": { + "creators": { "items": { - "$ref": "#/definitions/poshmark.Listing" + "$ref": "#/definitions/patreon.ExploreCreator" }, "type": "array" }, - "next_max_id": { + "title": { + "example": "Top creators", "type": "string" }, - "seller": { - "$ref": "#/definitions/poshmark.Seller" - }, - "source_url": { + "type": { + "enum": [ + "popular-campaigns", + "trending-campaigns", + "new-campaigns" + ], + "example": "popular-campaigns", "type": "string" - }, - "total_count": { - "example": 107, - "type": "integer" } }, "type": "object" }, - "poshmark.Comment": { + "patreon.MembershipTier": { "properties": { - "comment": { - "example": "Hi can you tell me the width of the waist?", - "type": "string" + "amount_cents": { + "example": 500, + "type": "integer" }, - "created_at": { - "example": "2026-07-05T09:28:09-07:00", - "type": "string" + "benefits": { + "items": { + "$ref": "#/definitions/patreon.MembershipTierBenefit" + }, + "type": "array" }, - "creator_full_name": { - "example": "Jen Muston", + "currency": { + "example": "USD", "type": "string" }, - "creator_picture_url": { + "description": { "type": "string" }, - "creator_username": { - "example": "muvlax20", + "id": { + "example": "17218833", "type": "string" }, - "id": { - "example": "6a4a86191fea02ce69f41484", + "title": { + "example": "Supporter", "type": "string" } }, "type": "object" }, - "poshmark.DepartmentTaxonomy": { + "patreon.MembershipTierBenefit": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/poshmark.CategoryTaxonomyEntry" - }, - "type": "array" - }, - "id": { - "example": "000e8975d97b4e80ef00a955", - "type": "string" - }, - "name": { - "example": "Women", + "description": { "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", + "title": { + "example": "Support the project", "type": "string" } }, "type": "object" }, - "poshmark.Listing": { + "patreon.MembershipTiersResult": { "properties": { - "brand": { - "example": "FARM Rio", + "creator_id": { + "example": "8655479", "type": "string" }, - "category": { - "example": "Shorts", + "handle": { + "example": "CachyOS", "type": "string" }, - "colors": { - "example": [ - "Red", - "Yellow" - ], + "tiers": { "items": { - "type": "string" + "$ref": "#/definitions/patreon.MembershipTier" }, "type": "array" + } + }, + "type": "object" + }, + "patreon.PublicRSSEpisode": { + "properties": { + "description": { + "type": "string" }, - "comment_count": { - "example": 4, - "type": "integer" + "duration": { + "type": "string" }, - "condition": { - "example": "nwt", + "enclosure_type": { "type": "string" }, - "cover_shot": { - "example": "https://di2ponv0v5otw.cloudfront.net/posts/2026/06/27/6a3fed1de9c77df92e2c0cc6/s_6a3fed24bd4ce3ff762126e5.jpg", + "enclosure_url": { "type": "string" }, - "created_at": { - "example": "2026-06-27T08:32:58-07:00", + "episode_type": { "type": "string" }, - "department": { - "example": "Women", + "guid": { "type": "string" }, - "description": { + "image_url": { "type": "string" }, - "first_available_at": { + "link": { "type": "string" }, - "id": { - "example": "6a3fed1de9c77df92e2c0cc6", + "published_at": { "type": "string" }, - "inventory_status": { - "example": "available", + "title": { + "type": "string" + } + }, + "type": "object" + }, + "patreon.PublicRSSFeed": { + "properties": { + "author": { "type": "string" }, - "like_count": { - "example": 111, - "type": "integer" + "campaign_id": { + "example": "80117", + "type": "string" }, - "original_price": { - "example": 95, - "type": "number" + "copyright": { + "type": "string" }, - "pictures": { + "description": { + "type": "string" + }, + "episodes": { "items": { - "type": "string" + "$ref": "#/definitions/patreon.PublicRSSEpisode" }, "type": "array" }, - "price": { - "example": 55, - "type": "number" - }, - "quantity_available": { - "example": 1, - "type": "integer" - }, - "seller_display_handle": { - "example": "maltimar", - "type": "string" - }, - "seller_full_name": { - "example": "Mary Altimar", + "explicit": { "type": "string" }, - "seller_picture_url": { + "image_url": { "type": "string" }, - "seller_username": { - "example": "maltimar", + "language": { "type": "string" }, - "share_count": { - "example": 13, - "type": "integer" - }, - "size": { - "example": "S", + "link": { "type": "string" }, - "status": { - "example": "published", + "show_id": { + "example": "1322380", "type": "string" }, "title": { - "example": "NWT Farm Rio Shorts", "type": "string" }, - "url": { - "example": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6", + "type": { "type": "string" } }, "type": "object" }, - "poshmark.ListingResponse": { + "patreon.creatorResponseDoc": { "properties": { - "brand": { - "example": "FARM Rio", + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/patreon.Creator" + }, + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "patreon.exploreResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "category": { - "example": "Shorts", + "data": { + "$ref": "#/definitions/patreon.ExploreResult" + }, + "msg": { + "example": "success", + "type": "string" + } + }, + "type": "object" + }, + "patreon.membershipTiersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/patreon.MembershipTiersResult" + }, + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "patreon.publicRSSResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "colors": { - "example": [ - "Red", - "Yellow" - ], + "data": { + "$ref": "#/definitions/patreon.PublicRSSFeed" + }, + "msg": { + "example": "success", + "type": "string" + } + }, + "type": "object" + }, + "pcgamer.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "comment_count": { - "example": 4, - "type": "integer" - }, - "comments": { + "biography": { "items": { - "$ref": "#/definitions/poshmark.Comment" + "type": "string" }, "type": "array" }, - "condition": { - "example": "nwt", - "type": "string" + "has_next_page": { + "type": "boolean" }, - "cover_shot": { - "example": "https://di2ponv0v5otw.cloudfront.net/posts/2026/06/27/6a3fed1de9c77df92e2c0cc6/s_6a3fed24bd4ce3ff762126e5.jpg", + "job_title": { "type": "string" }, - "created_at": { - "example": "2026-06-27T08:32:58-07:00", + "name": { "type": "string" }, - "department": { - "example": "Women", - "type": "string" + "page": { + "type": "integer" }, - "description": { + "slug": { "type": "string" }, - "first_available_at": { - "type": "string" + "social_links": { + "items": { + "$ref": "#/definitions/pcgamer.AuthorSocialLink" + }, + "type": "array" }, - "id": { - "example": "6a3fed1de9c77df92e2c0cc6", + "url": { "type": "string" - }, - "inventory_status": { - "example": "available", + } + }, + "type": "object" + }, + "pcgamer.AuthorSocialLink": { + "properties": { + "platform": { "type": "string" }, - "like_count": { - "example": 111, - "type": "integer" - }, - "original_price": { - "example": 95, - "type": "number" - }, - "pictures": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "pcmag.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "price": { - "example": 55, - "type": "number" - }, - "quantity_available": { - "example": 1, - "type": "integer" + "biography": { + "type": "string" }, - "seller": { - "$ref": "#/definitions/poshmark.Seller" + "expertise": { + "items": { + "$ref": "#/definitions/pcmag.AuthorTopic" + }, + "type": "array" }, - "seller_display_handle": { - "example": "maltimar", + "image_url": { "type": "string" }, - "seller_full_name": { - "example": "Mary Altimar", + "name": { "type": "string" }, - "seller_picture_url": { + "role": { "type": "string" }, - "seller_username": { - "example": "maltimar", + "slug": { "type": "string" }, - "share_count": { - "example": 13, - "type": "integer" - }, - "similar_listings": { + "social_links": { "items": { - "$ref": "#/definitions/poshmark.Listing" + "$ref": "#/definitions/pcmag.AuthorSocialLink" }, "type": "array" }, - "size": { - "example": "S", + "url": { "type": "string" - }, - "source_url": { + } + }, + "type": "object" + }, + "pcmag.AuthorSocialLink": { + "properties": { + "platform": { "type": "string" }, - "status": { - "example": "published", + "url": { "type": "string" - }, - "title": { - "example": "NWT Farm Rio Shorts", + } + }, + "type": "object" + }, + "pcmag.AuthorTopic": { + "properties": { + "name": { "type": "string" }, "url": { - "example": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6", "type": "string" } }, "type": "object" }, - "poshmark.RatingBreakdown": { + "people.AuthorInfoItem": { "properties": { - "five_star": { - "example": 355, - "type": "integer" - }, - "four_star": { - "example": 7, - "type": "integer" - }, - "one_star": { - "example": 1, - "type": "integer" + "label": { + "type": "string" }, - "three_star": { - "example": 2, - "type": "integer" + "url": { + "type": "string" }, - "two_star": { - "example": 3, - "type": "integer" + "value": { + "type": "string" } }, "type": "object" }, - "poshmark.SearchResponse": { + "people.AuthorResponse": { "properties": { - "has_more": { - "example": true, - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/people.HeadlineItem" + }, + "type": "array" }, - "listings": { + "biography": { "items": { - "$ref": "#/definitions/poshmark.Listing" + "type": "string" }, "type": "array" }, - "next_max_id": { - "example": "ENC_eyJtYXhfaWRzIjpbNDksMSwxXSwicGFnZV9udW0iOjIsInBhZ2VfZ3JvdXBfaWQiOiI2YTcyZTE3OTI1MzYyMTUzMDNhMmVmMWEifQ", + "info": { + "items": { + "$ref": "#/definitions/people.AuthorInfoItem" + }, + "type": "array" + }, + "job_title": { "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "total": { - "example": 120000, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "poshmark.Seller": { + "people.HeadlineItem": { "properties": { - "cover_shot_url": { - "type": "string" - }, - "display_handle": { - "example": "maltimar", - "type": "string" - }, - "followers": { - "example": 9096, - "type": "integer" - }, - "following": { - "example": 89, - "type": "integer" - }, - "full_name": { - "example": "Mary Altimar", + "author": { "type": "string" }, - "id": { - "example": "5a4f84cb7d70fb0f0f05a37f", + "image_url": { "type": "string" }, - "items_sold_display": { - "example": "500+", + "published_at": { "type": "string" }, - "last_active_at": { - "example": "2026-08-04T19:52:16-07:00", + "summary": { "type": "string" }, - "member_since": { - "example": "2018-01-05T05:59:39-08:00", + "title": { "type": "string" }, - "orders_shipped": { - "example": 522, - "type": "integer" - }, - "picture_url": { - "example": "https://di2ponv0v5otw.cloudfront.net/users/2018/04/23/5a4f84cb7d70fb0f0f05a37f/t_5ade0fdbd0492dff500c741a.jpg", + "type": { "type": "string" }, - "posts_count": { - "example": 698, - "type": "integer" - }, - "rating_average": { - "example": 4.93, - "type": "number" - }, - "rating_breakdown": { - "$ref": "#/definitions/poshmark.RatingBreakdown" - }, - "rating_count": { - "example": 368, - "type": "integer" - }, "url": { - "example": "https://poshmark.com/closet/maltimar", - "type": "string" - }, - "username": { - "example": "maltimar", "type": "string" } }, "type": "object" }, - "poshmark.TrendResponse": { + "phillyinquirer.AuthorResponse": { "properties": { - "cover_shot": { - "type": "string" - }, - "description": { - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "listings": { + "biography": { "items": { - "$ref": "#/definitions/poshmark.Listing" + "type": "string" }, "type": "array" }, + "image_url": { + "type": "string" + }, "name": { - "example": "Vintage Celine Handbags", "type": "string" }, - "next_max_id": { + "role": { "type": "string" }, - "source_url": { + "slug": { "type": "string" }, - "total": { - "example": 5000, - "type": "integer" + "social_links": { + "items": { + "$ref": "#/definitions/phillyinquirer.AuthorSocialLink" + }, + "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "poshmark.brandsResponseDoc": { + "phillyinquirer.AuthorSocialLink": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/poshmark.BrandsResponse" + "platform": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "poshmark.categoriesResponseDoc": { + "philstar.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "published_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/poshmark.CategoriesResponse" + "section": { + "type": "string" }, - "msg": { - "example": "OK", + "summary": { "type": "string" - } - }, - "type": "object" - }, - "poshmark.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/poshmark.SearchResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "prada.CategoriesResponse": { + "philstar.AuthorResponse": { "properties": { - "categories": { + "articles": { "items": { - "$ref": "#/definitions/prada.Category" + "$ref": "#/definitions/philstar.AuthorArticle" }, "type": "array" }, - "count": { - "type": "integer" + "id": { + "type": "string" }, - "fetched_at": { + "name": { "type": "string" }, - "genders": { - "items": { - "$ref": "#/definitions/prada.FacetCount" - }, - "type": "array" + "photo_url": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "prada.Category": { + "phonearena.AuthorResponse": { "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "path_ids": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "prada.CategoryResponse": { - "properties": { - "category_id": { + "image_url": { "type": "string" }, - "count": { - "type": "integer" - }, - "country": { + "name": { "type": "string" }, - "fetched_at": { + "role": { "type": "string" }, - "gender": { + "slug": { "type": "string" }, - "limit": { - "type": "integer" - }, - "page": { - "type": "integer" - }, - "products": { + "social_links": { "items": { - "$ref": "#/definitions/prada.Product" + "$ref": "#/definitions/phonearena.AuthorSocialLink" }, "type": "array" }, - "sort": { + "url": { "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "prada.FacetCount": { + "phonearena.AuthorSocialLink": { "properties": { - "count": { - "type": "integer" + "platform": { + "type": "string" }, - "value": { + "url": { "type": "string" } }, "type": "object" }, - "prada.Product": { + "pinterest.Board": { "properties": { - "color": { - "type": "string" - }, - "color_hex": { - "type": "string" - }, - "currency": { + "cover_image_url": { "type": "string" }, - "gender": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { + "description": { "type": "string" }, - "in_stock": { - "type": "boolean" - }, - "material": { - "type": "string" + "follower_count": { + "type": "integer" }, - "model": { + "id": { "type": "string" }, "name": { "type": "string" }, - "price": { - "type": "number" - }, - "product_type": { - "type": "string" - }, - "pv": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "prada.ProductColorOption": { - "properties": { - "code": { + "owner_username": { "type": "string" }, - "hex": { - "type": "string" + "pin_count": { + "type": "integer" }, - "name": { + "privacy": { "type": "string" }, "url": { @@ -121103,303 +123307,256 @@ }, "type": "object" }, - "prada.ProductResponse": { + "pinterest.BoardResponse": { "properties": { - "breadcrumbs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "color": { + "cover_image_url": { "type": "string" }, - "color_hex": { + "description": { "type": "string" }, - "country": { - "type": "string" + "follower_count": { + "type": "integer" }, - "currency": { + "id": { "type": "string" }, - "description": { + "name": { "type": "string" }, - "discounted_price": { - "type": "number" - }, - "fetched_at": { + "owner_username": { "type": "string" }, - "gender": { - "items": { - "type": "string" - }, - "type": "array" + "pin_count": { + "type": "integer" }, - "images": { + "pins": { "items": { - "type": "string" + "$ref": "#/definitions/pinterest.PinSummary" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "material": { - "type": "string" - }, - "model": { + "privacy": { "type": "string" }, - "name": { + "url": { "type": "string" - }, - "other_colors": { + } + }, + "type": "object" + }, + "pinterest.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/prada.ProductColorOption" + "$ref": "#/definitions/pinterest.Category" }, "type": "array" - }, - "price": { - "type": "number" - }, - "product_type": { + } + }, + "type": "object" + }, + "pinterest.Category": { + "properties": { + "id": { "type": "string" }, - "pv": { + "name": { "type": "string" }, - "sizes": { - "items": { - "$ref": "#/definitions/prada.ProductSize" - }, - "type": "array" - }, - "stock_quantity": { - "type": "integer" - }, - "url": { + "slug": { "type": "string" } }, "type": "object" }, - "prada.ProductSize": { + "pinterest.IdeaResponse": { "properties": { - "code": { + "description": { "type": "string" }, - "label": { + "follower_count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "name": { "type": "string" + }, + "pins": { + "items": { + "$ref": "#/definitions/pinterest.PinSummary" + }, + "type": "array" } }, "type": "object" }, - "prada.SearchResponse": { + "pinterest.PinDetail": { "properties": { - "count": { + "board_name": { + "type": "string" + }, + "comment_count": { "type": "integer" }, - "country": { + "created_at": { "type": "string" }, - "fetched_at": { + "description": { "type": "string" }, - "gender": { + "domain": { "type": "string" }, - "limit": { - "type": "integer" + "dominant_color": { + "type": "string" }, - "page": { - "type": "integer" + "id": { + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/prada.Product" - }, - "type": "array" + "image_url": { + "type": "string" }, - "query": { + "link": { "type": "string" }, - "sort": { + "pinner_username": { "type": "string" }, - "total_pages": { + "repin_count": { "type": "integer" }, - "total_results": { - "type": "integer" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "prada.Store": { + "pinterest.PinSummary": { "properties": { - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "city": { + "board_name": { "type": "string" }, - "country": { + "description": { "type": "string" }, - "distance_km": { - "type": "number" - }, - "hours": { - "items": { - "$ref": "#/definitions/prada.StoreDay" - }, - "type": "array" - }, - "id": { + "domain": { "type": "string" }, - "latitude": { - "type": "number" - }, - "line1": { + "dominant_color": { "type": "string" }, - "line2": { + "id": { "type": "string" }, - "longitude": { - "type": "number" - }, - "name": { + "image_url": { "type": "string" }, - "permanently_closed": { - "type": "boolean" - }, - "phone": { + "link": { "type": "string" }, - "postal_code": { + "pinner_username": { "type": "string" }, - "region": { + "title": { "type": "string" }, - "services": { - "items": { - "type": "string" - }, - "type": "array" - }, - "timezone": { + "url": { "type": "string" } }, "type": "object" }, - "prada.StoreDay": { + "pinterest.SearchResponse": { "properties": { - "closed": { - "type": "boolean" - }, - "day": { - "type": "string" - }, - "end": { - "type": "string" + "pins": { + "items": { + "$ref": "#/definitions/pinterest.PinSummary" + }, + "type": "array" }, - "start": { + "query": { "type": "string" } }, "type": "object" }, - "prada.StoresResponse": { + "pinterest.User": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "about": { "type": "string" }, - "lat": { - "type": "number" + "avatar_url": { + "type": "string" }, - "limit": { + "board_count": { "type": "integer" }, - "lng": { - "type": "number" + "follower_count": { + "type": "integer" }, - "offset": { + "following_count": { "type": "integer" }, - "query": { + "full_name": { "type": "string" }, - "radius_km": { - "type": "number" - }, - "stores": { - "items": { - "$ref": "#/definitions/prada.Store" - }, - "type": "array" + "is_verified_merchant": { + "type": "boolean" }, - "total_results": { + "pin_count": { "type": "integer" + }, + "username": { + "type": "string" + }, + "website_url": { + "type": "string" } }, "type": "object" }, - "prada.SuggestResponse": { + "pinterest.UserBoardsResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "query": { - "type": "string" - }, - "suggestions": { + "boards": { "items": { - "$ref": "#/definitions/prada.Suggestion" + "$ref": "#/definitions/pinterest.Board" }, "type": "array" + }, + "username": { + "type": "string" } }, "type": "object" }, - "prada.Suggestion": { + "pinterest.UserPinsResponse": { "properties": { - "popularity": { - "type": "integer" + "pins": { + "items": { + "$ref": "#/definitions/pinterest.PinSummary" + }, + "type": "array" }, - "query": { + "username": { "type": "string" - }, - "result_count": { - "type": "integer" } }, "type": "object" }, - "prada.categoriesResponseDoc": { + "pinterest.boardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.CategoriesResponse" + "$ref": "#/definitions/pinterest.BoardResponse" }, "msg": { "example": "OK", @@ -121408,14 +123565,14 @@ }, "type": "object" }, - "prada.categoryResponseDoc": { + "pinterest.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.CategoryResponse" + "$ref": "#/definitions/pinterest.CategoriesResponse" }, "msg": { "example": "OK", @@ -121424,14 +123581,14 @@ }, "type": "object" }, - "prada.productResponseDoc": { + "pinterest.ideaResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.ProductResponse" + "$ref": "#/definitions/pinterest.IdeaResponse" }, "msg": { "example": "OK", @@ -121440,14 +123597,14 @@ }, "type": "object" }, - "prada.searchResponseDoc": { + "pinterest.pinResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.SearchResponse" + "$ref": "#/definitions/pinterest.PinDetail" }, "msg": { "example": "OK", @@ -121456,14 +123613,14 @@ }, "type": "object" }, - "prada.storesResponseDoc": { + "pinterest.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.StoresResponse" + "$ref": "#/definitions/pinterest.SearchResponse" }, "msg": { "example": "OK", @@ -121472,14 +123629,14 @@ }, "type": "object" }, - "prada.suggestResponseDoc": { + "pinterest.userBoardsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.SuggestResponse" + "$ref": "#/definitions/pinterest.UserBoardsResponse" }, "msg": { "example": "OK", @@ -121488,245 +123645,196 @@ }, "type": "object" }, - "pristineauction.AuctionStatus": { + "pinterest.userPinsResponseDoc": { "properties": { - "slug": { - "example": "completed", + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/pinterest.UserPinsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "pristineauction.AuctionType": { + "pinterest.userResponseDoc": { "properties": { - "slug": { - "example": "daily", + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/pinterest.User" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "pristineauction.CategoriesResponse": { + "pitchbook.DataTable": { "properties": { - "auction_types": { + "columns": { "items": { - "$ref": "#/definitions/pristineauction.AuctionType" + "type": "string" }, "type": "array" }, - "categories": { - "items": { - "$ref": "#/definitions/pristineauction.Category" - }, - "type": "array" + "name": { + "example": "Investors", + "type": "string" }, - "sort": { + "row_ids": { "items": { - "$ref": "#/definitions/pristineauction.SortOption" + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" }, - "statuses": { + "rows": { "items": { - "$ref": "#/definitions/pristineauction.AuctionStatus" + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" + }, + "total": { + "example": 23, + "type": "integer" } }, "type": "object" }, - "pristineauction.Category": { + "pitchbook.FAQ": { "properties": { - "count": { - "example": 8608, - "type": "integer" - }, - "label": { - "example": "BASEBALL", - "type": "string" - }, - "slug": { - "example": "baseball", + "answer": { + "example": "Thinking Machines Lab was founded in 2024.", "type": "string" }, - "url": { - "example": "https://www.pristineauction.com/auction/category/baseball", + "question": { + "example": "When was Thinking Machines Lab founded?", "type": "string" } }, "type": "object" }, - "pristineauction.LotDetailResponse": { + "pitchbook.ProfileResponse": { "properties": { - "auction_type": { - "example": "CARD AUCTION", - "type": "string" + "contact": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "auction_type_url": { + "description": { "type": "string" }, - "availability": { - "example": "InStock", + "faqs": { + "items": { + "$ref": "#/definitions/pitchbook.FAQ" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-07-08T20:00:00Z", "type": "string" }, - "category": { - "example": "trading-cards", + "id": { + "example": "752821-12", "type": "string" }, - "currency": { - "example": "USD", + "kind": { + "example": "company", "type": "string" }, - "description": { + "name": { + "example": "Thinking Machines Lab", "type": "string" }, - "ends_at": { - "example": "2026-09-21T03:00:00-07:00", + "overview": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "source_url": { + "example": "https://pitchbook.com/profiles/company/752821-12", "type": "string" }, - "images": { + "tables": { "items": { - "type": "string" + "$ref": "#/definitions/pitchbook.DataTable" }, "type": "array" - }, - "lot_number": { - "example": 13154611, + } + }, + "type": "object" + }, + "pitchbook.advisorResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "no_reserve": { - "type": "boolean" - }, - "price": { - "example": 256.66, - "type": "number" - }, - "sku": { - "example": "LOT-13154611", - "type": "string" + "data": { + "$ref": "#/definitions/pitchbook.ProfileResponse" }, - "title": { - "example": "Mickey Mantle 1969 Topps #500 (PSA 8) (MC)", + "msg": { + "example": "OK", "type": "string" - }, - "total_bids": { - "type": "integer" - }, - "total_views": { + } + }, + "type": "object" + }, + "pitchbook.companyResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "total_watching": { - "type": "integer" + "data": { + "$ref": "#/definitions/pitchbook.ProfileResponse" }, - "url": { - "example": "https://www.pristineauction.com/a13154611", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "pristineauction.LotSummary": { + "pitchbook.fundResponseDoc": { "properties": { - "auction_type": { - "example": "CARD AUCTION", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "auction_type_url": { - "type": "string" + "data": { + "$ref": "#/definitions/pitchbook.ProfileResponse" }, - "currency": { - "example": "USD", - "type": "string" - }, - "ends_at": { - "example": "2026-09-21T03:00:00Z", - "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", - "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" - }, - "pristineauction.SearchResponse": { - "properties": { - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "results": { - "items": { - "$ref": "#/definitions/pristineauction.LotSummary" - }, - "type": "array" - }, - "total": { - "type": "integer" - }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "pristineauction.SortOption": { - "properties": { - "slug": { - "example": "ending-soonest", - "type": "string" - } - }, - "type": "object" - }, - "pristineauction.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/pristineauction.CategoriesResponse" - }, - "msg": { - "example": "OK", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "pristineauction.lotDetailResponseDoc": { + "pitchbook.investorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pristineauction.LotDetailResponse" + "$ref": "#/definitions/pitchbook.ProfileResponse" }, "msg": { "example": "OK", @@ -121735,14 +123843,14 @@ }, "type": "object" }, - "pristineauction.searchResponseDoc": { + "pitchbook.limitedPartnerResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pristineauction.SearchResponse" + "$ref": "#/definitions/pitchbook.ProfileResponse" }, "msg": { "example": "OK", @@ -121751,1887 +123859,2008 @@ }, "type": "object" }, - "producthunt.LeaderboardAdItem": { + "pizzahut.Address": { "properties": { - "channel_kind": { - "type": "string" - }, - "id": { + "address1": { + "example": "932 8th Ave", "type": "string" }, - "large_asset_uuid": { + "address2": { "type": "string" }, - "name": { + "city": { + "example": "New York", "type": "string" }, - "post": { - "$ref": "#/definitions/producthunt.LeaderboardAdPost" - }, - "small_asset_uuid": { + "country_code": { + "example": "US", "type": "string" }, - "subject": { - "type": "string" + "latitude": { + "example": 40.7655, + "type": "number" }, - "tagline": { - "type": "string" + "longitude": { + "example": -73.9835, + "type": "number" }, - "thumbnail_uuid": { + "phone": { + "example": "+19296452154", "type": "string" }, - "url": { + "postal_code": { + "example": "10019", "type": "string" }, - "variation_id": { + "state": { + "example": "NY", "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardAdPost": { + "pizzahut.BundleChoice": { "properties": { - "comments_count": { - "type": "integer" - }, - "created_at": { - "type": "string" - }, - "disabled_when_scheduled": { - "type": "boolean" - }, - "embargo_preview_at": { - "type": "string" - }, - "featured_at": { - "type": "string" - }, - "featured_comment": { - "$ref": "#/definitions/producthunt.ProductCategoryAdComment" - }, - "has_voted": { - "type": "boolean" - }, - "hide_votes_count": { - "type": "boolean" - }, - "id": { + "choice_code": { + "example": "748", "type": "string" }, - "latest_score": { + "max_allowed_selections": { + "example": 1, "type": "integer" }, - "launch_day_score": { + "min_allowed_selections": { + "example": 1, "type": "integer" }, "name": { + "example": "1st Pizza", "type": "string" }, - "product": { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" - }, - "randomization_status": { - "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" - }, - "slug": { - "type": "string" - }, - "topics": { + "variants": { "items": { - "$ref": "#/definitions/producthunt.LeaderboardTopic" + "$ref": "#/definitions/pizzahut.BundleChoiceVariant" }, "type": "array" - }, - "updated_at": { - "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardGhostItem": { + "pizzahut.BundleChoiceVariant": { "properties": { - "id": { - "type": "string" - }, - "subject": { + "name": { + "example": "Medium Hand-Tossed Create Your Own 1-Top Pizza", "type": "string" - } - }, - "type": "object" - }, - "producthunt.LeaderboardItem": { - "properties": { - "ad": { - "$ref": "#/definitions/producthunt.LeaderboardAdItem" - }, - "ghost_ad": { - "$ref": "#/definitions/producthunt.LeaderboardGhostItem" }, - "post": { - "$ref": "#/definitions/producthunt.LeaderboardPostItem" + "upcharge": { + "$ref": "#/definitions/pizzahut.Money" }, - "type": { + "variant_code": { + "example": "variant_CLSS001_010BCYO1T_SIZE050M_BASE020H", "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardPage": { + "pizzahut.BundleChoicesResponse": { "properties": { - "connection": { + "bundle_code": { + "example": "MEAL501BD", "type": "string" }, - "day": { - "example": 29, - "type": "integer" - }, - "end_cursor": { + "channel": { + "example": "WEB", "type": "string" }, - "featured": { - "type": "boolean" - }, - "golden_kitty_years": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "has_next_page": { - "type": "boolean" + "choice_count": { + "example": 4, + "type": "integer" }, - "items": { + "choices": { "items": { - "$ref": "#/definitions/producthunt.LeaderboardItem" + "$ref": "#/definitions/pizzahut.BundleChoice" }, "type": "array" }, - "month": { - "example": 1, - "type": "integer" - }, - "order": { - "example": "DAILY_RANK", + "description": { + "example": "All your faves - 2 medium 1-topping pizzas, 8 boneless wings, and 5 breadsticks!", "type": "string" }, - "raw_page_info": { - "additionalProperties": {}, - "type": "object" + "fetched_at": { + "type": "string" }, - "scope": { - "example": "daily", + "name": { + "example": "Big Dinner Box", "type": "string" }, - "total_count": { - "type": "integer" + "price": { + "$ref": "#/definitions/pizzahut.Money" }, - "week": { - "example": 5, - "type": "integer" + "source_url": { + "type": "string" }, - "year": { - "example": 2026, - "type": "integer" + "store_number": { + "example": "040937", + "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardPostItem": { + "pizzahut.DeliveryEstimateResponse": { "properties": { - "comments_count": { - "type": "integer" + "delivery_provider": { + "example": "INTERNAL", + "type": "string" }, - "created_at": { + "dropoff_at": { "type": "string" }, - "daily_rank": { - "type": "integer" + "fee": { + "allOf": [ + { + "$ref": "#/definitions/pizzahut.Money" + } + ], + "description": "Fee is the total delivery fee; Fees breaks it down by line item." }, - "disabled_when_scheduled": { - "type": "boolean" + "fees": { + "items": { + "$ref": "#/definitions/pizzahut.DeliveryFeeLine" + }, + "type": "array" }, - "embargo_preview_at": { + "fetched_at": { "type": "string" }, - "featured_at": { + "pickup_at": { "type": "string" }, - "friend_voters_count": { - "type": "integer" + "reason": { + "example": "The requested StoreDeliveryProvider has not be enabled at this store", + "type": "string" }, - "has_voted": { + "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" }, - "hide_votes_count": { - "type": "boolean" + "source_url": { + "type": "string" }, - "id": { + "store_number": { + "example": "040937", "type": "string" + } + }, + "type": "object" + }, + "pizzahut.DeliveryFeeLine": { + "properties": { + "amount": { + "$ref": "#/definitions/pizzahut.Money" }, - "is_subscribed": { + "name": { + "example": "Delivery fee", + "type": "string" + }, + "type": { + "example": "DELIVERY_FEE", + "type": "string" + } + }, + "type": "object" + }, + "pizzahut.DeliveryProvider": { + "properties": { + "enabled": { + "example": true, "type": "boolean" }, - "latest_score": { - "type": "integer" + "provider": { + "example": "INTERNAL", + "type": "string" + } + }, + "type": "object" + }, + "pizzahut.MenuCategory": { + "properties": { + "category_code": { + "example": "pizza", + "type": "string" }, - "launch_day_score": { - "type": "integer" + "description": { + "type": "string" }, - "monthly_rank": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/pizzahut.MenuItem" + }, + "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" }, - "product": { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" - }, - "product_state": { + "code": { + "example": "CLSS001P|PROD220P", "type": "string" }, - "randomization_status": { - "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" - }, - "scheduled_at": { + "description": { "type": "string" }, - "shortened_url": { + "image_url": { "type": "string" }, - "slug": { + "name": { + "example": "Pepperoni Pizza", "type": "string" }, - "tagline": { + "price": { + "$ref": "#/definitions/pizzahut.Money" + }, + "type": { + "example": "product", "type": "string" }, - "thumbnail_image_uuid": { + "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" }, - "topics": { + "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/producthunt.LeaderboardTopic" + "$ref": "#/definitions/pizzahut.MenuVariant" }, "type": "array" - }, - "updated_at": { - "type": "string" - }, - "weekly_rank": { - "type": "integer" } }, "type": "object" }, - "producthunt.LeaderboardProductRef": { + "pizzahut.MenuResponse": { "properties": { - "id": { + "categories": { + "items": { + "$ref": "#/definitions/pizzahut.MenuCategory" + }, + "type": "array" + }, + "channel": { + "example": "WEB", "type": "string" }, - "is_no_longer_online": { - "type": "boolean" + "currency": { + "example": "USD", + "type": "string" }, - "is_subscribed": { - "type": "boolean" + "fetched_at": { + "type": "string" }, - "is_top_product": { - "type": "boolean" + "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" }, - "logo_uuid": { + "menu_id": { + "example": "22590d80-9482-4f7b-9594-d7ba2885b928", "type": "string" }, - "name": { + "source_url": { "type": "string" }, - "slug": { + "store_number": { + "example": "040937", "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" }, - "producthunt.LeaderboardRandomizationStatus": { + "pizzahut.MenuVariant": { "properties": { - "active": { + "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" }, - "next_transition_at": { + "name": { + "example": "Large Original Stuffed Crust® Pepperoni Pizza", "type": "string" }, - "random_day": { - "type": "boolean" + "price": { + "$ref": "#/definitions/pizzahut.Money" }, - "randomize_order": { - "type": "boolean" + "variant_code": { + "example": "variant_CLSS001_220P_SIZE060L_BASE431S", + "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardTopic": { + "pizzahut.Modifier": { "properties": { - "id": { + "modifier_code": { + "example": "CLSS001P|TOPP012P", "type": "string" }, "name": { + "example": "Pepperoni", "type": "string" }, - "slug": { - "type": "string" + "weights": { + "items": { + "$ref": "#/definitions/pizzahut.ModifierWeight" + }, + "type": "array" } }, "type": "object" }, - "producthunt.Product": { + "pizzahut.ModifierSlot": { "properties": { - "categories": { - "example": [ - "[\"Design\"", - "\"Productivity\"]" - ], + "max_allowed_selections": { + "example": 5, + "type": "integer" + }, + "min_allowed_selections": { + "example": 0, + "type": "integer" + }, + "modifiers": { "items": { - "type": "string" + "$ref": "#/definitions/pizzahut.Modifier" }, "type": "array" }, - "daily_rank": { - "example": 1, - "type": "integer" - }, - "date_published": { - "example": "2024-07-21T12:34:56Z", + "name": { + "example": "Pizza Toppings", "type": "string" }, - "description": { - "example": "Chronicle lets designers and developers review every iteration in one place.", + "slot_code": { + "example": "slot_pizza_toppings", + "type": "string" + } + }, + "type": "object" + }, + "pizzahut.ModifierWeight": { + "properties": { + "modifier_weight_code": { + "example": "CLSS001P|TOPP200XC", "type": "string" }, - "followers_count": { - "example": 2000, - "type": "integer" + "name": { + "example": "Extra Cheese", + "type": "string" }, - "id": { - "example": "chronicle-design", + "price": { + "$ref": "#/definitions/pizzahut.Money" + } + }, + "type": "object" + }, + "pizzahut.ModifiersResponse": { + "properties": { + "channel": { + "example": "WEB", "type": "string" }, - "monthly_rank": { - "example": 1, - "type": "integer" + "fetched_at": { + "type": "string" }, "name": { - "example": "Chronicle", + "example": "Large Hand-Tossed Create Your Own 1-Top Pizza", "type": "string" }, - "rating": { - "example": 4.8, - "type": "number" + "price": { + "$ref": "#/definitions/pizzahut.Money" }, - "review_count": { - "example": 152, + "slot_count": { + "example": 6, "type": "integer" }, - "similar_products": { + "slots": { "items": { - "$ref": "#/definitions/producthunt.SimilarProduct" + "$ref": "#/definitions/pizzahut.ModifierSlot" }, "type": "array" }, - "social_links": { - "example": [ - "[\"https://twitter.com/chronicle\"", - "\"https://github.com/chronicle\"]" - ], - "items": { - "type": "string" - }, - "type": "array" + "source_url": { + "type": "string" }, - "tagline": { - "example": "Visual version control for teams", + "store_number": { + "example": "040937", "type": "string" }, - "website": { - "example": "https://chronicle.design", + "variant_code": { + "example": "variant_CLSS001_010BCYO1T_SIZE060L_BASE020H", "type": "string" + } + }, + "type": "object" + }, + "pizzahut.Money": { + "properties": { + "amount": { + "example": 20.99, + "type": "number" }, - "weekly_rank": { - "example": 1, + "amount_cents": { + "example": 2099, "type": "integer" + }, + "currency_code": { + "example": "USD", + "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutAd": { + "pizzahut.OccasionHours": { "properties": { - "channel_kind": { - "type": "string" + "allow_tip": { + "example": true, + "type": "boolean" }, - "id": { - "type": "string" + "enabled": { + "example": true, + "type": "boolean" }, - "large_asset_uuid": { + "max_order_amount": { + "$ref": "#/definitions/pizzahut.Money" + }, + "min_order_amount": { + "$ref": "#/definitions/pizzahut.Money" + }, + "occasion": { + "example": "CARRYOUT", "type": "string" }, + "payment_types": { + "items": { + "$ref": "#/definitions/pizzahut.PaymentType" + }, + "type": "array" + }, + "windows": { + "items": { + "$ref": "#/definitions/pizzahut.TimeWindow" + }, + "type": "array" + } + }, + "type": "object" + }, + "pizzahut.PaymentType": { + "properties": { "name": { + "example": "APPLEPAY", "type": "string" }, - "small_asset_uuid": { + "type": { + "example": "CARD", "type": "string" + } + }, + "type": "object" + }, + "pizzahut.Store": { + "properties": { + "accepting_online_orders": { + "example": true, + "type": "boolean" }, - "subject": { - "type": "string" + "address": { + "$ref": "#/definitions/pizzahut.Address" }, - "tagline": { - "type": "string" + "archived": { + "example": false, + "type": "boolean" }, - "thumbnail_uuid": { + "delivery_providers": { + "items": { + "$ref": "#/definitions/pizzahut.DeliveryProvider" + }, + "type": "array" + }, + "name": { + "example": "040937", "type": "string" }, - "url": { + "store_number": { + "example": "040937", "type": "string" }, - "variation_id": { + "timezone": { + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutDiscussionForum": { + "pizzahut.StoreResponse": { "properties": { - "id": { - "type": "string" + "accepting_online_orders": { + "example": true, + "type": "boolean" }, - "path": { + "address": { + "$ref": "#/definitions/pizzahut.Address" + }, + "archived": { + "example": false, + "type": "boolean" + }, + "delivery_providers": { + "items": { + "$ref": "#/definitions/pizzahut.DeliveryProvider" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "threads": { + "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/producthunt.ProductAboutDiscussionThread" + "$ref": "#/definitions/pizzahut.OccasionHours" }, "type": "array" }, - "total_count": { - "type": "integer" + "name": { + "example": "040937", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store_number": { + "example": "040937", + "type": "string" + }, + "timezone": { + "example": "America/New_York", + "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutDiscussionThread": { + "pizzahut.StoresResponse": { "properties": { - "commentable_id": { - "type": "string" - }, - "comments_count": { + "count": { + "example": 5, "type": "integer" }, - "created_at": { - "type": "string" - }, - "description_preview": { + "fetched_at": { "type": "string" }, - "forum": { - "$ref": "#/definitions/producthunt.ProductAboutForumRef" - }, - "has_voted": { + "has_more": { + "example": false, "type": "boolean" }, - "id": { + "source_url": { "type": "string" }, - "is_featured": { - "type": "boolean" + "stores": { + "items": { + "$ref": "#/definitions/pizzahut.Store" + }, + "type": "array" }, - "is_pinned": { + "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" }, - "path": { - "type": "string" + "days": { + "example": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "slug": { + "duration": { + "example": "16:00:00", "type": "string" }, - "title": { + "start_time": { + "example": "11:00:00", "type": "string" + } + }, + "type": "object" + }, + "pizzahut.bundleChoicesResponseDoc": { + "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" }, - "user": { - "$ref": "#/definitions/producthunt.ProductCategoryUser" + "data": { + "$ref": "#/definitions/pizzahut.BundleChoicesResponse" }, - "votes_count": { - "type": "integer" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "producthunt.ProductAboutForumRef": { + "pizzahut.deliveryEstimateResponseDoc": { "properties": { - "id": { - "type": "string" - }, - "path": { - "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/pizzahut.DeliveryEstimateResponse" }, - "subject": { - "$ref": "#/definitions/producthunt.ProductAboutForumSubject" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "producthunt.ProductAboutForumSubject": { + "pizzahut.menuResponseDoc": { "properties": { - "id": { - "type": "string" - }, - "is_no_longer_online": { - "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" }, - "logo_uuid": { - "type": "string" + "data": { + "$ref": "#/definitions/pizzahut.MenuResponse" }, - "name": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "producthunt.ProductAboutGhostAd": { + "pizzahut.modifiersResponseDoc": { "properties": { - "id": { - "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" }, - "subject": { - "type": "string" + "data": { + "$ref": "#/definitions/pizzahut.ModifiersResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "producthunt.ProductAboutLatestLaunch": { + "pizzahut.storeResponseDoc": { "properties": { - "id": { - "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" }, - "is_maker": { - "type": "boolean" + "data": { + "$ref": "#/definitions/pizzahut.StoreResponse" }, - "launch_number": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "pizzahut.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" }, - "launched_this_week": { - "type": "boolean" + "data": { + "$ref": "#/definitions/pizzahut.StoresResponse" }, - "launching_today": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "playstation.AddOn": { + "properties": { + "classification": { + "type": "string" }, "name": { "type": "string" }, - "product_state": { - "type": "string" + "price": { + "$ref": "#/definitions/playstation.DetailPrice" }, - "scheduled_at": { + "product_id": { "type": "string" - }, - "slug": { + } + }, + "type": "object" + }, + "playstation.CollectionLink": { + "properties": { + "category_id": { "type": "string" }, - "tagline": { + "link_type": { "type": "string" }, - "thumbnail_image_uuid": { + "name": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutLaunch": { + "playstation.ConceptDetail": { "properties": { - "ad1": { - "$ref": "#/definitions/producthunt.ProductAboutGhostAd" + "add_ons": { + "items": { + "$ref": "#/definitions/playstation.AddOn" + }, + "type": "array" }, - "ad2": { - "$ref": "#/definitions/producthunt.ProductAboutGhostAd" + "content_rating": { + "$ref": "#/definitions/playstation.ContentRating" }, - "badges": { + "default_product_id": { + "type": "string" + }, + "description": { + "type": "string" + }, + "editions": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "$ref": "#/definitions/playstation.Edition" }, "type": "array" }, - "can_deputy_manage": { - "type": "boolean" - }, - "can_manage": { - "type": "boolean" + "genres": { + "items": { + "type": "string" + }, + "type": "array" }, - "comments_count": { - "type": "integer" + "id": { + "type": "string" }, - "created_at": { + "invariant_name": { "type": "string" }, - "daily_rank": { - "type": "integer" + "media": { + "items": { + "$ref": "#/definitions/playstation.Media" + }, + "type": "array" }, - "description": { + "name": { "type": "string" }, - "detailed_reviews": { + "platforms": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutShoutout" + "type": "string" }, "type": "array" }, - "disabled_when_scheduled": { - "type": "boolean" + "price": { + "$ref": "#/definitions/playstation.DetailPrice" }, - "embargo_preview_at": { + "publisher": { "type": "string" }, - "featured": { - "type": "boolean" + "release_date": { + "type": "string" }, - "featured_at": { + "source_url": { "type": "string" }, - "has_voted": { - "type": "boolean" + "star_rating": { + "$ref": "#/definitions/playstation.StarRating" + } + }, + "type": "object" + }, + "playstation.ConceptReview": { + "properties": { + "author": { + "$ref": "#/definitions/playstation.ReviewAuthor" }, - "hide_votes_count": { - "type": "boolean" + "comment": { + "type": "string" + }, + "edition_name": { + "type": "string" + }, + "helpful_count": { + "type": "integer" }, "id": { "type": "string" }, - "is_archived": { + "is_spoiler": { "type": "boolean" }, - "is_available": { - "type": "boolean" + "last_updated": { + "type": "string" }, - "is_hunter": { - "type": "boolean" + "product_name": { + "type": "string" }, - "is_maker": { - "type": "boolean" + "rating": { + "type": "integer" }, - "is_top_launch": { + "title": { + "type": "string" + } + }, + "type": "object" + }, + "playstation.ConceptReviewsResponse": { + "properties": { + "concept_id": { + "type": "string" + }, + "has_next_page": { "type": "boolean" }, - "latest_score": { - "type": "integer" + "name": { + "type": "string" }, - "launch_day_score": { + "page": { "type": "integer" }, - "launch_number": { + "page_size": { "type": "integer" }, - "launch_state": { - "type": "string" + "rating": { + "type": "integer" }, - "launched_this_week": { - "type": "boolean" + "returned": { + "type": "integer" }, - "launching_today": { - "type": "boolean" - }, - "links": { - "items": { - "$ref": "#/definitions/producthunt.ProductAboutLink" - }, - "type": "array" - }, - "makers": { - "items": { - "$ref": "#/definitions/producthunt.ProductAboutUser" - }, - "type": "array" - }, - "media": { + "reviews": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutMedia" + "$ref": "#/definitions/playstation.ConceptReview" }, "type": "array" }, - "meta": { - "$ref": "#/definitions/producthunt.ProductAboutMeta" - }, - "moderation_reason": { - "type": "string" - }, - "name": { - "type": "string" - }, - "pricing_type": { - "type": "string" - }, - "primary_link": { - "$ref": "#/definitions/producthunt.ProductAboutPrimaryLink" - }, - "product": { - "$ref": "#/definitions/producthunt.ProductAboutLaunchProduct" - }, - "product_state": { + "sort": { "type": "string" }, - "promo": { - "additionalProperties": {}, - "type": "object" - }, - "redirect_to_product": { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" - }, - "scheduled_at": { + "source_url": { "type": "string" }, - "slug": { - "type": "string" + "star_rating": { + "$ref": "#/definitions/playstation.StarRating" }, - "tagline": { + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "playstation.ContentRating": { + "properties": { + "authority": { "type": "string" }, - "thumbnail_image_uuid": { + "description": { "type": "string" }, - "topics": { + "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/producthunt.ProductCategoryRef" + "type": "string" }, "type": "array" }, - "trashed_at": { - "type": "string" - }, - "updated_at": { + "name": { "type": "string" }, "url": { "type": "string" - }, - "user": { - "$ref": "#/definitions/producthunt.ProductAboutUser" - }, - "weekly_rank": { - "type": "integer" } }, "type": "object" }, - "producthunt.ProductAboutLaunchFlags": { + "playstation.DetailPrice": { "properties": { - "id": { + "applicability": { "type": "string" }, - "launched_this_week": { - "type": "boolean" + "base_price": { + "type": "string" }, - "launching_today": { - "type": "boolean" - } - }, - "type": "object" - }, - "producthunt.ProductAboutLaunchProduct": { - "properties": { - "can_claim": { - "type": "boolean" + "base_price_value": { + "type": "integer" }, - "can_edit": { - "type": "boolean" + "currency_code": { + "type": "string" }, - "clean_url": { + "discount_text": { "type": "string" }, - "detailed_review": { - "additionalProperties": {}, - "type": "object" + "discounted_price": { + "type": "string" }, - "first_launch": { - "type": "boolean" + "discounted_value": { + "type": "integer" }, - "id": { + "end_time": { "type": "string" }, - "is_claimed": { - "type": "boolean" - }, - "is_no_longer_online": { + "is_exclusive": { "type": "boolean" }, - "is_subscribed": { + "is_free": { "type": "boolean" }, - "is_top_product": { + "is_tied_to_subscription": { "type": "boolean" }, - "is_viewer_team_member": { - "additionalProperties": {}, - "type": "object" - }, - "latest_launch": { - "$ref": "#/definitions/producthunt.ProductAboutLaunchFlags" + "service_branding": { + "items": { + "type": "string" + }, + "type": "array" }, - "logo_uuid": { + "upsell_text": { + "type": "string" + } + }, + "type": "object" + }, + "playstation.Edition": { + "properties": { + "classification": { "type": "string" }, "name": { "type": "string" }, - "posts_count": { - "type": "integer" - }, - "pro_con_tags": { - "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" - }, - "type": "array" - }, - "review_questions": { + "platforms": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutReviewQuestion" + "type": "string" }, "type": "array" }, - "reviews_rating": { - "type": "number" + "price": { + "$ref": "#/definitions/playstation.DetailPrice" }, - "slug": { + "product_id": { "type": "string" - }, - "tagline": { + } + }, + "type": "object" + }, + "playstation.Facet": { + "properties": { + "display_name": { "type": "string" }, - "twitter_url": { + "name": { "type": "string" }, - "viewer_pending_team_request": { - "additionalProperties": {}, - "type": "object" + "values": { + "items": { + "$ref": "#/definitions/playstation.FacetValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "playstation.FacetValue": { + "properties": { + "count": { + "type": "integer" }, - "website_domain": { + "display_name": { "type": "string" }, - "website_url": { + "key": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutLink": { + "playstation.GridResponse": { "properties": { - "devices": { + "count": { + "type": "integer" + }, + "facets": { "items": { - "type": "string" + "$ref": "#/definitions/playstation.Facet" }, "type": "array" }, "id": { "type": "string" }, - "redirect_path": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/playstation.StoreItem" + }, + "type": "array" }, - "store_name": { + "name": { "type": "string" }, - "website_name": { + "next_page": { + "type": "integer" + }, + "page_info": { + "$ref": "#/definitions/playstation.PageInfo" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutMedia": { + "playstation.ListPrice": { "properties": { - "id": { - "type": "string" - }, - "image_uuid": { - "type": "string" - }, - "interactive_demo_id": { + "base_price": { "type": "string" }, - "interactive_demo_type": { + "discount_text": { "type": "string" }, - "media_type": { + "discounted_price": { "type": "string" }, - "original_height": { - "type": "integer" - }, - "original_width": { - "type": "integer" + "is_exclusive": { + "type": "boolean" }, - "platform": { - "type": "string" + "is_free": { + "type": "boolean" }, - "thumbnail_height": { - "type": "integer" + "is_tied_to_subscription": { + "type": "boolean" }, - "thumbnail_width": { - "type": "integer" + "service_branding": { + "items": { + "type": "string" + }, + "type": "array" }, - "url": { - "type": "string" + "upsell_service_branding": { + "items": { + "type": "string" + }, + "type": "array" }, - "video_id": { + "upsell_text": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutMentionedProduct": { + "playstation.Media": { "properties": { - "id": { - "type": "string" - }, - "is_no_longer_online": { - "type": "boolean" - }, - "logo_uuid": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { + "role": { "type": "string" }, - "slug": { + "type": { "type": "string" }, - "tagline": { + "url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutMeta": { + "playstation.MerchResponse": { "properties": { - "title": { + "collections": { + "items": { + "$ref": "#/definitions/playstation.CollectionLink" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "items": { + "items": { + "$ref": "#/definitions/playstation.StoreItem" + }, + "type": "array" + }, + "sections": { + "items": { + "$ref": "#/definitions/playstation.Section" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutPage": { + "playstation.PageInfo": { "properties": { - "ad": { - "$ref": "#/definitions/producthunt.ProductAboutAd" - }, - "launch": { - "$ref": "#/definitions/producthunt.ProductAboutLaunch" - }, - "page_variant_typename": { - "type": "string" + "is_last": { + "type": "boolean" }, - "product": { - "$ref": "#/definitions/producthunt.ProductAboutProduct" + "offset": { + "type": "integer" }, - "product_id": { - "type": "string" + "size": { + "type": "integer" }, - "viewer": { - "$ref": "#/definitions/producthunt.ProductAboutViewer" + "total_count": { + "type": "integer" } }, "type": "object" }, - "producthunt.ProductAboutPageVariant": { + "playstation.ProductDetail": { "properties": { - "launch_id": { + "classification": { "type": "string" }, - "typename": { + "concept_id": { "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductAboutPost": { - "properties": { - "badges": { + }, + "content_rating": { + "$ref": "#/definitions/playstation.ContentRating" + }, + "edition_name": { + "type": "string" + }, + "genres": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "type": "string" }, "type": "array" }, - "comments_count": { - "type": "integer" - }, - "created_at": { + "id": { "type": "string" }, - "daily_rank": { - "type": "integer" - }, - "disabled_when_scheduled": { - "type": "boolean" + "media": { + "items": { + "$ref": "#/definitions/playstation.Media" + }, + "type": "array" }, - "embargo_preview_at": { + "name": { "type": "string" }, - "featured_at": { + "np_title_id": { "type": "string" }, - "has_voted": { - "type": "boolean" + "platforms": { + "items": { + "type": "string" + }, + "type": "array" }, - "hide_votes_count": { - "type": "boolean" + "price": { + "$ref": "#/definitions/playstation.DetailPrice" }, - "id": { + "publisher": { "type": "string" }, - "latest_score": { - "type": "integer" - }, - "launch_day_score": { - "type": "integer" + "release_date": { + "type": "string" }, - "monthly_rank": { - "type": "integer" + "screen_languages": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { + "source_url": { "type": "string" }, - "product": { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" + "spoken_languages": { + "items": { + "type": "string" + }, + "type": "array" }, - "product_state": { + "star_rating": { + "$ref": "#/definitions/playstation.StarRating" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "playstation.ReviewAuthor": { + "properties": { + "avatar_url": { "type": "string" }, - "randomization_status": { - "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" + "is_officially_verified": { + "type": "boolean" }, - "redirect_to_product": { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" + "is_ps_plus_subscriber": { + "type": "boolean" }, - "shortened_url": { + "online_id": { "type": "string" + } + }, + "type": "object" + }, + "playstation.SearchResponse": { + "properties": { + "count": { + "type": "integer" }, - "slug": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/playstation.StoreItem" + }, + "type": "array" }, - "tagline": { - "type": "string" + "next_page": { + "type": "integer" }, - "thumbnail_image_uuid": { - "type": "string" + "page_info": { + "$ref": "#/definitions/playstation.PageInfo" }, - "updated_at": { + "source_url": { "type": "string" }, - "weekly_rank": { - "type": "integer" + "term": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutPrimaryLink": { + "playstation.Section": { "properties": { + "count": { + "type": "integer" + }, "id": { "type": "string" }, - "url": { + "items": { + "items": { + "$ref": "#/definitions/playstation.StoreItem" + }, + "type": "array" + }, + "name": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutProduct": { + "playstation.StarRating": { "properties": { - "badges": { + "average": { + "type": "number" + }, + "count": { + "type": "integer" + }, + "distribution": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "$ref": "#/definitions/playstation.StarRatingCount" }, "type": "array" + } + }, + "type": "object" + }, + "playstation.StarRatingCount": { + "properties": { + "percent": { + "type": "integer" }, - "detailed_review": { - "additionalProperties": {}, - "type": "object" - }, - "discussion_forum": { - "$ref": "#/definitions/producthunt.ProductAboutDiscussionForum" - }, - "followers_count": { + "stars": { "type": "integer" + } + }, + "type": "object" + }, + "playstation.StoreItem": { + "properties": { + "classification": { + "type": "string" }, "id": { "type": "string" }, - "is_no_longer_online": { - "type": "boolean" - }, - "is_subscribed": { - "type": "boolean" - }, - "latest_launch": { - "$ref": "#/definitions/producthunt.ProductAboutLatestLaunch" - }, - "logo_uuid": { + "kind": { "type": "string" }, "media": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutMedia" + "$ref": "#/definitions/playstation.Media" }, "type": "array" }, "name": { "type": "string" }, - "page_variant": { - "$ref": "#/definitions/producthunt.ProductAboutPageVariant" + "np_title_id": { + "type": "string" }, - "posts": { + "platforms": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutPost" + "type": "string" }, "type": "array" }, - "posts_count": { - "type": "integer" + "price": { + "$ref": "#/definitions/playstation.ListPrice" + } + }, + "type": "object" + }, + "playstation.SuggestItem": { + "properties": { + "classification": { + "type": "string" }, - "pro_con_tags": { - "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" - }, - "type": "array" + "id": { + "type": "string" }, - "review_questions": { - "items": { - "$ref": "#/definitions/producthunt.ProductAboutReviewQuestion" - }, - "type": "array" + "image": { + "$ref": "#/definitions/playstation.Media" }, - "reviews_rating": { - "type": "number" + "name": { + "type": "string" }, - "screenshots": { + "platforms": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutScreenshot" + "type": "string" }, "type": "array" }, - "slug": { - "type": "string" + "price": { + "$ref": "#/definitions/playstation.SuggestPrice" }, - "tagline": { + "publisher": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductAboutReviewQuestion": { - "properties": { - "category": { + "release_date": { "type": "string" }, - "id": { + "short_name": { "type": "string" }, - "question": { + "store_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutScreenshot": { + "playstation.SuggestPrice": { "properties": { - "id": { - "type": "string" - }, - "image_uuid": { - "type": "string" - }, - "media_type": { + "display": { "type": "string" }, - "original_height": { - "type": "integer" - }, - "original_width": { + "value": { "type": "integer" } }, "type": "object" }, - "producthunt.ProductAboutShoutout": { + "playstation.SuggestResponse": { "properties": { - "alternative_products": { + "cc": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutMentionedProduct" + "$ref": "#/definitions/playstation.SuggestItem" }, "type": "array" }, - "id": { + "l": { "type": "string" }, - "product": { - "$ref": "#/definitions/producthunt.ProductAboutMentionedProduct" + "source_url": { + "type": "string" }, - "shoutout_note": { + "term": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "producthunt.ProductAboutUser": { + "playstation.conceptResponseDoc": { "properties": { - "avatar_url": { - "type": "string" - }, - "headline": { - "type": "string" - }, - "id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.ConceptDetail" }, - "username": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutViewer": { + "playstation.conceptReviewsResponseDoc": { "properties": { - "is_featured_post_maker": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "recent_launch": { - "additionalProperties": {}, - "type": "object" + "data": { + "$ref": "#/definitions/playstation.ConceptReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeBadge": { + "playstation.gridResponseDoc": { "properties": { - "date": { - "type": "string" - }, - "id": { - "type": "string" - }, - "period": { - "type": "string" - }, - "position": { + "code": { + "example": 200, "type": "integer" }, - "post_name": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.GridResponse" }, - "post_slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeDiscussion": { + "playstation.merchResponseDoc": { "properties": { - "comments_count": { + "code": { + "example": 200, "type": "integer" }, - "created_at": { - "type": "string" - }, - "description_preview": { - "type": "string" - }, - "has_voted": { - "type": "boolean" - }, - "id": { - "type": "string" - }, - "path": { - "type": "string" - }, - "pinned": { - "type": "boolean" - }, - "primary_forum": { - "$ref": "#/definitions/producthunt.ProductAlternativeDiscussionForum" - }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.MerchResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" - }, - "user": { - "$ref": "#/definitions/producthunt.ProductAlternativeDiscussionUser" - }, - "votes_count": { - "type": "integer" } }, "type": "object" }, - "producthunt.ProductAlternativeDiscussionForum": { + "playstation.productResponseDoc": { "properties": { - "id": { - "type": "string" - }, - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "subject_id": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.ProductDetail" }, - "subject_name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeDiscussionUser": { + "playstation.searchResponseDoc": { "properties": { - "avatar_url": { - "type": "string" - }, - "id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.SearchResponse" }, - "username": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeItem": { + "playstation.suggestResponseDoc": { "properties": { - "category_score": { - "type": "number" - }, - "category_weight": { - "type": "number" - }, - "combined_score": { - "type": "number" - }, - "embedding_score": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "embedding_weight": { - "type": "number" + "data": { + "$ref": "#/definitions/playstation.SuggestResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" - }, - "product": { - "$ref": "#/definitions/producthunt.ProductAlternativeProduct" - }, - "rating_score": { - "type": "number" - }, - "rating_weight": { - "type": "number" } }, "type": "object" }, - "producthunt.ProductAlternativeProduct": { + "politico.ArticleResponse": { "properties": { - "badges": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeBadge" - }, - "type": "array" - }, - "categories": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "followers_count": { - "type": "integer" - }, - "id": { + "description": { "type": "string" }, - "is_subscribed": { - "type": "boolean" + "image_url": { + "type": "string" }, - "is_top_product": { - "type": "boolean" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "logo_uuid": { + "published_at": { "type": "string" }, - "name": { + "title": { "type": "string" }, - "reviews_count": { - "type": "integer" - }, - "reviews_rating": { - "type": "number" - }, - "slug": { + "updated_at": { "type": "string" }, - "structured_data": { - "$ref": "#/definitions/producthunt.ProductAlternativeStructuredData" - }, - "tagline": { + "url": { "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "producthunt.ProductAlternativeStructuredData": { + "politico.AuthorArticle": { "properties": { - "application_category": { - "type": "string" - }, - "context": { + "published_at": { "type": "string" }, - "date_modified": { + "title": { "type": "string" }, - "date_published": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "politico.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/politico.AuthorArticle" + }, + "type": "array" }, - "description": { + "bio": { "type": "string" }, - "id": { + "image_url": { "type": "string" }, - "image": { + "job_title": { "type": "string" }, "name": { "type": "string" }, - "operating_system": { + "slug": { "type": "string" }, - "screenshot": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "politico.CategoriesResponse": { + "properties": { + "groups": { "items": { - "type": "string" + "$ref": "#/definitions/politico.CategoryGroup" }, "type": "array" - }, - "url": { - "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeTag": { + "politico.Category": { "properties": { - "count": { - "type": "integer" - }, "name": { "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativesPage": { + "politico.CategoryGroup": { "properties": { - "alternative_tags": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeTag" - }, - "type": "array" - }, - "alternatives_markdown_description": { - "type": "string" - }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "discussions": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeDiscussion" - }, - "type": "array" - }, - "discussions_has_next_page": { - "type": "boolean" - }, - "end_cursor": { - "example": "MTA", + "name": { "type": "string" }, - "followers_count": { - "example": 577, - "type": "integer" - }, - "has_next_page": { - "example": true, - "type": "boolean" - }, - "items": { + "sections": { "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeItem" + "$ref": "#/definitions/politico.Category" }, "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" }, - "producthunt.ProductCategoryAd": { + "politico.HeadlineItem": { "properties": { - "channel_kind": { - "type": "string" - }, - "id": { + "author": { "type": "string" }, - "large_asset_uuid": { + "published_at": { "type": "string" }, - "name": { + "summary": { "type": "string" }, - "post": { - "$ref": "#/definitions/producthunt.ProductCategoryAdPost" - }, - "small_asset_uuid": { + "title": { "type": "string" }, - "subject": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "politico.HeadlinesResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/politico.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "politico.TopicItem": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "tagline": { + "published_at": { "type": "string" }, - "thumbnail_uuid": { + "title": { "type": "string" }, "url": { "type": "string" - }, - "variation_id": { - "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryAdComment": { + "politico.TopicResponse": { "properties": { - "body_text": { - "type": "string" - }, - "id": { - "type": "string" - }, - "is_pinned": { - "type": "boolean" - }, - "path": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/politico.TopicItem" + }, + "type": "array" }, - "subject_id": { + "topic": { "type": "string" - }, - "user": { - "$ref": "#/definitions/producthunt.ProductCategoryUser" } }, "type": "object" }, - "producthunt.ProductCategoryAdPost": { + "politico.articleResponseDoc": { "properties": { - "comments_count": { + "code": { + "example": 200, "type": "integer" }, - "created_at": { - "type": "string" - }, - "disabled_when_scheduled": { - "type": "boolean" - }, - "embargo_preview_at": { - "type": "string" - }, - "featured_at": { - "type": "string" - }, - "featured_comment": { - "$ref": "#/definitions/producthunt.ProductCategoryAdComment" - }, - "has_voted": { - "type": "boolean" - }, - "hide_votes_count": { - "type": "boolean" + "data": { + "$ref": "#/definitions/politico.ArticleResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" - }, - "latest_score": { - "type": "integer" - }, - "launch_day_score": { + } + }, + "type": "object" + }, + "politico.authorResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" - }, - "product_id": { - "type": "string" - }, - "product_slug": { - "type": "string" - }, - "product_subscribed": { - "type": "boolean" - }, - "randomization_status": { - "$ref": "#/definitions/producthunt.ProductCategoryRandomizationStatus" - }, - "slug": { - "type": "string" - }, - "topics": { - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryTopic" - }, - "type": "array" + "data": { + "$ref": "#/definitions/politico.AuthorResponse" }, - "updated_at": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryAnswer": { + "politico.categoriesResponseDoc": { "properties": { - "body": { - "$ref": "#/definitions/producthunt.ProductCategoryMarkdown" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/politico.CategoriesResponse" }, - "sources": { - "items": { - "$ref": "#/definitions/producthunt.ProductCategorySource" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryFounderPost": { + "politico.headlinesResponseDoc": { "properties": { - "badges": { - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "product_id": { - "type": "string" - }, - "product_slug": { - "type": "string" - }, - "product_state": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/politico.HeadlinesResponse" }, - "thumbnail_image_uuid": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryFounderShoutout": { + "politico.topicResponseDoc": { "properties": { - "from_post": { - "$ref": "#/definitions/producthunt.ProductCategoryFounderPost" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/politico.TopicResponse" }, - "product_id": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryHeroProduct": { + "polygon.AuthorResponse": { "properties": { - "id": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "is_no_longer_online": { - "type": "boolean" + "biography": { + "type": "string" }, - "logo_uuid": { + "image_url": { "type": "string" }, "name": { "type": "string" + }, + "social_links": { + "items": { + "$ref": "#/definitions/polygon.AuthorSocialLink" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryLatestLaunch": { + "polygon.AuthorSocialLink": { "properties": { - "id": { + "type": { "type": "string" }, - "scheduled_at": { + "url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryListBadge": { + "polymarket.ActivityTradesResponse": { "properties": { - "category": { + "event_id": { + "example": "101772", "type": "string" }, - "date": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "id": { + "filter_amount": { + "example": "1", "type": "string" }, - "period": { + "filter_type": { + "example": "CASH", "type": "string" }, - "position": { + "limit": { + "example": 50, "type": "integer" }, - "post_id": { + "market": { + "example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b", "type": "string" }, - "post_name": { + "offset": { + "example": 0, + "type": "integer" + }, + "source_url": { + "example": "https://data-api.polymarket.com/trades?takerOnly=true&limit=50&offset=0&filterType=CASH&filterAmount=1", "type": "string" }, - "post_slug": { + "taker_only": { + "example": "true", "type": "string" }, - "year": { + "trades": { + "items": { + "$ref": "#/definitions/polymarket.TradeSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "polymarket.BatchTokenMidpoint": { + "properties": { + "midpoint": { + "example": 0.285, + "type": "number" + }, + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryListProduct": { + "polymarket.BatchTokenMidpointsOption": { "properties": { - "badges": { + "token_ids": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "type": "string" }, "type": "array" + } + }, + "required": [ + "token_ids" + ], + "type": "object" + }, + "polymarket.BatchTokenMidpointsResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "categories": { + "midpoints": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" + "$ref": "#/definitions/polymarket.BatchTokenMidpoint" }, "type": "array" }, - "detailed_reviews_count": { - "type": "integer" - }, - "followers_count": { - "type": "integer" - }, - "founder_reviews_count": { - "type": "integer" - }, - "founder_shoutouts": { + "missing": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryFounderShoutout" + "type": "string" }, "type": "array" }, - "id": { - "type": "string" - }, - "is_no_longer_online": { - "type": "boolean" - }, - "is_subscribed": { - "type": "boolean" - }, - "is_top_product": { - "type": "boolean" - }, - "latest_launch": { - "$ref": "#/definitions/producthunt.ProductCategoryLatestLaunch" - }, - "logo_uuid": { - "type": "string" - }, - "name": { + "source_url": { + "example": "https://clob.polymarket.com/midpoints", "type": "string" }, - "posts_count": { - "type": "integer" - }, - "reviews_count": { - "type": "integer" - }, - "reviews_rating": { - "type": "number" + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "polymarket.BatchTokenOrderBooksOption": { + "properties": { + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "token_ids" + ], + "type": "object" + }, + "polymarket.BatchTokenOrderBooksResponse": { + "properties": { + "books": { + "items": { + "$ref": "#/definitions/polymarket.OrderBookSummary" + }, + "type": "array" }, - "slug": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "structured_data": { - "$ref": "#/definitions/producthunt.ProductAlternativeStructuredData" + "missing": { + "items": { + "type": "string" + }, + "type": "array" }, - "tagline": { + "source_url": { + "example": "https://clob.polymarket.com/books", "type": "string" }, - "tags": { + "token_ids": { "items": { "type": "string" }, @@ -123640,1002 +125869,1634 @@ }, "type": "object" }, - "producthunt.ProductCategoryMarkdown": { + "polymarket.BatchTokenPrice": { "properties": { - "markdown": { - "type": "string" + "buy_price": { + "example": 0.03, + "type": "number" }, - "text": { + "sell_price": { + "example": 0.54, + "type": "number" + }, + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryPage": { + "polymarket.BatchTokenPricesOption": { "properties": { - "description": { + "side": { "type": "string" }, - "discussions": { + "token_ids": { "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeDiscussion" + "type": "string" }, "type": "array" - }, - "discussions_has_next_page": { - "type": "boolean" - }, - "expandable_html": { + } + }, + "required": [ + "token_ids" + ], + "type": "object" + }, + "polymarket.BatchTokenPricesResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "hero_products": { + "missing": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryHeroProduct" + "type": "string" }, "type": "array" }, - "hero_products_count": { - "type": "integer" - }, - "id": { - "type": "string" - }, - "last_updated_at": { - "type": "string" + "prices": { + "items": { + "$ref": "#/definitions/polymarket.BatchTokenPrice" + }, + "type": "array" }, - "meta_title": { + "side": { + "example": "buy", "type": "string" }, - "name": { + "source_url": { + "example": "https://clob.polymarket.com/prices", "type": "string" }, - "parent": { - "$ref": "#/definitions/producthunt.ProductCategoryParent" + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "polymarket.BatchTokenSpread": { + "properties": { + "spread": { + "example": 0.51, + "type": "number" }, - "path": { - "example": "/categories/vibe-coding", + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" - }, - "questions": { + } + }, + "type": "object" + }, + "polymarket.BatchTokenSpreadsOption": { + "properties": { + "token_ids": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryQuestion" + "type": "string" }, "type": "array" + } + }, + "required": [ + "token_ids" + ], + "type": "object" + }, + "polymarket.BatchTokenSpreadsResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "raw_relevant_reviews": { + "missing": { "items": { - "additionalProperties": {}, - "type": "object" + "type": "string" }, "type": "array" }, - "recent_launches_count": { - "type": "integer" - }, - "recent_summary": { - "$ref": "#/definitions/producthunt.ProductCategoryRecentSummary" - }, - "reviews_count": { - "type": "integer" - }, - "slug": { - "example": "vibe-coding", + "source_url": { + "example": "https://clob.polymarket.com/spreads", "type": "string" }, - "sub_categories": { + "spreads": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" + "$ref": "#/definitions/polymarket.BatchTokenSpread" }, "type": "array" }, - "targeted_ad": { - "$ref": "#/definitions/producthunt.ProductCategoryAd" + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "producthunt.ProductCategoryParent": { + "polymarket.ClobMarketResponse": { "properties": { - "id": { + "condition_id": { + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "name": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "path": { - "type": "string" + "market": { + "$ref": "#/definitions/polymarket.ClobMarketSummary" }, - "sub_categories": { - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" - }, - "type": "array" + "source_url": { + "example": "https://clob.polymarket.com/markets/0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryProductsPage": { + "polymarket.ClobMarketSummary": { "properties": { - "ai_summary": { + "accepting_order_timestamp": { "type": "string" }, - "category_tags": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeTag" - }, - "type": "array" + "accepting_orders": { + "type": "boolean" }, - "connection": { - "example": "products", - "type": "string" + "active": { + "type": "boolean" }, - "description": { + "archived": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "condition_id": { + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "end_cursor": { + "description": { "type": "string" }, - "featured_only": { + "enable_order_book": { "type": "boolean" }, - "has_next_page": { - "type": "boolean" + "end_date": { + "example": "2026-06-08T00:00:00Z", + "type": "string" }, - "has_previous_page": { - "type": "boolean" + "game_start_time": { + "example": "2026-06-07T20:30:00Z", + "type": "string" }, - "id": { + "icon_url": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListProduct" - }, - "type": "array" + "image_url": { + "type": "string" }, - "last_updated_at": { + "is_50_50_outcome": { + "type": "boolean" + }, + "maker_base_fee": { + "example": 1000, + "type": "integer" + }, + "market_slug": { + "example": "codmw-par-tex-2026-06-07-game4", "type": "string" }, - "name": { + "market_url": { + "example": "https://polymarket.com/event/codmw-par-tex-2026-06-07/codmw-par-tex-2026-06-07-game4", "type": "string" }, - "order": { - "example": "highest_rated", + "minimum_order_size": { + "example": 5, + "type": "number" + }, + "minimum_tick_size": { + "example": 0.01, + "type": "number" + }, + "neg_risk": { + "type": "boolean" + }, + "neg_risk_market_id": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "neg_risk_request_id": { + "type": "string" }, - "page_size": { - "example": 15, - "type": "integer" + "notifications_enabled": { + "type": "boolean" }, - "path": { - "example": "/categories/vibe-coding", + "question": { + "example": "Call of Duty: Paris Gentle Mates vs OpTic Texas - Game 4 Winner", "type": "string" }, - "slug": { - "example": "vibe-coding", + "question_id": { + "example": "0xf693b08c99a00ca87098bc122ccc956434c2ac8720d8ed77e612d008cf33c2c1", "type": "string" }, + "rewards": { + "$ref": "#/definitions/polymarket.ClobRewardsSummary" + }, + "seconds_delay": { + "example": 1, + "type": "integer" + }, "tags": { "items": { "type": "string" }, "type": "array" }, - "total_count": { + "taker_base_fee": { + "example": 1000, "type": "integer" + }, + "tokens": { + "items": { + "$ref": "#/definitions/polymarket.ClobTokenSummary" + }, + "type": "array" } }, "type": "object" }, - "producthunt.ProductCategoryQuestion": { + "polymarket.ClobRewardRate": { "properties": { - "body": { - "$ref": "#/definitions/producthunt.ProductCategoryMarkdown" - }, - "id": { + "asset_address": { + "example": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", "type": "string" }, - "top_answer": { - "$ref": "#/definitions/producthunt.ProductCategoryAnswer" + "rewards_daily_rate": { + "example": 5, + "type": "number" } }, "type": "object" }, - "producthunt.ProductCategoryRandomizationStatus": { + "polymarket.ClobRewardsSummary": { "properties": { - "active": { - "type": "boolean" + "max_spread": { + "example": 2.5, + "type": "number" }, - "next_transition_at": { - "type": "string" + "min_size": { + "example": 500, + "type": "number" }, - "random_day": { - "type": "boolean" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryRecentSummary": { - "properties": { - "products": { + "rates": { "items": { - "$ref": "#/definitions/producthunt.ProductCategorySummaryProduct" + "$ref": "#/definitions/polymarket.ClobRewardRate" }, "type": "array" - }, - "summary": { - "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryRef": { + "polymarket.ClobTokenSummary": { "properties": { - "id": { + "outcome": { + "example": "Paris Gentle Mates", "type": "string" }, - "name": { - "type": "string" + "price": { + "example": 0.285, + "type": "number" }, - "path": { + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" }, - "slug": { - "type": "string" + "winner": { + "type": "boolean" } }, "type": "object" }, - "producthunt.ProductCategorySource": { + "polymarket.EventDetailResponse": { "properties": { - "badges": { - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "path": { - "type": "string" + "event": { + "$ref": "#/definitions/polymarket.EventSummary" }, - "subject_id": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "type": { + "slug": { + "example": "world-cup-winner", "type": "string" }, - "user": { - "$ref": "#/definitions/producthunt.ProductCategoryUser" - }, - "visible_at": { + "source_url": { + "example": "https://gamma-api.polymarket.com/events/slug/world-cup-winner", "type": "string" } }, "type": "object" }, - "producthunt.ProductCategorySummaryProduct": { + "polymarket.EventSummary": { "properties": { - "badges": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeBadge" - }, - "type": "array" + "active": { + "type": "boolean" }, - "categories": { - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" - }, - "type": "array" + "closed": { + "type": "boolean" }, - "followers_count": { + "comment_count": { "type": "integer" }, - "id": { + "description": { "type": "string" }, - "is_no_longer_online": { - "type": "boolean" - }, - "is_subscribed": { - "type": "boolean" + "end_date": { + "type": "string" }, - "is_top_product": { + "featured": { "type": "boolean" }, - "latest_launch": { - "$ref": "#/definitions/producthunt.ProductCategoryLatestLaunch" + "icon_url": { + "type": "string" }, - "logo_uuid": { + "id": { + "example": "545095", "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "reviews_count": { + "liquidity": { + "type": "number" + }, + "markets": { + "items": { + "$ref": "#/definitions/polymarket.MarketSummary" + }, + "type": "array" + }, + "markets_count": { + "example": 15, "type": "integer" }, - "reviews_rating": { + "open_interest": { "type": "number" }, + "restricted": { + "type": "boolean" + }, "slug": { + "example": "bitcoin-above-on-june-7-2026", "type": "string" }, - "tagline": { + "start_date": { "type": "string" }, "tags": { "items": { - "type": "string" + "$ref": "#/definitions/polymarket.TagSummary" }, "type": "array" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryTopic": { - "properties": { - "id": { - "type": "string" }, - "name": { + "title": { + "example": "Bitcoin above ___ on June 7?", "type": "string" }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryUser": { - "properties": { - "avatar_url": { + "updated_at": { "type": "string" }, - "id": { + "url": { + "example": "https://polymarket.com/event/bitcoin-above-on-june-7-2026", "type": "string" }, - "name": { - "type": "string" + "volume": { + "type": "number" }, - "username": { - "type": "string" + "volume_24h": { + "type": "number" } }, "type": "object" }, - "producthunt.ProductCustomersPage": { + "polymarket.EventsResponse": { "properties": { - "connection": { - "example": "customers", - "type": "string" - }, - "end_cursor": { - "type": "string" - }, - "has_next_page": { + "ascending": { "type": "boolean" }, - "has_previous_page": { - "type": "boolean" + "closed": { + "example": "false", + "type": "string" }, - "items": { + "events": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListProduct" + "$ref": "#/definitions/polymarket.EventSummary" }, "type": "array" }, - "name": { - "example": "OpenAI", - "type": "string" - }, - "order": { - "example": "customers", + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 10, + "limit": { + "example": 25, "type": "integer" }, - "pages_count": { - "example": 12, + "offset": { + "example": 0, "type": "integer" }, - "product_id": { - "example": "594550", + "order": { + "example": "volume24hr", "type": "string" }, - "raw_page_info": { - "additionalProperties": {}, - "type": "object" - }, - "slug": { - "example": "openai", + "source_url": { + "example": "https://gamma-api.polymarket.com/events?limit=25", "type": "string" - }, - "total_count": { - "example": 120, - "type": "integer" } }, "type": "object" }, - "producthunt.ProductDetailedReview": { + "polymarket.HomepageFeedResponse": { "properties": { - "alternative_products": { + "cursor": { + "type": "string" + }, + "events": { "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" + "$ref": "#/definitions/polymarket.EventSummary" }, "type": "array" }, - "alternatives_feedback": { + "feed": { + "example": "politics", "type": "string" }, - "can_destroy": { - "type": "boolean" - }, - "can_moderate": { - "type": "boolean" - }, - "can_reply": { - "type": "boolean" - }, - "can_update": { - "type": "boolean" - }, - "comments_count": { - "type": "integer" - }, - "created_at": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "customization_rating": { - "type": "integer" - }, - "ease_of_use_rating": { - "type": "integer" - }, - "follow_product": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewFollowProduct" - }, - "from_post": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewPost" - }, - "has_voted": { + "has_more": { "type": "boolean" }, - "id": { - "type": "string" - }, - "impression_count": { + "limit": { + "example": 20, "type": "integer" }, - "is_hidden": { - "type": "boolean" - }, - "llm_content_quality_grade": { - "type": "string" + "markets": { + "items": { + "$ref": "#/definitions/polymarket.MarketSummary" + }, + "type": "array" }, - "llm_content_quality_reason": { + "next_cursor": { "type": "string" }, - "negative_feedback": { + "source_kind": { + "example": "events_keyset", "type": "string" }, - "overall_experience": { + "source_url": { + "example": "https://gamma-api.polymarket.com/events/keyset?limit=20&tag_slug=politics", "type": "string" - }, - "overall_rating": { - "type": "integer" - }, - "positive_feedback": { + } + }, + "type": "object" + }, + "polymarket.LeaderboardEntry": { + "properties": { + "profile_image_url": { "type": "string" }, - "product": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" - }, - "question_answers": { - "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewQuestionAnswer" - }, - "type": "array" - }, - "reliability_rating": { - "type": "integer" + "profit_loss": { + "example": 322870.79601049656, + "type": "number" }, - "review_type": { + "proxy_wallet": { + "example": "0x4bff30af91642dc7d2b19a8664378fe55c45fc26", "type": "string" }, - "selected_cons": { - "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" - }, - "type": "array" - }, - "selected_pros": { - "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" - }, - "type": "array" - }, - "status": { + "rank": { + "example": "1", "type": "string" }, - "threads_end_cursor": { + "user_name": { + "example": "Sassy-Bucket", "type": "string" }, - "threads_has_next_page": { + "verified_badge": { "type": "boolean" }, - "threads_total_count": { - "type": "integer" - }, - "user": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewUser" - }, - "value_for_money_rating": { - "type": "integer" + "volume": { + "example": 770358.109102, + "type": "number" }, - "votes_count": { - "type": "integer" + "x_username": { + "example": "polymarket", + "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewFollowProduct": { + "polymarket.LeaderboardResponse": { "properties": { - "id": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "is_no_longer_online": { - "type": "boolean" + "limit": { + "example": 20, + "type": "integer" }, - "is_subscribed": { - "type": "boolean" + "rows": { + "items": { + "$ref": "#/definitions/polymarket.LeaderboardEntry" + }, + "type": "array" }, - "logo_uuid": { + "sort_by": { + "example": "profit", "type": "string" }, - "name": { + "source_url": { + "example": "https://data-api.polymarket.com/v1/leaderboard?window=30d&sortBy=profit&limit=20", "type": "string" }, - "slug": { + "window": { + "example": "30d", "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewPost": { + "polymarket.MacroDashboardResponse": { "properties": { - "badges": { + "cursor": { + "type": "string" + }, + "events": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "$ref": "#/definitions/polymarket.EventSummary" }, "type": "array" }, - "id": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "is_top_launch": { + "has_more": { "type": "boolean" }, - "latest_score": { + "limit": { + "example": 20, "type": "integer" }, - "name": { + "next_cursor": { "type": "string" }, - "product_id": { + "source_url": { + "example": "https://gamma-api.polymarket.com/events/keyset?tag_slug=macro&limit=20", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.MarketDetailResponse": { + "properties": { + "condition_id": { + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "product_is_top_product": { - "type": "boolean" - }, - "product_slug": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "product_state": { + "id": { + "example": "558934", "type": "string" }, + "market": { + "$ref": "#/definitions/polymarket.MarketSummary" + }, "slug": { + "example": "will-spain-win-the-2026-fifa-world-cup-963", "type": "string" }, - "thumbnail_image_uuid": { + "source_url": { + "example": "https://gamma-api.polymarket.com/markets/558934", "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewProduct": { + "polymarket.MarketLiquidityResponse": { "properties": { - "id": { - "type": "string" + "clob_market": { + "$ref": "#/definitions/polymarket.ClobMarketSummary" }, - "is_no_longer_online": { - "type": "boolean" + "condition_id": { + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "type": "string" }, - "logo_uuid": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "name": { + "id": { + "example": "558934", "type": "string" }, + "market": { + "$ref": "#/definitions/polymarket.MarketSummary" + }, "slug": { + "example": "will-spain-win-the-2026-fifa-world-cup-963", "type": "string" + }, + "source_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "tokens": { + "items": { + "$ref": "#/definitions/polymarket.MarketLiquidityTokenSummary" + }, + "type": "array" } }, "type": "object" }, - "producthunt.ProductDetailedReviewQuestionAnswer": { + "polymarket.MarketLiquidityTokenSummary": { "properties": { - "answer": { + "ask_depth": { + "example": 654.33, + "type": "number" + }, + "bid_depth": { + "example": 117.57, + "type": "number" + }, + "buy_price": { + "example": 0.16, + "type": "number" + }, + "clob_price": { + "example": 0.161, + "type": "number" + }, + "gamma_price": { + "example": 0.16, + "type": "number" + }, + "last_trade_price": { + "example": 0.162, + "type": "number" + }, + "midpoint": { + "example": 0.165, + "type": "number" + }, + "orderbook_best_ask": { + "example": 0.17, + "type": "number" + }, + "orderbook_best_bid": { + "example": 0.16, + "type": "number" + }, + "orderbook_spread": { + "example": 0.01, + "type": "number" + }, + "outcome": { + "example": "Yes", + "type": "string" + }, + "sell_price": { + "example": 0.17, + "type": "number" + }, + "spread": { + "example": 0.01, + "type": "number" + }, + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.MarketSummary": { + "properties": { + "active": { + "type": "boolean" + }, + "best_ask": { + "type": "number" + }, + "best_bid": { + "type": "number" + }, + "closed": { + "type": "boolean" + }, + "condition_id": { + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "type": "string" + }, + "end_date": { "type": "string" }, "id": { + "example": "558934", "type": "string" }, + "last_trade_price": { + "type": "number" + }, + "liquidity": { + "type": "number" + }, + "outcomes": { + "items": { + "$ref": "#/definitions/polymarket.OutcomePricePoint" + }, + "type": "array" + }, "question": { + "example": "Will Spain win the 2026 FIFA World Cup?", "type": "string" }, - "question_id": { + "slug": { + "example": "will-spain-win-the-2026-fifa-world-cup-963", + "type": "string" + }, + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "example": "https://polymarket.com/event/world-cup-winner/will-spain-win-the-2026-fifa-world-cup-963", "type": "string" + }, + "volume": { + "type": "number" + }, + "volume_24h": { + "type": "number" } }, "type": "object" }, - "producthunt.ProductDetailedReviewTag": { + "polymarket.MarketsResponse": { "properties": { - "count": { + "ascending": { + "type": "boolean" + }, + "closed": { + "example": "false", + "type": "string" + }, + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" + }, + "limit": { + "example": 25, "type": "integer" }, - "id": { + "markets": { + "items": { + "$ref": "#/definitions/polymarket.MarketSummary" + }, + "type": "array" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "order": { + "example": "volume24hr", "type": "string" }, - "name": { + "source_url": { + "example": "https://gamma-api.polymarket.com/markets?limit=25", "type": "string" + } + }, + "type": "object" + }, + "polymarket.OrderBookLevel": { + "properties": { + "price": { + "example": 0.03, + "type": "number" }, - "type": { + "size": { + "example": 5, + "type": "number" + } + }, + "type": "object" + }, + "polymarket.OrderBookSummary": { + "properties": { + "asks": { + "items": { + "$ref": "#/definitions/polymarket.OrderBookLevel" + }, + "type": "array" + }, + "bids": { + "items": { + "$ref": "#/definitions/polymarket.OrderBookLevel" + }, + "type": "array" + }, + "condition_id": { + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "type": "string" + }, + "hash": { + "example": "31facd52b62495bbc142facb81275400d978f6bf", + "type": "string" + }, + "last_trade_price": { + "example": 0.285, + "type": "number" + }, + "min_order_size": { + "example": 5, + "type": "number" + }, + "neg_risk": { + "type": "boolean" + }, + "tick_size": { + "example": 0.01, + "type": "number" + }, + "timestamp": { + "example": "1780837460175", + "type": "string" + }, + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewUser": { + "polymarket.OutcomePricePoint": { "properties": { - "avatar_url": { + "best_ask": { + "example": 0.162, + "type": "number" + }, + "best_bid": { + "example": 0.161, + "type": "number" + }, + "last_trade_price": { + "example": 0.162, + "type": "number" + }, + "liquidity": { + "example": 1093391.84, + "type": "number" + }, + "market_id": { + "example": "558934", "type": "string" }, - "headline": { + "market_slug": { + "example": "will-spain-win-the-2026-fifa-world-cup-963", "type": "string" }, - "id": { + "outcome": { + "example": "Yes", "type": "string" }, - "is_account_verified": { - "type": "boolean" + "price": { + "example": 0.1615, + "type": "number" }, - "is_ambassador": { - "type": "boolean" + "question": { + "example": "Will Spain win the 2026 FIFA World Cup?", + "type": "string" }, - "is_followed": { + "volume": { + "example": 30983849.24, + "type": "number" + } + }, + "type": "object" + }, + "polymarket.PredictionsResponse": { + "properties": { + "cursor": { + "type": "string" + }, + "events": { + "items": { + "$ref": "#/definitions/polymarket.EventSummary" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" + }, + "has_more": { "type": "boolean" }, - "name": { + "limit": { + "example": 20, + "type": "integer" + }, + "next_cursor": { "type": "string" }, - "reviews_count": { + "recurrence": { + "example": "daily", + "type": "string" + }, + "sort": { + "example": "competitive", + "type": "string" + }, + "source_url": { + "example": "https://gamma-api.polymarket.com/events/keyset?limit=20&order=competitive", + "type": "string" + }, + "status": { + "example": "all", + "type": "string" + }, + "tag": { + "example": "politics", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.PriceHistoryPoint": { + "properties": { + "price": { + "example": 0.48, + "type": "number" + }, + "timestamp": { + "example": 1780826405, "type": "integer" + } + }, + "type": "object" + }, + "polymarket.ProfileMatch": { + "properties": { + "id": { + "example": "123", + "type": "string" }, - "selected_byline_product": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" + "name": { + "example": "Trader", + "type": "string" }, - "top_hunter_badge": { - "additionalProperties": {}, + "username": { + "example": "trader", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.PublicDataResponse": { + "properties": { + "data": { "type": "object" }, - "top_launch_badge": { - "additionalProperties": {}, - "type": "object" + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "top_product_badge": { - "additionalProperties": {}, - "type": "object" + "route": { + "example": "sports", + "type": "string" }, - "username": { + "source_url": { + "example": "https://gamma-api.polymarket.com/sports", "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewsPage": { + "polymarket.RewardsConfigSummary": { "properties": { - "connection": { - "example": "detailedReviews", + "asset_address": { + "example": "0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB", "type": "string" }, - "detailed_review": { - "additionalProperties": {}, - "type": "object" + "end_date": { + "example": "2500-12-31", + "type": "string" }, - "detailed_reviews_count": { + "id": { + "example": 0, "type": "integer" }, - "end_cursor": { + "rate_per_day": { + "example": 10.00036, + "type": "number" + }, + "start_date": { + "example": "2026-06-07", "type": "string" }, - "founder_detailed_reviews_count": { + "total_rewards": { + "example": 0, + "type": "number" + } + }, + "type": "object" + }, + "polymarket.RewardsMarketResponse": { + "properties": { + "condition_id": { + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "type": "string" + }, + "count": { + "example": 1, "type": "integer" }, - "has_next_page": { - "example": false, - "type": "boolean" + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "is_maker": { - "type": "boolean" + "market": { + "$ref": "#/definitions/polymarket.RewardsMarketSummary" }, - "is_trashed": { - "type": "boolean" + "source_url": { + "example": "https://clob.polymarket.com/rewards/markets/0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327?sponsored=true", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.RewardsMarketSummary": { + "properties": { + "condition_id": { + "example": "0x2d293b8d8141edcc3317f6e677a01623dc482e7fe8eb4c4e207c9a0987c37d22", + "type": "string" }, - "items": { + "daily_reward_rate": { + "example": 10.00036, + "type": "number" + }, + "earning_percentage": { + "example": 0, + "type": "number" + }, + "earnings": { "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReview" + "type": "object" }, "type": "array" }, - "name": { + "event_id": { + "example": "568951", "type": "string" }, - "other_detailed_reviews_count": { - "type": "integer" + "event_slug": { + "example": "sc2-hero-cure-2026-06-07", + "type": "string" }, - "product_id": { - "example": "1191613", + "event_url": { + "example": "https://polymarket.com/event/sc2-hero-cure-2026-06-07", "type": "string" }, - "raw_page_info": { - "additionalProperties": {}, - "type": "object" + "image_url": { + "type": "string" }, - "reviews_count": { - "type": "integer" + "maker_address": { + "example": "0x0000000000000000000000000000000000000000", + "type": "string" }, - "reviews_rating": { + "market_competitiveness": { + "example": 2.83, "type": "number" }, - "reviews_recent_rating": { - "type": "number" + "market_id": { + "example": "2461586", + "type": "string" }, - "slug": { - "example": "clico", + "market_slug": { + "example": "sc2-hero-cure-2026-06-07", "type": "string" }, - "total_count": { - "example": 6, - "type": "integer" + "market_url": { + "example": "https://polymarket.com/event/sc2-hero-cure-2026-06-07/sc2-hero-cure-2026-06-07", + "type": "string" + }, + "question": { + "example": "StarCraft II: herO vs Cure (BO7) - Global StarCraft II League Playoffs", + "type": "string" + }, + "rewards_config": { + "items": { + "$ref": "#/definitions/polymarket.RewardsConfigSummary" + }, + "type": "array" + }, + "rewards_max_spread": { + "example": 4.5, + "type": "number" + }, + "rewards_min_size": { + "example": 50, + "type": "number" + }, + "spread": { + "example": 0.01, + "type": "number" + }, + "tokens": { + "items": { + "$ref": "#/definitions/polymarket.RewardsTokenSummary" + }, + "type": "array" + }, + "total_configured_rewards": { + "example": 0, + "type": "number" + }, + "volume_24h": { + "example": 79.9901, + "type": "number" } }, "type": "object" }, - "producthunt.ProductLaunchesPage": { + "polymarket.RewardsMarketsResponse": { "properties": { - "connection": { - "example": "posts", + "count": { + "example": 100, + "type": "integer" + }, + "cursor": { + "example": "MA==", "type": "string" }, - "end_cursor": { + "date": { + "example": "2026-06-07", "type": "string" }, - "has_next_page": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" + }, + "has_more": { "type": "boolean" }, - "items": { + "limit": { + "example": 100, + "type": "integer" + }, + "markets": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutPost" + "$ref": "#/definitions/polymarket.RewardsMarketSummary" }, "type": "array" }, - "name": { - "example": "OpenAI", + "next_cursor": { + "example": "MTAw", "type": "string" }, - "order": { - "example": "DATE", + "order_by": { + "example": "market", "type": "string" }, - "product_id": { - "example": "1191613", + "position": { + "example": "desc", "type": "string" }, - "raw_page_info": { - "additionalProperties": {}, - "type": "object" + "q": { + "example": "bitcoin", + "type": "string" }, - "slug": { - "example": "openai", + "source_url": { + "example": "https://polymarket.com/api/rewards/markets?orderBy=market", + "type": "string" + }, + "tag_slug": { + "example": "all", "type": "string" }, "total_count": { - "example": 12, + "example": 5430, "type": "integer" } }, "type": "object" }, - "producthunt.ProductMaker": { + "polymarket.RewardsTokenSummary": { "properties": { - "avatar_url": { + "outcome": { + "example": "herO", "type": "string" }, - "followers_count": { - "type": "integer" + "price": { + "example": 0.995, + "type": "number" }, - "headline": { + "token_id": { + "example": "49033998602764986470838384384660931821099068366428064235699748485619139146655", "type": "string" + } + }, + "type": "object" + }, + "polymarket.SearchResponse": { + "properties": { + "ascending": { + "type": "boolean" }, - "id": { + "events": { + "items": { + "$ref": "#/definitions/polymarket.EventSummary" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "is_followed": { + "has_more": { "type": "boolean" }, - "made_posts": { + "limit": { + "example": 10, + "type": "integer" + }, + "profiles": { "items": { - "$ref": "#/definitions/producthunt.ProductMakerPost" + "$ref": "#/definitions/polymarket.ProfileMatch" }, "type": "array" }, - "name": { + "query": { + "example": "bitcoin", "type": "string" }, - "username": { + "sort": { + "example": "relevance", + "type": "string" + }, + "source_url": { + "example": "https://gamma-api.polymarket.com/public-search?q=bitcoin&limit_per_type=10", + "type": "string" + }, + "status": { + "example": "open", "type": "string" + }, + "tags": { + "items": { + "$ref": "#/definitions/polymarket.TagSummary" + }, + "type": "array" + }, + "total_results": { + "example": 123, + "type": "integer" } }, "type": "object" }, - "producthunt.ProductMakerPost": { + "polymarket.SimilarEventsResponse": { "properties": { - "id": { + "events": { + "items": { + "$ref": "#/definitions/polymarket.EventSummary" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "name": { + "limit": { + "example": 10, + "type": "integer" + }, + "source_url": { + "example": "https://gamma-api.polymarket.com/events/similar?event_slug=world-cup-winner", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.TagResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "product_id": { + "source_url": { + "example": "https://gamma-api.polymarket.com/tags/slug/crypto", "type": "string" }, - "product_slug": { + "tag": { + "$ref": "#/definitions/polymarket.TagSummary" + } + }, + "type": "object" + }, + "polymarket.TagSummary": { + "properties": { + "id": { + "example": "21", "type": "string" }, - "product_state": { + "label": { + "example": "Crypto", "type": "string" }, "slug": { + "example": "crypto", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.TagsResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "thumbnail_image_uuid": { + "limit": { + "example": 25, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "source_url": { + "example": "https://gamma-api.polymarket.com/tags?limit=25", "type": "string" + }, + "tags": { + "items": { + "$ref": "#/definitions/polymarket.TagSummary" + }, + "type": "array" } }, "type": "object" }, - "producthunt.ProductMakersPage": { + "polymarket.TokenMidpointResponse": { "properties": { - "can_claim": { - "type": "boolean" + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "connection": { - "example": "makers", + "midpoint": { + "example": 0.285, + "type": "number" + }, + "source_url": { + "example": "https://clob.polymarket.com/midpoint?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" }, - "end_cursor": { + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" + } + }, + "type": "object" + }, + "polymarket.TokenOrderBookResponse": { + "properties": { + "book": { + "$ref": "#/definitions/polymarket.OrderBookSummary" }, - "has_next_page": { - "example": false, - "type": "boolean" + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "is_claimed": { - "type": "boolean" + "source_url": { + "example": "https://clob.polymarket.com/book?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" }, - "is_trashed": { - "type": "boolean" + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.TokenPriceHistoryResponse": { + "properties": { + "end_ts": { + "example": 1780840800, + "type": "integer" }, - "items": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" + }, + "fidelity": { + "example": 60, + "type": "integer" + }, + "interval": { + "example": "1d", + "type": "string" + }, + "points": { "items": { - "$ref": "#/definitions/producthunt.ProductMaker" + "$ref": "#/definitions/polymarket.PriceHistoryPoint" }, "type": "array" }, - "name": { + "source_url": { + "example": "https://clob.polymarket.com/prices-history?fidelity=60&interval=1d&market=81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" }, - "product_id": { - "example": "1191613", + "start_ts": { + "example": 1780754400, + "type": "integer" + }, + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.TokenPriceResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "raw_page_info": { - "additionalProperties": {}, - "type": "object" + "price": { + "example": 0.03, + "type": "number" }, - "slug": { - "example": "clico", + "side": { + "example": "buy", "type": "string" }, - "total_count": { - "example": 3, - "type": "integer" + "source_url": { + "example": "https://clob.polymarket.com/price?side=buy&token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" }, - "viewer_pending_team_request": { - "additionalProperties": {}, - "type": "object" + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" } }, "type": "object" }, - "producthunt.SimilarProduct": { + "polymarket.TokenSpreadResponse": { "properties": { - "categories": { - "example": [ - "[\"Presentation Software\"]" - ], - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "id": { - "example": "beautiful-ai", + "source_url": { + "example": "https://clob.polymarket.com/spread?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" + }, + "spread": { + "example": 0.51, + "type": "number" + }, + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.TradeSummary": { + "properties": { + "asset": { + "example": "90219780179584544303349592653084019110196125806694819219181473744581426681835", + "type": "string" + }, + "bio": { + "type": "string" + }, + "condition_id": { + "example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b", + "type": "string" + }, + "event_slug": { + "example": "btc-updown-15m-1780835400", + "type": "string" + }, + "icon_url": { "type": "string" }, "name": { - "example": "Beautiful.ai", + "example": "trader", "type": "string" }, - "rating": { - "example": 3.3, + "outcome": { + "example": "Up", + "type": "string" + }, + "outcome_index": { + "example": 0, + "type": "integer" + }, + "price": { + "example": 0.52744, "type": "number" }, - "review_count": { - "example": 20, + "profile_image_optimized": { + "type": "string" + }, + "profile_image_url": { + "type": "string" + }, + "proxy_wallet": { + "example": "0x400e9b5e37f7209adb6938d49d63c48f154319d2", + "type": "string" + }, + "pseudonym": { + "example": "Noisy-Dimple", + "type": "string" + }, + "side": { + "example": "BUY", + "type": "string" + }, + "size": { + "example": 25, + "type": "number" + }, + "slug": { + "example": "btc-updown-15m-1780835400", + "type": "string" + }, + "timestamp": { + "example": 1780835568, "type": "integer" + }, + "title": { + "example": "Bitcoin Up or Down - June 7, 8:30AM-8:45AM ET", + "type": "string" + }, + "transaction_hash": { + "example": "0x7ef90efb7e9f921509d8e82ecc76ed3d8384a3740d7ebd81d3bbbfd017899245", + "type": "string" + }, + "url": { + "example": "https://polymarket.com/event/btc-updown-15m-1780835400", + "type": "string" + }, + "value": { + "example": 13.186, + "type": "number" } }, "type": "object" }, - "producthunt.aboutResponseDoc": { + "polymarket.activityTradesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductAboutPage" + "$ref": "#/definitions/polymarket.ActivityTradesResponse" }, "msg": { - "example": "Request successful", + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.alternativesResponseDoc": { + "polymarket.batchTokenMidpointsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductAlternativesPage" + "$ref": "#/definitions/polymarket.BatchTokenMidpointsResponse" }, "msg": { "example": "OK", @@ -124644,14 +127505,14 @@ }, "type": "object" }, - "producthunt.categoryProductsResponseDoc": { + "polymarket.batchTokenOrderBooksResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductCategoryProductsPage" + "$ref": "#/definitions/polymarket.BatchTokenOrderBooksResponse" }, "msg": { "example": "OK", @@ -124660,14 +127521,14 @@ }, "type": "object" }, - "producthunt.categoryResponseDoc": { + "polymarket.batchTokenPricesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductCategoryPage" + "$ref": "#/definitions/polymarket.BatchTokenPricesResponse" }, "msg": { "example": "OK", @@ -124676,14 +127537,14 @@ }, "type": "object" }, - "producthunt.customersResponseDoc": { + "polymarket.batchTokenSpreadsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductCustomersPage" + "$ref": "#/definitions/polymarket.BatchTokenSpreadsResponse" }, "msg": { "example": "OK", @@ -124692,14 +127553,14 @@ }, "type": "object" }, - "producthunt.launchesResponseDoc": { + "polymarket.clobMarketResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductLaunchesPage" + "$ref": "#/definitions/polymarket.ClobMarketResponse" }, "msg": { "example": "OK", @@ -124708,30 +127569,30 @@ }, "type": "object" }, - "producthunt.leaderboardResponseDoc": { + "polymarket.eventDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.LeaderboardPage" + "$ref": "#/definitions/polymarket.EventDetailResponse" }, "msg": { - "example": "Request successful", + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.makersResponseDoc": { + "polymarket.eventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductMakersPage" + "$ref": "#/definitions/polymarket.EventsResponse" }, "msg": { "example": "OK", @@ -124740,14 +127601,14 @@ }, "type": "object" }, - "producthunt.productResponseDoc": { + "polymarket.homepageFeedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.Product" + "$ref": "#/definitions/polymarket.HomepageFeedResponse" }, "msg": { "example": "OK", @@ -124756,14 +127617,14 @@ }, "type": "object" }, - "producthunt.reviewsResponseDoc": { + "polymarket.leaderboardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewsPage" + "$ref": "#/definitions/polymarket.LeaderboardResponse" }, "msg": { "example": "OK", @@ -124772,69 +127633,62 @@ }, "type": "object" }, - "producthunt.searchAggregationsDoc": { + "polymarket.macroDashboardResponseDoc": { "properties": { - "topics": { - "items": { - "$ref": "#/definitions/producthunt.searchTopicDoc" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/polymarket.MacroDashboardResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "producthunt.searchDataDoc": { + "polymarket.marketDetailResponseDoc": { "properties": { - "aggregations": { - "$ref": "#/definitions/producthunt.searchAggregationsDoc" - }, - "edges": { - "items": { - "$ref": "#/definitions/producthunt.searchEdgeDoc" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "pageInfo": { - "$ref": "#/definitions/producthunt.searchPageInfoDoc" + "data": { + "$ref": "#/definitions/polymarket.MarketDetailResponse" }, - "pagesCount": { - "example": 394, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "producthunt.searchEdgeDoc": { + "polymarket.marketLiquidityResponseDoc": { "properties": { - "node": { - "type": "object" - } - }, - "type": "object" - }, - "producthunt.searchPageInfoDoc": { - "properties": { - "hasNextPage": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "hasPreviousPage": { - "type": "boolean" + "data": { + "$ref": "#/definitions/polymarket.MarketLiquidityResponse" }, - "page": { - "example": 1, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "producthunt.searchResponseDoc": { + "polymarket.marketsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.searchDataDoc" + "$ref": "#/definitions/polymarket.MarketsResponse" }, "msg": { "example": "OK", @@ -124843,2669 +127697,4399 @@ }, "type": "object" }, - "producthunt.searchTopicDoc": { + "polymarket.predictionsResponseDoc": { "properties": { - "count": { - "example": 11979, + "code": { + "example": 200, "type": "integer" }, - "topic": { - "properties": { - "id": { - "example": "268", - "type": "string" - }, - "name": { - "example": "Artificial Intelligence", - "type": "string" - } - }, - "type": "object" + "data": { + "$ref": "#/definitions/polymarket.PredictionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "propublica.AuthorArticle": { + "polymarket.publicDataResponseDoc": { "properties": { - "published_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.PublicDataResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "propublica.AuthorResponse": { + "polymarket.rewardsMarketResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/propublica.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "items": { - "type": "string" - }, - "type": "array" - }, - "contact_email": { - "type": "string" - }, - "name": { - "type": "string" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "social_links": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "data": { + "$ref": "#/definitions/polymarket.RewardsMarketResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.AutographFactsCategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/psa.AutographFactsCategory" - }, - "type": "array" - } - }, - "type": "object" - }, - "psa.AutographFactsCategory": { + "polymarket.rewardsMarketsResponseDoc": { "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.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Name is PSA's own display label, e.g. \"Baseball\".", + "data": { + "$ref": "#/definitions/polymarket.RewardsMarketsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.AutographFactsGalleryImage": { + "polymarket.searchResponseDoc": { "properties": { - "caption": { - "description": "Caption is PSA's own descriptive caption for this exemplar, e.g.\n\"1977 Hank Aaron Signed Letter\".", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "image_url": { - "description": "ImageURL is the full-size image URL.", + "data": { + "$ref": "#/definitions/polymarket.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.AutographFactsGalleryResult": { + "polymarket.similarEventsResponseDoc": { "properties": { - "images": { - "items": { - "$ref": "#/definitions/psa.AutographFactsGalleryImage" - }, - "type": "array" - }, - "name": { - "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.SimilarEventsResponse" }, - "subject_id": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.AutographFactsSubject": { + "polymarket.tagResponseDoc": { "properties": { - "name": { - "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", - "type": "string" - }, - "subject_id": { - "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nAutographFactsSubject.", + "code": { + "example": 200, "type": "integer" - } - }, - "type": "object" - }, - "psa.AutographFactsSubjectResult": { - "properties": { - "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" - }, - "name": { - "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", - "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": { - "type": "string" }, - "subject_id": { - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.TagResponse" }, - "subject_profile": { - "description": "SubjectProfile is PSA's own free-text biography for this subject.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.AutographFactsSubjectsResponse": { + "polymarket.tagsResponseDoc": { "properties": { - "category_id": { + "code": { + "example": 200, "type": "integer" }, - "category_name": { - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.TagsResponse" }, - "subjects": { - "items": { - "$ref": "#/definitions/psa.AutographFactsSubject" - }, - "type": "array" - } - }, - "type": "object" - }, - "psa.CardFactsCategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/psa.CardFactsCategory" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "psa.CardFactsCategory": { + "polymarket.tokenMidpointResponseDoc": { "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.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Name is PSA's own display label, e.g. \"Baseball\".", + "data": { + "$ref": "#/definitions/polymarket.TokenMidpointResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.CardFactsChecklistCard": { + "polymarket.tokenOrderBookResponseDoc": { "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" + "code": { + "example": 200, + "type": "integer" }, - "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.", + "data": { + "$ref": "#/definitions/polymarket.TokenOrderBookResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.CardFactsChecklistResponse": { + "polymarket.tokenPriceHistoryResponseDoc": { "properties": { - "cards": { - "items": { - "$ref": "#/definitions/psa.CardFactsChecklistCard" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "has_checklist": { - "type": "boolean" + "data": { + "$ref": "#/definitions/polymarket.TokenPriceHistoryResponse" }, - "set_id": { + "msg": { + "example": "OK", "type": "string" - }, - "total_cards": { - "type": "integer" } }, "type": "object" }, - "psa.CardFactsSet": { + "polymarket.tokenPriceResponseDoc": { "properties": { - "name": { - "description": "Name is the set's display name, e.g. \"2022 Topps\".", - "type": "string" - }, - "set_id": { - "description": "SetID is PSA's own numeric set id -- pass as set_id to\nCardFactsChecklist.", + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/polymarket.TokenPriceResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "psa.CardFactsSetsResponse": { + "polymarket.tokenSpreadResponseDoc": { "properties": { - "category_id": { + "code": { + "example": 200, "type": "integer" }, - "category_name": { - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.TokenSpreadResponse" }, - "sets": { - "items": { - "$ref": "#/definitions/psa.CardFactsSet" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "psa.CertLookupResult": { + "popeyes.Allergens": { "properties": { - "brand_title": { - "description": "BrandTitle is the issuing brand/product line, e.g. \"POKEMON SKYRIDGE\".", - "type": "string" + "celery": { + "type": "number" }, - "card_number": { - "description": "CardNumber is the card's number within its set, e.g. \"146\".", - "type": "string" + "eggs": { + "type": "number" }, - "category": { - "description": "Category is PSA's own item category, e.g. \"TCG CARDS\".", - "type": "string" + "fish": { + "type": "number" }, - "cert_number": { - "description": "CertNumber echoes the requested certification number.", - "type": "string" + "gluten": { + "type": "number" }, - "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" + "lupin": { + "type": "number" }, - "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" + "milk": { + "type": "number" }, - "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" + "mustard": { + "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" + "peanuts": { + "type": "number" }, - "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" + "sesame": { + "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" + "shellfish": { + "type": "number" }, - "reverse_cert_barcode": { - "description": "ReverseCertBarcode reports whether the physical label also carries a\nbarcode on its reverse side.", - "type": "boolean" + "soy": { + "type": "number" }, - "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" + "sulphur_dioxide": { + "type": "number" }, - "source_url": { - "description": "SourceURL is the PSA cert-verification page this result was parsed\nfrom.", - "type": "string" + "tree_nuts": { + "type": "number" }, - "subject": { - "description": "Subject is the card's subject/player name, e.g. \"CHARIZARD-HOLO\".", + "wheat": { + "type": "number" + } + }, + "type": "object" + }, + "popeyes.DayHours": { + "properties": { + "close": { + "example": "23:00:00", "type": "string" }, - "title": { - "description": "Title is PSA's own item title line, e.g.\n\"2003 POKEMON SKYRIDGE #146 CHARIZARD-HOLO\".", + "day": { + "example": "monday", "type": "string" }, - "year": { - "description": "Year is the card/item's issue year, e.g. \"2003\".", + "open": { + "example": "07:00:00", "type": "string" } }, "type": "object" }, - "psa.PriceGuideCardPrice": { + "popeyes.FAQEntry": { "properties": { - "card_number": { - "description": "CardNumber is the card's number within the set. Empty for\ngroup-summary rows.", + "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" }, - "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\".", + "id": { + "example": "032999c6-ba27-4f8e-b20e-a4cb28e3c37c", "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" + "question": { + "example": "How do I remove items from my cart?", + "type": "string" } }, "type": "object" }, - "psa.PriceGuideCategoriesResponse": { + "popeyes.FAQResponse": { "properties": { - "categories": { + "count": { + "example": 20, + "type": "integer" + }, + "entries": { "items": { - "$ref": "#/definitions/psa.PriceGuideCategory" + "$ref": "#/definitions/popeyes.FAQEntry" }, "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\".", + "fetched_at": { "type": "string" }, - "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).", + "has_more": { + "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "example": true, + "type": "boolean" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "psa.PriceGuideSearchItem": { + "popeyes.LocationResponse": { "properties": { - "item_id": { - "description": "ItemID is PSA's own numeric item id.", - "type": "integer" + "fetched_at": { + "type": "string" }, - "name": { - "description": "Name is the card/item's own descriptive name, e.g.\n\"Ken Griffey, Sr. (R)\".", + "restaurant": { + "$ref": "#/definitions/popeyes.Restaurant" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "psa.PriceGuideSearchResponse": { + "popeyes.LocationsResponse": { "properties": { - "page": { - "type": "integer" - }, - "page_size": { + "count": { + "example": 20, "type": "integer" }, - "query": { + "fetched_at": { "type": "string" }, - "results": { + "has_more": { + "example": true, + "type": "boolean" + }, + "restaurants": { "items": { - "$ref": "#/definitions/psa.PriceGuideSearchResult" + "$ref": "#/definitions/popeyes.Restaurant" }, "type": "array" }, + "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, "type": "integer" } }, "type": "object" }, - "psa.PriceGuideSearchResult": { + "popeyes.MenuCategory": { "properties": { - "category_name": { - "description": "CategoryName is PSA's own category display name for this set, e.g.\n\"Baseball Card Values\".", - "type": "string" + "featured": { + "type": "boolean" }, - "category_path": { - "description": "CategoryPath is the category's URL path segment -- pass as\ncategory_path to psa-price-guide-set.", + "id": { "type": "string" }, "items": { - "description": "Items are the matching cards/items within this set.", "items": { - "$ref": "#/definitions/psa.PriceGuideSearchItem" + "$ref": "#/definitions/popeyes.MenuItem" }, "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.", - "type": "integer" + "name": { + "example": "Chicken Wraps", + "type": "string" + } + }, + "type": "object" + }, + "popeyes.MenuItem": { + "properties": { + "allergens": { + "$ref": "#/definitions/popeyes.Allergens" }, - "set_name": { - "description": "SetName is the set's display name, e.g. \"1974 Topps\".", + "id": { + "example": "item_103182", "type": "string" }, - "set_path": { - "description": "SetPath is the set's own URL path segment -- pass as set_path to\npsa-price-guide-set.", + "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" }, - "psa.PriceGuideSetResponse": { + "popeyes.MenuResponse": { "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/popeyes.MenuCategory" }, "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.", - "items": { - "type": "string" - }, - "type": "array" + "currency": { + "example": "USD", + "type": "string" }, - "set_id": { + "fetched_at": { "type": "string" }, + "item_count": { + "example": 120, + "type": "integer" + }, "source_url": { "type": "string" }, - "title": { - "description": "Title is the set's display name, e.g. \"1974 Topps\".", + "store_id": { + "example": "14156", "type": "string" } }, "type": "object" }, - "psa.ProBatFactsCategoriesResponse": { + "popeyes.Nutrition": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/psa.ProBatFactsCategory" - }, - "type": "array" + "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" + }, + "proteins_g": { + "example": 17, + "type": "number" + }, + "saturated_fat_g": { + "type": "number" + }, + "serving_weight_g": { + "type": "number" + }, + "sodium_mg": { + "example": 1470, + "type": "number" + }, + "sugar_g": { + "example": 2, + "type": "number" + }, + "trans_fat_g": { + "example": 1, + "type": "number" } }, "type": "object" }, - "psa.ProBatFactsCategory": { + "popeyes.Offer": { "properties": { + "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" + }, + "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" + }, "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" + "example": "00a369e5-1b33-4d35-b153-e372e3ebf17f", + "type": "string" + }, + "mobile_order_only": { + "description": "MobileOrderOnly is true when the offer is only redeemable through\nPopeyes' own mobile ordering flow.", + "type": "boolean" }, "name": { - "description": "Name is PSA's own display label, e.g. \"Hall of Fame Players\".", + "example": "3Pc Signature Chicken for $5", "type": "string" - } - }, - "type": "object" - }, - "psa.ProBatFactsGalleryImage": { - "properties": { - "caption": { + }, + "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" }, - "image_url": { + "price": { + "example": 5, + "type": "number" + }, + "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" + }, + "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" + }, + "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", + "type": "string" + }, + "short_code": { + "description": "ShortCode is the offer's own promo/redemption code, when published.", + "example": "8438", "type": "string" } }, "type": "object" }, - "psa.ProBatFactsGalleryResult": { + "popeyes.OffersResponse": { "properties": { - "images": { + "count": { + "example": 20, + "type": "integer" + }, + "fetched_at": { + "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": { "items": { - "$ref": "#/definitions/psa.ProBatFactsGalleryImage" + "$ref": "#/definitions/popeyes.Offer" }, "type": "array" }, - "name": { - "type": "string" - }, "source_url": { "type": "string" - }, - "subject_id": { - "type": "string" } }, "type": "object" }, - "psa.ProBatFactsSubject": { + "popeyes.Price": { "properties": { - "name": { - "description": "Name is the player's display name, e.g. \"Hank Aaron\".", - "type": "string" + "default": { + "example": 3.99, + "type": "number" }, - "subject_id": { - "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nProBatFactsSubject.", + "default_cents": { + "example": 399, + "type": "integer" + }, + "max": { + "type": "number" + }, + "max_cents": { + "type": "integer" + }, + "min": { + "type": "number" + }, + "min_cents": { "type": "integer" } }, "type": "object" }, - "psa.ProBatFactsSubjectResult": { + "popeyes.Promotion": { "properties": { - "bat_profile": { - "description": "BatProfile is PSA's own free-text bat-authentication writeup\n(models used, signature placement, etc.) for this player.", + "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", "type": "string" }, - "name": { - "description": "Name is the player's display name, e.g. \"Hank Aaron\".", + "id": { + "example": "11d41e3c-75b5-458c-8166-7cdfb20a635a", "type": "string" }, - "player_profile": { - "description": "PlayerProfile is PSA's own free-text player-biography writeup.", + "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" }, - "source_url": { + "name": { + "description": "Name is the promotion's own internal/public label.", + "example": "Get Double Bonus Points on Your Cart, minimum $20", "type": "string" }, - "subject_id": { + "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" }, - "psa.ProBatFactsSubjectsResponse": { + "popeyes.PromotionsResponse": { "properties": { - "category_id": { + "count": { + "example": 20, "type": "integer" }, - "category_name": { + "fetched_at": { "type": "string" }, - "subjects": { - "items": { - "$ref": "#/definitions/psa.ProBatFactsSubject" - }, - "type": "array" - } - }, - "type": "object" - }, - "psa.TicketFactsCategoriesResponse": { - "properties": { - "categories": { + "has_more": { + "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "example": true, + "type": "boolean" + }, + "promotions": { "items": { - "$ref": "#/definitions/psa.TicketFactsCategory" + "$ref": "#/definitions/popeyes.Promotion" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "psa.TicketFactsCategory": { + "popeyes.Quest": { "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.", + "bonus_points": { + "description": "BonusPoints is the loyalty points awarded on completion, when the\nincentive is points-based.", + "example": 550, "type": "integer" }, + "id": { + "example": "38fe1c9c-6c2b-4d1b-ab86-7bf61105fdfb", + "type": "string" + }, + "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" + }, + "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" + }, "name": { - "description": "Name is PSA's own display label, e.g. \"Super Bowl\".", + "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_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" }, - "psa.TicketFactsGalleryImage": { + "popeyes.QuestsResponse": { "properties": { - "caption": { + "count": { + "example": 10, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "image_url": { + "has_more": { + "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "example": false, + "type": "boolean" + }, + "quests": { + "items": { + "$ref": "#/definitions/popeyes.Quest" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "psa.TicketFactsGalleryResult": { + "popeyes.Restaurant": { "properties": { - "images": { - "items": { - "$ref": "#/definitions/psa.TicketFactsGalleryImage" - }, - "type": "array" + "address": { + "example": "111 Fulton St", + "type": "string" + }, + "address2": { + "type": "string" + }, + "city": { + "example": "New York", + "type": "string" + }, + "country": { + "example": "USA", + "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", + "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" }, - "source_url": { + "operator": { + "description": "Operator is the franchise group operating this location, when RBI\npublishes one.", "type": "string" }, - "subject_id": { + "phone": { + "example": "929-579-0553", + "type": "string" + }, + "postal_code": { + "example": "10038", + "type": "string" + }, + "state": { + "example": "NY", + "type": "string" + }, + "store_id": { + "example": "14156", + "type": "string" + }, + "website_url": { + "example": "https://www.popeyes.com/store-locator/store/restaurant_242928", "type": "string" } }, "type": "object" }, - "psa.TicketFactsSubject": { + "popeyes.RestaurantHours": { "properties": { - "name": { - "description": "Name is the event's display name, e.g. \"Super Bowl I\".", - "type": "string" + "curbside": { + "items": { + "$ref": "#/definitions/popeyes.DayHours" + }, + "type": "array" }, - "subject_id": { - "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nTicketFactsSubject.", - "type": "integer" + "delivery": { + "items": { + "$ref": "#/definitions/popeyes.DayHours" + }, + "type": "array" + }, + "dining_room": { + "items": { + "$ref": "#/definitions/popeyes.DayHours" + }, + "type": "array" + }, + "drive_thru": { + "items": { + "$ref": "#/definitions/popeyes.DayHours" + }, + "type": "array" } }, "type": "object" }, - "psa.TicketFactsSubjectResult": { + "popeyes.Reward": { "properties": { - "name": { - "description": "Name is the event's display name, e.g. \"Super Bowl I\".", + "id": { + "example": "09acd09f-2ca5-4259-934c-0345356b2bb0", "type": "string" }, - "source_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" }, - "subject_id": { - "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" }, - "ticket_profile": { - "description": "TicketProfile is PSA's own free-text historical writeup for this\nevent.", + "name": { + "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" + }, + "points": { + "description": "Points is the loyalty points cost to redeem, from the reward's own\nLoyaltyPoints rule.", + "example": 600, + "type": "integer" } }, "type": "object" }, - "psa.TicketFactsSubjectsResponse": { + "popeyes.RewardsResponse": { "properties": { - "category_id": { + "count": { + "example": 20, "type": "integer" }, - "category_name": { + "fetched_at": { "type": "string" }, - "subjects": { + "has_more": { + "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "example": true, + "type": "boolean" + }, + "rewards": { "items": { - "$ref": "#/definitions/psa.TicketFactsSubject" + "$ref": "#/definitions/popeyes.Reward" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "psa.autographFactsCategoriesResponseDoc": { + "popeyes.faqResponseDoc": { "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/psa.AutographFactsCategoriesResponse" + "$ref": "#/definitions/popeyes.FAQResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "psa.autographFactsGalleryResponseDoc": { + "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/psa.AutographFactsGalleryResult" + "$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" }, - "psa.autographFactsSubjectResponseDoc": { + "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/psa.AutographFactsSubjectResult" + "$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" }, - "psa.autographFactsSubjectsResponseDoc": { + "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/psa.AutographFactsSubjectsResponse" + "$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" }, - "psa.cardFactsCategoriesResponseDoc": { + "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/psa.CardFactsCategoriesResponse" + "$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" }, - "psa.cardFactsChecklistResponseDoc": { + "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/psa.CardFactsChecklistResponse" + "$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" }, - "psa.cardFactsSetsResponseDoc": { + "popeyes.questsResponseDoc": { "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/psa.CardFactsSetsResponse" + "$ref": "#/definitions/popeyes.QuestsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "psa.certLookupResponseDoc": { + "popeyes.rewardsResponseDoc": { "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/psa.CertLookupResult" + "$ref": "#/definitions/popeyes.RewardsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "psa.priceGuideCategoriesResponseDoc": { + "popularTrend.CountryIndustryMeta": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/psa.PriceGuideCategoriesResponse" + "country": { + "items": { + "$ref": "#/definitions/popularTrend.CountryIndustryMetaItem" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "industry": { + "items": { + "$ref": "#/definitions/popularTrend.CountryIndustryMetaItem" + }, + "type": "array" } }, "type": "object" }, - "psa.priceGuideSearchResponseDoc": { + "popularTrend.CountryIndustryMetaItem": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/psa.PriceGuideSearchResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "psa.priceGuideSetResponseDoc": { + "popularTrend.TopAdsAnalysisPoint": { "properties": { - "code": { - "example": 200, + "second": { "type": "integer" }, - "data": { - "$ref": "#/definitions/psa.PriceGuideSetResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "psa.probatFactsCategoriesResponseDoc": { + "popularTrend.TopAdsAnalysisResp": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.ProBatFactsCategoriesResponse" + "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": { - "example": "OK", + "type": "string" + }, + "request_id": { "type": "string" } }, "type": "object" }, - "psa.probatFactsGalleryResponseDoc": { + "popularTrend.TopAdsDetailResp": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.ProBatFactsGalleryResult" + "$ref": "#/definitions/popularTrend.TopAdsMaterial" }, "msg": { - "example": "OK", + "type": "string" + }, + "request_id": { "type": "string" } }, "type": "object" }, - "psa.probatFactsSubjectResponseDoc": { + "popularTrend.TopAdsFilterItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "has_conversion": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/psa.ProBatFactsSubjectResult" + "id": { + "type": "object" }, - "msg": { - "example": "OK", + "label": { + "type": "string" + }, + "parent_id": { + "type": "object" + }, + "value": { "type": "string" } }, "type": "object" }, - "psa.probatFactsSubjectsResponseDoc": { + "popularTrend.TopAdsFiltersResp": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.ProBatFactsSubjectsResponse" + "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" }, "msg": { - "example": "OK", + "type": "string" + }, + "request_id": { "type": "string" } }, "type": "object" }, - "psa.ticketFactsCategoriesResponseDoc": { + "popularTrend.TopAdsListResp": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.TicketFactsCategoriesResponse" + "properties": { + "materials": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsMaterial" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/popularTrend.TopAdsPagination" + } + }, + "type": "object" }, "msg": { - "example": "OK", + "type": "string" + }, + "request_id": { "type": "string" } }, "type": "object" }, - "psa.ticketFactsGalleryResponseDoc": { + "popularTrend.TopAdsLocationInfoResp": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.TicketFactsGalleryResult" + "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": { - "example": "OK", + "type": "string" + }, + "request_id": { "type": "string" } }, "type": "object" }, - "psa.ticketFactsSubjectResponseDoc": { + "popularTrend.TopAdsLocationsResp": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.TicketFactsSubjectResult" + "properties": { + "country": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + } + }, + "type": "object" }, "msg": { - "example": "OK", + "type": "string" + }, + "request_id": { "type": "string" } }, "type": "object" }, - "psa.ticketFactsSubjectsResponseDoc": { + "popularTrend.TopAdsMaterial": { "properties": { - "code": { - "example": 200, + "ad_title": { + "type": "string" + }, + "brand_name": { + "type": "string" + }, + "comment": { "type": "integer" }, - "data": { - "$ref": "#/definitions/psa.TicketFactsSubjectsResponse" + "cost": { + "type": "integer" }, - "msg": { - "example": "OK", + "country_code": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ctr": { + "type": "number" + }, + "favorite": { + "type": "boolean" + }, + "has_summary": { + "type": "boolean" + }, + "highlight": { "type": "string" + }, + "highlight_text": { + "type": "string" + }, + "id": { + "type": "string" + }, + "industry_key": { + "type": "string" + }, + "is_search": { + "type": "boolean" + }, + "keyword_list": { + "items": { + "type": "string" + }, + "type": "array" + }, + "landing_page": { + "type": "string" + }, + "like": { + "type": "integer" + }, + "objective_key": { + "type": "string" + }, + "objectives": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "pattern_label": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "share": { + "type": "integer" + }, + "source": { + "type": "string" + }, + "source_key": { + "type": "integer" + }, + "video_info": { + "$ref": "#/definitions/popularTrend.TopAdsVideoInfo" + }, + "voice_over": { + "type": "boolean" } }, "type": "object" }, - "publicnews.abcNewsAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/abcnews.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.abcauAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/abcau.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.apNewsAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/apnews.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.arstechnicaAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/arstechnica.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.articleResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/newsplatform.ArticleResponse" - } - }, - "type": "object" - }, - "publicnews.billboardAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/billboard.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.bleacherreportAuthorResponseDoc": { + "popularTrend.TopAdsPagination": { "properties": { - "data": { - "$ref": "#/definitions/bleacherreport.AuthorResponse" + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "publicnews.breitbartAuthorResponseDoc": { + "popularTrend.TopAdsRecommendResp": { "properties": { + "code": { + "type": "integer" + }, "data": { - "$ref": "#/definitions/breitbart.AuthorResponse" + "properties": { + "materials": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsMaterial" + }, + "type": "array" + } + }, + "type": "object" + }, + "msg": { + "type": "string" + }, + "request_id": { + "type": "string" } }, "type": "object" }, - "publicnews.businessInsiderAuthorResponseDoc": { + "popularTrend.TopAdsSafetyResp": { "properties": { + "code": { + "type": "integer" + }, "data": { - "$ref": "#/definitions/businessinsider.AuthorResponse" + "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" + }, + "request_id": { + "type": "string" } }, "type": "object" }, - "publicnews.businessstandardAuthorResponseDoc": { + "popularTrend.TopAdsSpotlightResp": { "properties": { + "code": { + "type": "integer" + }, "data": { - "$ref": "#/definitions/businessstandard.AuthorResponse" + "properties": { + "materials": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsMaterial" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/popularTrend.TopAdsPagination" + } + }, + "type": "object" + }, + "msg": { + "type": "string" + }, + "request_id": { + "type": "string" } }, "type": "object" }, - "publicnews.cbcAuthorResponseDoc": { + "popularTrend.TopAdsSuggestionsResp": { "properties": { + "code": { + "type": "integer" + }, "data": { - "$ref": "#/definitions/cbc.AuthorResponse" + "properties": { + "query": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "msg": { + "type": "string" + }, + "request_id": { + "type": "string" } }, "type": "object" }, - "publicnews.cbrAuthorResponseDoc": { + "popularTrend.TopAdsVideoInfo": { "properties": { - "data": { - "$ref": "#/definitions/cbr.AuthorResponse" + "cover": { + "type": "string" + }, + "duration": { + "type": "number" + }, + "height": { + "type": "integer" + }, + "vid": { + "type": "string" + }, + "video_url": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "width": { + "type": "integer" } }, "type": "object" }, - "publicnews.cbsNewsAuthorResponseDoc": { + "populartrend.countryIndustryMetaResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/cbsnews.AuthorResponse" + "$ref": "#/definitions/popularTrend.CountryIndustryMeta" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.cbsSportsAuthorResponseDoc": { + "populartrend.topAdsAnalysisResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/cbssports.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsAnalysisResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.chicagoTribuneAuthorResponseDoc": { + "populartrend.topAdsDetailResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/chicagotribune.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsDetailResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.cnaAuthorResponseDoc": { + "populartrend.topAdsFiltersResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/cna.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsFiltersResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.cnetAuthorResponseDoc": { + "populartrend.topAdsListResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/cnet.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsListResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.colliderAuthorResponseDoc": { + "populartrend.topAdsLocationInfoResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/collider.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsLocationInfoResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.ctvnewsAuthorResponseDoc": { + "populartrend.topAdsLocationsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/ctvnews.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsLocationsResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.dailyBeastAuthorResponseDoc": { + "populartrend.topAdsRecommendResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/thedailybeast.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsRecommendResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.dailyExpressAuthorResponseDoc": { + "populartrend.topAdsSafetyResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/dailyexpress.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsSafetyResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.dailyMailAuthorResponseDoc": { + "populartrend.topAdsSpotlightResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/dailymail.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsSpotlightResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.dailyRecordAuthorResponseDoc": { + "populartrend.topAdsSuggestionsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/dailyrecord.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsSuggestionsResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.dailyWireAuthorResponseDoc": { + "poshmark.BrandDirectoryEntry": { "properties": { - "data": { - "$ref": "#/definitions/dailywire.AuthorResponse" + "aliases": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "example": "4be6779b4630c50002000039", + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "Nike", + "type": "string" + }, + "slug": { + "example": "Nike", + "type": "string" } }, "type": "object" }, - "publicnews.dailycallerAuthorResponseDoc": { + "poshmark.BrandResponse": { "properties": { - "data": { - "$ref": "#/definitions/dailycaller.AuthorResponse" + "has_more": { + "example": true, + "type": "boolean" + }, + "listings": { + "items": { + "$ref": "#/definitions/poshmark.Listing" + }, + "type": "array" + }, + "next_max_id": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 210000, + "type": "integer" } }, "type": "object" }, - "publicnews.dawnAuthorResponseDoc": { + "poshmark.BrandsResponse": { "properties": { - "data": { - "$ref": "#/definitions/dawn.AuthorResponse" + "brands": { + "items": { + "$ref": "#/definitions/poshmark.BrandDirectoryEntry" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 29887, + "type": "integer" } }, "type": "object" }, - "publicnews.deadlineAuthorResponseDoc": { + "poshmark.CategoriesResponse": { "properties": { - "data": { - "$ref": "#/definitions/deadline.AuthorResponse" + "departments": { + "items": { + "$ref": "#/definitions/poshmark.DepartmentTaxonomy" + }, + "type": "array" } }, "type": "object" }, - "publicnews.dwAuthorResponseDoc": { + "poshmark.CategoryResponse": { "properties": { - "data": { - "$ref": "#/definitions/dw.AuthorResponse" + "has_more": { + "example": true, + "type": "boolean" + }, + "listings": { + "items": { + "$ref": "#/definitions/poshmark.Listing" + }, + "type": "array" + }, + "next_max_id": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 84000, + "type": "integer" } }, "type": "object" }, - "publicnews.economicTimesAuthorResponseDoc": { + "poshmark.CategoryTaxonomyEntry": { "properties": { - "data": { - "$ref": "#/definitions/economictimes.AuthorResponse" + "id": { + "example": "00268975d97b4e80ef00a955", + "type": "string" + }, + "name": { + "example": "Shoes", + "type": "string" + }, + "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" }, - "publicnews.engadgetAuthorResponseDoc": { + "poshmark.ClosetResponse": { "properties": { - "data": { - "$ref": "#/definitions/engadget.AuthorResponse" + "has_more": { + "example": true, + "type": "boolean" + }, + "listings": { + "items": { + "$ref": "#/definitions/poshmark.Listing" + }, + "type": "array" + }, + "next_max_id": { + "type": "string" + }, + "seller": { + "$ref": "#/definitions/poshmark.Seller" + }, + "source_url": { + "type": "string" + }, + "total_count": { + "example": 107, + "type": "integer" } }, "type": "object" }, - "publicnews.eonlineAuthorResponseDoc": { + "poshmark.Comment": { "properties": { - "data": { - "$ref": "#/definitions/eonline.AuthorResponse" + "comment": { + "example": "Hi can you tell me the width of the waist?", + "type": "string" + }, + "created_at": { + "example": "2026-07-05T09:28:09-07:00", + "type": "string" + }, + "creator_full_name": { + "example": "Jen Muston", + "type": "string" + }, + "creator_picture_url": { + "type": "string" + }, + "creator_username": { + "example": "muvlax20", + "type": "string" + }, + "id": { + "example": "6a4a86191fea02ce69f41484", + "type": "string" } }, "type": "object" }, - "publicnews.euronewsAuthorResponseDoc": { + "poshmark.DepartmentTaxonomy": { "properties": { - "data": { - "$ref": "#/definitions/euronews.AuthorResponse" + "categories": { + "items": { + "$ref": "#/definitions/poshmark.CategoryTaxonomyEntry" + }, + "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", + "type": "string" } }, "type": "object" }, - "publicnews.ewAuthorResponseDoc": { + "poshmark.Listing": { "properties": { - "data": { - "$ref": "#/definitions/ew.AuthorResponse" + "brand": { + "example": "FARM Rio", + "type": "string" + }, + "category": { + "example": "Shorts", + "type": "string" + }, + "colors": { + "example": [ + "Red", + "Yellow" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "comment_count": { + "example": 4, + "type": "integer" + }, + "condition": { + "example": "nwt", + "type": "string" + }, + "cover_shot": { + "example": "https://di2ponv0v5otw.cloudfront.net/posts/2026/06/27/6a3fed1de9c77df92e2c0cc6/s_6a3fed24bd4ce3ff762126e5.jpg", + "type": "string" + }, + "created_at": { + "example": "2026-06-27T08:32:58-07:00", + "type": "string" + }, + "department": { + "example": "Women", + "type": "string" + }, + "description": { + "type": "string" + }, + "first_available_at": { + "type": "string" + }, + "id": { + "example": "6a3fed1de9c77df92e2c0cc6", + "type": "string" + }, + "inventory_status": { + "example": "available", + "type": "string" + }, + "like_count": { + "example": 111, + "type": "integer" + }, + "original_price": { + "example": 95, + "type": "number" + }, + "pictures": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "example": 55, + "type": "number" + }, + "quantity_available": { + "example": 1, + "type": "integer" + }, + "seller_display_handle": { + "example": "maltimar", + "type": "string" + }, + "seller_full_name": { + "example": "Mary Altimar", + "type": "string" + }, + "seller_picture_url": { + "type": "string" + }, + "seller_username": { + "example": "maltimar", + "type": "string" + }, + "share_count": { + "example": 13, + "type": "integer" + }, + "size": { + "example": "S", + "type": "string" + }, + "status": { + "example": "published", + "type": "string" + }, + "title": { + "example": "NWT Farm Rio Shorts", + "type": "string" + }, + "url": { + "example": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6", + "type": "string" } }, "type": "object" }, - "publicnews.fastCompanyAuthorResponseDoc": { + "poshmark.ListingResponse": { "properties": { - "data": { - "$ref": "#/definitions/fastcompany.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.fortuneAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/fortune.AuthorResponse" + "brand": { + "example": "FARM Rio", + "type": "string" + }, + "category": { + "example": "Shorts", + "type": "string" + }, + "colors": { + "example": [ + "Red", + "Yellow" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "comment_count": { + "example": 4, + "type": "integer" + }, + "comments": { + "items": { + "$ref": "#/definitions/poshmark.Comment" + }, + "type": "array" + }, + "condition": { + "example": "nwt", + "type": "string" + }, + "cover_shot": { + "example": "https://di2ponv0v5otw.cloudfront.net/posts/2026/06/27/6a3fed1de9c77df92e2c0cc6/s_6a3fed24bd4ce3ff762126e5.jpg", + "type": "string" + }, + "created_at": { + "example": "2026-06-27T08:32:58-07:00", + "type": "string" + }, + "department": { + "example": "Women", + "type": "string" + }, + "description": { + "type": "string" + }, + "first_available_at": { + "type": "string" + }, + "id": { + "example": "6a3fed1de9c77df92e2c0cc6", + "type": "string" + }, + "inventory_status": { + "example": "available", + "type": "string" + }, + "like_count": { + "example": 111, + "type": "integer" + }, + "original_price": { + "example": 95, + "type": "number" + }, + "pictures": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "example": 55, + "type": "number" + }, + "quantity_available": { + "example": 1, + "type": "integer" + }, + "seller": { + "$ref": "#/definitions/poshmark.Seller" + }, + "seller_display_handle": { + "example": "maltimar", + "type": "string" + }, + "seller_full_name": { + "example": "Mary Altimar", + "type": "string" + }, + "seller_picture_url": { + "type": "string" + }, + "seller_username": { + "example": "maltimar", + "type": "string" + }, + "share_count": { + "example": 13, + "type": "integer" + }, + "similar_listings": { + "items": { + "$ref": "#/definitions/poshmark.Listing" + }, + "type": "array" + }, + "size": { + "example": "S", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "status": { + "example": "published", + "type": "string" + }, + "title": { + "example": "NWT Farm Rio Shorts", + "type": "string" + }, + "url": { + "example": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneCompaniesResponseDoc": { + "poshmark.RatingBreakdown": { "properties": { - "data": { - "$ref": "#/definitions/fortune.CompaniesResponse" + "five_star": { + "example": 355, + "type": "integer" + }, + "four_star": { + "example": 7, + "type": "integer" + }, + "one_star": { + "example": 1, + "type": "integer" + }, + "three_star": { + "example": 2, + "type": "integer" + }, + "two_star": { + "example": 3, + "type": "integer" } }, "type": "object" }, - "publicnews.fortuneCompanyFiltersResponseDoc": { + "poshmark.SearchResponse": { "properties": { - "data": { - "$ref": "#/definitions/fortune.CompanyFiltersResponse" + "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" }, - "publicnews.fortuneCompanyResponseDoc": { + "poshmark.Seller": { "properties": { - "data": { - "$ref": "#/definitions/fortune.CompanyResponse" + "cover_shot_url": { + "type": "string" + }, + "display_handle": { + "example": "maltimar", + "type": "string" + }, + "followers": { + "example": 9096, + "type": "integer" + }, + "following": { + "example": 89, + "type": "integer" + }, + "full_name": { + "example": "Mary Altimar", + "type": "string" + }, + "id": { + "example": "5a4f84cb7d70fb0f0f05a37f", + "type": "string" + }, + "items_sold_display": { + "example": "500+", + "type": "string" + }, + "last_active_at": { + "example": "2026-08-04T19:52:16-07:00", + "type": "string" + }, + "member_since": { + "example": "2018-01-05T05:59:39-08:00", + "type": "string" + }, + "orders_shipped": { + "example": 522, + "type": "integer" + }, + "picture_url": { + "example": "https://di2ponv0v5otw.cloudfront.net/users/2018/04/23/5a4f84cb7d70fb0f0f05a37f/t_5ade0fdbd0492dff500c741a.jpg", + "type": "string" + }, + "posts_count": { + "example": 698, + "type": "integer" + }, + "rating_average": { + "example": 4.93, + "type": "number" + }, + "rating_breakdown": { + "$ref": "#/definitions/poshmark.RatingBreakdown" + }, + "rating_count": { + "example": 368, + "type": "integer" + }, + "url": { + "example": "https://poshmark.com/closet/maltimar", + "type": "string" + }, + "username": { + "example": "maltimar", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneRankingFiltersResponseDoc": { + "poshmark.TrendResponse": { "properties": { - "data": { - "$ref": "#/definitions/fortune.RankingFiltersResponse" + "cover_shot": { + "type": "string" + }, + "description": { + "type": "string" + }, + "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" }, - "publicnews.fortuneRankingListsResponseDoc": { + "poshmark.brandsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.RankingListsResponse" + "$ref": "#/definitions/poshmark.BrandsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneRankingResponseDoc": { + "poshmark.categoriesResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.RankingResponse" + "$ref": "#/definitions/poshmark.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneRankingYearsResponseDoc": { + "poshmark.searchResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.RankingYearsResponse" + "$ref": "#/definitions/poshmark.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.france24AuthorResponseDoc": { + "prada.CategoriesResponse": { "properties": { - "data": { - "$ref": "#/definitions/france24.AuthorResponse" + "categories": { + "items": { + "$ref": "#/definitions/prada.Category" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "genders": { + "items": { + "$ref": "#/definitions/prada.FacetCount" + }, + "type": "array" } }, "type": "object" }, - "publicnews.gamerantAuthorResponseDoc": { + "prada.Category": { "properties": { - "data": { - "$ref": "#/definitions/gamerant.AuthorResponse" + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "items": { + "type": "string" + }, + "type": "array" + }, + "path_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.gamesradarAuthorResponseDoc": { + "prada.CategoryResponse": { "properties": { - "data": { - "$ref": "#/definitions/gamesradar.AuthorResponse" + "category_id": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "country": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/prada.Product" + }, + "type": "array" + }, + "sort": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "publicnews.gbnewsAuthorResponseDoc": { + "prada.FacetCount": { "properties": { - "data": { - "$ref": "#/definitions/gbnews.AuthorResponse" + "count": { + "type": "integer" + }, + "value": { + "type": "string" } }, "type": "object" }, - "publicnews.ghanawebArchiveMonthsResponseDoc": { + "prada.Product": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.ArchiveMonthsResponse" + "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": { + "type": "string" + }, + "model": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "product_type": { + "type": "string" + }, + "pv": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.ghanawebArchiveResponseDoc": { + "prada.ProductColorOption": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.ArchiveResponse" + "code": { + "type": "string" + }, + "hex": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.ghanawebVideoResponseDoc": { + "prada.ProductResponse": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.VideoResponse" + "breadcrumbs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "color": { + "type": "string" + }, + "color_hex": { + "type": "string" + }, + "country": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "discounted_price": { + "type": "number" + }, + "fetched_at": { + "type": "string" + }, + "gender": { + "items": { + "type": "string" + }, + "type": "array" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { + "type": "boolean" + }, + "material": { + "type": "string" + }, + "model": { + "type": "string" + }, + "name": { + "type": "string" + }, + "other_colors": { + "items": { + "$ref": "#/definitions/prada.ProductColorOption" + }, + "type": "array" + }, + "price": { + "type": "number" + }, + "product_type": { + "type": "string" + }, + "pv": { + "type": "string" + }, + "sizes": { + "items": { + "$ref": "#/definitions/prada.ProductSize" + }, + "type": "array" + }, + "stock_quantity": { + "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.ghanawebVideoSectionsResponseDoc": { + "prada.ProductSize": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.VideoSectionsResponse" + "code": { + "type": "string" + }, + "label": { + "type": "string" } }, "type": "object" }, - "publicnews.ghanawebVideosResponseDoc": { + "prada.SearchResponse": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.VideosResponse" + "count": { + "type": "integer" + }, + "country": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/prada.Product" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "publicnews.gizmodoAuthorResponseDoc": { + "prada.Store": { "properties": { - "data": { - "$ref": "#/definitions/gizmodo.AuthorResponse" + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "distance_km": { + "type": "number" + }, + "hours": { + "items": { + "$ref": "#/definitions/prada.StoreDay" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "line1": { + "type": "string" + }, + "line2": { + "type": "string" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "permanently_closed": { + "type": "boolean" + }, + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "services": { + "items": { + "type": "string" + }, + "type": "array" + }, + "timezone": { + "type": "string" } }, "type": "object" }, - "publicnews.globalnewsAuthorResponseDoc": { + "prada.StoreDay": { "properties": { - "data": { - "$ref": "#/definitions/globalnews.AuthorResponse" + "closed": { + "type": "boolean" + }, + "day": { + "type": "string" + }, + "end": { + "type": "string" + }, + "start": { + "type": "string" } }, "type": "object" }, - "publicnews.gqAuthorResponseDoc": { + "prada.StoresResponse": { "properties": { - "data": { - "$ref": "#/definitions/gq.AuthorResponse" + "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" + }, + "type": "array" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "publicnews.gulfNewsAuthorResponseDoc": { + "prada.SuggestResponse": { "properties": { - "data": { - "$ref": "#/definitions/gulfnews.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "query": { + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/prada.Suggestion" + }, + "type": "array" } }, "type": "object" }, - "publicnews.headlinesResponseDoc": { + "prada.Suggestion": { "properties": { - "data": { - "$ref": "#/definitions/newsplatform.HeadlinesResponse" + "popularity": { + "type": "integer" + }, + "query": { + "type": "string" + }, + "result_count": { + "type": "integer" } }, "type": "object" }, - "publicnews.hindustanTimesAuthorResponseDoc": { + "prada.categoriesResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/hindustantimes.AuthorResponse" + "$ref": "#/definitions/prada.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.hollywoodReporterAuthorResponseDoc": { + "prada.categoryResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/hollywoodreporter.AuthorResponse" + "$ref": "#/definitions/prada.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.huffPostAuthorResponseDoc": { + "prada.productResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/huffpost.AuthorResponse" + "$ref": "#/definitions/prada.ProductResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.ignAuthorResponseDoc": { + "prada.searchResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/ign.AuthorResponse" + "$ref": "#/definitions/prada.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.independentAuthorResponseDoc": { + "prada.storesResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/independent.AuthorResponse" + "$ref": "#/definitions/prada.StoresResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.indiaTodayAuthorResponseDoc": { + "prada.suggestResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/indiatoday.AuthorResponse" + "$ref": "#/definitions/prada.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.indianExpressAuthorResponseDoc": { + "pristineauction.AuctionStatus": { "properties": { - "data": { - "$ref": "#/definitions/indianexpress.AuthorResponse" + "slug": { + "example": "completed", + "type": "string" } }, "type": "object" }, - "publicnews.indiewireAuthorResponseDoc": { + "pristineauction.AuctionType": { "properties": { - "data": { - "$ref": "#/definitions/indiewire.AuthorResponse" + "slug": { + "example": "daily", + "type": "string" } }, "type": "object" }, - "publicnews.inewsAuthorResponseDoc": { + "pristineauction.CategoriesResponse": { "properties": { - "data": { - "$ref": "#/definitions/inews.AuthorResponse" + "auction_types": { + "items": { + "$ref": "#/definitions/pristineauction.AuctionType" + }, + "type": "array" + }, + "categories": { + "items": { + "$ref": "#/definitions/pristineauction.Category" + }, + "type": "array" + }, + "sort": { + "items": { + "$ref": "#/definitions/pristineauction.SortOption" + }, + "type": "array" + }, + "statuses": { + "items": { + "$ref": "#/definitions/pristineauction.AuctionStatus" + }, + "type": "array" } }, "type": "object" }, - "publicnews.inquirerAuthorResponseDoc": { + "pristineauction.Category": { "properties": { - "data": { - "$ref": "#/definitions/inquirer.AuthorResponse" + "count": { + "example": 8608, + "type": "integer" + }, + "label": { + "example": "BASEBALL", + "type": "string" + }, + "slug": { + "example": "baseball", + "type": "string" + }, + "url": { + "example": "https://www.pristineauction.com/auction/category/baseball", + "type": "string" } }, "type": "object" }, - "publicnews.investopediaAuthorResponseDoc": { + "pristineauction.LotDetailResponse": { "properties": { - "data": { - "$ref": "#/definitions/investopedia.AuthorResponse" + "auction_type": { + "example": "CARD AUCTION", + "type": "string" + }, + "auction_type_url": { + "type": "string" + }, + "availability": { + "example": "InStock", + "type": "string" + }, + "category": { + "example": "trading-cards", + "type": "string" + }, + "currency": { + "example": "USD", + "type": "string" + }, + "description": { + "type": "string" + }, + "ends_at": { + "example": "2026-09-21T03:00:00-07:00", + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "lot_number": { + "example": 13154611, + "type": "integer" + }, + "no_reserve": { + "type": "boolean" + }, + "price": { + "example": 256.66, + "type": "number" + }, + "sku": { + "example": "LOT-13154611", + "type": "string" + }, + "title": { + "example": "Mickey Mantle 1969 Topps #500 (PSA 8) (MC)", + "type": "string" + }, + "total_bids": { + "type": "integer" + }, + "total_views": { + "type": "integer" + }, + "total_watching": { + "type": "integer" + }, + "url": { + "example": "https://www.pristineauction.com/a13154611", + "type": "string" } }, "type": "object" }, - "publicnews.iolAuthorResponseDoc": { + "pristineauction.LotSummary": { "properties": { - "data": { - "$ref": "#/definitions/iol.AuthorResponse" + "auction_type": { + "example": "CARD AUCTION", + "type": "string" + }, + "auction_type_url": { + "type": "string" + }, + "currency": { + "example": "USD", + "type": "string" + }, + "ends_at": { + "example": "2026-09-21T03:00:00Z", + "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", + "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" }, - "publicnews.irishindependentAuthorResponseDoc": { + "pristineauction.SearchResponse": { "properties": { - "data": { - "$ref": "#/definitions/irishindependent.AuthorResponse" + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "results": { + "items": { + "$ref": "#/definitions/pristineauction.LotSummary" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "publicnews.irishtimesAuthorResponseDoc": { + "pristineauction.SortOption": { "properties": { - "data": { - "$ref": "#/definitions/irishtimes.AuthorResponse" + "slug": { + "example": "ending-soonest", + "type": "string" } }, "type": "object" }, - "publicnews.jerusalemPostAuthorResponseDoc": { + "pristineauction.categoriesResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/jerusalempost.AuthorResponse" + "$ref": "#/definitions/pristineauction.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.jerusalemPostAuthorsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/jerusalempost.AuthorsResponse" - } - }, - "type": "object" - }, - "publicnews.khaleejTimesAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/khaleejtimes.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.kotakuAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/kotaku.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.livemintAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/livemint.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.livescienceAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/livescience.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.macRumorsAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/macrumors.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.marketWatchAuthorResponseDoc": { + "pristineauction.lotDetailResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/marketwatch.AuthorResponse" + "$ref": "#/definitions/pristineauction.LotDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.mashableAuthorResponseDoc": { + "pristineauction.searchResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/mashable.AuthorResponse" + "$ref": "#/definitions/pristineauction.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.mediaiteAuthorResponseDoc": { + "producthunt.LeaderboardAdItem": { "properties": { - "data": { - "$ref": "#/definitions/mediaite.AuthorResponse" + "channel_kind": { + "type": "string" + }, + "id": { + "type": "string" + }, + "large_asset_uuid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "post": { + "$ref": "#/definitions/producthunt.LeaderboardAdPost" + }, + "small_asset_uuid": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "tagline": { + "type": "string" + }, + "thumbnail_uuid": { + "type": "string" + }, + "url": { + "type": "string" + }, + "variation_id": { + "type": "string" } }, "type": "object" }, - "publicnews.menAuthorResponseDoc": { + "producthunt.LeaderboardAdPost": { "properties": { - "data": { - "$ref": "#/definitions/men.AuthorResponse" + "comments_count": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "disabled_when_scheduled": { + "type": "boolean" + }, + "embargo_preview_at": { + "type": "string" + }, + "featured_at": { + "type": "string" + }, + "featured_comment": { + "$ref": "#/definitions/producthunt.ProductCategoryAdComment" + }, + "has_voted": { + "type": "boolean" + }, + "hide_votes_count": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "latest_score": { + "type": "integer" + }, + "launch_day_score": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "product": { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + }, + "randomization_status": { + "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" + }, + "slug": { + "type": "string" + }, + "topics": { + "items": { + "$ref": "#/definitions/producthunt.LeaderboardTopic" + }, + "type": "array" + }, + "updated_at": { + "type": "string" } }, "type": "object" }, - "publicnews.metroAuthorResponseDoc": { + "producthunt.LeaderboardGhostItem": { "properties": { - "data": { - "$ref": "#/definitions/metro.AuthorResponse" + "id": { + "type": "string" + }, + "subject": { + "type": "string" } }, "type": "object" }, - "publicnews.mirrorAuthorResponseDoc": { + "producthunt.LeaderboardItem": { "properties": { - "data": { - "$ref": "#/definitions/mirror.AuthorResponse" + "ad": { + "$ref": "#/definitions/producthunt.LeaderboardAdItem" + }, + "ghost_ad": { + "$ref": "#/definitions/producthunt.LeaderboardGhostItem" + }, + "post": { + "$ref": "#/definitions/producthunt.LeaderboardPostItem" + }, + "type": { + "type": "string" } }, "type": "object" }, - "publicnews.moneycontrolAuthorResponseDoc": { + "producthunt.LeaderboardPage": { "properties": { - "data": { - "$ref": "#/definitions/moneycontrol.AuthorResponse" + "connection": { + "type": "string" + }, + "day": { + "example": 29, + "type": "integer" + }, + "end_cursor": { + "type": "string" + }, + "featured": { + "type": "boolean" + }, + "golden_kitty_years": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "has_next_page": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/producthunt.LeaderboardItem" + }, + "type": "array" + }, + "month": { + "example": 1, + "type": "integer" + }, + "order": { + "example": "DAILY_RANK", + "type": "string" + }, + "raw_page_info": { + "additionalProperties": {}, + "type": "object" + }, + "scope": { + "example": "daily", + "type": "string" + }, + "total_count": { + "type": "integer" + }, + "week": { + "example": 5, + "type": "integer" + }, + "year": { + "example": 2026, + "type": "integer" } }, "type": "object" }, - "publicnews.motleyfoolAuthorResponseDoc": { + "producthunt.LeaderboardPostItem": { "properties": { - "data": { - "$ref": "#/definitions/motleyfool.AuthorResponse" + "comments_count": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "daily_rank": { + "type": "integer" + }, + "disabled_when_scheduled": { + "type": "boolean" + }, + "embargo_preview_at": { + "type": "string" + }, + "featured_at": { + "type": "string" + }, + "friend_voters_count": { + "type": "integer" + }, + "has_voted": { + "type": "boolean" + }, + "hide_votes_count": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "is_subscribed": { + "type": "boolean" + }, + "latest_score": { + "type": "integer" + }, + "launch_day_score": { + "type": "integer" + }, + "monthly_rank": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "product": { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + }, + "product_state": { + "type": "string" + }, + "randomization_status": { + "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" + }, + "scheduled_at": { + "type": "string" + }, + "shortened_url": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "tagline": { + "type": "string" + }, + "thumbnail_image_uuid": { + "type": "string" + }, + "topics": { + "items": { + "$ref": "#/definitions/producthunt.LeaderboardTopic" + }, + "type": "array" + }, + "updated_at": { + "type": "string" + }, + "weekly_rank": { + "type": "integer" } }, "type": "object" }, - "publicnews.nationAfricaAuthorResponseDoc": { + "producthunt.LeaderboardProductRef": { "properties": { - "data": { - "$ref": "#/definitions/nationafrica.AuthorResponse" + "id": { + "type": "string" + }, + "is_no_longer_online": { + "type": "boolean" + }, + "is_subscribed": { + "type": "boolean" + }, + "is_top_product": { + "type": "boolean" + }, + "logo_uuid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "publicnews.nationalPostAuthorResponseDoc": { + "producthunt.LeaderboardRandomizationStatus": { "properties": { - "data": { - "$ref": "#/definitions/nationalpost.AuthorResponse" + "active": { + "type": "boolean" + }, + "next_transition_at": { + "type": "string" + }, + "random_day": { + "type": "boolean" + }, + "randomize_order": { + "type": "boolean" } }, "type": "object" }, - "publicnews.ndtvArticleResponseDoc": { + "producthunt.LeaderboardTopic": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.ArticleResponse" + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "publicnews.ndtvAuthorResponseDoc": { + "producthunt.Product": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.AuthorResponse" + "categories": { + "example": [ + "[\"Design\"", + "\"Productivity\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "daily_rank": { + "example": 1, + "type": "integer" + }, + "date_published": { + "example": "2024-07-21T12:34:56Z", + "type": "string" + }, + "description": { + "example": "Chronicle lets designers and developers review every iteration in one place.", + "type": "string" + }, + "followers_count": { + "example": 2000, + "type": "integer" + }, + "id": { + "example": "chronicle-design", + "type": "string" + }, + "monthly_rank": { + "example": 1, + "type": "integer" + }, + "name": { + "example": "Chronicle", + "type": "string" + }, + "rating": { + "example": 4.8, + "type": "number" + }, + "review_count": { + "example": 152, + "type": "integer" + }, + "similar_products": { + "items": { + "$ref": "#/definitions/producthunt.SimilarProduct" + }, + "type": "array" + }, + "social_links": { + "example": [ + "[\"https://twitter.com/chronicle\"", + "\"https://github.com/chronicle\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "tagline": { + "example": "Visual version control for teams", + "type": "string" + }, + "website": { + "example": "https://chronicle.design", + "type": "string" + }, + "weekly_rank": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "publicnews.ndtvSearchResponseDoc": { + "producthunt.ProductAboutAd": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.SearchResponse" + "channel_kind": { + "type": "string" + }, + "id": { + "type": "string" + }, + "large_asset_uuid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "small_asset_uuid": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "tagline": { + "type": "string" + }, + "thumbnail_uuid": { + "type": "string" + }, + "url": { + "type": "string" + }, + "variation_id": { + "type": "string" } }, "type": "object" }, - "publicnews.news18AuthorResponseDoc": { + "producthunt.ProductAboutDiscussionForum": { "properties": { - "data": { - "$ref": "#/definitions/news18.AuthorResponse" + "id": { + "type": "string" + }, + "path": { + "type": "string" + }, + "threads": { + "items": { + "$ref": "#/definitions/producthunt.ProductAboutDiscussionThread" + }, + "type": "array" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "publicnews.newsResponseDoc": { + "producthunt.ProductAboutDiscussionThread": { "properties": { - "data": { - "$ref": "#/definitions/newsplatform.NewsResponse" + "commentable_id": { + "type": "string" + }, + "comments_count": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "description_preview": { + "type": "string" + }, + "forum": { + "$ref": "#/definitions/producthunt.ProductAboutForumRef" + }, + "has_voted": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "is_featured": { + "type": "boolean" + }, + "is_pinned": { + "type": "boolean" + }, + "path": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "user": { + "$ref": "#/definitions/producthunt.ProductCategoryUser" + }, + "votes_count": { + "type": "integer" } }, "type": "object" }, - "publicnews.newscomauAuthorResponseDoc": { + "producthunt.ProductAboutForumRef": { "properties": { - "data": { - "$ref": "#/definitions/newscomau.AuthorResponse" + "id": { + "type": "string" + }, + "path": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "subject": { + "$ref": "#/definitions/producthunt.ProductAboutForumSubject" } }, "type": "object" }, - "publicnews.newsmaxAuthorResponseDoc": { + "producthunt.ProductAboutForumSubject": { "properties": { - "data": { - "$ref": "#/definitions/newsmax.AuthorResponse" + "id": { + "type": "string" + }, + "is_no_longer_online": { + "type": "boolean" + }, + "logo_uuid": { + "type": "string" + }, + "name": { + "type": "string" } }, "type": "object" }, - "publicnews.newsweekAuthorResponseDoc": { + "producthunt.ProductAboutGhostAd": { "properties": { - "data": { - "$ref": "#/definitions/newsweek.AuthorResponse" + "id": { + "type": "string" + }, + "subject": { + "type": "string" } }, "type": "object" }, - "publicnews.newyorkerArticleResponseDoc": { + "producthunt.ProductAboutLatestLaunch": { "properties": { - "data": { - "$ref": "#/definitions/newyorker.ArticleResponse" + "id": { + "type": "string" + }, + "is_maker": { + "type": "boolean" + }, + "launch_number": { + "type": "integer" + }, + "launched_this_week": { + "type": "boolean" + }, + "launching_today": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "product_state": { + "type": "string" + }, + "scheduled_at": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "tagline": { + "type": "string" + }, + "thumbnail_image_uuid": { + "type": "string" } }, "type": "object" }, - "publicnews.newyorkerAuthorResponseDoc": { + "producthunt.ProductAboutLaunch": { "properties": { - "data": { - "$ref": "#/definitions/newyorker.AuthorResponse" + "ad1": { + "$ref": "#/definitions/producthunt.ProductAboutGhostAd" + }, + "ad2": { + "$ref": "#/definitions/producthunt.ProductAboutGhostAd" + }, + "badges": { + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + }, + "type": "array" + }, + "can_deputy_manage": { + "type": "boolean" + }, + "can_manage": { + "type": "boolean" + }, + "comments_count": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "daily_rank": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "detailed_reviews": { + "items": { + "$ref": "#/definitions/producthunt.ProductAboutShoutout" + }, + "type": "array" + }, + "disabled_when_scheduled": { + "type": "boolean" + }, + "embargo_preview_at": { + "type": "string" + }, + "featured": { + "type": "boolean" + }, + "featured_at": { + "type": "string" + }, + "has_voted": { + "type": "boolean" + }, + "hide_votes_count": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "is_archived": { + "type": "boolean" + }, + "is_available": { + "type": "boolean" + }, + "is_hunter": { + "type": "boolean" + }, + "is_maker": { + "type": "boolean" + }, + "is_top_launch": { + "type": "boolean" + }, + "latest_score": { + "type": "integer" + }, + "launch_day_score": { + "type": "integer" + }, + "launch_number": { + "type": "integer" + }, + "launch_state": { + "type": "string" + }, + "launched_this_week": { + "type": "boolean" + }, + "launching_today": { + "type": "boolean" + }, + "links": { + "items": { + "$ref": "#/definitions/producthunt.ProductAboutLink" + }, + "type": "array" + }, + "makers": { + "items": { + "$ref": "#/definitions/producthunt.ProductAboutUser" + }, + "type": "array" + }, + "media": { + "items": { + "$ref": "#/definitions/producthunt.ProductAboutMedia" + }, + "type": "array" + }, + "meta": { + "$ref": "#/definitions/producthunt.ProductAboutMeta" + }, + "moderation_reason": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pricing_type": { + "type": "string" + }, + "primary_link": { + "$ref": "#/definitions/producthunt.ProductAboutPrimaryLink" + }, + "product": { + "$ref": "#/definitions/producthunt.ProductAboutLaunchProduct" + }, + "product_state": { + "type": "string" + }, + "promo": { + "additionalProperties": {}, + "type": "object" + }, + "redirect_to_product": { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + }, + "scheduled_at": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "tagline": { + "type": "string" + }, + "thumbnail_image_uuid": { + "type": "string" + }, + "topics": { + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryRef" + }, + "type": "array" + }, + "trashed_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + }, + "user": { + "$ref": "#/definitions/producthunt.ProductAboutUser" + }, + "weekly_rank": { + "type": "integer" } }, "type": "object" }, - "publicnews.ninetofivemacAuthorResponseDoc": { + "producthunt.ProductAboutLaunchFlags": { "properties": { - "data": { - "$ref": "#/definitions/ninetofivemac.AuthorResponse" + "id": { + "type": "string" + }, + "launched_this_week": { + "type": "boolean" + }, + "launching_today": { + "type": "boolean" } }, "type": "object" }, - "publicnews.nyDailyNewsAuthorResponseDoc": { + "producthunt.ProductAboutLaunchProduct": { "properties": { - "data": { - "$ref": "#/definitions/nydailynews.AuthorResponse" + "can_claim": { + "type": "boolean" + }, + "can_edit": { + "type": "boolean" + }, + "clean_url": { + "type": "string" + }, + "detailed_review": { + "additionalProperties": {}, + "type": "object" + }, + "first_launch": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "is_claimed": { + "type": "boolean" + }, + "is_no_longer_online": { + "type": "boolean" + }, + "is_subscribed": { + "type": "boolean" + }, + "is_top_product": { + "type": "boolean" + }, + "is_viewer_team_member": { + "additionalProperties": {}, + "type": "object" + }, + "latest_launch": { + "$ref": "#/definitions/producthunt.ProductAboutLaunchFlags" + }, + "logo_uuid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "posts_count": { + "type": "integer" + }, + "pro_con_tags": { + "items": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" + }, + "type": "array" + }, + "review_questions": { + "items": { + "$ref": "#/definitions/producthunt.ProductAboutReviewQuestion" + }, + "type": "array" + }, + "reviews_rating": { + "type": "number" + }, + "slug": { + "type": "string" + }, + "tagline": { + "type": "string" + }, + "twitter_url": { + "type": "string" + }, + "viewer_pending_team_request": { + "additionalProperties": {}, + "type": "object" + }, + "website_domain": { + "type": "string" + }, + "website_url": { + "type": "string" } }, "type": "object" }, - "publicnews.nymagAuthorResponseDoc": { + "producthunt.ProductAboutLink": { "properties": { - "data": { - "$ref": "#/definitions/nymag.AuthorResponse" + "devices": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "redirect_path": { + "type": "string" + }, + "store_name": { + "type": "string" + }, + "website_name": { + "type": "string" } }, "type": "object" }, - "publicnews.nypostAuthorResponseDoc": { + "producthunt.ProductAboutMedia": { "properties": { - "data": { - "$ref": "#/definitions/nypost.AuthorResponse" + "id": { + "type": "string" + }, + "image_uuid": { + "type": "string" + }, + "interactive_demo_id": { + "type": "string" + }, + "interactive_demo_type": { + "type": "string" + }, + "media_type": { + "type": "string" + }, + "original_height": { + "type": "integer" + }, + "original_width": { + "type": "integer" + }, + "platform": { + "type": "string" + }, + "thumbnail_height": { + "type": "integer" + }, + "thumbnail_width": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "video_id": { + "type": "string" } }, "type": "object" }, - "publicnews.nzheraldAuthorResponseDoc": { + "producthunt.ProductAboutMentionedProduct": { "properties": { - "data": { - "$ref": "#/definitions/nzherald.AuthorResponse" + "id": { + "type": "string" + }, + "is_no_longer_online": { + "type": "boolean" + }, + "logo_uuid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "tagline": { + "type": "string" } }, "type": "object" }, - "publicnews.pagesixAuthorResponseDoc": { + "producthunt.ProductAboutMeta": { "properties": { - "data": { - "$ref": "#/definitions/pagesix.AuthorResponse" + "title": { + "type": "string" } }, "type": "object" }, - "publicnews.pcgamerAuthorResponseDoc": { + "producthunt.ProductAboutPage": { "properties": { - "data": { - "$ref": "#/definitions/pcgamer.AuthorResponse" + "ad": { + "$ref": "#/definitions/producthunt.ProductAboutAd" + }, + "launch": { + "$ref": "#/definitions/producthunt.ProductAboutLaunch" + }, + "page_variant_typename": { + "type": "string" + }, + "product": { + "$ref": "#/definitions/producthunt.ProductAboutProduct" + }, + "product_id": { + "type": "string" + }, + "viewer": { + "$ref": "#/definitions/producthunt.ProductAboutViewer" } }, "type": "object" }, - "publicnews.pcmagAuthorResponseDoc": { + "producthunt.ProductAboutPageVariant": { "properties": { - "data": { - "$ref": "#/definitions/pcmag.AuthorResponse" + "launch_id": { + "type": "string" + }, + "typename": { + "type": "string" } }, "type": "object" }, - "publicnews.peopleAuthorResponseDoc": { + "producthunt.ProductAboutPost": { "properties": { - "data": { - "$ref": "#/definitions/people.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.phillyinquirerAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/phillyinquirer.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.philstarAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/philstar.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.phonearenaAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/phonearena.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.polygonAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/polygon.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.propublicaAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/propublica.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.punchAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/punch.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.rapplerAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/rappler.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.rawstoryAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/rawstory.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.reachAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/reachplc.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.rnzAuthorResponseDoc": { - "properties": { - "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.sportskeedaDepthChartResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.DepthChartResponse" - } - }, - "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.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.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.sportskeedaTradeValuesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.TradeValuesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaVideoResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.VideoResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaVideosResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.VideosResponse" - } - }, - "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.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.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.xdaAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/xda.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.zdnetAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/zdnet.AuthorResponse" - } - }, - "type": "object" - }, - "punch.AuthorResponse": { - "properties": { - "articles": { + "badges": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" }, "type": "array" }, - "name": { + "comments_count": { + "type": "integer" + }, + "created_at": { "type": "string" }, - "total_pages": { + "daily_rank": { "type": "integer" }, - "url": { + "disabled_when_scheduled": { + "type": "boolean" + }, + "embargo_preview_at": { "type": "string" - } - }, - "type": "object" - }, - "quince.CategoriesResponse": { - "properties": { - "business_departments": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" }, - "categories": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" + "featured_at": { + "type": "string" }, - "colors": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" + "has_voted": { + "type": "boolean" }, - "departments": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" + "hide_votes_count": { + "type": "boolean" }, - "fetched_at": { + "id": { "type": "string" }, - "materials": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" + "latest_score": { + "type": "integer" }, - "sizes": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" - } - }, - "type": "object" - }, - "quince.FacetCount": { - "properties": { - "count": { + "launch_day_score": { "type": "integer" }, - "value": { + "monthly_rank": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "product": { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + }, + "product_state": { + "type": "string" + }, + "randomization_status": { + "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" + }, + "redirect_to_product": { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + }, + "shortened_url": { "type": "string" - } - }, - "type": "object" - }, - "quince.NavCategory": { - "properties": { - "groups": { - "items": { - "$ref": "#/definitions/quince.NavGroup" - }, - "type": "array" }, "slug": { "type": "string" }, - "title": { + "tagline": { "type": "string" - } - }, - "type": "object" - }, - "quince.NavGroup": { - "properties": { - "links": { - "items": { - "$ref": "#/definitions/quince.NavLink" - }, - "type": "array" }, - "title": { + "thumbnail_image_uuid": { "type": "string" + }, + "updated_at": { + "type": "string" + }, + "weekly_rank": { + "type": "integer" } }, "type": "object" }, - "quince.NavLink": { + "producthunt.ProductAboutPrimaryLink": { "properties": { - "slug": { + "id": { "type": "string" }, - "text": { + "url": { "type": "string" } }, "type": "object" }, - "quince.NavigationResponse": { + "producthunt.ProductAboutProduct": { "properties": { - "categories": { + "badges": { "items": { - "$ref": "#/definitions/quince.NavCategory" + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" }, "type": "array" }, - "fetched_at": { - "type": "string" + "detailed_review": { + "additionalProperties": {}, + "type": "object" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "quince.Product": { - "properties": { - "business_department": { - "type": "string" + "discussion_forum": { + "$ref": "#/definitions/producthunt.ProductAboutDiscussionForum" }, - "category": { - "type": "string" + "followers_count": { + "type": "integer" }, - "color": { + "id": { "type": "string" }, - "currency": { - "type": "string" + "is_no_longer_online": { + "type": "boolean" }, - "department": { - "type": "string" + "is_subscribed": { + "type": "boolean" }, - "description": { - "type": "string" + "latest_launch": { + "$ref": "#/definitions/producthunt.ProductAboutLatestLaunch" }, - "gender": { + "logo_uuid": { "type": "string" }, - "handle": { - "type": "string" + "media": { + "items": { + "$ref": "#/definitions/producthunt.ProductAboutMedia" + }, + "type": "array" }, - "image_url": { + "name": { "type": "string" }, - "in_stock": { - "type": "boolean" + "page_variant": { + "$ref": "#/definitions/producthunt.ProductAboutPageVariant" }, - "material": { + "posts": { "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductAboutPost" }, "type": "array" }, - "max_price": { - "type": "number" - }, - "min_price": { - "type": "number" + "posts_count": { + "type": "integer" }, - "primary_colors": { + "pro_con_tags": { "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" }, "type": "array" }, - "product_id": { - "type": "integer" + "review_questions": { + "items": { + "$ref": "#/definitions/producthunt.ProductAboutReviewQuestion" + }, + "type": "array" }, - "product_type": { - "type": "string" + "reviews_rating": { + "type": "number" }, - "sizes": { + "screenshots": { "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductAboutScreenshot" }, "type": "array" }, - "title": { + "slug": { + "type": "string" + }, + "tagline": { "type": "string" }, "url": { @@ -127514,9 +132098,12 @@ }, "type": "object" }, - "quince.ProductFAQItem": { + "producthunt.ProductAboutReviewQuestion": { "properties": { - "answer": { + "category": { + "type": "string" + }, + "id": { "type": "string" }, "question": { @@ -127525,1623 +132112,1701 @@ }, "type": "object" }, - "quince.ProductFAQResponse": { + "producthunt.ProductAboutScreenshot": { "properties": { - "fetched_at": { + "id": { "type": "string" }, - "handle": { + "image_uuid": { "type": "string" }, - "questions": { - "items": { - "$ref": "#/definitions/quince.ProductFAQItem" - }, - "type": "array" - }, - "source_url": { + "media_type": { "type": "string" + }, + "original_height": { + "type": "integer" + }, + "original_width": { + "type": "integer" } }, "type": "object" }, - "quince.ProductOptionGroup": { + "producthunt.ProductAboutShoutout": { "properties": { - "name": { - "type": "string" - }, - "values": { + "alternative_products": { "items": { - "$ref": "#/definitions/quince.ProductOptionValue" + "$ref": "#/definitions/producthunt.ProductAboutMentionedProduct" }, "type": "array" - } - }, - "type": "object" - }, - "quince.ProductOptionValue": { - "properties": { - "display_name": { - "type": "string" }, - "display_type": { + "id": { "type": "string" }, - "hex_code": { - "type": "string" + "product": { + "$ref": "#/definitions/producthunt.ProductAboutMentionedProduct" }, - "value": { + "shoutout_note": { "type": "string" } }, "type": "object" }, - "quince.ProductResponse": { + "producthunt.ProductAboutUser": { "properties": { - "average_rating": { - "type": "number" - }, - "country": { - "type": "string" - }, - "description": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "handle": { + "avatar_url": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "options": { - "items": { - "$ref": "#/definitions/quince.ProductOptionGroup" - }, - "type": "array" - }, - "product_id": { - "type": "integer" - }, - "product_type": { + "headline": { "type": "string" }, - "review_count": { - "type": "integer" - }, - "source_url": { + "id": { "type": "string" }, - "title": { + "name": { "type": "string" }, - "url": { + "username": { "type": "string" + } + }, + "type": "object" + }, + "producthunt.ProductAboutViewer": { + "properties": { + "is_featured_post_maker": { + "type": "boolean" }, - "variants": { - "items": { - "$ref": "#/definitions/quince.ProductVariant" - }, - "type": "array" + "recent_launch": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "quince.ProductReviewsResponse": { + "producthunt.ProductAlternativeBadge": { "properties": { - "average_rating": { - "type": "number" + "date": { + "type": "string" }, - "fetched_at": { + "id": { "type": "string" }, - "handle": { + "period": { "type": "string" }, - "review_count": { + "position": { "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/quince.Review" - }, - "type": "array" + "post_name": { + "type": "string" }, - "source_url": { + "post_slug": { "type": "string" } }, "type": "object" }, - "quince.ProductVariant": { + "producthunt.ProductAlternativeDiscussion": { "properties": { - "currency": { - "type": "string" - }, - "id": { + "comments_count": { "type": "integer" }, - "in_stock": { - "type": "boolean" + "created_at": { + "type": "string" }, - "options": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "description_preview": { + "type": "string" }, - "price": { - "type": "number" + "has_voted": { + "type": "boolean" }, - "savings": { + "id": { "type": "string" }, - "sku": { + "path": { "type": "string" }, - "status": { + "pinned": { + "type": "boolean" + }, + "primary_forum": { + "$ref": "#/definitions/producthunt.ProductAlternativeDiscussionForum" + }, + "slug": { "type": "string" }, "title": { "type": "string" }, - "traditional_retail_price": { - "type": "number" + "user": { + "$ref": "#/definitions/producthunt.ProductAlternativeDiscussionUser" + }, + "votes_count": { + "type": "integer" } }, "type": "object" }, - "quince.Review": { + "producthunt.ProductAlternativeDiscussionForum": { "properties": { - "author": { + "id": { "type": "string" }, - "body": { + "slug": { "type": "string" }, - "date_published": { + "subject_id": { "type": "string" }, - "rating": { - "type": "number" + "subject_name": { + "type": "string" } }, "type": "object" }, - "quince.SearchResponse": { + "producthunt.ProductAlternativeDiscussionUser": { "properties": { - "category": { + "avatar_url": { "type": "string" }, - "color": { + "id": { "type": "string" }, - "count": { - "type": "integer" - }, - "country": { - "type": "string" - }, - "department": { - "type": "string" - }, - "fetched_at": { + "name": { "type": "string" }, - "limit": { - "type": "integer" - }, - "material": { + "username": { "type": "string" - }, - "max_price": { + } + }, + "type": "object" + }, + "producthunt.ProductAlternativeItem": { + "properties": { + "category_score": { "type": "number" }, - "min_price": { + "category_weight": { "type": "number" }, - "page": { - "type": "integer" + "combined_score": { + "type": "number" }, - "products": { - "items": { - "$ref": "#/definitions/quince.Product" - }, - "type": "array" + "embedding_score": { + "type": "number" }, - "query": { - "type": "string" + "embedding_weight": { + "type": "number" }, - "size": { + "id": { "type": "string" }, - "source_url": { - "type": "string" + "product": { + "$ref": "#/definitions/producthunt.ProductAlternativeProduct" }, - "total_pages": { - "type": "integer" + "rating_score": { + "type": "number" }, - "total_results": { - "type": "integer" + "rating_weight": { + "type": "number" } }, "type": "object" }, - "quince.SitemapItem": { + "producthunt.ProductAlternativeProduct": { "properties": { - "loc": { - "type": "string" + "badges": { + "items": { + "$ref": "#/definitions/producthunt.ProductAlternativeBadge" + }, + "type": "array" }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "quince.SitemapURLItem": { - "properties": { - "handle": { - "type": "string" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "loc": { + "followers_count": { + "type": "integer" + }, + "id": { "type": "string" }, - "type": { + "is_subscribed": { + "type": "boolean" + }, + "is_top_product": { + "type": "boolean" + }, + "logo_uuid": { "type": "string" - } - }, - "type": "object" - }, - "quince.SitemapURLsResponse": { - "properties": { - "fetched_at": { + }, + "name": { "type": "string" }, - "limit": { + "reviews_count": { "type": "integer" }, - "source_url": { + "reviews_rating": { + "type": "number" + }, + "slug": { "type": "string" }, - "type": { + "structured_data": { + "$ref": "#/definitions/producthunt.ProductAlternativeStructuredData" + }, + "tagline": { "type": "string" }, - "urls": { + "tags": { "items": { - "$ref": "#/definitions/quince.SitemapURLItem" + "type": "string" }, "type": "array" } }, "type": "object" }, - "quince.SitemapsResponse": { + "producthunt.ProductAlternativeStructuredData": { "properties": { - "fetched_at": { + "application_category": { "type": "string" }, - "sitemaps": { - "items": { - "$ref": "#/definitions/quince.SitemapItem" - }, - "type": "array" + "context": { + "type": "string" }, - "source_url": { + "date_modified": { "type": "string" - } - }, - "type": "object" - }, - "quince.SuggestResponse": { - "properties": { - "fetched_at": { + }, + "date_published": { "type": "string" }, - "query": { + "description": { "type": "string" }, - "source_url": { + "id": { "type": "string" }, - "suggestions": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "operating_system": { + "type": "string" + }, + "screenshot": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "quince.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/quince.CategoriesResponse" - }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "quince.navigationResponseDoc": { + "producthunt.ProductAlternativeTag": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/quince.NavigationResponse" - }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "quince.productFAQResponseDoc": { + "producthunt.ProductAlternativesPage": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/quince.ProductFAQResponse" + "alternative_tags": { + "items": { + "$ref": "#/definitions/producthunt.ProductAlternativeTag" + }, + "type": "array" }, - "msg": { - "example": "OK", + "alternatives_markdown_description": { "type": "string" - } - }, - "type": "object" - }, - "quince.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/quince.ProductResponse" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "quince.productReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "discussions": { + "items": { + "$ref": "#/definitions/producthunt.ProductAlternativeDiscussion" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/quince.ProductReviewsResponse" + "discussions_has_next_page": { + "type": "boolean" }, - "msg": { - "example": "OK", + "end_cursor": { + "example": "MTA", "type": "string" - } - }, - "type": "object" - }, - "quince.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/quince.SearchResponse" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "quince.sitemapURLsResponseDoc": { - "properties": { - "code": { - "example": 200, + "followers_count": { + "example": 577, "type": "integer" }, - "data": { - "$ref": "#/definitions/quince.SitemapURLsResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "quince.sitemapsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "has_next_page": { + "example": true, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/quince.SitemapsResponse" + "items": { + "items": { + "$ref": "#/definitions/producthunt.ProductAlternativeItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "example": "Clico", "type": "string" - } - }, - "type": "object" - }, - "quince.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/quince.SuggestResponse" + "product_id": { + "example": "1191613", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "clico", "type": "string" + }, + "total_count": { + "example": 50, + "type": "integer" } }, "type": "object" }, - "raisingcanes.DirectoryChild": { + "producthunt.ProductCategoryAd": { "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", + "channel_kind": { "type": "string" }, - "path": { - "example": "la", + "id": { "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" + "large_asset_uuid": { + "type": "string" }, - "url": { + "name": { "type": "string" - } - }, - "type": "object" - }, - "raisingcanes.DirectoryResponse": { - "properties": { - "children": { - "items": { - "$ref": "#/definitions/raisingcanes.DirectoryChild" - }, - "type": "array" }, - "count": { - "example": 38, - "type": "integer" + "post": { + "$ref": "#/definitions/producthunt.ProductCategoryAdPost" }, - "fetched_at": { + "small_asset_uuid": { "type": "string" }, - "name": { + "subject": { "type": "string" }, - "path": { - "example": "la", + "tagline": { "type": "string" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "raisingcanes.MenuItem": { - "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", + "thumbnail_uuid": { "type": "string" }, - "image_url": { + "url": { "type": "string" }, - "name": { - "example": "The Box Combo®", + "variation_id": { "type": "string" } }, "type": "object" }, - "raisingcanes.MenuResponse": { + "producthunt.ProductCategoryAdComment": { "properties": { - "count": { - "example": 23, - "type": "integer" + "body_text": { + "type": "string" }, - "fetched_at": { + "id": { "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/raisingcanes.MenuSection" - }, - "type": "array" + "is_pinned": { + "type": "boolean" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "raisingcanes.MenuSection": { - "properties": { - "anchor": { - "description": "Anchor is the section's in-page anchor slug, e.g. \"combos\".", - "example": "combos", + "path": { "type": "string" }, - "headline": { - "example": "Combos", + "subject_id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/raisingcanes.MenuItem" - }, - "type": "array" + "user": { + "$ref": "#/definitions/producthunt.ProductCategoryUser" } }, "type": "object" }, - "raisingcanes.NearbyResponse": { + "producthunt.ProductCategoryAdPost": { "properties": { - "count": { - "example": 10, + "comments_count": { "type": "integer" }, - "fetched_at": { + "created_at": { "type": "string" }, - "radius": { - "example": 25, - "type": "integer" + "disabled_when_scheduled": { + "type": "boolean" }, - "source_url": { + "embargo_preview_at": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/raisingcanes.NearbyStore" - }, - "type": "array" + "featured_at": { + "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": 69, - "type": "integer" - } - }, - "type": "object" - }, - "raisingcanes.NearbyStore": { - "properties": { - "address": { - "$ref": "#/definitions/raisingcanes.StoreAddress" + "featured_comment": { + "$ref": "#/definitions/producthunt.ProductCategoryAdComment" }, - "distance_kilometers": { - "example": 0.42, - "type": "number" + "has_voted": { + "type": "boolean" }, - "distance_miles": { - "description": "DistanceMiles is measured from the requested coordinate.", - "example": 0.26, - "type": "number" + "hide_votes_count": { + "type": "boolean" }, - "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" + "id": { + "type": "string" }, - "latitude": { - "example": 40.710412, - "type": "number" + "latest_score": { + "type": "integer" }, - "longitude": { - "example": -74.009937, - "type": "number" + "launch_day_score": { + "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.", + "product_id": { "type": "string" }, - "price_range": { - "description": "PriceRange is Raising Cane's own relative price tier, e.g. ONE.", - "example": "ONE", + "product_slug": { "type": "string" }, - "store_id": { - "example": "C986", + "product_subscribed": { + "type": "boolean" + }, + "randomization_status": { + "$ref": "#/definitions/producthunt.ProductCategoryRandomizationStatus" + }, + "slug": { "type": "string" }, - "timezone": { - "example": "America/New_York", + "topics": { + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryTopic" + }, + "type": "array" + }, + "updated_at": { "type": "string" } }, "type": "object" }, - "raisingcanes.PromotionCategory": { + "producthunt.ProductCategoryAnswer": { "properties": { - "heading": { - "example": "Sweepstakes & Giveaways", + "body": { + "$ref": "#/definitions/producthunt.ProductCategoryMarkdown" + }, + "id": { "type": "string" }, - "promotions": { + "sources": { "items": { - "$ref": "#/definitions/raisingcanes.PromotionSummary" + "$ref": "#/definitions/producthunt.ProductCategorySource" }, "type": "array" } }, "type": "object" }, - "raisingcanes.PromotionResponse": { + "producthunt.ProductCategoryFounderPost": { "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.", + "badges": { "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" }, "type": "array" }, - "fetched_at": { + "id": { "type": "string" }, - "path": { - "example": "first-50-promotion", + "name": { "type": "string" }, - "source_url": { + "product_id": { "type": "string" }, - "title": { - "example": "First 50 Promotion Details", + "product_slug": { + "type": "string" + }, + "product_state": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "thumbnail_image_uuid": { "type": "string" } }, "type": "object" }, - "raisingcanes.PromotionSummary": { + "producthunt.ProductCategoryFounderShoutout": { "properties": { - "name": { - "example": "First 50 Promotion Details", + "from_post": { + "$ref": "#/definitions/producthunt.ProductCategoryFounderPost" + }, + "id": { "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", + "product_id": { "type": "string" } }, "type": "object" }, - "raisingcanes.PromotionsResponse": { + "producthunt.ProductCategoryHeroProduct": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/raisingcanes.PromotionCategory" - }, - "type": "array" + "id": { + "type": "string" }, - "count": { - "example": 53, - "type": "integer" + "is_no_longer_online": { + "type": "boolean" }, - "fetched_at": { + "logo_uuid": { "type": "string" }, - "source_url": { + "name": { "type": "string" } }, "type": "object" }, - "raisingcanes.StoreAddress": { + "producthunt.ProductCategoryLatestLaunch": { "properties": { - "city": { - "example": "Gonzales", + "id": { "type": "string" }, - "country": { - "example": "US", + "scheduled_at": { + "type": "string" + } + }, + "type": "object" + }, + "producthunt.ProductCategoryListBadge": { + "properties": { + "category": { "type": "string" }, - "line1": { - "example": "625 Airline Hwy", + "date": { "type": "string" }, - "line2": { + "id": { "type": "string" }, - "postal_code": { - "example": "70737", + "period": { "type": "string" }, - "region": { - "example": "LA", + "position": { + "type": "integer" + }, + "post_id": { "type": "string" - } - }, - "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" }, - "closes": { - "example": "00:00", + "post_name": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "post_slug": { "type": "string" }, - "opens": { - "example": "09:00", + "year": { "type": "string" } }, "type": "object" }, - "raisingcanes.StoreResponse": { + "producthunt.ProductCategoryListProduct": { "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.", + "badges": { "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" }, "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).", + "categories": { "items": { - "$ref": "#/definitions/raisingcanes.StoreHours" + "$ref": "#/definitions/producthunt.ProductCategoryRef" }, "type": "array" }, - "drive_through_hours": { - "items": { - "$ref": "#/definitions/raisingcanes.StoreHours" - }, - "type": "array" + "detailed_reviews_count": { + "type": "integer" }, - "fetched_at": { - "type": "string" + "followers_count": { + "type": "integer" }, - "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.", + "founder_reviews_count": { + "type": "integer" + }, + "founder_shoutouts": { "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductCategoryFounderShoutout" }, "type": "array" }, - "google_place_id": { + "id": { "type": "string" }, - "hours": { - "description": "Hours is the store's general published week of hours.", - "items": { - "$ref": "#/definitions/raisingcanes.StoreHours" - }, - "type": "array" + "is_no_longer_online": { + "type": "boolean" }, - "latitude": { - "example": 30.2371547, - "type": "number" + "is_subscribed": { + "type": "boolean" }, - "longitude": { - "example": -90.9132179, - "type": "number" + "is_top_product": { + "type": "boolean" }, - "name": { - "example": "Raising Cane's Chicken Fingers", - "type": "string" + "latest_launch": { + "$ref": "#/definitions/producthunt.ProductCategoryLatestLaunch" }, - "path": { + "logo_uuid": { "type": "string" }, - "phone_number": { - "example": "(225) 407-4134", + "name": { "type": "string" }, - "source_url": { - "type": "string" + "posts_count": { + "type": "integer" }, - "store_id": { - "example": "C10", - "type": "string" - } - }, - "type": "object" - }, - "raisingcanes.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", + "reviews_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/raisingcanes.DirectoryResponse" + "reviews_rating": { + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "raisingcanes.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" + "slug": { + "type": "string" }, - "data": { - "$ref": "#/definitions/raisingcanes.MenuResponse" + "structured_data": { + "$ref": "#/definitions/producthunt.ProductAlternativeStructuredData" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "tagline": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "raisingcanes.nearbyResponseDoc": { + "producthunt.ProductCategoryMarkdown": { "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/raisingcanes.NearbyResponse" + "markdown": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "text": { + "type": "string" } }, "type": "object" }, - "raisingcanes.promotionResponseDoc": { + "producthunt.ProductCategoryPage": { "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": { + "type": "string" }, - "data": { - "$ref": "#/definitions/raisingcanes.PromotionResponse" + "discussions": { + "items": { + "$ref": "#/definitions/producthunt.ProductAlternativeDiscussion" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "raisingcanes.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" + "discussions_has_next_page": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/raisingcanes.PromotionsResponse" + "expandable_html": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "raisingcanes.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", + "hero_products": { + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryHeroProduct" + }, + "type": "array" + }, + "hero_products_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/raisingcanes.StoreResponse" + "id": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "rappler.AuthorArticle": { - "properties": { - "published_at": { + "last_updated_at": { "type": "string" }, - "section": { + "meta_title": { "type": "string" }, - "title": { + "name": { "type": "string" }, - "url": { + "parent": { + "$ref": "#/definitions/producthunt.ProductCategoryParent" + }, + "path": { + "example": "/categories/vibe-coding", "type": "string" - } - }, - "type": "object" - }, - "rappler.AuthorResponse": { - "properties": { - "articles": { + }, + "questions": { "items": { - "$ref": "#/definitions/rappler.AuthorArticle" + "$ref": "#/definitions/producthunt.ProductCategoryQuestion" }, "type": "array" }, - "bio": { - "type": "string" + "raw_relevant_reviews": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "name": { - "type": "string" + "recent_launches_count": { + "type": "integer" + }, + "recent_summary": { + "$ref": "#/definitions/producthunt.ProductCategoryRecentSummary" + }, + "reviews_count": { + "type": "integer" }, "slug": { + "example": "vibe-coding", "type": "string" }, - "social_links": { + "sub_categories": { "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductCategoryRef" }, "type": "array" }, - "url": { - "type": "string" + "targeted_ad": { + "$ref": "#/definitions/producthunt.ProductCategoryAd" } }, "type": "object" }, - "rawstory.AuthorArticle": { + "producthunt.ProductCategoryParent": { "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.", + "id": { "type": "string" }, - "title": { + "name": { "type": "string" }, - "url": { + "path": { "type": "string" + }, + "sub_categories": { + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryRef" + }, + "type": "array" } }, "type": "object" }, - "rawstory.AuthorResponse": { + "producthunt.ProductCategoryProductsPage": { "properties": { - "articles": { + "ai_summary": { + "type": "string" + }, + "category_tags": { "items": { - "$ref": "#/definitions/rawstory.AuthorArticle" + "$ref": "#/definitions/producthunt.ProductAlternativeTag" }, "type": "array" }, - "bio": { + "connection": { + "example": "products", "type": "string" }, - "image_url": { + "description": { + "type": "string" + }, + "end_cursor": { + "type": "string" + }, + "featured_only": { + "type": "boolean" + }, + "has_next_page": { + "type": "boolean" + }, + "has_previous_page": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryListProduct" + }, + "type": "array" + }, + "last_updated_at": { "type": "string" }, "name": { "type": "string" }, + "order": { + "example": "highest_rated", + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 15, + "type": "integer" + }, + "path": { + "example": "/categories/vibe-coding", + "type": "string" + }, "slug": { + "example": "vibe-coding", "type": "string" }, - "social_links": { + "tags": { "items": { "type": "string" }, "type": "array" }, - "url": { - "type": "string" + "total_count": { + "type": "integer" } }, "type": "object" }, - "reachplc.AuthorArticle": { + "producthunt.ProductCategoryQuestion": { "properties": { - "label": { - "type": "string" + "body": { + "$ref": "#/definitions/producthunt.ProductCategoryMarkdown" }, - "label_url": { + "id": { "type": "string" }, - "title": { - "type": "string" + "top_answer": { + "$ref": "#/definitions/producthunt.ProductCategoryAnswer" + } + }, + "type": "object" + }, + "producthunt.ProductCategoryRandomizationStatus": { + "properties": { + "active": { + "type": "boolean" }, - "url": { + "next_transition_at": { "type": "string" + }, + "random_day": { + "type": "boolean" } }, "type": "object" }, - "reachplc.AuthorResponse": { + "producthunt.ProductCategoryRecentSummary": { "properties": { - "articles": { + "products": { "items": { - "$ref": "#/definitions/reachplc.AuthorArticle" + "$ref": "#/definitions/producthunt.ProductCategorySummaryProduct" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { + "summary": { "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "job_title": { + } + }, + "type": "object" + }, + "producthunt.ProductCategoryRef": { + "properties": { + "id": { "type": "string" }, "name": { "type": "string" }, - "page": { - "type": "integer" - }, - "slug": { - "type": "string" - }, - "twitter": { + "path": { "type": "string" }, - "url": { + "slug": { "type": "string" } }, "type": "object" }, - "reddit.Author": { + "producthunt.ProductCategorySource": { "properties": { - "name": { - "example": "reddit_user", + "badges": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { "type": "string" }, - "profile_url": { - "example": "https://www.reddit.com/user/reddit_user/", + "path": { + "type": "string" + }, + "subject_id": { + "type": "string" + }, + "type": { + "type": "string" + }, + "user": { + "$ref": "#/definitions/producthunt.ProductCategoryUser" + }, + "visible_at": { "type": "string" } }, "type": "object" }, - "reddit.Comment": { + "producthunt.ProductCategorySummaryProduct": { "properties": { - "author": { - "$ref": "#/definitions/reddit.Author" + "badges": { + "items": { + "$ref": "#/definitions/producthunt.ProductAlternativeBadge" + }, + "type": "array" }, - "award_count": { + "categories": { + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryRef" + }, + "type": "array" + }, + "followers_count": { "type": "integer" }, - "body": { - "example": "I agree with this post.", + "id": { "type": "string" }, - "created": { - "example": "2024-04-19T00:00:00Z", - "type": "string" + "is_no_longer_online": { + "type": "boolean" }, - "created_utc": { - "example": 1713484800, - "type": "integer" + "is_subscribed": { + "type": "boolean" }, - "depth": { - "example": 1, - "type": "integer" + "is_top_product": { + "type": "boolean" }, - "id": { - "example": "kabc123", + "latest_launch": { + "$ref": "#/definitions/producthunt.ProductCategoryLatestLaunch" + }, + "logo_uuid": { "type": "string" }, "name": { - "example": "t1_kabc123", "type": "string" }, - "parent_id": { - "example": "t3_1abcxyz", + "reviews_count": { + "type": "integer" + }, + "reviews_rating": { + "type": "number" + }, + "slug": { "type": "string" }, - "permalink": { - "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/kabc123/", + "tagline": { "type": "string" }, - "replies": { + "tags": { "items": { - "$ref": "#/definitions/reddit.Comment" + "type": "string" }, "type": "array" - }, - "score": { - "type": "integer" } }, "type": "object" }, - "reddit.CommentsResponse": { + "producthunt.ProductCategoryTopic": { "properties": { - "comments": { - "items": { - "$ref": "#/definitions/reddit.Comment" - }, - "type": "array" - }, - "metrics_source": { - "$ref": "#/definitions/reddit.SourceDetail" + "id": { + "type": "string" }, - "post": { - "$ref": "#/definitions/reddit.Post" + "name": { + "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "slug": { + "type": "string" } }, "type": "object" }, - "reddit.DomainPostsResponse": { + "producthunt.ProductCategoryUser": { "properties": { - "domain": { - "example": "openai.com", + "avatar_url": { "type": "string" }, - "pagination": { - "$ref": "#/definitions/reddit.Pagination" - }, - "posts": { - "items": { - "$ref": "#/definitions/reddit.Post" - }, - "type": "array" - }, - "sort": { - "example": "hot", + "id": { "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "name": { + "type": "string" }, - "time": { - "example": "week", + "username": { "type": "string" } }, "type": "object" }, - "reddit.MultiSubredditPostsResponse": { + "producthunt.ProductCustomersPage": { "properties": { - "pagination": { - "$ref": "#/definitions/reddit.Pagination" + "connection": { + "example": "customers", + "type": "string" }, - "posts": { + "end_cursor": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "has_previous_page": { + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/reddit.Post" + "$ref": "#/definitions/producthunt.ProductCategoryListProduct" }, "type": "array" }, - "sort": { - "example": "hot", + "name": { + "example": "OpenAI", "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "order": { + "example": "customers", + "type": "string" }, - "subreddits": { - "example": [ - "OpenAI", - "MachineLearning" - ], - "items": { - "type": "string" - }, - "type": "array" + "page": { + "example": 1, + "type": "integer" }, - "time": { - "example": "week", + "page_size": { + "example": 10, + "type": "integer" + }, + "pages_count": { + "example": 12, + "type": "integer" + }, + "product_id": { + "example": "594550", "type": "string" - } - }, - "type": "object" - }, - "reddit.Pagination": { - "properties": { - "after": { - "example": "t3_1abcxyz", + }, + "raw_page_info": { + "additionalProperties": {}, + "type": "object" + }, + "slug": { + "example": "openai", "type": "string" }, - "limit": { - "example": 25, + "total_count": { + "example": 120, "type": "integer" } }, "type": "object" }, - "reddit.Post": { + "producthunt.ProductDetailedReview": { "properties": { - "author": { - "$ref": "#/definitions/reddit.Author" + "alternative_products": { + "items": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" + }, + "type": "array" }, - "award_count": { + "alternatives_feedback": { + "type": "string" + }, + "can_destroy": { + "type": "boolean" + }, + "can_moderate": { + "type": "boolean" + }, + "can_reply": { + "type": "boolean" + }, + "can_update": { + "type": "boolean" + }, + "comments_count": { "type": "integer" }, - "comment_count": { + "created_at": { + "type": "string" + }, + "customization_rating": { "type": "integer" }, - "created": { - "example": "2024-04-19T00:00:00Z", + "ease_of_use_rating": { + "type": "integer" + }, + "follow_product": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewFollowProduct" + }, + "from_post": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewPost" + }, + "has_voted": { + "type": "boolean" + }, + "id": { "type": "string" }, - "created_utc": { - "example": 1713484800, + "impression_count": { "type": "integer" }, - "domain": { - "example": "self.OpenAI", + "is_hidden": { + "type": "boolean" + }, + "llm_content_quality_grade": { "type": "string" }, - "estimated_downvotes": { + "llm_content_quality_reason": { + "type": "string" + }, + "negative_feedback": { + "type": "string" + }, + "overall_experience": { + "type": "string" + }, + "overall_rating": { "type": "integer" }, - "estimated_upvotes": { + "positive_feedback": { + "type": "string" + }, + "product": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" + }, + "question_answers": { + "items": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewQuestionAnswer" + }, + "type": "array" + }, + "reliability_rating": { "type": "integer" }, - "flair": { - "example": "Discussion", + "review_type": { "type": "string" }, - "id": { - "example": "1abcxyz", + "selected_cons": { + "items": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" + }, + "type": "array" + }, + "selected_pros": { + "items": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" + }, + "type": "array" + }, + "status": { "type": "string" }, - "is_self": { + "threads_end_cursor": { + "type": "string" + }, + "threads_has_next_page": { "type": "boolean" }, - "is_video": { + "threads_total_count": { + "type": "integer" + }, + "user": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewUser" + }, + "value_for_money_rating": { + "type": "integer" + }, + "votes_count": { + "type": "integer" + } + }, + "type": "object" + }, + "producthunt.ProductDetailedReviewFollowProduct": { + "properties": { + "id": { + "type": "string" + }, + "is_no_longer_online": { "type": "boolean" }, - "locked": { + "is_subscribed": { "type": "boolean" }, + "logo_uuid": { + "type": "string" + }, "name": { - "example": "t3_1abcxyz", "type": "string" }, - "over_18": { - "type": "boolean" + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "producthunt.ProductDetailedReviewPost": { + "properties": { + "badges": { + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + }, + "type": "array" }, - "permalink": { - "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/", + "id": { "type": "string" }, - "score": { + "is_top_launch": { + "type": "boolean" + }, + "latest_score": { "type": "integer" }, - "selftext": { - "example": "Discussion body", + "name": { "type": "string" }, - "source_feed_url": { - "example": "https://www.reddit.com/r/OpenAI/.rss", + "product_id": { "type": "string" }, - "stickied": { + "product_is_top_product": { "type": "boolean" }, - "subreddit": { - "example": "OpenAI", + "product_slug": { "type": "string" }, - "thumbnail": { - "example": "https://b.thumbs.redditmedia.com/example.jpg", + "product_state": { "type": "string" }, - "title": { - "example": "OpenAI discussion thread", + "slug": { "type": "string" }, - "upvote_ratio": { - "type": "number" - }, - "url": { - "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/", + "thumbnail_image_uuid": { "type": "string" - }, - "vote_counts_estimated": { - "type": "boolean" } }, "type": "object" }, - "reddit.PostResponse": { + "producthunt.ProductDetailedReviewProduct": { "properties": { - "metrics_source": { - "$ref": "#/definitions/reddit.SourceDetail" + "id": { + "type": "string" }, - "post": { - "$ref": "#/definitions/reddit.Post" + "is_no_longer_online": { + "type": "boolean" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "logo_uuid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "reddit.SearchResponse": { + "producthunt.ProductDetailedReviewQuestionAnswer": { "properties": { - "pagination": { - "$ref": "#/definitions/reddit.Pagination" - }, - "posts": { - "items": { - "$ref": "#/definitions/reddit.Post" - }, - "type": "array" - }, - "query": { - "example": "openai", + "answer": { "type": "string" }, - "sort": { - "example": "relevance", + "id": { "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" - }, - "subreddit": { - "example": "OpenAI", + "question": { "type": "string" }, - "time": { - "example": "week", + "question_id": { "type": "string" } }, "type": "object" }, - "reddit.SourceDetail": { + "producthunt.ProductDetailedReviewTag": { "properties": { - "type": { - "example": "rss", + "count": { + "type": "integer" + }, + "id": { "type": "string" }, - "url": { - "example": "https://www.reddit.com/r/OpenAI/.rss", + "name": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "reddit.SubredditAboutResponse": { + "producthunt.ProductDetailedReviewUser": { "properties": { - "display_name": { - "example": "r/OpenAI", + "avatar_url": { "type": "string" }, - "feed_url": { - "example": "https://www.reddit.com/r/OpenAI.rss?limit=10", + "headline": { "type": "string" }, - "latest_post_created": { - "example": "2024-04-19T00:00:00Z", + "id": { "type": "string" }, - "latest_post_created_utc": { - "example": 1713484800, - "type": "integer" + "is_account_verified": { + "type": "boolean" }, - "public_url": { - "example": "https://www.reddit.com/r/OpenAI/", + "is_ambassador": { + "type": "boolean" + }, + "is_followed": { + "type": "boolean" + }, + "name": { "type": "string" }, - "recent_post_count": { - "example": 10, + "reviews_count": { "type": "integer" }, - "sample_posts": { - "items": { - "$ref": "#/definitions/reddit.Post" - }, - "type": "array" + "selected_byline_product": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "top_hunter_badge": { + "additionalProperties": {}, + "type": "object" }, - "subreddit": { - "example": "OpenAI", - "type": "string" + "top_launch_badge": { + "additionalProperties": {}, + "type": "object" }, - "title": { - "example": "OpenAI", + "top_product_badge": { + "additionalProperties": {}, + "type": "object" + }, + "username": { "type": "string" } }, "type": "object" }, - "reddit.SubredditCommentsResponse": { + "producthunt.ProductDetailedReviewsPage": { "properties": { - "comments": { + "connection": { + "example": "detailedReviews", + "type": "string" + }, + "detailed_review": { + "additionalProperties": {}, + "type": "object" + }, + "detailed_reviews_count": { + "type": "integer" + }, + "end_cursor": { + "type": "string" + }, + "founder_detailed_reviews_count": { + "type": "integer" + }, + "has_next_page": { + "example": false, + "type": "boolean" + }, + "is_maker": { + "type": "boolean" + }, + "is_trashed": { + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/reddit.Comment" + "$ref": "#/definitions/producthunt.ProductDetailedReview" }, "type": "array" }, - "pagination": { - "$ref": "#/definitions/reddit.Pagination" + "name": { + "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "other_detailed_reviews_count": { + "type": "integer" }, - "subreddit": { - "example": "OpenAI", + "product_id": { + "example": "1191613", + "type": "string" + }, + "raw_page_info": { + "additionalProperties": {}, + "type": "object" + }, + "reviews_count": { + "type": "integer" + }, + "reviews_rating": { + "type": "number" + }, + "reviews_recent_rating": { + "type": "number" + }, + "slug": { + "example": "clico", "type": "string" + }, + "total_count": { + "example": 6, + "type": "integer" } }, "type": "object" }, - "reddit.SubredditPostsResponse": { + "producthunt.ProductLaunchesPage": { "properties": { - "pagination": { - "$ref": "#/definitions/reddit.Pagination" + "connection": { + "example": "posts", + "type": "string" }, - "posts": { + "end_cursor": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/reddit.Post" + "$ref": "#/definitions/producthunt.ProductAboutPost" }, "type": "array" }, - "sort": { - "example": "hot", + "name": { + "example": "OpenAI", "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "order": { + "example": "DATE", + "type": "string" }, - "subreddit": { - "example": "OpenAI", + "product_id": { + "example": "1191613", "type": "string" }, - "time": { - "example": "week", + "raw_page_info": { + "additionalProperties": {}, + "type": "object" + }, + "slug": { + "example": "openai", "type": "string" + }, + "total_count": { + "example": 12, + "type": "integer" } }, "type": "object" }, - "reddit.TrendsResponse": { + "producthunt.ProductMaker": { "properties": { - "pagination": { - "$ref": "#/definitions/reddit.Pagination" + "avatar_url": { + "type": "string" }, - "posts": { + "followers_count": { + "type": "integer" + }, + "headline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_followed": { + "type": "boolean" + }, + "made_posts": { "items": { - "$ref": "#/definitions/reddit.Post" + "$ref": "#/definitions/producthunt.ProductMakerPost" }, "type": "array" }, - "sort": { - "example": "hot", + "name": { "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "username": { + "type": "string" + } + }, + "type": "object" + }, + "producthunt.ProductMakerPost": { + "properties": { + "id": { + "type": "string" }, - "time": { - "example": "day", + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_slug": { + "type": "string" + }, + "product_state": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "thumbnail_image_uuid": { "type": "string" } }, "type": "object" }, - "reddit.UserCommentsResponse": { + "producthunt.ProductMakersPage": { "properties": { - "comments": { + "can_claim": { + "type": "boolean" + }, + "connection": { + "example": "makers", + "type": "string" + }, + "end_cursor": { + "type": "string" + }, + "has_next_page": { + "example": false, + "type": "boolean" + }, + "is_claimed": { + "type": "boolean" + }, + "is_trashed": { + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/reddit.Comment" + "$ref": "#/definitions/producthunt.ProductMaker" }, "type": "array" }, - "pagination": { - "$ref": "#/definitions/reddit.Pagination" + "name": { + "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "product_id": { + "example": "1191613", + "type": "string" }, - "username": { - "example": "reddit", + "raw_page_info": { + "additionalProperties": {}, + "type": "object" + }, + "slug": { + "example": "clico", "type": "string" + }, + "total_count": { + "example": 3, + "type": "integer" + }, + "viewer_pending_team_request": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "reddit.UserPostsResponse": { + "producthunt.SimilarProduct": { "properties": { - "pagination": { - "$ref": "#/definitions/reddit.Pagination" - }, - "posts": { + "categories": { + "example": [ + "[\"Presentation Software\"]" + ], "items": { - "$ref": "#/definitions/reddit.Post" + "type": "string" }, "type": "array" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "id": { + "example": "beautiful-ai", + "type": "string" }, - "username": { - "example": "reddit", + "name": { + "example": "Beautiful.ai", "type": "string" + }, + "rating": { + "example": 3.3, + "type": "number" + }, + "review_count": { + "example": 20, + "type": "integer" } }, "type": "object" }, - "reddit.commentsResponseDoc": { + "producthunt.aboutResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.CommentsResponse" + "$ref": "#/definitions/producthunt.ProductAboutPage" }, "msg": { - "example": "OK", + "example": "Request successful", "type": "string" } }, "type": "object" }, - "reddit.domainPostsResponseDoc": { + "producthunt.alternativesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.DomainPostsResponse" + "$ref": "#/definitions/producthunt.ProductAlternativesPage" }, "msg": { "example": "OK", @@ -129150,14 +133815,14 @@ }, "type": "object" }, - "reddit.leadsResponseDoc": { + "producthunt.categoryProductsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/redditleads.Response" + "$ref": "#/definitions/producthunt.ProductCategoryProductsPage" }, "msg": { "example": "OK", @@ -129166,14 +133831,14 @@ }, "type": "object" }, - "reddit.multiSubredditPostsResponseDoc": { + "producthunt.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.MultiSubredditPostsResponse" + "$ref": "#/definitions/producthunt.ProductCategoryPage" }, "msg": { "example": "OK", @@ -129182,14 +133847,14 @@ }, "type": "object" }, - "reddit.postResponseDoc": { + "producthunt.customersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.PostResponse" + "$ref": "#/definitions/producthunt.ProductCustomersPage" }, "msg": { "example": "OK", @@ -129198,14 +133863,14 @@ }, "type": "object" }, - "reddit.searchResponseDoc": { + "producthunt.launchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.SearchResponse" + "$ref": "#/definitions/producthunt.ProductLaunchesPage" }, "msg": { "example": "OK", @@ -129214,30 +133879,30 @@ }, "type": "object" }, - "reddit.subredditAboutResponseDoc": { + "producthunt.leaderboardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.SubredditAboutResponse" + "$ref": "#/definitions/producthunt.LeaderboardPage" }, "msg": { - "example": "OK", + "example": "Request successful", "type": "string" } }, "type": "object" }, - "reddit.subredditCommentsResponseDoc": { + "producthunt.makersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.SubredditCommentsResponse" + "$ref": "#/definitions/producthunt.ProductMakersPage" }, "msg": { "example": "OK", @@ -129246,14 +133911,14 @@ }, "type": "object" }, - "reddit.subredditPostsResponseDoc": { + "producthunt.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.SubredditPostsResponse" + "$ref": "#/definitions/producthunt.Product" }, "msg": { "example": "OK", @@ -129262,14 +133927,14 @@ }, "type": "object" }, - "reddit.trendsResponseDoc": { + "producthunt.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.TrendsResponse" + "$ref": "#/definitions/producthunt.ProductDetailedReviewsPage" }, "msg": { "example": "OK", @@ -129278,30 +133943,69 @@ }, "type": "object" }, - "reddit.userCommentsResponseDoc": { + "producthunt.searchAggregationsDoc": { "properties": { - "code": { - "example": 200, + "topics": { + "items": { + "$ref": "#/definitions/producthunt.searchTopicDoc" + }, + "type": "array" + } + }, + "type": "object" + }, + "producthunt.searchDataDoc": { + "properties": { + "aggregations": { + "$ref": "#/definitions/producthunt.searchAggregationsDoc" + }, + "edges": { + "items": { + "$ref": "#/definitions/producthunt.searchEdgeDoc" + }, + "type": "array" + }, + "pageInfo": { + "$ref": "#/definitions/producthunt.searchPageInfoDoc" + }, + "pagesCount": { + "example": 394, "type": "integer" + } + }, + "type": "object" + }, + "producthunt.searchEdgeDoc": { + "properties": { + "node": { + "type": "object" + } + }, + "type": "object" + }, + "producthunt.searchPageInfoDoc": { + "properties": { + "hasNextPage": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/reddit.UserCommentsResponse" + "hasPreviousPage": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" + "page": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "reddit.userPostsResponseDoc": { + "producthunt.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.UserPostsResponse" + "$ref": "#/definitions/producthunt.searchDataDoc" }, "msg": { "example": "OK", @@ -129310,1163 +134014,736 @@ }, "type": "object" }, - "redditleads.Lead": { + "producthunt.searchTopicDoc": { "properties": { - "author": { - "example": "someuser", - "type": "string" - }, - "comment_count": { - "example": 12, + "count": { + "example": 11979, "type": "integer" }, - "created": { - "example": "2026-08-01T00:00:00Z", + "topic": { + "properties": { + "id": { + "example": "268", + "type": "string" + }, + "name": { + "example": "Artificial Intelligence", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "propublica.AuthorArticle": { + "properties": { + "published_at": { "type": "string" }, - "permalink": { - "example": "https://www.reddit.com/r/smallbusiness/comments/1abcxyz/", + "title": { "type": "string" }, - "post_score": { - "example": 20, - "type": "integer" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "propublica.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/propublica.AuthorArticle" + }, + "type": "array" }, - "reason": { - "example": "Asking for a CRM and states a monthly budget.", + "bio": { + "items": { + "type": "string" + }, + "type": "array" + }, + "contact_email": { "type": "string" }, - "score": { - "example": 9, + "name": { + "type": "string" + }, + "page": { "type": "integer" }, - "signals": { - "items": { - "$ref": "#/definitions/redditleads.Signal" + "social_links": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "type": "object" }, - "subreddit": { - "example": "smallbusiness", + "url": { "type": "string" + } + }, + "type": "object" + }, + "psa.AutographFactsCategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/psa.AutographFactsCategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "psa.AutographFactsCategory": { + "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" }, - "title": { - "example": "Looking for a CRM for a 3-person team, budget ~$50/mo", + "name": { + "description": "Name is PSA's own display label, e.g. \"Baseball\".", "type": "string" } }, "type": "object" }, - "redditleads.Response": { + "psa.AutographFactsGalleryImage": { "properties": { - "classifier": { - "example": "llm", + "caption": { + "description": "Caption is PSA's own descriptive caption for this exemplar, e.g.\n\"1977 Hank Aaron Signed Letter\".", "type": "string" }, - "degraded": { - "example": false, - "type": "boolean" - }, - "leads": { + "image_url": { + "description": "ImageURL is the full-size image URL.", + "type": "string" + } + }, + "type": "object" + }, + "psa.AutographFactsGalleryResult": { + "properties": { + "images": { "items": { - "$ref": "#/definitions/redditleads.Lead" + "$ref": "#/definitions/psa.AutographFactsGalleryImage" }, "type": "array" }, - "min_score": { - "example": 4, - "type": "integer" - }, - "model": { - "example": "gpt-5.4", + "name": { + "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "query": { - "example": "crm for small teams", + "source_url": { "type": "string" }, - "stats": { - "$ref": "#/definitions/redditleads.Stats" - }, - "subreddit": { - "example": "smallbusiness", + "subject_id": { "type": "string" } }, "type": "object" }, - "redditleads.Signal": { + "psa.AutographFactsSubject": { "properties": { - "id": { - "example": "explicit-ask", + "name": { + "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "label": { - "example": "asking for a tool", - "type": "string" + "subject_id": { + "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nAutographFactsSubject.", + "type": "integer" } }, "type": "object" }, - "redditleads.Stats": { + "psa.AutographFactsSubjectResult": { "properties": { - "classified": { - "example": 12, - "type": "integer" + "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" }, - "prefiltered": { - "example": 88, - "type": "integer" + "name": { + "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", + "type": "string" }, - "returned": { - "example": 9, - "type": "integer" + "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" }, - "scanned": { - "example": 100, - "type": "integer" + "source_url": { + "type": "string" + }, + "subject_id": { + "type": "string" + }, + "subject_profile": { + "description": "SubjectProfile is PSA's own free-text biography for this subject.", + "type": "string" } }, "type": "object" }, - "redfin.EstimateResponse": { + "psa.AutographFactsSubjectsResponse": { "properties": { - "address": { - "type": "string" - }, - "baths": { - "type": "number" + "category_id": { + "type": "integer" }, - "beds": { - "type": "number" + "category_name": { + "type": "string" }, - "city_time_series": { + "subjects": { "items": { - "type": "number" + "$ref": "#/definitions/psa.AutographFactsSubject" }, "type": "array" - }, - "county_time_series": { + } + }, + "type": "object" + }, + "psa.CardFactsCategoriesResponse": { + "properties": { + "categories": { "items": { - "type": "number" + "$ref": "#/definitions/psa.CardFactsCategory" }, "type": "array" + } + }, + "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" }, - "estimate": { - "type": "number" - }, - "estimate_text": { + "name": { + "description": "Name is PSA's own display label, e.g. \"Baseball\".", "type": "string" - }, - "latitude": { - "type": "number" - }, - "listing_price": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "postal_code_time_series": { - "items": { - "type": "number" - }, - "type": "array" - }, - "property_id": { - "example": "1715020", + } + }, + "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" }, - "property_time_series": { + "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": { - "type": "number" + "$ref": "#/definitions/psa.CardFactsChecklistCard" }, "type": "array" }, - "sqft": { - "type": "number" + "has_checklist": { + "type": "boolean" }, - "updated_at": { - "type": "integer" + "set_id": { + "type": "string" }, - "year_built": { + "total_cards": { "type": "integer" } }, "type": "object" }, - "redfin.PropertyItem": { + "psa.CardFactsSet": { "properties": { - "address": { - "type": "string" - }, - "baths": { - "type": "number" - }, - "beds": { - "type": "number" - }, - "city": { - "type": "string" - }, - "days_on_market": { - "type": "integer" - }, - "hoa_monthly": { - "type": "number" - }, - "image": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "listing_id": { - "type": "string" - }, - "longitude": { - "type": "number" - }, - "lot_size": { - "type": "number" - }, - "mls_number": { - "type": "string" - }, - "price": { - "type": "number" - }, - "price_per_sqft": { - "type": "number" - }, - "property_id": { - "example": "1715020", - "type": "string" - }, - "property_type": { - "type": "string" - }, - "sqft": { - "type": "number" - }, - "state": { - "type": "string" - }, - "status": { - "type": "string" - }, - "url": { + "name": { + "description": "Name is the set's display name, e.g. \"2022 Topps\".", "type": "string" }, - "year_built": { + "set_id": { + "description": "SetID is PSA's own numeric set id -- pass as set_id to\nCardFactsChecklist.", "type": "integer" - }, - "zip": { - "type": "string" } }, "type": "object" }, - "redfin.PropertyResponse": { + "psa.CardFactsSetsResponse": { "properties": { - "address": { - "type": "string" - }, - "baths": { - "type": "number" - }, - "beds": { - "type": "number" - }, - "city": { - "type": "string" - }, - "days_on_market": { + "category_id": { "type": "integer" }, - "description": { + "category_name": { "type": "string" }, - "facts": { + "sets": { "items": { - "type": "string" + "$ref": "#/definitions/psa.CardFactsSet" }, "type": "array" - }, - "hoa_monthly": { - "type": "number" - }, - "image": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "listing_id": { - "type": "string" - }, - "longitude": { - "type": "number" - }, - "lot_size": { - "type": "number" - }, - "mls_number": { - "type": "string" - }, - "price": { - "type": "number" - }, - "price_per_sqft": { - "type": "number" - }, - "property_id": { - "example": "1715020", - "type": "string" - }, - "property_type": { - "type": "string" - }, - "sqft": { - "type": "number" - }, - "state": { - "type": "string" - }, - "status": { - "type": "string" - }, - "url": { - "type": "string" - }, - "year_built": { - "type": "integer" - }, - "zip": { - "type": "string" } }, "type": "object" }, - "redfin.RegionTrendsResponse": { + "psa.CertLookupResult": { "properties": { - "avg_days_on_market": { + "brand_title": { + "description": "BrandTitle is the issuing brand/product line, e.g. \"POKEMON SKYRIDGE\".", "type": "string" }, - "avg_down_payment": { + "card_number": { + "description": "CardNumber is the card's number within its set, e.g. \"146\".", "type": "string" }, - "avg_num_offers": { + "category": { + "description": "Category is PSA's own item category, e.g. \"TCG CARDS\".", "type": "string" }, - "median_list_per_sqft": { + "cert_number": { + "description": "CertNumber echoes the requested certification number.", "type": "string" }, - "median_list_price": { - "example": "$1.29M", + "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" }, - "median_sale_per_list": { + "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" }, - "median_sale_per_sqft": { + "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" }, - "median_sale_price": { - "example": "$1.76M", - "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" }, - "num_homes_on_market": { + "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" }, - "num_homes_sold": { + "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" }, - "region_id": { - "example": 17151, - "type": "integer" + "source_url": { + "description": "SourceURL is the PSA cert-verification page this result was parsed\nfrom.", + "type": "string" }, - "region_type": { - "example": 6, - "type": "integer" + "subject": { + "description": "Subject is the card's subject/player name, e.g. \"CHARIZARD-HOLO\".", + "type": "string" }, - "yoy_sale_per_sqft": { + "title": { + "description": "Title is PSA's own item title line, e.g.\n\"2003 POKEMON SKYRIDGE #146 CHARIZARD-HOLO\".", "type": "string" }, - "yoy_sale_price": { + "year": { + "description": "Year is the card/item's issue year, e.g. \"2003\".", "type": "string" } }, "type": "object" }, - "redfin.SearchResponse": { + "psa.PriceGuideCardPrice": { "properties": { - "location": { - "example": "San Francisco, CA", + "card_number": { + "description": "CardNumber is the card's number within the set. Empty for\ngroup-summary rows.", "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "region_id": { - "example": 17151, - "type": "integer" + "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" }, - "region_type": { - "example": 6, + "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" }, - "results": { - "items": { - "$ref": "#/definitions/redfin.PropertyItem" + "prices": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "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" }, - "redfin.SimilarResponse": { + "psa.PriceGuideCategoriesResponse": { "properties": { - "property_id": { - "example": "1715020", - "type": "string" - }, - "results": { + "categories": { "items": { - "$ref": "#/definitions/redfin.PropertyItem" + "$ref": "#/definitions/psa.PriceGuideCategory" }, "type": "array" } }, "type": "object" }, - "referrals.referralAttributionDoc": { + "psa.PriceGuideCategory": { "properties": { - "campaign": { - "example": "spring-launch", - "type": "string" - }, - "code": { - "example": "A1B2C3D4E5F6", - "type": "string" - }, - "created_at": { - "type": "string" - }, - "expires_at": { - "type": "string" - }, "id": { - "example": "abc123", - "type": "string" - }, - "qualified_at": { - "type": "string" - }, - "reward_credits": { - "example": 10000, + "description": "ID is PSA's own numeric category id (SportCategoryID), confirmed live\nagainst every category this family covers.", "type": "integer" }, - "rewarded_at": { - "type": "string" - }, - "role": { - "enum": [ - "referrer", - "referred" - ], - "example": "referrer", + "name": { + "description": "Name is PSA's own display label, e.g. \"Baseball Cards\".", "type": "string" }, - "status": { - "enum": [ - "attributed", - "qualified", - "review_required", - "rewarded", - "expired", - "capped", - "failed", - "rejected" - ], - "example": "rewarded", + "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" }, - "referrals.referralClickRequestDoc": { + "psa.PriceGuideSearchItem": { "properties": { - "click_id": { - "example": "refclk_abc123", - "type": "string" - }, - "code": { - "example": "A1B2C3D4E5F6", - "type": "string" - }, - "landing_path": { - "example": "/pricing", - "type": "string" - }, - "utm_campaign": { - "example": "spring-launch", - "type": "string" - }, - "utm_medium": { - "example": "email", - "type": "string" + "item_id": { + "description": "ItemID is PSA's own numeric item id.", + "type": "integer" }, - "utm_source": { - "example": "newsletter", + "name": { + "description": "Name is the card/item's own descriptive name, e.g.\n\"Ken Griffey, Sr. (R)\".", "type": "string" } }, "type": "object" }, - "referrals.referralClickResponseDoc": { + "psa.PriceGuideSearchResponse": { "properties": { - "click_id": { - "example": "refclk_abc123", - "type": "string" + "page": { + "type": "integer" }, - "code": { - "example": "A1B2C3D4E5F6", + "page_size": { + "type": "integer" + }, + "query": { "type": "string" - } - }, - "type": "object" - }, - "referrals.referralsEventsResponseDoc": { - "properties": { - "items": { + }, + "results": { "items": { - "$ref": "#/definitions/referrals.referralAttributionDoc" + "$ref": "#/definitions/psa.PriceGuideSearchResult" }, "type": "array" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "referrals.referralsMeResponseDoc": { + "psa.PriceGuideSearchResult": { "properties": { - "attribution_window_days": { - "example": 30, - "type": "integer" + "category_name": { + "description": "CategoryName is PSA's own category display name for this set, e.g.\n\"Baseball Card Values\".", + "type": "string" }, - "code": { - "example": "A1B2C3D4E5F6", + "category_path": { + "description": "CategoryPath is the category's URL path segment -- pass as\ncategory_path to psa-price-guide-set.", "type": "string" }, "items": { + "description": "Items are the matching cards/items within this set.", "items": { - "$ref": "#/definitions/referrals.referralAttributionDoc" + "$ref": "#/definitions/psa.PriceGuideSearchItem" }, "type": "array" }, - "monthly_referrer_reward_cap": { - "example": 10, - "type": "integer" - }, - "referred_reward_credits": { - "example": 10000, - "type": "integer" - }, - "reward_credits": { - "example": 10000, + "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" }, - "share_path": { - "example": "/r/A1B2C3D4E5F6", + "set_name": { + "description": "SetName is the set's display name, e.g. \"1974 Topps\".", "type": "string" }, - "stats": { - "$ref": "#/definitions/referrals.referralsStatsDoc" + "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" }, - "referrals.referralsStatsDoc": { + "psa.PriceGuideSetResponse": { "properties": { - "attributed": { - "example": 3, - "type": "integer" - }, - "capped": { - "example": 0, - "type": "integer" - }, - "expired": { - "example": 0, - "type": "integer" + "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" }, - "qualified": { - "example": 1, - "type": "integer" + "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" }, - "rejected": { - "example": 0, - "type": "integer" + "set_id": { + "type": "string" }, - "review_required": { - "example": 0, - "type": "integer" + "source_url": { + "type": "string" }, - "rewarded": { - "example": 1, - "type": "integer" + "title": { + "description": "Title is the set's display name, e.g. \"1974 Topps\".", + "type": "string" } }, "type": "object" }, - "resy.AvailabilityResponse": { + "psa.ProBatFactsCategoriesResponse": { "properties": { - "date": { - "type": "string" - }, - "party_size": { - "type": "integer" - }, - "restaurant_id": { - "type": "string" - }, - "timeslots": { + "categories": { "items": { - "$ref": "#/definitions/resy.Timeslot" + "$ref": "#/definitions/psa.ProBatFactsCategory" }, "type": "array" } }, "type": "object" }, - "resy.CuisinesResponse": { + "psa.ProBatFactsCategory": { "properties": { - "cuisines": { - "items": { - "type": "string" - }, - "type": "array" + "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" }, - "location": { + "name": { + "description": "Name is PSA's own display label, e.g. \"Hall of Fame Players\".", "type": "string" } }, "type": "object" }, - "resy.Event": { + "psa.ProBatFactsGalleryImage": { "properties": { - "city": { - "type": "string" - }, - "currency": { - "example": "USD", - "type": "string" - }, - "date": { - "example": "2026-09-20", - "type": "string" - }, - "description": { - "type": "string" - }, - "end_time": { - "example": "17:00:00", + "caption": { "type": "string" }, - "general_sale_date": { + "image_url": { "type": "string" - }, + } + }, + "type": "object" + }, + "psa.ProBatFactsGalleryResult": { + "properties": { "images": { "items": { - "type": "string" + "$ref": "#/definitions/psa.ProBatFactsGalleryImage" }, "type": "array" }, - "is_presale": { - "type": "boolean" - }, - "max_party_size": { - "example": 8, - "type": "integer" - }, - "min_party_size": { - "example": 1, - "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": { + "source_url": { "type": "string" }, - "restaurant_name": { + "subject_id": { "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.", + } + }, + "type": "object" + }, + "psa.ProBatFactsSubject": { + "properties": { + "name": { + "description": "Name is the player's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "shift_id": { + "subject_id": { + "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nProBatFactsSubject.", "type": "integer" - }, - "time": { - "example": "09:30:00", - "type": "string" - }, - "url_slug": { - "type": "string" - }, - "why_we_like_it": { - "type": "string" } }, "type": "object" }, - "resy.EventDetailResponse": { + "psa.ProBatFactsSubjectResult": { "properties": { - "currency": { - "type": "string" - }, - "date": { - "type": "string" - }, - "description": { - "type": "string" - }, - "end_time": { - "type": "string" - }, - "enhanced_description": { - "type": "string" - }, - "enhanced_need_to_know": { - "type": "string" - }, - "general_sale_date": { + "bat_profile": { + "description": "BatProfile is PSA's own free-text bat-authentication writeup\n(models used, signature placement, etc.) for this player.", "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "is_presale": { - "type": "boolean" - }, - "max_party_size": { - "type": "integer" - }, - "min_party_size": { - "type": "integer" - }, "name": { + "description": "Name is the player's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "need_to_know": { + "player_profile": { + "description": "PlayerProfile is PSA's own free-text player-biography writeup.", "type": "string" }, - "packages": { - "items": { - "$ref": "#/definitions/resy.EventPackage" - }, - "type": "array" - }, - "price_max": { - "type": "number" - }, - "price_min": { - "type": "number" - }, - "shift_id": { - "type": "integer" - }, - "time": { + "source_url": { "type": "string" }, - "url_slug": { + "subject_id": { "type": "string" } }, "type": "object" }, - "resy.EventPackage": { + "psa.ProBatFactsSubjectsResponse": { "properties": { - "max_party_size": { - "example": 8, - "type": "integer" - }, - "min_party_size": { - "example": 1, + "category_id": { "type": "integer" }, - "name": { - "example": "One Ticket for Breakfast & Citi Field Trip", - "type": "string" - }, - "price_total": { - "example": 85, - "type": "number" - }, - "price_total_str": { - "example": "$85.00", + "category_name": { "type": "string" }, - "quantity_remaining": { - "example": 22, - "type": "integer" - }, - "quantity_total": { - "example": 40, - "type": "integer" - }, - "sold_out": { - "type": "boolean" - }, - "timeslots": { - "items": { - "$ref": "#/definitions/resy.Timeslot" - }, - "type": "array" - }, - "whats_included": { + "subjects": { "items": { - "type": "string" + "$ref": "#/definitions/psa.ProBatFactsSubject" }, "type": "array" } }, "type": "object" }, - "resy.EventsResponse": { + "psa.TicketFactsCategoriesResponse": { "properties": { - "events": { + "categories": { "items": { - "$ref": "#/definitions/resy.Event" + "$ref": "#/definitions/psa.TicketFactsCategory" }, "type": "array" - }, - "location": { - "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "resy.Location": { + "psa.TicketFactsCategory": { "properties": { - "code": { - "example": "ny", - "type": "string" - }, - "country": { - "example": "United States", - "type": "string" - }, - "country_code": { - "example": "US", - "type": "string" - }, "id": { - "example": "1", - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "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": { - "example": "New York", - "type": "string" - }, - "time_zone": { - "example": "America/New_York", - "type": "string" - }, - "url_slug": { - "example": "new-york-ny", + "description": "Name is PSA's own display label, e.g. \"Super Bowl\".", "type": "string" } }, "type": "object" }, - "resy.LocationsResponse": { + "psa.TicketFactsGalleryImage": { "properties": { - "locations": { - "items": { - "$ref": "#/definitions/resy.Location" - }, - "type": "array" + "caption": { + "type": "string" }, - "total": { - "type": "integer" + "image_url": { + "type": "string" } }, "type": "object" }, - "resy.RestaurantResponse": { + "psa.TicketFactsGalleryResult": { "properties": { - "about": { - "type": "string" - }, - "address": { - "example": "181 Thompson Street", - "type": "string" - }, - "average_cost_per_person": { - "example": "$150", - "type": "string" - }, - "city": { - "example": "New York", - "type": "string" - }, - "country": { - "type": "string" - }, - "cross_street": { - "type": "string" - }, - "cuisine": { - "example": "Italian", - "type": "string" - }, - "currency_symbol": { - "example": "$", - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "type": "string" - }, "images": { "items": { - "type": "string" + "$ref": "#/definitions/psa.TicketFactsGalleryImage" }, "type": "array" }, - "latitude": { - "type": "number" - }, - "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" - }, - "longitude": { - "type": "number" - }, - "max_party_size": { - "example": 14, - "type": "integer" - }, - "menu_url": { - "type": "string" - }, - "min_party_size": { - "example": 1, - "type": "integer" - }, "name": { "type": "string" }, - "need_to_know": { - "type": "string" - }, - "neighborhood": { - "example": "Greenwich Village", - "type": "string" - }, - "phone_number": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "price_range": { - "example": 4, - "type": "integer" - }, - "rating": { - "example": 4.75, - "type": "number" - }, - "region": { - "example": "NY", - "type": "string" - }, - "review_count": { - "example": 33837, - "type": "integer" - }, - "url_slug": { - "example": "carbone", - "type": "string" - }, - "website": { + "source_url": { "type": "string" }, - "why_we_like_it": { + "subject_id": { "type": "string" } }, "type": "object" }, - "resy.SearchResponse": { + "psa.TicketFactsSubject": { "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).", - "items": { - "type": "string" - }, - "type": "array" - }, - "results": { - "items": { - "$ref": "#/definitions/resy.SearchResult" - }, - "type": "array" - }, - "term": { + "name": { + "description": "Name is the event's display name, e.g. \"Super Bowl I\".", "type": "string" }, - "total": { + "subject_id": { + "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nTicketFactsSubject.", "type": "integer" } }, "type": "object" }, - "resy.SearchResult": { + "psa.TicketFactsSubjectResult": { "properties": { - "city": { - "example": "New York", - "type": "string" - }, - "cuisines": { - "example": [ - "Italian" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "example": "6194", - "type": "string" - }, - "latitude": { - "type": "number" - }, - "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" - }, - "location_url_slug": { - "example": "new-york-ny", - "type": "string" - }, - "longitude": { - "type": "number" - }, "name": { - "example": "Carbone", + "description": "Name is the event's display name, e.g. \"Super Bowl I\".", "type": "string" }, - "neighborhood": { - "example": "Greenwich Village", + "source_url": { "type": "string" }, - "phone_number": { + "subject_id": { "type": "string" }, - "price_range": { - "example": 4, + "ticket_profile": { + "description": "TicketProfile is PSA's own free-text historical writeup for this\nevent.", + "type": "string" + } + }, + "type": "object" + }, + "psa.TicketFactsSubjectsResponse": { + "properties": { + "category_id": { "type": "integer" }, - "rating": { - "example": 4.75, - "type": "number" - }, - "region": { - "example": "NY", + "category_name": { "type": "string" }, - "review_count": { - "example": 33837, - "type": "integer" - }, - "timeslots": { + "subjects": { "items": { - "$ref": "#/definitions/resy.Timeslot" + "$ref": "#/definitions/psa.TicketFactsSubject" }, "type": "array" - }, - "url_slug": { - "example": "carbone", - "type": "string" } }, "type": "object" }, - "resy.Timeslot": { + "psa.autographFactsCategoriesResponseDoc": { "properties": { - "end": { - "example": "2026-09-20 20:30:00", - "type": "string" - }, - "max_party_size": { - "example": 4, - "type": "integer" - }, - "min_party_size": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "seating_type": { - "example": "Dining Room", - "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", - "type": "string" + "data": { + "$ref": "#/definitions/psa.AutographFactsCategoriesResponse" }, - "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.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "resy.availabilityResponseDoc": { + "psa.autographFactsGalleryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.AvailabilityResponse" + "$ref": "#/definitions/psa.AutographFactsGalleryResult" }, "msg": { "example": "OK", @@ -130475,14 +134752,14 @@ }, "type": "object" }, - "resy.cuisinesResponseDoc": { + "psa.autographFactsSubjectResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.CuisinesResponse" + "$ref": "#/definitions/psa.AutographFactsSubjectResult" }, "msg": { "example": "OK", @@ -130491,14 +134768,14 @@ }, "type": "object" }, - "resy.eventDetailResponseDoc": { + "psa.autographFactsSubjectsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.EventDetailResponse" + "$ref": "#/definitions/psa.AutographFactsSubjectsResponse" }, "msg": { "example": "OK", @@ -130507,14 +134784,14 @@ }, "type": "object" }, - "resy.eventsResponseDoc": { + "psa.cardFactsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.EventsResponse" + "$ref": "#/definitions/psa.CardFactsCategoriesResponse" }, "msg": { "example": "OK", @@ -130523,14 +134800,14 @@ }, "type": "object" }, - "resy.locationsResponseDoc": { + "psa.cardFactsChecklistResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.LocationsResponse" + "$ref": "#/definitions/psa.CardFactsChecklistResponse" }, "msg": { "example": "OK", @@ -130539,14 +134816,14 @@ }, "type": "object" }, - "resy.restaurantResponseDoc": { + "psa.cardFactsSetsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.RestaurantResponse" + "$ref": "#/definitions/psa.CardFactsSetsResponse" }, "msg": { "example": "OK", @@ -130555,14 +134832,14 @@ }, "type": "object" }, - "resy.searchResponseDoc": { + "psa.certLookupResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.SearchResponse" + "$ref": "#/definitions/psa.CertLookupResult" }, "msg": { "example": "OK", @@ -130571,245 +134848,94 @@ }, "type": "object" }, - "reuters.ArticleItem": { + "psa.priceGuideCategoriesResponseDoc": { "properties": { - "image_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/psa.PriceGuideCategoriesResponse" }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "reuters.ArticleResponse": { - "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_caption": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reuters.ArticlesResponse": { + "psa.priceGuideSearchResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/reuters.ArticleItem" - }, - "type": "array" - }, - "page": { + "code": { + "example": 200, "type": "integer" - } - }, - "type": "object" - }, - "reuters.AuthorArticle": { - "properties": { - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/psa.PriceGuideSearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reuters.AuthorResponse": { + "psa.priceGuideSetResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/reuters.AuthorArticle" - }, - "type": "array" - }, - "company": { - "type": "string" - }, - "email": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "social_accounts": { - "items": { - "$ref": "#/definitions/reuters.AuthorSocialAccount" - }, - "type": "array" - }, - "total_articles": { + "code": { + "example": 200, "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "reuters.AuthorSocialAccount": { - "properties": { - "platform": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "reuters.NewsItem": { - "properties": { - "image_caption": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/psa.PriceGuideSetResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reuters.NewsResponse": { + "psa.probatFactsCategoriesResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/reuters.NewsItem" - }, - "type": "array" - }, - "page": { + "code": { + "example": 200, "type": "integer" - } - }, - "type": "object" - }, - "reuters.Section": { - "properties": { - "name": { - "type": "string" - }, - "slug": { - "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "reuters.SectionItem": { - "properties": { - "image_caption": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/psa.ProBatFactsCategoriesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reuters.SectionResponse": { + "psa.probatFactsGalleryResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/reuters.SectionItem" - }, - "type": "array" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "section": { + "data": { + "$ref": "#/definitions/psa.ProBatFactsGalleryResult" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reuters.SectionsResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/reuters.Section" - }, - "type": "array" - } - }, - "type": "object" - }, - "reuters.articleResponseDoc": { + "psa.probatFactsSubjectResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.ArticleResponse" + "$ref": "#/definitions/psa.ProBatFactsSubjectResult" }, "msg": { "example": "OK", @@ -130818,14 +134944,14 @@ }, "type": "object" }, - "reuters.articlesResponseDoc": { + "psa.probatFactsSubjectsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.ArticlesResponse" + "$ref": "#/definitions/psa.ProBatFactsSubjectsResponse" }, "msg": { "example": "OK", @@ -130834,14 +134960,14 @@ }, "type": "object" }, - "reuters.authorResponseDoc": { + "psa.ticketFactsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.AuthorResponse" + "$ref": "#/definitions/psa.TicketFactsCategoriesResponse" }, "msg": { "example": "OK", @@ -130850,14 +134976,14 @@ }, "type": "object" }, - "reuters.newsResponseDoc": { + "psa.ticketFactsGalleryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.NewsResponse" + "$ref": "#/definitions/psa.TicketFactsGalleryResult" }, "msg": { "example": "OK", @@ -130866,14 +134992,14 @@ }, "type": "object" }, - "reuters.sectionResponseDoc": { + "psa.ticketFactsSubjectResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.SectionResponse" + "$ref": "#/definitions/psa.TicketFactsSubjectResult" }, "msg": { "example": "OK", @@ -130882,14 +135008,14 @@ }, "type": "object" }, - "reuters.sectionsResponseDoc": { + "psa.ticketFactsSubjectsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.SectionsResponse" + "$ref": "#/definitions/psa.TicketFactsSubjectsResponse" }, "msg": { "example": "OK", @@ -130898,5467 +135024,1896 @@ }, "type": "object" }, - "rightmove.AgentAffiliation": { + "publicnews.abcNewsAuthorResponseDoc": { "properties": { - "id": { - "example": 19, - "type": "integer" - }, - "image_url": { - "type": "string" - }, - "name": { - "example": "Property Redress Scheme", - "type": "string" + "data": { + "$ref": "#/definitions/abcnews.AuthorResponse" } }, "type": "object" }, - "rightmove.AgentBranchResponse": { + "publicnews.abcauAuthorResponseDoc": { "properties": { - "address": { - "example": "18 Pilgrimage Street,\nLondon Bridge,\nLondon,\nSE1 4LL", - "type": "string" - }, - "branch_name": { - "example": "London", - "type": "string" - }, - "brand_name": { - "example": "1 Ability Estate Agents", - "type": "string" - }, - "build_to_rent": { - "type": "boolean" - }, - "commercial": { - "type": "boolean" - }, - "company_id": { - "example": "4294", - "type": "string" - }, - "company_name": { - "example": "1st Avenue", - "type": "string" - }, - "description": { - "type": "string" - }, - "development": { - "type": "boolean" - }, - "display_name": { - "example": "1 Ability Estate Agents, London", - "type": "string" - }, - "id": { - "example": "181787", - "type": "string" - }, - "industry_affiliations": { - "items": { - "$ref": "#/definitions/rightmove.AgentAffiliation" - }, - "type": "array" - }, - "latitude": { - "type": "number" - }, - "lettings": { - "type": "boolean" - }, - "lettings_properties": { - "$ref": "#/definitions/rightmove.AgentPropertyList" - }, - "lettings_telephone": { - "example": "020 3910 6304", - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "longitude": { - "type": "number" - }, - "main_telephone": { - "example": "020 8293 8600", - "type": "string" - }, - "overseas": { - "type": "boolean" - }, - "postcode": { - "example": "SE1 4LL", - "type": "string" - }, - "sales": { - "type": "boolean" - }, - "sales_properties": { - "$ref": "#/definitions/rightmove.AgentPropertyList" - }, - "sales_telephone": { - "example": "020 3909 6734", - "type": "string" + "data": { + "$ref": "#/definitions/abcau.AuthorResponse" } }, "type": "object" }, - "rightmove.AgentItem": { + "publicnews.androidpoliceAuthorResponseDoc": { "properties": { - "address": { - "example": "18 Pilgrimage Street,\nLondon Bridge,\nLondon,\nSE1 4LL", - "type": "string" - }, - "brand_name": { - "example": "1 Ability Estate Agents", - "type": "string" - }, - "description": { - "type": "string" - }, - "display_name": { - "example": "1 Ability Estate Agents, London", - "type": "string" - }, - "id": { - "example": "181787", - "type": "string" - }, - "lettings": { - "type": "boolean" - }, - "logo_url": { - "example": "https://media.rightmove.co.uk/partner-logo/19103090-LOGO-1765975389.png", - "type": "string" - }, - "sales": { - "type": "boolean" - }, - "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" + "data": { + "$ref": "#/definitions/androidpolice.AuthorResponse" } }, "type": "object" }, - "rightmove.AgentPropertyItem": { + "publicnews.apNewsAuthorResponseDoc": { "properties": { - "address": { - "example": "West Parkside, London, SE10", - "type": "string" - }, - "bathrooms": { - "example": 2, - "type": "integer" - }, - "bedrooms": { - "example": 2, - "type": "integer" - }, - "channel": { - "example": "RES_LET", - "type": "string" - }, - "id": { - "example": "92527095", - "type": "string" - }, - "image": { - "type": "string" - }, - "price": { - "example": 634, - "type": "integer" - }, - "price_frequency": { - "example": "weekly", - "type": "string" - }, - "price_text": { - "example": "£634 pw", - "type": "string" - }, - "property_type": { - "example": "Flat", - "type": "string" - }, - "status": { - "example": "available", - "type": "string" - }, - "url": { - "example": "https://www.rightmove.co.uk/properties/92537946#/?channel=RES_LET", - "type": "string" + "data": { + "$ref": "#/definitions/apnews.AuthorResponse" } }, "type": "object" }, - "rightmove.AgentPropertyList": { + "publicnews.arstechnicaAuthorResponseDoc": { "properties": { - "properties": { - "items": { - "$ref": "#/definitions/rightmove.AgentPropertyItem" - }, - "type": "array" - }, - "total": { - "example": 37, - "type": "integer" + "data": { + "$ref": "#/definitions/arstechnica.AuthorResponse" } }, "type": "object" }, - "rightmove.AgentTelephone": { + "publicnews.articleResponseDoc": { "properties": { - "direct_number": { - "example": "020 3903 2323", - "type": "string" - }, - "number": { - "example": "020 3910 6304", - "type": "string" - }, - "type": { - "example": "LETTING", - "type": "string" + "data": { + "$ref": "#/definitions/newsplatform.ArticleResponse" } }, "type": "object" }, - "rightmove.AgentsResponse": { + "publicnews.benzingaSearchResponseDoc": { "properties": { - "location": { - "example": "REGION^87490", - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "results": { - "items": { - "$ref": "#/definitions/rightmove.AgentItem" + "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" - }, - "total": { - "example": 3614, - "type": "integer" + "type": "object" } }, "type": "object" }, - "rightmove.AutocompleteItem": { + "publicnews.billboardAuthorResponseDoc": { "properties": { - "entity_type": { - "example": "REGION", - "type": "string" - }, - "full_name": { - "example": "London, Greater London, England", - "type": "string" - }, - "id": { - "example": "REGION^12345", - "type": "string" - }, - "name": { - "example": "London, Greater London", - "type": "string" + "data": { + "$ref": "#/definitions/billboard.AuthorResponse" } }, "type": "object" }, - "rightmove.AutocompleteResponse": { + "publicnews.bleacherreportAuthorResponseDoc": { "properties": { - "query": { - "example": "London", - "type": "string" - }, - "results": { - "items": { - "$ref": "#/definitions/rightmove.AutocompleteItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/bleacherreport.AuthorResponse" } }, "type": "object" }, - "rightmove.PropertyCustomerReviews": { + "publicnews.breitbartAuthorResponseDoc": { "properties": { - "average_score": { - "example": 4.5, - "type": "number" - }, - "count": { - "example": 5, - "type": "integer" - }, - "latest_review": { - "example": "Great property and excellent service from the agent.", - "type": "string" + "data": { + "$ref": "#/definitions/breitbart.AuthorResponse" } }, "type": "object" }, - "rightmove.PropertyItem": { + "publicnews.brisbanetimesArticleResponseDoc": { "properties": { - "added_or_reduced": { - "example": "Price reduced", - "type": "string" - }, - "address": { - "example": "123 Example Street, London", - "type": "string" - }, - "bathrooms": { - "example": 2, - "type": "integer" - }, - "bedrooms": { - "example": 3, - "type": "integer" - }, - "currency": { - "example": "GBP", - "type": "string" - }, - "days_on_market": { - "example": 14, - "type": "integer" - }, - "development": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "12345678", - "type": "string" - }, - "image": { - "example": "https://media.rightmove.co.uk/property-photo/.../12345678.jpg", - "type": "string" - }, - "price": { - "example": 500000, - "type": "integer" - }, - "price_frequency": { - "example": "monthly", - "type": "string" - }, - "price_text": { - "example": "£500,000", - "type": "string" - }, - "property_type": { - "example": "Semi-detached", - "type": "string" - }, - "receptions": { - "example": 2, - "type": "integer" - }, - "size": { - "example": "538 sq. ft.", - "type": "string" - }, - "status": { - "example": "For Sale", - "type": "string" - }, - "tenure": { - "example": "LEASEHOLD", - "type": "string" - }, - "title": { - "example": "3 bedroom semi-detached house for sale", - "type": "string" - }, - "url": { - "example": "https://www.rightmove.co.uk/properties/12345678", - "type": "string" + "data": { + "$ref": "#/definitions/brisbanetimes.ArticleResponse" } }, "type": "object" }, - "rightmove.PropertyResponse": { + "publicnews.brisbanetimesAuthorResponseDoc": { "properties": { - "added_or_reduced": { - "example": "Price reduced", - "type": "string" - }, - "address": { - "example": "123 Example Street, London", - "type": "string" - }, - "available_from": { - "type": "string" - }, - "bathrooms": { - "example": 2, - "type": "integer" - }, - "bedrooms": { - "example": 3, - "type": "integer" - }, - "council_tax_band": { - "type": "string" - }, - "currency": { - "example": "GBP", - "type": "string" - }, - "customer_reviews": { - "$ref": "#/definitions/rightmove.PropertyCustomerReviews" - }, - "days_on_market": { - "example": 14, - "type": "integer" - }, - "description": { - "type": "string" - }, - "development": { - "example": true, - "type": "boolean" - }, - "epc_rating": { - "type": "string" - }, - "features": { - "items": { - "type": "string" - }, - "type": "array" - }, - "floor_plan": { - "type": "string" - }, - "id": { - "example": "12345678", - "type": "string" - }, - "image": { - "example": "https://media.rightmove.co.uk/property-photo/.../12345678.jpg", - "type": "string" - }, - "nearby_schools": { - "items": { - "$ref": "#/definitions/rightmove.PropertySchool" - }, - "type": "array" - }, - "price": { - "example": 500000, - "type": "integer" - }, - "price_frequency": { - "example": "monthly", - "type": "string" - }, - "price_text": { - "example": "£500,000", - "type": "string" - }, - "property_type": { - "example": "Semi-detached", - "type": "string" - }, - "receptions": { - "example": 2, - "type": "integer" - }, - "size": { - "example": "538 sq. ft.", - "type": "string" - }, - "status": { - "example": "For Sale", - "type": "string" - }, - "tenure": { - "type": "string" - }, - "title": { - "example": "3 bedroom semi-detached house for sale", - "type": "string" - }, - "url": { - "example": "https://www.rightmove.co.uk/properties/12345678", - "type": "string" + "data": { + "$ref": "#/definitions/brisbanetimes.AuthorResponse" } }, "type": "object" }, - "rightmove.PropertySchool": { + "publicnews.businessInsiderAuthorResponseDoc": { "properties": { - "distance": { - "example": "0.2 miles", - "type": "string" - }, - "name": { - "example": "St. Mary's Primary School", - "type": "string" - }, - "rating": { - "example": "Outstanding", - "type": "string" - }, - "type": { - "example": "Primary", - "type": "string" + "data": { + "$ref": "#/definitions/businessinsider.AuthorResponse" } }, "type": "object" }, - "rightmove.SearchResponse": { + "publicnews.businessstandardAuthorResponseDoc": { "properties": { - "location": { - "example": "REGION^87490", - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "results": { - "items": { - "$ref": "#/definitions/rightmove.PropertyItem" - }, - "type": "array" - }, - "total": { - "example": 1245, - "type": "integer" + "data": { + "$ref": "#/definitions/businessstandard.AuthorResponse" } }, "type": "object" }, - "rnz.AuthorArticle": { + "publicnews.cbcAuthorResponseDoc": { "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" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/cbc.AuthorResponse" } }, "type": "object" }, - "rnz.AuthorResponse": { + "publicnews.cbrAuthorResponseDoc": { "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.", - "type": "integer" - }, - "articles": { - "items": { - "$ref": "#/definitions/rnz.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "twitter": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/cbr.AuthorResponse" } }, "type": "object" }, - "roblox.Badge": { + "publicnews.cbsNewsAuthorResponseDoc": { "properties": { - "awarding_root_place_id": { - "type": "integer" - }, - "awarding_universe": { - "type": "string" - }, - "awarding_universe_id": { - "type": "integer" - }, - "awards_all_time": { - "type": "integer" - }, - "awards_past_day": { - "type": "integer" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "icon_url": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/cbsnews.AuthorResponse" } }, "type": "object" }, - "roblox.BadgesResponse": { + "publicnews.cbsSportsAuthorResponseDoc": { "properties": { - "badges": { - "items": { - "$ref": "#/definitions/roblox.Badge" - }, - "type": "array" - }, - "next_cursor": { - "type": "string" - }, - "previous_cursor": { - "type": "string" - }, - "universe_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/cbssports.AuthorResponse" } }, "type": "object" }, - "roblox.Creator": { + "publicnews.chicagoTribuneAuthorResponseDoc": { "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" + "data": { + "$ref": "#/definitions/chicagotribune.AuthorResponse" } }, "type": "object" }, - "roblox.Experience": { + "publicnews.cnaAuthorResponseDoc": { "properties": { - "creator_id": { - "type": "integer" - }, - "creator_name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "down_votes": { - "type": "integer" - }, - "genre": { - "type": "string" - }, - "is_sponsored": { - "type": "boolean" - }, - "maturity": { - "type": "string" - }, - "maturity_label": { - "type": "string" - }, - "minimum_age": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "player_count": { - "type": "integer" - }, - "root_place_id": { - "type": "integer" - }, - "universe_id": { - "type": "integer" - }, - "up_votes": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "verified_creator": { - "type": "boolean" + "data": { + "$ref": "#/definitions/cna.AuthorResponse" } }, "type": "object" }, - "roblox.Game": { + "publicnews.cnetAuthorResponseDoc": { "properties": { - "access_price": { - "type": "integer" - }, - "avatar_type": { - "type": "string" - }, - "content_restricted": { - "type": "boolean" - }, - "created_at": { - "type": "string" - }, - "creator": { - "$ref": "#/definitions/roblox.Creator" - }, - "description": { - "type": "string" - }, - "down_votes": { - "type": "integer" - }, - "favorites": { - "type": "integer" - }, - "genre": { - "type": "string" - }, - "genre_l1": { - "type": "string" - }, - "genre_l2": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "max_players": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "playing": { - "type": "integer" - }, - "root_place_id": { - "type": "integer" - }, - "universe_id": { - "type": "integer" - }, - "up_votes": { - "type": "integer" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" - }, - "visits": { - "type": "integer" + "data": { + "$ref": "#/definitions/cnet.AuthorResponse" } }, "type": "object" }, - "roblox.GameResponse": { + "publicnews.colliderAuthorResponseDoc": { "properties": { - "game": { - "$ref": "#/definitions/roblox.Game" + "data": { + "$ref": "#/definitions/collider.AuthorResponse" } }, "type": "object" }, - "roblox.RankingsResponse": { + "publicnews.ctvnewsAuthorResponseDoc": { "properties": { - "display_name": { - "type": "string" - }, - "experiences": { - "items": { - "$ref": "#/definitions/roblox.Experience" - }, - "type": "array" - }, - "sort_id": { - "type": "string" + "data": { + "$ref": "#/definitions/ctvnews.AuthorResponse" } }, "type": "object" }, - "roblox.SearchResponse": { + "publicnews.dailyBeastAuthorResponseDoc": { "properties": { - "experiences": { - "items": { - "$ref": "#/definitions/roblox.Experience" - }, - "type": "array" - }, - "next_page": { - "type": "string" - }, - "query": { - "type": "string" + "data": { + "$ref": "#/definitions/thedailybeast.AuthorResponse" } }, "type": "object" }, - "roblox.badgesResponseDoc": { + "publicnews.dailyExpressAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/roblox.BadgesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/dailyexpress.AuthorResponse" } }, "type": "object" }, - "roblox.gameResponseDoc": { + "publicnews.dailyMailAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/roblox.GameResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/dailymail.AuthorResponse" } }, "type": "object" }, - "roblox.rankingsResponseDoc": { + "publicnews.dailyRecordAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/roblox.RankingsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/dailyrecord.AuthorResponse" } }, "type": "object" }, - "roblox.searchResponseDoc": { + "publicnews.dailyWireAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/roblox.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/dailywire.AuthorResponse" } }, "type": "object" }, - "rollingstone.AuthorResponse": { + "publicnews.dailycallerAuthorResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/rollingstone.HeadlineItem" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/dailycaller.AuthorResponse" } }, "type": "object" }, - "rollingstone.HeadlineItem": { + "publicnews.dawnAuthorResponseDoc": { "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/dawn.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.BrowseFilter": { + "publicnews.deadlineAuthorResponseDoc": { "properties": { - "key": { - "example": "genres", - "type": "string" - }, - "label": { - "example": "Genre", - "type": "string" - }, - "values": { - "items": { - "$ref": "#/definitions/rottentomatoes.BrowseFilterValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/deadline.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.BrowseFilterValue": { + "publicnews.denverPostAuthorResponseDoc": { "properties": { - "label": { - "example": "Action", - "type": "string" - }, - "value": { - "example": "action", - "type": "string" + "data": { + "$ref": "#/definitions/denverpost.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.BrowseFiltersResponse": { + "publicnews.dwAuthorResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "filters": { - "items": { - "$ref": "#/definitions/rottentomatoes.BrowseFilter" - }, - "type": "array" - }, - "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" + "data": { + "$ref": "#/definitions/dw.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.BrowseItem": { + "publicnews.economicTimesAuthorResponseDoc": { "properties": { - "critics_review_count": { - "example": 136, - "type": "integer" - }, - "date_created": { - "example": "2026", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "media_type": { - "example": "Movie", - "type": "string" - }, - "path": { - "example": "/m/wildwood_nj", - "type": "string" - }, - "position": { - "example": 1, - "type": "integer" - }, - "title": { - "example": "Wildwood, NJ", - "type": "string" - }, - "tomatometer_score": { - "example": 87, - "type": "integer" - }, - "url": { - "example": "https://www.rottentomatoes.com/m/wildwood_nj", - "type": "string" - }, - "video": { - "$ref": "#/definitions/rottentomatoes.EpisodeVideo" + "data": { + "$ref": "#/definitions/economictimes.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.BrowseResponse": { + "publicnews.engadgetAuthorResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/rottentomatoes.BrowseItem" - }, - "type": "array" - }, - "limit": { - "example": 10, - "type": "integer" - }, - "list": { - "example": "movies_in_theaters", - "type": "string" - }, - "page_info": { - "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "sort": { - "example": "popular", - "type": "string" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/browse/movies_in_theaters/sort:popular", - "type": "string" - }, - "title": { - "example": "Movies in Theaters (2026)", - "type": "string" + "data": { + "$ref": "#/definitions/engadget.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.CriticAuthor": { + "publicnews.eonlineAuthorResponseDoc": { "properties": { - "badges": { - "example": [ - "Individually approved" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "example": "Mae Abdulbaki", - "type": "string" - }, - "path": { - "example": "/critics/mae-abdulbaki", - "type": "string" - }, - "publication_label": { - "example": "when published by", - "type": "string" - }, - "publications": { - "items": { - "$ref": "#/definitions/rottentomatoes.CriticAuthorPublication" - }, - "type": "array" + "data": { + "$ref": "#/definitions/eonline.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.CriticAuthorPublication": { + "publicnews.euronewsAuthorResponseDoc": { "properties": { - "editorial_url": { - "example": "https://example.com/reviews", - "type": "string" - }, - "id": { - "example": "2784", - "type": "string" - }, - "name": { - "example": "Firstpost", - "type": "string" - }, - "path": { - "example": "/critics/source/2784", - "type": "string" + "data": { + "$ref": "#/definitions/euronews.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.CriticsAuthorsResponse": { + "publicnews.ewAuthorResponseDoc": { "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", - "type": "string" - }, - "has_next_page": { - "example": true, - "type": "boolean" - }, - "has_previous_page": { - "example": false, - "type": "boolean" - }, - "inactive": { - "example": false, - "type": "boolean" - }, - "letter": { - "example": "a", - "type": "string" - }, - "limit": { - "example": 100, - "type": "integer" - }, - "next_cursor": { - "example": "MQ==", - "type": "string" - }, - "previous_cursor": { - "example": "MA==", - "type": "string" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "search": { - "example": "", - "type": "string" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/napi/critics/authors?isInactiveCriticsList=false&letter=a&pageCount=100&userToken=null", - "type": "string" + "data": { + "$ref": "#/definitions/ew.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.EditorialContentItem": { + "publicnews.expresstribuneAuthorResponseDoc": { "properties": { - "author_id": { - "example": 944, - "type": "integer" - }, - "excerpt": { - "example": "A ranked guide to essential 21st century biopics.", - "type": "string" - }, - "featured_media_id": { - "example": 297622, - "type": "integer" - }, - "id": { - "example": 297618, - "type": "integer" - }, - "modified_at": { - "example": "2026-09-25T09:04:07", - "type": "string" - }, - "published_at": { - "example": "2026-09-25T09:04:07", - "type": "string" - }, - "term_ids": { - "example": [ - 121877, - 121876 - ], - "items": { - "type": "integer" - }, - "type": "array" - }, - "title": { - "example": "Essential 21st Century Biopics Ranked", - "type": "string" - }, - "type": { - "enum": [ - "article", - "guide", - "gallery", - "hub-subpage", - "non-rt-publication", - "rt-hub", - "how-to", - "otg-article", - "prev", - "rt_poll", - "page" - ], - "example": "guide", - "type": "string" - }, - "url": { - "example": "https://editorial.rottentomatoes.com/guide/essential-21st-century-biopic-movies/", - "type": "string" + "data": { + "$ref": "#/definitions/expresstribune.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.EditorialContentResponse": { + "publicnews.fastCompanyAuthorResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "has_next_page": { - "example": true, - "type": "boolean" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "operator": { - "enum": [ - "AND", - "OR" - ], - "example": "OR", - "type": "string" - }, - "page": { - "example": 1, - "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" - }, - "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": 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" + "data": { + "$ref": "#/definitions/fastcompany.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.EditorialContentType": { + "publicnews.fortuneAuthorResponseDoc": { "properties": { - "label": { - "example": "Guides", - "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" + "data": { + "$ref": "#/definitions/fortune.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.EditorialContentTypesResponse": { + "publicnews.fortuneCompaniesResponseDoc": { "properties": { - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "source_url": { - "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/types", - "type": "string" - }, - "types": { - "items": { - "$ref": "#/definitions/rottentomatoes.EditorialContentType" - }, - "type": "array" - }, - "verified_at": { - "example": "2026-09-26", - "type": "string" + "data": { + "$ref": "#/definitions/fortune.CompaniesResponse" } }, "type": "object" }, - "rottentomatoes.EditorialDetailLink": { + "publicnews.fortuneCompanyFiltersResponseDoc": { "properties": { - "text": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/fortune.CompanyFiltersResponse" } }, "type": "object" }, - "rottentomatoes.EditorialDetailResponse": { + "publicnews.fortuneCompanyResponseDoc": { "properties": { - "body_html": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "headings": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "links": { - "items": { - "$ref": "#/definitions/rottentomatoes.EditorialDetailLink" - }, - "type": "array" - }, - "modified_at": { - "type": "string" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "path": { - "example": "/guide/all-brad-pitt-movies-ranked-by-tomatometer/", - "type": "string" - }, - "public_page_derived": { - "type": "boolean" - }, - "published_at": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "subtitle": { - "type": "string" - }, - "title": { - "example": "Brad Pitt Movies Ranked by Tomatometer", - "type": "string" - }, - "type": { - "enum": [ - "article", - "gallery", - "guide", - "otg-article", - "prev" - ], - "example": "guide", - "type": "string" - }, - "video_urls": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/fortune.CompanyResponse" } }, "type": "object" }, - "rottentomatoes.EditorialSearchResponse": { + "publicnews.fortuneRankingFiltersResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "has_next_page": { - "example": true, - "type": "boolean" - }, - "limit": { - "example": 10, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "query": { - "example": "horror", - "type": "string" - }, - "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" + "data": { + "$ref": "#/definitions/fortune.RankingFiltersResponse" } }, "type": "object" }, - "rottentomatoes.EditorialSearchResult": { + "publicnews.fortuneRankingListsResponseDoc": { "properties": { - "id": { - "example": 282182, - "type": "integer" - }, - "subtype": { - "example": "guide", - "type": "string" - }, - "title": { - "example": "Best New Horror Movies of 2026", - "type": "string" - }, - "type": { - "example": "post", - "type": "string" - }, - "url": { - "example": "https://editorial.rottentomatoes.com/guide/best-new-horror-movies-2026/", - "type": "string" + "data": { + "$ref": "#/definitions/fortune.RankingListsResponse" } }, "type": "object" }, - "rottentomatoes.EditorialSectionItem": { + "publicnews.fortuneRankingResponseDoc": { "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", - "type": "string" - }, - "title": { - "example": "Robert Pattinson Movies Ranked by Tomatometer", - "type": "string" - }, - "url": { - "example": "https://editorial.rottentomatoes.com/guide/robert-pattinson/", - "type": "string" + "data": { + "$ref": "#/definitions/fortune.RankingResponse" } }, "type": "object" }, - "rottentomatoes.EditorialSectionResponse": { + "publicnews.fortuneRankingYearsResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "has_next_page": { - "example": true, - "type": "boolean" - }, - "page": { - "example": 1, - "type": "integer" - }, - "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" - }, - "title": { - "example": "Countdown", - "type": "string" - }, - "total_pages": { - "example": 40, - "type": "integer" + "data": { + "$ref": "#/definitions/fortune.RankingYearsResponse" } }, "type": "object" }, - "rottentomatoes.EditorialTaxonomiesResponse": { + "publicnews.france24AuthorResponseDoc": { "properties": { - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "source_url": { - "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/taxonomies", - "type": "string" - }, - "taxonomies": { - "items": { - "$ref": "#/definitions/rottentomatoes.EditorialTaxonomy" - }, - "type": "array" - }, - "verified_at": { - "example": "2026-09-26", - "type": "string" + "data": { + "$ref": "#/definitions/france24.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.EditorialTaxonomy": { + "publicnews.gamerantAuthorResponseDoc": { "properties": { - "hierarchical": { - "example": false, - "type": "boolean" - }, - "label": { - "example": "Related Movie Ids", - "type": "string" - }, - "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" + "data": { + "$ref": "#/definitions/gamerant.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.EditorialTerm": { + "publicnews.gamesradarAuthorResponseDoc": { "properties": { - "count": { - "example": 3072, - "type": "integer" - }, - "description": { - "type": "string" - }, - "id": { - "example": 10732, - "type": "integer" - }, - "link": { - "example": "https://editorial.rottentomatoes.com/author/cap-rt-staff/", - "type": "string" - }, - "name": { - "example": "RT Staff", - "type": "string" - }, - "parent": { - "example": 0, - "type": "integer" - }, - "slug": { - "example": "cap-rt-staff", - "type": "string" + "data": { + "$ref": "#/definitions/gamesradar.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.EditorialTermsResponse": { + "publicnews.gbnewsAuthorResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10: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": { - "items": { - "$ref": "#/definitions/rottentomatoes.EditorialTerm" - }, - "type": "array" - }, - "search": { - "example": "RT Staff", - "type": "string" - }, - "source_url": { - "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/coauthors?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": "coauthors", - "type": "string" - }, - "total": { - "example": 927, - "type": "integer" - }, - "total_pages": { - "example": 47, - "type": "integer" + "data": { + "$ref": "#/definitions/gbnews.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.EpisodeResponse": { + "publicnews.ghanawebArchiveMonthsResponseDoc": { "properties": { - "air_date": { - "example": "2008-01-20", - "type": "string" - }, - "audience_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "cast": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "critics_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "description": { - "type": "string" - }, - "directors": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "ems_id": { - "example": "ccda9549-4dcb-3147-9a2b-1106dcf852f7", - "type": "string" - }, - "episode_number": { - "example": 1, - "type": "integer" - }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "genres": { - "example": [ - "Crime" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "lifecycle": { - "example": "NOT_AIRING", - "type": "string" - }, - "media_type": { - "example": "TvEpisode", - "type": "string" - }, - "parent_season": { - "$ref": "#/definitions/rottentomatoes.SeasonSummary" - }, - "parent_series": { - "$ref": "#/definitions/rottentomatoes.SeriesSummary" - }, - "path": { - "example": "/tv/breaking_bad/s01/e01", - "type": "string" - }, - "producers": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "season_number": { - "example": 1, - "type": "integer" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", - "type": "string" - }, - "title": { - "example": "Pilot", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", - "type": "string" - }, - "video": { - "$ref": "#/definitions/rottentomatoes.EpisodeVideo" + "data": { + "$ref": "#/definitions/ghanaweb.ArchiveMonthsResponse" } }, "type": "object" }, - "rottentomatoes.EpisodeVideo": { + "publicnews.ghanawebArchiveResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "duration": { - "example": "2:32", - "type": "string" - }, - "thumbnail": { - "type": "string" - }, - "title": { - "example": "Breaking Bad: Official Clip - Walter Wants to Cook", - "type": "string" - }, - "upload_date": { - "example": "2024-07-11T19:23:03", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01/videos/JR3ymbH1dpLb", - "type": "string" + "data": { + "$ref": "#/definitions/ghanaweb.ArchiveResponse" } }, "type": "object" }, - "rottentomatoes.MovieResponse": { + "publicnews.ghanawebVideoResponseDoc": { "properties": { - "audience_reviews": { - "items": { - "$ref": "#/definitions/rottentomatoes.Review" - }, - "type": "array" - }, - "audience_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "cast": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "content_rating": { - "example": "PG-13", - "type": "string" - }, - "critics_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "description": { - "type": "string" - }, - "directors": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "ems_id": { - "example": "afbf1c81-1bfe-3996-9cbc-2e1be23d1f61", - "type": "string" - }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "genres": { - "example": [ - "Sci-Fi" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "media_type": { - "example": "Movie", - "type": "string" - }, - "path": { - "example": "/m/inception", - "type": "string" - }, - "producers": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "release_date": { - "example": "2010-07-16", - "type": "string" - }, - "reviews_url": { - "example": "https://www.rottentomatoes.com/m/inception/reviews/all-audience", - "type": "string" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/m/inception", - "type": "string" - }, - "title": { - "example": "Inception", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/m/inception", - "type": "string" + "data": { + "$ref": "#/definitions/ghanaweb.VideoResponse" } }, "type": "object" }, - "rottentomatoes.MovieReview": { + "publicnews.ghanawebVideoSectionsResponseDoc": { "properties": { - "created_at": { - "example": "2024-04-11T23:40:16.000Z", - "type": "string" - }, - "critic_url": { - "example": "https://www.rottentomatoes.com/critic/danilo-castro", - "type": "string" - }, - "display_name": { - "example": "Danilo Castro", - "type": "string" - }, - "has_profanity": { - "example": false, - "type": "boolean" - }, - "has_spoilers": { - "example": false, - "type": "boolean" - }, - "id": { - "example": "102903742", - "type": "string" - }, - "original_score": { - "example": "9/10", - "type": "string" - }, - "publication": { - "example": "Next Best Picture", - "type": "string" - }, - "publication_approved": { - "example": true, - "type": "boolean" - }, - "publication_review_url": { - "example": "https://nextbestpicture.com/inception/", - "type": "string" - }, - "rating": { - "example": 4.5, - "type": "number" - }, - "rating_label": { - "example": "STAR_4_5", - "type": "string" - }, - "review": { - "type": "string" - }, - "score_sentiment": { - "example": "POSITIVE", - "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" - }, - "type": { - "example": "critic", - "type": "string" - }, - "verified": { - "example": false, - "type": "boolean" + "data": { + "$ref": "#/definitions/ghanaweb.VideoSectionsResponse" } }, "type": "object" }, - "rottentomatoes.Person": { + "publicnews.ghanawebVideosResponseDoc": { "properties": { - "image_url": { - "type": "string" - }, - "name": { - "example": "Christopher Nolan", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", - "type": "string" + "data": { + "$ref": "#/definitions/ghanaweb.VideosResponse" } }, "type": "object" }, - "rottentomatoes.PersonCredit": { + "publicnews.gizmodoAuthorResponseDoc": { "properties": { - "audience_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "credits": { - "example": "Director, Screenwriter, Producer", - "type": "string" - }, - "critics_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "path": { - "example": "/m/oppenheimer_2023", - "type": "string" - }, - "position": { - "example": 1, - "type": "integer" - }, - "poster_url": { - "type": "string" - }, - "title": { - "example": "Oppenheimer", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/m/oppenheimer_2023", - "type": "string" - }, - "years_featured": { - "example": "2023", - "type": "string" + "data": { + "$ref": "#/definitions/gizmodo.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.PersonRatedTitle": { + "publicnews.globalnewsAuthorResponseDoc": { "properties": { - "path": { - "example": "/m/the_dark_knight", - "type": "string" - }, - "score": { - "example": 94, - "type": "integer" - }, - "title": { - "example": "The Dark Knight", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/m/the_dark_knight", - "type": "string" - }, - "year": { - "example": "2008", - "type": "string" + "data": { + "$ref": "#/definitions/globalnews.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.PersonResponse": { + "publicnews.gqAuthorResponseDoc": { "properties": { - "birth_date": { - "example": "1970-07-30", - "type": "string" - }, - "birthplace": { - "example": "London, England, UK", - "type": "string" - }, - "description": { - "type": "string" - }, - "ems_id": { - "example": "a015d515-713e-38e3-abbe-cf0cdaa519b0", - "type": "string" - }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "filmography": { - "items": { - "$ref": "#/definitions/rottentomatoes.PersonCredit" - }, - "type": "array" - }, - "filmography_api_url": { - "example": "https://www.rottentomatoes.com/cnapi/modules/filmography/a015d515-713e-38e3-abbe-cf0cdaa519b0/movie/newest", - "type": "string" - }, - "highest_rated": { - "$ref": "#/definitions/rottentomatoes.PersonRatedTitle" - }, - "image_url": { - "type": "string" - }, - "lowest_rated": { - "$ref": "#/definitions/rottentomatoes.PersonRatedTitle" - }, - "name": { - "example": "Christopher Nolan", - "type": "string" - }, - "page_info": { - "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" - }, - "path": { - "example": "/celebrity/christopher_nolan", - "type": "string" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", - "type": "string" + "data": { + "$ref": "#/definitions/gq.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.Review": { + "publicnews.gulfNewsAuthorResponseDoc": { "properties": { - "display_date": { - "example": "Mar 19", - "type": "string" - }, - "display_name": { - "example": "Rylee", - "type": "string" - }, - "fandango_review": { - "example": true, - "type": "boolean" - }, - "rating": { - "example": 5, - "type": "number" - }, - "rating_id": { - "example": "e0812d98-c1d5-467d-ae35-c19cdd575f90", - "type": "string" - }, - "rating_range": { - "example": "Rated 5/5 Stars", - "type": "string" - }, - "review": { - "type": "string" - }, - "verified": { - "example": true, - "type": "boolean" + "data": { + "$ref": "#/definitions/gulfnews.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.ReviewMovieSummary": { + "publicnews.headlinesResponseDoc": { "properties": { - "ems_id": { - "example": "afbf1c81-1bfe-3996-9cbc-2e1be23d1f61", - "type": "string" - }, - "media_type": { - "example": "Movie", - "type": "string" - }, - "path": { - "example": "/m/inception", - "type": "string" - }, - "title": { - "example": "Inception", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/m/inception", - "type": "string" + "data": { + "$ref": "#/definitions/newsplatform.HeadlinesResponse" } }, "type": "object" }, - "rottentomatoes.ReviewPageInfo": { + "publicnews.hindustanTimesAuthorResponseDoc": { "properties": { - "end_cursor": { - "example": "Mjk=", - "type": "string" - }, - "has_next_page": { - "example": true, - "type": "boolean" - }, - "has_previous_page": { - "example": true, - "type": "boolean" - }, - "start_cursor": { - "example": "MA==", - "type": "string" + "data": { + "$ref": "#/definitions/hindustantimes.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.ReviewsResponse": { + "publicnews.hollywoodReporterAuthorResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "limit": { - "example": 10, - "type": "integer" - }, - "movie": { - "$ref": "#/definitions/rottentomatoes.ReviewMovieSummary" - }, - "page_info": { - "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "reviews": { - "items": { - "$ref": "#/definitions/rottentomatoes.MovieReview" - }, - "type": "array" - }, - "reviews_api_url": { - "example": "https://www.rottentomatoes.com/napi/rtcf/v1/movies/afbf1c81-1bfe-3996-9cbc-2e1be23d1f61/reviews?type=critic&pageCount=10", - "type": "string" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/m/inception/reviews", - "type": "string" - }, - "type": { - "example": "critics", - "type": "string" + "data": { + "$ref": "#/definitions/hollywoodreporter.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.Score": { + "publicnews.houstonChronicleAuthorResponseDoc": { "properties": { - "average_rating": { - "example": "8.40", - "type": "string" - }, - "banded_rating_count": { - "example": "250,000+ Ratings", - "type": "string" - }, - "certified": { - "example": true, - "type": "boolean" - }, - "liked_count": { - "example": 314, - "type": "integer" - }, - "not_liked_count": { - "example": 49, - "type": "integer" - }, - "rating_count": { - "example": 363, - "type": "integer" - }, - "review_count": { - "example": 363, - "type": "integer" - }, - "reviews_page_url": { - "example": "https://www.rottentomatoes.com/m/inception/reviews", - "type": "string" - }, - "score": { - "example": 87, - "type": "integer" - }, - "score_percent": { - "example": "87%", - "type": "string" - }, - "score_type": { - "example": "ALL", - "type": "string" - }, - "sentiment": { - "example": "POSITIVE", - "type": "string" - }, - "title": { - "example": "Tomatometer", - "type": "string" + "data": { + "$ref": "#/definitions/houstonchronicle.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SearchMovie": { + "publicnews.huffPostAuthorResponseDoc": { "properties": { - "cast": { - "example": "Leonardo DiCaprio,Joseph Gordon-Levitt,Elliot Page", - "type": "string" - }, - "certified_fresh": { - "example": true, - "type": "boolean" - }, - "end_year": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "path": { - "example": "/m/inception", - "type": "string" - }, - "release_year": { - "example": "2010", - "type": "string" - }, - "start_year": { - "type": "string" - }, - "title": { - "example": "Inception", - "type": "string" - }, - "tomatometer_score": { - "example": 87, - "type": "integer" - }, - "tomatometer_sentiment": { - "example": "POSITIVE", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/m/inception", - "type": "string" + "data": { + "$ref": "#/definitions/huffpost.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SearchResponse": { + "publicnews.ignAuthorResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "limit": { - "example": 10, - "type": "integer" - }, - "query": { - "example": "inception", - "type": "string" - }, - "results": { - "items": { - "$ref": "#/definitions/rottentomatoes.SearchMovie" - }, - "type": "array" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/search?search=inception", - "type": "string" + "data": { + "$ref": "#/definitions/ign.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SeasonEpisode": { + "publicnews.independentAuthorResponseDoc": { "properties": { - "air_date": { - "example": "2008-01-20", - "type": "string" - }, - "description": { - "type": "string" - }, - "episode_number": { - "example": "1", - "type": "string" - }, - "path": { - "example": "/tv/breaking_bad/s01/e01", - "type": "string" - }, - "title": { - "example": "Pilot", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", - "type": "string" + "data": { + "$ref": "#/definitions/independent.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SeasonResponse": { + "publicnews.indiaTodayAuthorResponseDoc": { "properties": { - "audience_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "cast": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "critics_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "description": { - "type": "string" - }, - "directors": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "ems_id": { - "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", - "type": "string" - }, - "episode_count": { - "example": 7, - "type": "integer" - }, - "episodes": { - "items": { - "$ref": "#/definitions/rottentomatoes.SeasonEpisode" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "genres": { - "example": [ - "Crime" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "lifecycle": { - "example": "NOT_AIRING", - "type": "string" - }, - "media_type": { - "example": "TvSeason", - "type": "string" - }, - "parent_series": { - "$ref": "#/definitions/rottentomatoes.SeriesSummary" - }, - "path": { - "example": "/tv/breaking_bad/s01", - "type": "string" - }, - "producers": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "release_date": { - "example": "2008-01-20", - "type": "string" - }, - "season_number": { - "example": 1, - "type": "integer" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", - "type": "string" - }, - "title": { - "example": "Season 1", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", - "type": "string" + "data": { + "$ref": "#/definitions/indiatoday.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SeasonSummary": { + "publicnews.indianExpressAuthorResponseDoc": { "properties": { - "ems_id": { - "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", - "type": "string" - }, - "path": { - "example": "/tv/breaking_bad/s01", - "type": "string" - }, - "season_number": { - "example": 1, - "type": "integer" - }, - "title": { - "example": "Season 1", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", - "type": "string" + "data": { + "$ref": "#/definitions/indianexpress.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SeriesResponse": { + "publicnews.indiewireAuthorResponseDoc": { "properties": { - "audience_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "cast": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "content_rating": { - "example": "TV-14", - "type": "string" - }, - "critics_score": { - "$ref": "#/definitions/rottentomatoes.Score" - }, - "description": { - "type": "string" - }, - "directors": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "ems_id": { - "example": "6a74def4-dc62-319e-ae3d-360dcf360244", - "type": "string" - }, - "end_date": { - "example": "2013-09-29", - "type": "string" - }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "genres": { - "example": [ - "Crime" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "lifecycle": { - "example": "NOT_AIRING", - "type": "string" - }, - "media_type": { - "example": "TvSeries", - "type": "string" - }, - "number_of_seasons": { - "example": 5, - "type": "integer" - }, - "path": { - "example": "/tv/breaking_bad", - "type": "string" - }, - "producers": { - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "seasons": { - "items": { - "$ref": "#/definitions/rottentomatoes.TVSeason" - }, - "type": "array" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad", - "type": "string" - }, - "start_date": { - "example": "2008-01-20", - "type": "string" - }, - "title": { - "example": "Breaking Bad", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad", - "type": "string" + "data": { + "$ref": "#/definitions/indiewire.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SeriesSummary": { + "publicnews.inewsAuthorResponseDoc": { "properties": { - "ems_id": { - "example": "6a74def4-dc62-319e-ae3d-360dcf360244", - "type": "string" - }, - "path": { - "example": "/tv/breaking_bad", - "type": "string" - }, - "title": { - "example": "Breaking Bad", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad", - "type": "string" + "data": { + "$ref": "#/definitions/inews.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.Sitemap": { + "publicnews.inquirerAuthorResponseDoc": { "properties": { - "family": { - "example": "movie", - "type": "string" - }, - "index": { - "example": 0, - "type": "integer" - }, - "last_modified": { - "example": "2025-11-12", - "type": "string" - }, - "name": { - "example": "movie_0", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/sitemaps/movie_0.xml", - "type": "string" + "data": { + "$ref": "#/definitions/inquirer.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SitemapIndexResponse": { + "publicnews.investopediaAuthorResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "sitemaps": { - "items": { - "$ref": "#/definitions/rottentomatoes.Sitemap" - }, - "type": "array" - }, - "source_url": { - "example": "https://www.rottentomatoes.com/sitemaps/sitemap.xml", - "type": "string" + "data": { + "$ref": "#/definitions/investopedia.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SitemapURL": { + "publicnews.iolAuthorResponseDoc": { "properties": { - "last_modified": { - "example": "2025-11-12", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/m/inception", - "type": "string" + "data": { + "$ref": "#/definitions/iol.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.SitemapURLResponse": { + "publicnews.irishindependentAuthorResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "limit": { - "example": 100, - "type": "integer" - }, - "name": { - "example": "movie_0", - "type": "string" - }, - "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" + "data": { + "$ref": "#/definitions/irishindependent.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.TVSeason": { + "publicnews.irishtimesAuthorResponseDoc": { "properties": { - "name": { - "example": "Season 1", - "type": "string" - }, - "path": { - "example": "/tv/breaking_bad/s01", - "type": "string" - }, - "url": { - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", - "type": "string" + "data": { + "$ref": "#/definitions/irishtimes.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.browseFiltersResponseDoc": { + "publicnews.japantimesAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.BrowseFiltersResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/japantimes.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.browseResponseDoc": { + "publicnews.jerusalemPostAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.BrowseResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/jerusalempost.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.criticsAuthorsResponseDoc": { + "publicnews.jerusalemPostAuthorsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.CriticsAuthorsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/jerusalempost.AuthorsResponse" } }, "type": "object" }, - "rottentomatoes.editorialContentResponseDoc": { + "publicnews.khaleejTimesAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialContentResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/khaleejtimes.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.editorialContentTypesResponseDoc": { + "publicnews.kotakuAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialContentTypesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/kotaku.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.editorialDetailResponseDoc": { + "publicnews.livemintAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialDetailResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/livemint.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.editorialSearchResponseDoc": { + "publicnews.livescienceAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialSearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/livescience.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.editorialSectionResponseDoc": { + "publicnews.macRumorsAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialSectionResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/macrumors.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.editorialTaxonomiesResponseDoc": { + "publicnews.makeuseofAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialTaxonomiesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/makeuseof.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.editorialTermsResponseDoc": { + "publicnews.marketWatchAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialTermsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/marketwatch.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.episodeResponseDoc": { + "publicnews.mashableAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.EpisodeResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/mashable.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.movieResponseDoc": { + "publicnews.mediaiteAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.MovieResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/mediaite.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.personResponseDoc": { + "publicnews.menAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.PersonResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/men.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.reviewsResponseDoc": { + "publicnews.metroAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.ReviewsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/metro.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.searchResponseDoc": { + "publicnews.mirrorAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/mirror.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.seasonResponseDoc": { + "publicnews.moneycontrolAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.SeasonResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/moneycontrol.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.seriesResponseDoc": { + "publicnews.motleyfoolAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.SeriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/motleyfool.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.sitemapIndexResponseDoc": { + "publicnews.nationAfricaAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.SitemapIndexResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/nationafrica.AuthorResponse" } }, "type": "object" }, - "rottentomatoes.sitemapURLResponseDoc": { + "publicnews.nationalAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rottentomatoes.SitemapURLResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/national.AuthorResponse" } }, "type": "object" }, - "rover.ProfileResponse": { + "publicnews.nationalPostAuthorResponseDoc": { "properties": { - "bio": { - "type": "string" - }, - "city": { - "type": "string" - }, - "is_star_sitter": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "neighborhood": { - "type": "string" - }, - "price_unit": { - "type": "string" - }, - "profile_image": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "repeat_client_count": { - "type": "integer" - }, - "review_count": { - "type": "integer" - }, - "reviews": { - "items": { - "$ref": "#/definitions/rover.ReviewExcerpt" - }, - "type": "array" - }, - "services": { - "items": { - "$ref": "#/definitions/rover.ServiceOffering" - }, - "type": "array" - }, - "slug": { - "type": "string" - }, - "starting_price": { - "type": "number" - }, - "state": { - "type": "string" - }, - "url": { - "type": "string" - }, - "years_experience": { - "type": "integer" + "data": { + "$ref": "#/definitions/nationalpost.AuthorResponse" } }, "type": "object" }, - "rover.ReviewExcerpt": { + "publicnews.ndtvArticleResponseDoc": { "properties": { - "date": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "reviewer": { - "type": "string" - }, - "service_type": { - "type": "string" - }, - "text": { - "type": "string" + "data": { + "$ref": "#/definitions/ndtv.ArticleResponse" } }, "type": "object" }, - "rover.SearchResponse": { + "publicnews.ndtvAuthorResponseDoc": { "properties": { - "location": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "page_count": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "service_type": { - "type": "string" - }, - "sitters": { - "items": { - "$ref": "#/definitions/rover.SitterSummary" - }, - "type": "array" - }, - "total_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/ndtv.AuthorResponse" } }, "type": "object" }, - "rover.ServiceOffering": { + "publicnews.ndtvLatestVideosResponseDoc": { "properties": { - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, - "unit": { - "type": "string" + "data": { + "$ref": "#/definitions/ndtv.LatestVideosResponse" } }, "type": "object" }, - "rover.SitterSummary": { + "publicnews.ndtvLiveBlogResponseDoc": { "properties": { - "city": { - "type": "string" - }, - "description": { - "type": "string" - }, - "is_star_sitter": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "neighborhood": { - "type": "string" - }, - "price_unit": { - "type": "string" - }, - "profile_image": { - "type": "string" - }, - "profile_url": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "repeat_client_count": { - "type": "integer" - }, - "review_count": { - "type": "integer" - }, - "service_type": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "starting_price": { - "type": "number" - }, - "state": { - "type": "string" - }, - "years_experience": { - "type": "integer" - }, - "zip": { - "type": "string" + "data": { + "$ref": "#/definitions/ndtv.LiveBlogResponse" } }, "type": "object" }, - "rover.TrainerEducation": { + "publicnews.ndtvLiveBlogsResponseDoc": { "properties": { - "organization": { - "type": "string" - }, - "text": { - "type": "string" + "data": { + "$ref": "#/definitions/ndtv.LiveBlogsResponse" } }, "type": "object" }, - "rover.TrainerProfileResponse": { + "publicnews.ndtvSearchResponseDoc": { "properties": { - "availability_details": { - "type": "string" - }, - "behaviors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "education": { - "items": { - "$ref": "#/definitions/rover.TrainerEducation" - }, - "type": "array" - }, - "experience_details": { - "type": "string" - }, - "headline": { - "type": "string" - }, - "methodology": { - "type": "string" - }, - "methodology_details": { - "type": "string" - }, - "name": { - "type": "string" - }, - "profile_image": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "repeat_client_count": { - "type": "integer" - }, - "review_count": { - "type": "integer" - }, - "skills": { - "items": { - "type": "string" - }, - "type": "array" - }, - "slug": { - "type": "string" - }, - "url": { - "type": "string" - }, - "years_of_training": { - "type": "integer" + "data": { + "$ref": "#/definitions/ndtv.SearchResponse" } }, "type": "object" }, - "rover.TrainerSearchResponse": { + "publicnews.ndtvVideoCategoriesResponseDoc": { "properties": { - "location": { - "type": "string" - }, - "trainers": { - "items": { - "$ref": "#/definitions/rover.TrainerSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/ndtv.VideoCategoriesResponse" } }, "type": "object" }, - "rover.TrainerSummary": { + "publicnews.ndtvVideoResponseDoc": { "properties": { - "behaviors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "city": { - "type": "string" - }, - "experience_details": { - "type": "string" - }, - "headline": { - "type": "string" - }, - "methodology": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price_unit": { - "type": "string" - }, - "profile_image": { - "type": "string" - }, - "profile_url": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "repeat_client_count": { - "type": "integer" - }, - "review_count": { - "type": "integer" - }, - "skills": { - "items": { - "type": "string" - }, - "type": "array" - }, - "slug": { - "type": "string" - }, - "starting_price": { - "type": "number" - }, - "state": { - "type": "string" - }, - "years_experience": { - "type": "integer" - }, - "zip": { - "type": "string" + "data": { + "$ref": "#/definitions/ndtv.VideoResponse" } }, "type": "object" }, - "rover.profileResponseDoc": { + "publicnews.ndtvVideosResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rover.ProfileResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.VideosResponse" } }, "type": "object" }, - "rover.searchResponseDoc": { + "publicnews.news18AuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rover.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/news18.AuthorResponse" } }, "type": "object" }, - "rover.trainerProfileResponseDoc": { + "publicnews.newsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rover.TrainerProfileResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/newsplatform.NewsResponse" } }, "type": "object" }, - "rover.trainerSearchResponseDoc": { + "publicnews.newscomauAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/rover.TrainerSearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/newscomau.AuthorResponse" } }, "type": "object" }, - "rte.AuthorResponse": { + "publicnews.newsmaxAuthorResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "role": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/newsmax.AuthorResponse" } }, "type": "object" }, - "salon.AuthorArticle": { + "publicnews.newsweekAuthorResponseDoc": { "properties": { - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/newsweek.AuthorResponse" } }, "type": "object" }, - "salon.AuthorResponse": { + "publicnews.newyorkerArticleResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/salon.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/newyorker.ArticleResponse" } }, "type": "object" }, - "samsclub.CategoryBreadcrumbEntry": { + "publicnews.newyorkerAuthorResponseDoc": { "properties": { - "id": { - "example": "100001", - "type": "string" - }, - "name": { - "example": "All Departments", - "type": "string" - }, - "url": { - "example": "https://www.samsclub.com/all-departments", - "type": "string" + "data": { + "$ref": "#/definitions/newyorker.AuthorResponse" } }, "type": "object" }, - "samsclub.CategoryProduct": { + "publicnews.ninetofivegoogleAuthorResponseDoc": { "properties": { - "availability": { - "example": "IN_STOCK", - "type": "string" - }, - "brand": { - "example": "Tide", - "type": "string" - }, - "currency_code": { - "example": "USD", - "type": "string" - }, - "current_price": { - "example": 19.98, - "type": "number" - }, - "image_url": { - "type": "string" - }, - "item_id": { - "example": "13610014888", - "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" - }, - "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" + "data": { + "$ref": "#/definitions/ninetofivegoogle.AuthorResponse" } }, "type": "object" }, - "samsclub.CategoryResponse": { + "publicnews.ninetofivemacAuthorResponseDoc": { "properties": { - "breadcrumb": { - "items": { - "$ref": "#/definitions/samsclub.CategoryBreadcrumbEntry" - }, - "type": "array" - }, - "category_id": { - "example": "15660127", - "type": "string" - }, - "count": { - "example": 47, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "max_page": { - "example": 16, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/samsclub.CategoryProduct" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "title": { - "example": "Results for \"Savings\"", - "type": "string" - }, - "total_count": { - "example": 687, - "type": "integer" + "data": { + "$ref": "#/definitions/ninetofivemac.AuthorResponse" } }, "type": "object" }, - "samsclub.ContentResponse": { + "publicnews.nyDailyNewsAuthorResponseDoc": { "properties": { - "breadcrumb": { - "items": { - "$ref": "#/definitions/samsclub.CategoryBreadcrumbEntry" - }, - "type": "array" - }, - "category_links": { - "items": { - "$ref": "#/definitions/samsclub.DepartmentLink" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "id": { - "example": "16050279", - "type": "string" - }, - "shelves": { - "items": { - "$ref": "#/definitions/samsclub.RelatedShelf" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "title": { - "example": "Savings Center", - "type": "string" + "data": { + "$ref": "#/definitions/nydailynews.AuthorResponse" } }, "type": "object" }, - "samsclub.Department": { + "publicnews.nymagAuthorResponseDoc": { "properties": { - "id": { - "example": "1444", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "example": "Grocery", - "type": "string" - }, - "subcategories": { - "items": { - "$ref": "#/definitions/samsclub.DepartmentLink" - }, - "type": "array" - }, - "type": { - "example": "browse", - "type": "string" - }, - "url": { - "example": "https://www.samsclub.com/browse/1444", - "type": "string" + "data": { + "$ref": "#/definitions/nymag.AuthorResponse" } }, "type": "object" }, - "samsclub.DepartmentLink": { + "publicnews.nypostAuthorResponseDoc": { "properties": { - "id": { - "example": "1444", - "type": "string" - }, - "name": { - "example": "Grocery", - "type": "string" - }, - "type": { - "example": "browse", - "type": "string" - }, - "url": { - "example": "https://www.samsclub.com/browse/1444", - "type": "string" + "data": { + "$ref": "#/definitions/nypost.AuthorResponse" } }, "type": "object" }, - "samsclub.DepartmentsResponse": { + "publicnews.nzheraldAuthorResponseDoc": { "properties": { - "departments": { - "items": { - "$ref": "#/definitions/samsclub.Department" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/nzherald.AuthorResponse" } }, "type": "object" }, - "samsclub.Product": { + "publicnews.pagesixAuthorResponseDoc": { "properties": { - "availability": { - "example": "IN_STOCK", - "type": "string" - }, - "brand": { - "example": "Tide", - "type": "string" - }, - "category": { - "example": [ - "All Departments", - "Household Essentials", - "Laundry Supplies", - "Laundry Detergent" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "currency_code": { - "example": "USD", - "type": "string" - }, - "current_price": { - "example": 19.98, - "type": "number" - }, - "description": { - "type": "string" - }, - "highlights": { - "items": { - "type": "string" - }, - "type": "array" - }, - "images": { - "items": { - "type": "string" - }, - "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" + "data": { + "$ref": "#/definitions/pagesix.AuthorResponse" } }, "type": "object" }, - "samsclub.RelatedItem": { + "publicnews.pcgamerAuthorResponseDoc": { "properties": { - "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" - }, - "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" + "data": { + "$ref": "#/definitions/pcgamer.AuthorResponse" } }, "type": "object" }, - "samsclub.RelatedItemsResponse": { + "publicnews.pcmagAuthorResponseDoc": { "properties": { - "fetched_at": { - "type": "string" - }, - "item_id": { - "example": "13610014888", - "type": "string" - }, - "shelves": { - "items": { - "$ref": "#/definitions/samsclub.RelatedShelf" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/pcmag.AuthorResponse" } }, "type": "object" }, - "samsclub.RelatedShelf": { + "publicnews.peopleAuthorResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/samsclub.RelatedItem" - }, - "type": "array" - }, - "title": { - "example": "Members also considered", - "type": "string" + "data": { + "$ref": "#/definitions/people.AuthorResponse" } }, "type": "object" }, - "samsclub.categoryResponseDoc": { + "publicnews.phillyinquirerAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/samsclub.CategoryResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/phillyinquirer.AuthorResponse" } }, "type": "object" }, - "samsclub.contentResponseDoc": { + "publicnews.philstarAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/samsclub.ContentResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/philstar.AuthorResponse" } }, "type": "object" }, - "samsclub.departmentsResponseDoc": { + "publicnews.phonearenaAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/samsclub.DepartmentsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/phonearena.AuthorResponse" } }, "type": "object" }, - "samsclub.productResponseDoc": { + "publicnews.polygonAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/samsclub.Product" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/polygon.AuthorResponse" } }, "type": "object" }, - "samsclub.relatedItemsResponseDoc": { + "publicnews.propublicaAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/samsclub.RelatedItemsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/propublica.AuthorResponse" } }, "type": "object" }, - "sbsnews.AuthorArticle": { + "publicnews.punchAuthorResponseDoc": { "properties": { - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/punch.AuthorResponse" } }, "type": "object" }, - "sbsnews.AuthorResponse": { + "publicnews.rapplerAuthorResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/sbsnews.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "headshot_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/rappler.AuthorResponse" } }, "type": "object" }, - "sciencealert.AuthorResponse": { + "publicnews.rawstoryAuthorResponseDoc": { "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/sciencealert.AuthorSocialLink" - }, - "type": "array" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/rawstory.AuthorResponse" } }, "type": "object" }, - "sciencealert.AuthorSocialLink": { + "publicnews.reachAuthorResponseDoc": { "properties": { - "platform": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/reachplc.AuthorResponse" } }, "type": "object" }, - "scmp.ArticleResponse": { + "publicnews.rnzAuthorResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "content_locked": { - "type": "boolean" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "paywall_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "title": { - "type": "string" - }, - "topics": { - "items": { - "type": "string" - }, - "type": "array" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/rnz.AuthorResponse" } }, "type": "object" }, - "scmp.AuthorResponse": { + "publicnews.rollingStoneAuthorResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/scmp.HeadlineItem" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "expertise": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headshot_url": { - "type": "string" - }, - "languages": { - "items": { - "type": "string" - }, - "type": "array" - }, - "location": { - "type": "string" - }, - "name": { - "type": "string" - }, - "role": { - "type": "string" - }, - "social_links": { - "items": { - "$ref": "#/definitions/scmp.AuthorSocialLink" - }, - "type": "array" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/rollingstone.AuthorResponse" } }, "type": "object" }, - "scmp.AuthorSocialLink": { + "publicnews.rteAuthorResponseDoc": { "properties": { - "type": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/rte.AuthorResponse" } }, "type": "object" }, - "scmp.HeadlineItem": { + "publicnews.salonAuthorResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/salon.AuthorResponse" } }, "type": "object" }, - "scmp.HeadlinesResponse": { + "publicnews.sbsnewsAuthorResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/scmp.HeadlineItem" - }, - "type": "array" - }, - "section": { - "type": "string" + "data": { + "$ref": "#/definitions/sbsnews.AuthorResponse" } }, "type": "object" }, - "scmp.Section": { + "publicnews.scienceAlertAuthorResponseDoc": { "properties": { - "name": { - "type": "string" - }, - "parent_name": { - "type": "string" - }, - "parent_slug": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/sciencealert.AuthorResponse" } }, "type": "object" }, - "scmp.SectionsResponse": { + "publicnews.screenrantAuthorResponseDoc": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/scmp.Section" - }, - "type": "array" + "data": { + "$ref": "#/definitions/screenrant.AuthorResponse" } }, "type": "object" }, - "scmp.articleResponseDoc": { + "publicnews.seattleTimesAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/scmp.ArticleResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/seattletimes.AuthorResponse" } }, "type": "object" }, - "scmp.authorResponseDoc": { + "publicnews.sectionsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/scmp.AuthorResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/newsplatform.SectionsResponse" } }, "type": "object" }, - "scmp.headlinesResponseDoc": { + "publicnews.sevennewsauAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/scmp.HeadlinesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sevennewsau.AuthorResponse" } }, "type": "object" }, - "scmp.sectionsResponseDoc": { + "publicnews.sfgateAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/scmp.SectionsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sfgate.AuthorResponse" } }, "type": "object" }, - "screenrant.AuthorResponse": { + "publicnews.skyNewsAuthorResponseDoc": { "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" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/skynews.AuthorResponse" } }, "type": "object" }, - "screenrant.AuthorSocialLink": { + "publicnews.skyNewsVideoResponseDoc": { "properties": { - "type": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/skynews.VideoResponse" } }, "type": "object" }, - "seatgeek.CategoriesResult": { + "publicnews.skyNewsVideosResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/seatgeek.Category" - }, - "type": "array" - }, - "total": { - "type": "integer" + "data": { + "$ref": "#/definitions/skynews.VideosResponse" } }, "type": "object" }, - "seatgeek.Category": { + "publicnews.skySportsAuthorResponseDoc": { "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": { - "type": "integer" - }, - "seo_event_type": { - "type": "string" - }, - "short_name": { - "type": "string" - }, - "slug": { - "example": "mlb", - "type": "string" + "data": { + "$ref": "#/definitions/skysports.AuthorResponse" } }, "type": "object" }, - "seatgeek.CitiesResult": { + "publicnews.smhArticleResponseDoc": { "properties": { - "cities": { - "items": { - "$ref": "#/definitions/seatgeek.City" - }, - "type": "array" - }, - "total": { - "type": "integer" + "data": { + "$ref": "#/definitions/smh.ArticleResponse" } }, "type": "object" }, - "seatgeek.City": { + "publicnews.smhAuthorResponseDoc": { "properties": { - "country": { - "example": "United States", - "type": "string" - }, - "id": { - "example": 72, - "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" - }, - "state": { - "example": "New Mexico", - "type": "string" + "data": { + "$ref": "#/definitions/smh.AuthorResponse" } }, "type": "object" }, - "seatgeek.Event": { + "publicnews.spaceAuthorResponseDoc": { "properties": { - "date_tbd": { - "type": "boolean" - }, - "datetime_local": { - "type": "string" - }, - "datetime_utc": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "example": 17695775, - "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" - }, - "url": { - "type": "string" - }, - "venue": { - "$ref": "#/definitions/seatgeek.Venue" + "data": { + "$ref": "#/definitions/space.AuthorResponse" } }, "type": "object" }, - "seatgeek.EventPerformer": { + "publicnews.sportingNewsAuthorResponseDoc": { "properties": { - "home_team": { - "type": "boolean" - }, - "id": { - "type": "integer" - }, - "image": { - "type": "string" - }, - "name": { - "type": "string" - }, - "primary": { - "type": "boolean" - }, - "type": { - "example": "mlb", - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/sportingnews.AuthorResponse" } }, "type": "object" }, - "seatgeek.EventStats": { + "publicnews.sportskeedaAuthorResponseDoc": { "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" - }, - "ticket_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/sportskeeda.AuthorResponse" } }, "type": "object" }, - "seatgeek.EventsByCategoryResult": { + "publicnews.sportskeedaCollegeBasketballScheduleOptionsResponseDoc": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/seatgeek.Event" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "taxonomy_id": { - "type": "integer" - }, - "total": { - "type": "integer" + "data": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleOptionsResponse" } }, "type": "object" }, - "seatgeek.EventsNearResult": { + "publicnews.sportskeedaCollegeBasketballScheduleResponseDoc": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/seatgeek.Event" - }, - "type": "array" - }, - "geolocation": { - "$ref": "#/definitions/seatgeek.GeoResolved" - }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "total": { - "type": "integer" + "data": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleResponse" } }, "type": "object" }, - "seatgeek.GeoLocation": { + "publicnews.sportskeedaCricketCommentaryResponseDoc": { "properties": { - "lat": { - "type": "number" - }, - "lon": { - "type": "number" + "data": { + "$ref": "#/definitions/sportskeeda.CricketCommentaryResponse" } }, "type": "object" }, - "seatgeek.GeoResolved": { + "publicnews.sportskeedaCricketMatchResponseDoc": { "properties": { - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "display_name": { - "example": "Albuquerque, NM", - "type": "string" - }, - "range": { - "example": "50mi", - "type": "string" - }, - "state": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.CricketMatchResponse" } }, "type": "object" }, - "seatgeek.Performer": { + "publicnews.sportskeedaDepthChartResponseDoc": { "properties": { - "event_count": { - "type": "integer" - }, - "has_upcoming_events": { - "type": "boolean" - }, - "home_venue_id": { - "type": "integer" - }, - "id": { - "example": 1, - "type": "integer" - }, - "image": { - "type": "string" - }, - "name": { - "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": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.DepthChartResponse" } }, "type": "object" }, - "seatgeek.PerformerEventsResult": { + "publicnews.sportskeedaDraftPicksOptionsResponseDoc": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/seatgeek.Event" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "performer_id": { - "type": "integer" - }, - "total": { - "type": "integer" + "data": { + "$ref": "#/definitions/sportskeeda.DraftPicksOptionsResponse" } }, "type": "object" }, - "seatgeek.SearchEvent": { + "publicnews.sportskeedaDraftPicksResponseDoc": { "properties": { - "date_tbd": { - "type": "boolean" - }, - "datetime_local": { - "type": "string" - }, - "datetime_utc": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lowest_price": { - "type": "number" - }, - "short_title": { - "type": "string" - }, - "time_tbd": { - "type": "boolean" - }, - "title": { - "type": "string" - }, - "type": { - "example": "mlb", - "type": "string" - }, - "url": { - "type": "string" - }, - "venue_location": { - "example": "Los Angeles, CA", - "type": "string" - }, - "venue_name": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.DraftPicksResponse" } }, "type": "object" }, - "seatgeek.SearchPerformer": { + "publicnews.sportskeedaEventCalendarOptionsResponseDoc": { "properties": { - "event_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "image": { - "type": "string" - }, - "name": { - "type": "string" - }, - "short_name": { - "type": "string" - }, - "type": { - "example": "mlb", - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.EventCalendarOptionsResponse" } }, "type": "object" }, - "seatgeek.SearchResult": { + "publicnews.sportskeedaEventCalendarResponseDoc": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/seatgeek.SearchEvent" - }, - "type": "array" - }, - "performers": { - "items": { - "$ref": "#/definitions/seatgeek.SearchPerformer" - }, - "type": "array" - }, - "query": { - "type": "string" - }, - "venues": { - "items": { - "$ref": "#/definitions/seatgeek.SearchVenue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/sportskeeda.EventCalendarResponse" } }, "type": "object" }, - "seatgeek.SearchVenue": { + "publicnews.sportskeedaFeedResponseDoc": { "properties": { - "capacity": { - "type": "integer" - }, - "display_location": { - "example": "Los Angeles, CA", - "type": "string" - }, - "event_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.FeedResponse" } }, "type": "object" }, - "seatgeek.Taxonomy": { + "publicnews.sportskeedaFootballDataResponseDoc": { "properties": { - "id": { - "example": 1010100, - "type": "integer" - }, - "name": { - "example": "mlb", - "type": "string" - }, - "parent_id": { - "example": 1010000, - "type": "integer" - }, - "seo_event_type": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.FootballDataResponse" } }, "type": "object" }, - "seatgeek.TrendingItem": { + "publicnews.sportskeedaFootballOptionsResponseDoc": { "properties": { - "entity_id": { - "type": "integer" - }, - "entity_image_url": { - "type": "string" - }, - "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" - }, - "rank_change": { - "type": "integer" + "data": { + "$ref": "#/definitions/sportskeeda.FootballOptionsResponse" } }, "type": "object" }, - "seatgeek.TrendingResult": { + "publicnews.sportskeedaGuessingGameEntitiesResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/seatgeek.TrendingItem" - }, - "type": "array" - }, - "list_display_name": { - "type": "string" - }, - "list_id": { - "type": "string" - }, - "list_type": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.GuessingGameEntitiesResponse" } }, "type": "object" }, - "seatgeek.Venue": { + "publicnews.sportskeedaGuessingGameResponseDoc": { "properties": { - "capacity": { - "type": "integer" - }, - "city": { - "type": "string" - }, - "country": { - "example": "US", - "type": "string" - }, - "display_location": { - "example": "Los Angeles, CA", - "type": "string" - }, - "has_upcoming_events": { - "type": "boolean" - }, - "id": { - "type": "integer" - }, - "location": { - "$ref": "#/definitions/seatgeek.GeoLocation" - }, - "name": { - "type": "string" - }, - "num_upcoming_events": { - "type": "integer" - }, - "popularity": { - "type": "number" - }, - "postal_code": { - "type": "string" - }, - "score": { - "type": "number" - }, - "slug": { - "type": "string" - }, - "state": { - "type": "string" - }, - "stats": { - "$ref": "#/definitions/seatgeek.VenueStats" - }, - "timezone": { - "example": "America/New_York", - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.GuessingGameDataResponse" } }, "type": "object" }, - "seatgeek.VenueEventsResult": { + "publicnews.sportskeedaGuessingGamesResponseDoc": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/seatgeek.Event" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "total": { - "type": "integer" - }, - "venue_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/sportskeeda.GuessingGamesResponse" } }, "type": "object" }, - "seatgeek.VenueStats": { + "publicnews.sportskeedaNBAQueriesResponseDoc": { "properties": { - "event_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/sportskeeda.NBAQueriesResponse" } }, "type": "object" }, - "seatgeek.categoriesResponseDoc": { + "publicnews.sportskeedaPageOptionsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.CategoriesResult" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.PageOptionsResponse" } }, "type": "object" }, - "seatgeek.citiesResponseDoc": { + "publicnews.sportskeedaPlayerStatsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.CitiesResult" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.PlayerStatsResponse" } }, "type": "object" }, - "seatgeek.eventResponseDoc": { + "publicnews.sportskeedaProfileResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.Event" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.ProfileResponse" } }, "type": "object" }, - "seatgeek.eventsByCategoryResponseDoc": { + "publicnews.sportskeedaQuizCategoriesResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.EventsByCategoryResult" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.QuizCategoriesResponse" } }, "type": "object" }, - "seatgeek.eventsNearResponseDoc": { + "publicnews.sportskeedaQuizResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.EventsNearResult" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.QuizResponse" } }, "type": "object" }, - "seatgeek.performerEventsResponseDoc": { + "publicnews.sportskeedaQuizzesResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.PerformerEventsResult" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.QuizzesResponse" } }, "type": "object" }, - "seatgeek.performerResponseDoc": { + "publicnews.sportskeedaSalaryCapResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.Performer" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.SalaryCapResponse" } }, "type": "object" }, - "seatgeek.searchResponseDoc": { + "publicnews.sportskeedaSectionsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.SearchResult" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.SectionsResponse" } }, "type": "object" }, - "seatgeek.trendingResponseDoc": { + "publicnews.sportskeedaSitemapItemsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.TrendingResult" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.SitemapItemsResponse" } }, "type": "object" }, - "seatgeek.venueEventsResponseDoc": { + "publicnews.sportskeedaSitemapsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.VenueEventsResult" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.SitemapsResponse" } }, "type": "object" }, - "seatgeek.venueResponseDoc": { + "publicnews.sportskeedaStandingsOptionsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/seatgeek.Venue" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/sportskeeda.StandingsOptionsResponse" } }, "type": "object" }, - "seattletimes.AuthorArticle": { + "publicnews.sportskeedaTablesResponseDoc": { "properties": { - "category": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/sportskeeda.TablesResponse" } }, "type": "object" }, - "seattletimes.AuthorResponse": { + "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/seattletimes.AuthorArticle" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, "name": { "type": "string" }, - "slug": { - "type": "string" - }, - "twitter": { - "type": "string" + "total_pages": { + "type": "integer" }, "url": { "type": "string" @@ -136366,132 +136921,112 @@ }, "type": "object" }, - "sec.CompanyIntelligenceResponse": { + "quince.CategoriesResponse": { "properties": { - "degraded": { + "business_departments": { "items": { - "type": "string" + "$ref": "#/definitions/quince.FacetCount" }, "type": "array" }, - "financial_snapshot": { - "additionalProperties": { - "format": "float64", - "type": "number" + "categories": { + "items": { + "$ref": "#/definitions/quince.FacetCount" }, - "type": "object" - }, - "hiring": { - "$ref": "#/definitions/sec.HiringBlock" - }, - "latest_8k": { - "$ref": "#/definitions/sec.Filing" - }, - "latest_annual_10k": { - "$ref": "#/definitions/sec.Filing" - }, - "latest_quarterly_10q": { - "$ref": "#/definitions/sec.Filing" - }, - "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)." + "type": "array" }, - "news": { + "colors": { "items": { - "$ref": "#/definitions/sec.NewsItem" + "$ref": "#/definitions/quince.FacetCount" }, "type": "array" }, - "profile": { - "$ref": "#/definitions/sec.CompanyProfile" - }, - "recent_events": { + "departments": { "items": { - "$ref": "#/definitions/sec.EventFiling" + "$ref": "#/definitions/quince.FacetCount" }, "type": "array" }, - "snapshot_fiscal_year": { - "type": "integer" - }, - "snapshot_period_end": { + "fetched_at": { "type": "string" }, - "source_urls": { + "materials": { "items": { - "type": "string" + "$ref": "#/definitions/quince.FacetCount" + }, + "type": "array" + }, + "sizes": { + "items": { + "$ref": "#/definitions/quince.FacetCount" }, "type": "array" } }, "type": "object" }, - "sec.CompanyMatch": { + "quince.FacetCount": { "properties": { - "cik": { - "example": 320193, + "count": { "type": "integer" }, - "cik_padded": { - "example": "CIK0000320193", + "value": { "type": "string" + } + }, + "type": "object" + }, + "quince.NavCategory": { + "properties": { + "groups": { + "items": { + "$ref": "#/definitions/quince.NavGroup" + }, + "type": "array" }, - "name": { - "example": "Apple Inc.", + "slug": { "type": "string" }, - "ticker": { - "example": "AAPL", + "title": { "type": "string" } }, "type": "object" }, - "sec.CompanyProfile": { + "quince.NavGroup": { "properties": { - "cik": { - "type": "integer" - }, - "name": { - "type": "string" + "links": { + "items": { + "$ref": "#/definitions/quince.NavLink" + }, + "type": "array" }, - "sic": { + "title": { "type": "string" - }, - "sic_description": { + } + }, + "type": "object" + }, + "quince.NavLink": { + "properties": { + "slug": { "type": "string" }, - "ticker": { + "text": { "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "sec.CompanySearchResponse": { + "quince.NavigationResponse": { "properties": { - "count": { - "example": 1, - "type": "integer" - }, - "matches": { + "categories": { "items": { - "$ref": "#/definitions/sec.CompanyMatch" + "$ref": "#/definitions/quince.NavCategory" }, "type": "array" }, - "query": { - "example": "apple", + "fetched_at": { "type": "string" }, "source_url": { @@ -136500,178 +137035,215 @@ }, "type": "object" }, - "sec.EventFiling": { + "quince.Product": { "properties": { - "accession_number": { + "business_department": { "type": "string" }, - "filing_date": { + "category": { "type": "string" }, - "items": { + "color": { "type": "string" }, - "url": { + "currency": { "type": "string" - } - }, - "type": "object" - }, - "sec.Filing": { - "properties": { - "accession_number": { - "example": "0000320193-25-000081", + }, + "department": { "type": "string" }, "description": { "type": "string" }, - "filing_date": { - "example": "2025-10-31", + "gender": { "type": "string" }, - "filing_index_url": { + "handle": { "type": "string" }, - "form": { - "example": "10-K", + "image_url": { "type": "string" }, - "is_xbrl": { + "in_stock": { "type": "boolean" }, - "items": { - "type": "string" + "material": { + "items": { + "type": "string" + }, + "type": "array" }, - "primary_doc_url": { - "type": "string" + "max_price": { + "type": "number" }, - "primary_document": { + "min_price": { + "type": "number" + }, + "primary_colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "product_id": { + "type": "integer" + }, + "product_type": { "type": "string" }, - "report_date": { - "example": "2025-09-27", + "sizes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { "type": "string" }, - "size": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sec.FilingDocument": { + "quince.ProductFAQItem": { "properties": { - "name": { + "answer": { "type": "string" }, - "url": { + "question": { "type": "string" } }, "type": "object" }, - "sec.FilingResponse": { + "quince.ProductFAQResponse": { "properties": { - "accession_number": { - "example": "0000320193-25-000081", + "fetched_at": { "type": "string" }, - "cik": { - "type": "integer" - }, - "cik_padded": { + "handle": { "type": "string" }, - "description": { + "questions": { + "items": { + "$ref": "#/definitions/quince.ProductFAQItem" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "quince.ProductOptionGroup": { + "properties": { + "name": { "type": "string" }, - "documents": { + "values": { "items": { - "$ref": "#/definitions/sec.FilingDocument" + "$ref": "#/definitions/quince.ProductOptionValue" }, "type": "array" - }, - "filing_date": { - "example": "2025-10-31", + } + }, + "type": "object" + }, + "quince.ProductOptionValue": { + "properties": { + "display_name": { "type": "string" }, - "filing_index_url": { + "display_type": { "type": "string" }, - "form": { - "example": "10-K", + "hex_code": { "type": "string" }, - "is_xbrl": { - "type": "boolean" + "value": { + "type": "string" + } + }, + "type": "object" + }, + "quince.ProductResponse": { + "properties": { + "average_rating": { + "type": "number" }, - "items": { + "country": { "type": "string" }, - "name": { + "description": { "type": "string" }, - "primary_doc_url": { + "fetched_at": { "type": "string" }, - "primary_document": { + "gender": { "type": "string" }, - "report_date": { - "example": "2025-09-27", + "handle": { "type": "string" }, - "size": { + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "options": { + "items": { + "$ref": "#/definitions/quince.ProductOptionGroup" + }, + "type": "array" + }, + "product_id": { "type": "integer" }, - "source_url": { + "product_type": { "type": "string" - } - }, - "type": "object" - }, - "sec.FilingSection": { - "properties": { - "char_count": { + }, + "review_count": { "type": "integer" }, - "item": { - "example": "1A", + "source_url": { "type": "string" }, - "text": { + "title": { "type": "string" }, - "title": { - "example": "Risk Factors", + "url": { "type": "string" }, - "truncated": { - "type": "boolean" + "variants": { + "items": { + "$ref": "#/definitions/quince.ProductVariant" + }, + "type": "array" } }, "type": "object" }, - "sec.FilingSectionsResponse": { + "quince.ProductReviewsResponse": { "properties": { - "accession_number": { - "type": "string" - }, - "cik": { - "type": "integer" - }, - "count": { - "type": "integer" + "average_rating": { + "type": "number" }, - "document_url": { + "fetched_at": { "type": "string" }, - "form": { + "handle": { "type": "string" }, - "sections": { + "review_count": { + "type": "integer" + }, + "reviews": { "items": { - "$ref": "#/definitions/sec.FilingSection" + "$ref": "#/definitions/quince.Review" }, "type": "array" }, @@ -136681,487 +137253,197 @@ }, "type": "object" }, - "sec.FinancialPeriod": { + "quince.ProductVariant": { "properties": { "currency": { - "example": "USD", "type": "string" }, - "end_date": { - "type": "string" - }, - "fiscal_period": { - "example": "FY", - "type": "string" - }, - "fiscal_year": { + "id": { "type": "integer" }, - "form": { - "type": "string" - }, - "lines": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "in_stock": { + "type": "boolean" }, - "ratios": { + "options": { "additionalProperties": { - "format": "float64", - "type": "number" + "type": "string" }, - "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" - }, - "sec.FinancialsResponse": { - "properties": { - "cik": { - "type": "integer" }, - "line_order": { - "items": { - "type": "string" - }, - "type": "array" + "price": { + "type": "number" }, - "name": { + "savings": { "type": "string" }, - "period": { - "example": "annual", + "sku": { "type": "string" }, - "periods": { - "items": { - "$ref": "#/definitions/sec.FinancialPeriod" - }, - "type": "array" - }, - "source_url": { + "status": { "type": "string" }, - "statement": { - "example": "income", + "title": { "type": "string" }, - "ticker": { - "type": "string" + "traditional_retail_price": { + "type": "number" } }, "type": "object" }, - "sec.FrameFact": { + "quince.Review": { "properties": { - "accession_number": { - "type": "string" - }, - "cik": { - "type": "integer" - }, - "end": { - "type": "string" - }, - "entity_name": { + "author": { "type": "string" }, - "form": { + "body": { "type": "string" }, - "start": { + "date_published": { "type": "string" }, - "value": { + "rating": { "type": "number" } }, "type": "object" }, - "sec.FramesResponse": { + "quince.SearchResponse": { "properties": { - "concept": { - "example": "Assets", + "category": { + "type": "string" + }, + "color": { "type": "string" }, "count": { "type": "integer" }, - "facts": { - "items": { - "$ref": "#/definitions/sec.FrameFact" - }, - "type": "array" - }, - "period": { - "example": "CY2024Q4I", + "country": { "type": "string" }, - "source_url": { + "department": { "type": "string" }, - "taxonomy": { - "example": "us-gaap", + "fetched_at": { "type": "string" }, - "total": { + "limit": { "type": "integer" }, - "unit": { - "example": "USD", - "type": "string" - } - }, - "type": "object" - }, - "sec.FullTextHit": { - "properties": { - "accession_number": { + "material": { "type": "string" }, - "cik": { + "max_price": { + "type": "number" + }, + "min_price": { + "type": "number" + }, + "page": { "type": "integer" }, - "company_names": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/quince.Product" }, "type": "array" }, - "document_url": { + "query": { "type": "string" }, - "filed_at": { + "size": { "type": "string" }, - "form": { + "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "sec.FullTextSearchResponse": { + "quince.SitemapItem": { "properties": { - "count": { - "type": "integer" - }, - "hits": { - "items": { - "$ref": "#/definitions/sec.FullTextHit" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "query": { + "loc": { "type": "string" }, - "source_url": { + "type": { "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "sec.HiringBlock": { + "quince.SitemapURLItem": { "properties": { - "new_last_30d": { - "type": "integer" - }, - "provider": { + "handle": { "type": "string" }, - "remote_pct": { - "type": "number" - }, - "source_url": { + "loc": { "type": "string" }, - "top_departments": { - "items": { - "$ref": "#/definitions/sec.NameCount" - }, - "type": "array" - }, - "total_open_roles": { - "type": "integer" + "type": { + "type": "string" } }, "type": "object" }, - "sec.Holding": { + "quince.SitemapURLsResponse": { "properties": { - "cusip": { - "type": "string" - }, - "investment_discretion": { - "type": "string" - }, - "issuer": { + "fetched_at": { "type": "string" }, - "put_call": { - "type": "string" + "limit": { + "type": "integer" }, - "share_type": { + "source_url": { "type": "string" }, - "shares": { - "type": "number" - }, - "title_of_class": { + "type": { "type": "string" }, - "value": { - "type": "number" + "urls": { + "items": { + "$ref": "#/definitions/quince.SitemapURLItem" + }, + "type": "array" } }, "type": "object" }, - "sec.HoldingsResponse": { + "quince.SitemapsResponse": { "properties": { - "accession_number": { - "type": "string" - }, - "cik": { - "type": "integer" - }, - "count": { - "type": "integer" - }, - "filing_date": { + "fetched_at": { "type": "string" }, - "holdings": { + "sitemaps": { "items": { - "$ref": "#/definitions/sec.Holding" + "$ref": "#/definitions/quince.SitemapItem" }, "type": "array" }, - "manager_name": { + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "quince.SuggestResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "report_date": { + "query": { "type": "string" }, "source_url": { "type": "string" }, - "total_holdings": { - "type": "integer" - }, - "total_value": { - "type": "number" - } - }, - "type": "object" - }, - "sec.InsiderResponse": { - "properties": { - "cik": { - "type": "integer" - }, - "count": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "ticker": { - "type": "string" - }, - "transactions": { - "items": { - "$ref": "#/definitions/sec.InsiderTransaction" - }, - "type": "array" - } - }, - "type": "object" - }, - "sec.InsiderTransaction": { - "properties": { - "accession_number": { - "type": "string" - }, - "acquired_or_disposed": { - "type": "string" - }, - "code": { - "type": "string" - }, - "filing_date": { - "type": "string" - }, - "filing_url": { - "type": "string" - }, - "form": { - "type": "string" - }, - "is_director": { - "type": "boolean" - }, - "is_officer": { - "type": "boolean" - }, - "is_ten_percent_owner": { - "type": "boolean" - }, - "owner_name": { - "type": "string" - }, - "owner_title": { - "type": "string" - }, - "price_per_share": { - "type": "number" - }, - "security_title": { - "type": "string" - }, - "shares": { - "type": "number" - }, - "shares_owned_after": { - "type": "number" - }, - "transaction_date": { - "type": "string" - } - }, - "type": "object" - }, - "sec.MarketBlock": { - "properties": { - "change_percent": { - "type": "number" - }, - "currency": { - "type": "string" - }, - "day_high": { - "type": "number" - }, - "day_low": { - "type": "number" - }, - "market_cap": { - "type": "number" - }, - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, - "symbol": { - "type": "string" - } - }, - "type": "object" - }, - "sec.NameCount": { - "properties": { - "count": { - "type": "integer" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "sec.NewsItem": { - "properties": { - "published_at": { - "type": "string" - }, - "publisher": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sec.SubmissionsResponse": { - "properties": { - "category": { - "example": "Large accelerated filer", - "type": "string" - }, - "cik": { - "example": 320193, - "type": "integer" - }, - "cik_padded": { - "example": "CIK0000320193", - "type": "string" - }, - "count": { - "type": "integer" - }, - "entity_type": { - "example": "operating", - "type": "string" - }, - "exchanges": { - "example": [ - "Nasdaq" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "filings": { - "items": { - "$ref": "#/definitions/sec.Filing" - }, - "type": "array" - }, - "fiscal_year_end": { - "example": "0930", - "type": "string" - }, - "former_names": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "example": "Apple Inc.", - "type": "string" - }, - "sic": { - "type": "string" - }, - "sic_description": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "state_of_incorporation": { - "example": "CA", - "type": "string" - }, - "tickers": { + "suggestions": { "items": { "type": "string" }, @@ -137170,30 +137452,14 @@ }, "type": "object" }, - "sec.companySearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sec.CompanySearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sec.filingResponseDoc": { + "quince.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.FilingResponse" + "$ref": "#/definitions/quince.CategoriesResponse" }, "msg": { "example": "OK", @@ -137202,14 +137468,14 @@ }, "type": "object" }, - "sec.filingSectionsResponseDoc": { + "quince.navigationResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.FilingSectionsResponse" + "$ref": "#/definitions/quince.NavigationResponse" }, "msg": { "example": "OK", @@ -137218,14 +137484,14 @@ }, "type": "object" }, - "sec.financialsResponseDoc": { + "quince.productFAQResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.FinancialsResponse" + "$ref": "#/definitions/quince.ProductFAQResponse" }, "msg": { "example": "OK", @@ -137234,14 +137500,14 @@ }, "type": "object" }, - "sec.framesResponseDoc": { + "quince.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.FramesResponse" + "$ref": "#/definitions/quince.ProductResponse" }, "msg": { "example": "OK", @@ -137250,14 +137516,14 @@ }, "type": "object" }, - "sec.fullTextResponseDoc": { + "quince.productReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.FullTextSearchResponse" + "$ref": "#/definitions/quince.ProductReviewsResponse" }, "msg": { "example": "OK", @@ -137266,14 +137532,14 @@ }, "type": "object" }, - "sec.holdingsResponseDoc": { + "quince.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.HoldingsResponse" + "$ref": "#/definitions/quince.SearchResponse" }, "msg": { "example": "OK", @@ -137282,14 +137548,14 @@ }, "type": "object" }, - "sec.insiderResponseDoc": { + "quince.sitemapURLsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.InsiderResponse" + "$ref": "#/definitions/quince.SitemapURLsResponse" }, "msg": { "example": "OK", @@ -137298,14 +137564,14 @@ }, "type": "object" }, - "sec.intelligenceResponseDoc": { + "quince.sitemapsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.CompanyIntelligenceResponse" + "$ref": "#/definitions/quince.SitemapsResponse" }, "msg": { "example": "OK", @@ -137314,14 +137580,14 @@ }, "type": "object" }, - "sec.submissionsResponseDoc": { + "quince.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.SubmissionsResponse" + "$ref": "#/definitions/quince.SuggestResponse" }, "msg": { "example": "OK", @@ -137330,82 +137596,52 @@ }, "type": "object" }, - "sephora.Answer": { + "raisingcanes.DirectoryChild": { "properties": { - "author": { - "type": "string" - }, - "helpful_votes": { - "type": "integer" - }, - "id": { - "type": "string" - }, - "is_brand_answer": { + "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" }, - "not_helpful_votes": { - "type": "integer" - }, - "submitted_at": { + "name": { + "example": "Louisiana", "type": "string" }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "sephora.Brand": { - "properties": { - "brand_id": { - "example": "5644", + "path": { + "example": "la", "type": "string" }, - "is_new": { - "type": "boolean" - }, - "name": { - "example": "Lancôme", - "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" }, - "slug": { - "example": "lancome", + "url": { "type": "string" } }, "type": "object" }, - "sephora.BrandsResponse": { + "raisingcanes.DirectoryResponse": { "properties": { - "brands": { + "children": { "items": { - "$ref": "#/definitions/sephora.Brand" + "$ref": "#/definitions/raisingcanes.DirectoryChild" }, "type": "array" }, + "count": { + "example": 38, + "type": "integer" + }, "fetched_at": { "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "total_count": { - "example": 373, - "type": "integer" - } - }, - "type": "object" - }, - "sephora.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/sephora.CategoryEntry" - }, - "type": "array" - }, - "fetched_at": { + "path": { + "example": "la", "type": "string" }, "source_url": { @@ -137414,2524 +137650,2553 @@ }, "type": "object" }, - "sephora.CategoryEntry": { + "raisingcanes.MenuItem": { "properties": { - "department": { - "example": "makeup", + "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" }, - "group": { - "example": "Eye", + "image_url": { "type": "string" }, "name": { - "example": "Mascara", - "type": "string" - }, - "slug": { - "example": "mascara", + "example": "The Box Combo®", "type": "string" } }, "type": "object" }, - "sephora.CategoryResponse": { + "raisingcanes.MenuResponse": { "properties": { - "brand": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category_id": { - "type": "string" - }, "count": { + "example": 23, "type": "integer" }, - "display_name": { - "example": "Makeup", - "type": "string" - }, "fetched_at": { "type": "string" }, - "filter": { - "items": { - "type": "string" - }, - "type": "array" - }, - "is_new": { - "type": "boolean" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 60, - "type": "integer" - }, - "price_max": { - "type": "integer" - }, - "price_min": { - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/sephora.SearchProduct" - }, - "type": "array" - }, - "rating_min": { - "type": "integer" - }, - "related_categories": { + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/raisingcanes.MenuSection" }, "type": "array" }, - "slug": { - "example": "makeup-cosmetics", - "type": "string" - }, - "sort_by": { - "example": "featured", - "type": "string" - }, "source_url": { "type": "string" - }, - "total_products": { - "example": 2492, - "type": "integer" } }, "type": "object" }, - "sephora.FullReview": { + "raisingcanes.MenuSection": { "properties": { - "author": { - "type": "string" - }, - "body": { - "type": "string" - }, - "helpful_votes": { - "type": "integer" - }, - "id": { + "anchor": { + "description": "Anchor is the section's in-page anchor slug, e.g. \"combos\".", + "example": "combos", "type": "string" }, - "location": { + "headline": { + "example": "Combos", "type": "string" }, - "not_helpful_votes": { - "type": "integer" - }, - "photo_urls": { - "items": { - "type": "string" - }, - "type": "array" - }, - "rating": { - "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": { - "type": "boolean" - }, - "secondary_ratings": { + "items": { "items": { - "$ref": "#/definitions/sephora.ReviewSecondaryRating" + "$ref": "#/definitions/raisingcanes.MenuItem" }, "type": "array" - }, - "submitted_at": { - "type": "string" - }, - "title": { - "type": "string" } }, "type": "object" }, - "sephora.ProductQuestionsResponse": { + "raisingcanes.NearbyResponse": { "properties": { "count": { + "example": 10, "type": "integer" }, "fetched_at": { "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { + "radius": { + "example": 25, "type": "integer" }, - "product_id": { + "source_url": { "type": "string" }, - "questions": { + "stores": { "items": { - "$ref": "#/definitions/sephora.Question" + "$ref": "#/definitions/raisingcanes.NearbyStore" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_questions": { + "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" }, - "sephora.ProductResponse": { + "raisingcanes.NearbyStore": { "properties": { - "brand": { - "example": "LANEIGE", - "type": "string" + "address": { + "$ref": "#/definitions/raisingcanes.StoreAddress" }, - "category": { - "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" }, - "fetched_at": { - "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.", + "items": { + "type": "string" + }, + "type": "array" }, - "image": { - "type": "string" + "latitude": { + "example": 40.710412, + "type": "number" + }, + "longitude": { + "example": -74.009937, + "type": "number" }, "name": { + "example": "Raising Cane's Chicken Fingers", "type": "string" }, - "product_group_id": { - "example": "P420652", + "path": { + "description": "Path is the /raisingcanes/store path for this store, so a caller can\ngo straight to the detail endpoint.", "type": "string" }, - "rating": { - "example": 4.3, - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "review_sample": { - "items": { - "$ref": "#/definitions/sephora.ReviewSample" - }, - "type": "array" - }, - "source_url": { + "price_range": { + "description": "PriceRange is Raising Cane's own relative price tier, e.g. ONE.", + "example": "ONE", "type": "string" }, - "url": { + "store_id": { + "example": "C986", "type": "string" }, - "variants": { - "items": { - "$ref": "#/definitions/sephora.Variant" - }, - "type": "array" + "timezone": { + "example": "America/New_York", + "type": "string" } }, "type": "object" }, - "sephora.ProductReviewsResponse": { + "raisingcanes.PromotionCategory": { "properties": { - "average_rating": { - "type": "number" - }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "product_id": { + "heading": { + "example": "Sweepstakes & Giveaways", "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": { - "type": "integer" - }, - "type": "array" - }, - "recommended_ratio": { - "type": "number" - }, - "reviews": { + "promotions": { "items": { - "$ref": "#/definitions/sephora.FullReview" + "$ref": "#/definitions/raisingcanes.PromotionSummary" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_reviews": { - "type": "integer" } }, "type": "object" }, - "sephora.Question": { + "raisingcanes.PromotionResponse": { "properties": { - "answer_count": { - "type": "integer" - }, - "answers": { + "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": { - "$ref": "#/definitions/sephora.Answer" + "type": "string" }, "type": "array" }, - "author": { + "fetched_at": { "type": "string" }, - "has_best_answer": { - "type": "boolean" - }, - "id": { + "path": { + "example": "first-50-promotion", "type": "string" }, - "submitted_at": { + "source_url": { "type": "string" }, - "text": { + "title": { + "example": "First 50 Promotion Details", "type": "string" } }, "type": "object" }, - "sephora.ReviewSample": { + "raisingcanes.PromotionSummary": { "properties": { - "author": { - "type": "string" - }, - "body": { - "type": "string" - }, - "date_published": { - "type": "string" - }, - "id": { + "name": { + "example": "First 50 Promotion Details", "type": "string" }, - "rating": { - "type": "number" - }, - "title": { + "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" }, - "sephora.ReviewSecondaryRating": { + "raisingcanes.PromotionsResponse": { "properties": { - "max_value": { - "example": 5, + "categories": { + "items": { + "$ref": "#/definitions/raisingcanes.PromotionCategory" + }, + "type": "array" + }, + "count": { + "example": 53, "type": "integer" }, - "name": { - "example": "Value", + "fetched_at": { "type": "string" }, - "value": { - "example": 4, - "type": "integer" + "source_url": { + "type": "string" } }, "type": "object" }, - "sephora.SearchProduct": { + "raisingcanes.StoreAddress": { "properties": { - "brand_name": { - "example": "tarte", + "city": { + "example": "Gonzales", "type": "string" }, - "image_url": { + "country": { + "example": "US", "type": "string" }, - "list_price": { - "example": "$25.00", + "line1": { + "example": "625 Airline Hwy", "type": "string" }, - "more_colors": { - "type": "integer" - }, - "product_id": { - "example": "P520769", + "line2": { "type": "string" }, - "product_name": { + "postal_code": { + "example": "70737", "type": "string" }, - "rating": { - "example": 4.5, - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "sku_id": { + "region": { + "example": "LA", "type": "string" - }, - "sponsored": { + } + }, + "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" }, - "url": { + "closes": { + "example": "00:00", "type": "string" }, - "value_price": { + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "09:00", "type": "string" } }, "type": "object" }, - "sephora.SearchResponse": { + "raisingcanes.StoreResponse": { "properties": { - "brand": { + "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" }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "filter": { + "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": { - "type": "string" + "$ref": "#/definitions/raisingcanes.StoreHours" }, "type": "array" }, - "is_new": { - "type": "boolean" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 60, - "type": "integer" - }, - "price_max": { - "example": 30, - "type": "integer" - }, - "price_min": { - "example": 15, - "type": "integer" - }, - "products": { + "drive_through_hours": { "items": { - "$ref": "#/definitions/sephora.SearchProduct" + "$ref": "#/definitions/raisingcanes.StoreHours" }, "type": "array" }, - "query": { - "example": "mascara", + "fetched_at": { "type": "string" }, - "rating_min": { - "example": 4, - "type": "integer" - }, - "related_searches": { + "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" }, - "sort_by": { - "example": "featured", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "total_products": { - "example": 180, - "type": "integer" - } - }, - "type": "object" - }, - "sephora.Store": { - "properties": { - "address": { - "$ref": "#/definitions/sephora.StoreAddress" - }, - "display_name": { - "example": "STATE STREET", + "google_place_id": { "type": "string" }, - "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" + "description": "Hours is the store's general published week of hours.", + "items": { + "$ref": "#/definitions/raisingcanes.StoreHours" + }, + "type": "array" }, "latitude": { + "example": 30.2371547, "type": "number" }, "longitude": { + "example": -90.9132179, "type": "number" }, - "same_day_delivery_enabled": { - "type": "boolean" + "name": { + "example": "Raising Cane's Chicken Fingers", + "type": "string" }, - "store_id": { - "example": "0662", + "path": { "type": "string" }, - "store_type": { - "example": "SEPHORA", + "phone_number": { + "example": "(225) 407-4134", "type": "string" }, - "url": { + "source_url": { + "type": "string" + }, + "store_id": { + "example": "C10", "type": "string" } }, "type": "object" }, - "sephora.StoreAddress": { + "raisingcanes.directoryResponseDoc": { "properties": { - "address1": { - "type": "string" - }, - "address2": { - "type": "string" - }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "mall_name": { - "type": "string" - }, - "phone": { - "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" }, - "postal_code": { - "type": "string" + "data": { + "$ref": "#/definitions/raisingcanes.DirectoryResponse" }, - "state": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sephora.StoreHours": { + "raisingcanes.menuResponseDoc": { "properties": { - "friday": { - "type": "string" - }, - "monday": { - "type": "string" - }, - "saturday": { - "type": "string" - }, - "sunday": { - "type": "string" - }, - "thursday": { - "type": "string" - }, - "time_zone": { - "example": "America/Chicago", - "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" }, - "tuesday": { - "type": "string" + "data": { + "$ref": "#/definitions/raisingcanes.MenuResponse" }, - "wednesday": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sephora.StoresResponse": { + "raisingcanes.nearbyResponseDoc": { "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" + "data": { + "$ref": "#/definitions/raisingcanes.NearbyResponse" }, - "latitude": { - "example": 41.88325, - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "raisingcanes.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" }, - "longitude": { - "example": -87.6323879, - "type": "number" + "data": { + "$ref": "#/definitions/raisingcanes.PromotionResponse" }, - "radius": { - "example": 50, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "raisingcanes.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" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/raisingcanes.PromotionsResponse" }, - "stores": { - "items": { - "$ref": "#/definitions/sephora.Store" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sephora.SuggestCategory": { + "raisingcanes.storeResponseDoc": { "properties": { - "name": { - "example": "Mascara", - "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": { - "example": "https://www.sephora.com/shop/mascara", - "type": "string" + "data": { + "$ref": "#/definitions/raisingcanes.StoreResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sephora.SuggestProduct": { + "rappler.AuthorArticle": { "properties": { - "brand_name": { - "example": "ILIA", - "type": "string" - }, - "image_url": { + "published_at": { "type": "string" }, - "product_id": { - "example": "P431750", + "section": { "type": "string" }, - "product_name": { + "title": { "type": "string" }, - "rating": { - "example": 4.1361, - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "sku_id": { + "url": { "type": "string" } }, "type": "object" }, - "sephora.SuggestResponse": { + "rappler.AuthorResponse": { "properties": { - "categories": { + "articles": { "items": { - "$ref": "#/definitions/sephora.SuggestCategory" + "$ref": "#/definitions/rappler.AuthorArticle" }, "type": "array" }, - "fetched_at": { + "bio": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/sephora.SuggestProduct" - }, - "type": "array" - }, - "query": { - "example": "masc", + "name": { "type": "string" }, - "source_url": { + "slug": { "type": "string" }, - "terms": { + "social_links": { "items": { - "$ref": "#/definitions/sephora.SuggestTerm" + "type": "string" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sephora.SuggestTerm": { + "rawstory.AuthorArticle": { "properties": { - "term": { - "example": "mascara", + "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" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sephora.Variant": { + "rawstory.AuthorResponse": { "properties": { - "availability": { - "example": "InStock", - "type": "string" - }, - "color": { - "example": "Acai Mango Smoothie", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/rawstory.AuthorArticle" + }, + "type": "array" }, - "currency_code": { - "example": "USD", + "bio": { "type": "string" }, - "image": { + "image_url": { "type": "string" }, "name": { "type": "string" }, - "price": { - "example": "25.00", + "slug": { "type": "string" }, - "sku": { + "social_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "sephora.brandsResponseDoc": { + "reachplc.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "label": { + "type": "string" }, - "data": { - "$ref": "#/definitions/sephora.BrandsResponse" + "label_url": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sephora.categoriesResponseDoc": { + "reachplc.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/reachplc.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/sephora.CategoriesResponse" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "email": { "type": "string" - } - }, - "type": "object" - }, - "sephora.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.CategoryResponse" + "has_next_page": { + "type": "boolean" }, - "msg": { - "example": "OK", + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "sephora.productQuestionsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "name": { + "type": "string" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.ProductQuestionsResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "twitter": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sephora.productResponseDoc": { + "reddit.Author": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sephora.ProductResponse" + "name": { + "example": "reddit_user", + "type": "string" }, - "msg": { - "example": "OK", + "profile_url": { + "example": "https://www.reddit.com/user/reddit_user/", "type": "string" } }, "type": "object" }, - "sephora.productReviewsResponseDoc": { + "reddit.Comment": { "properties": { - "code": { - "example": 200, + "author": { + "$ref": "#/definitions/reddit.Author" + }, + "award_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.ProductReviewsResponse" + "body": { + "example": "I agree with this post.", + "type": "string" }, - "msg": { - "example": "OK", + "created": { + "example": "2024-04-19T00:00:00Z", "type": "string" - } - }, - "type": "object" - }, - "sephora.searchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "created_utc": { + "example": 1713484800, "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.SearchResponse" + "depth": { + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", + "id": { + "example": "kabc123", + "type": "string" + }, + "name": { + "example": "t1_kabc123", + "type": "string" + }, + "parent_id": { + "example": "t3_1abcxyz", + "type": "string" + }, + "permalink": { + "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/kabc123/", "type": "string" + }, + "replies": { + "items": { + "$ref": "#/definitions/reddit.Comment" + }, + "type": "array" + }, + "score": { + "type": "integer" } }, "type": "object" }, - "sephora.storesResponseDoc": { + "reddit.CommentsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "comments": { + "items": { + "$ref": "#/definitions/reddit.Comment" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/sephora.StoresResponse" + "metrics_source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "msg": { - "example": "OK", - "type": "string" + "post": { + "$ref": "#/definitions/reddit.Post" + }, + "source": { + "$ref": "#/definitions/reddit.SourceDetail" } }, "type": "object" }, - "sephora.suggestResponseDoc": { + "reddit.DomainPostsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "domain": { + "example": "openai.com", + "type": "string" }, - "data": { - "$ref": "#/definitions/sephora.SuggestResponse" + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "msg": { - "example": "OK", + "posts": { + "items": { + "$ref": "#/definitions/reddit.Post" + }, + "type": "array" + }, + "sort": { + "example": "hot", + "type": "string" + }, + "source": { + "$ref": "#/definitions/reddit.SourceDetail" + }, + "time": { + "example": "week", "type": "string" } }, "type": "object" }, - "sevennewsau.AuthorResponse": { + "reddit.MultiSubredditPostsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "biography": { + "posts": { "items": { - "type": "string" + "$ref": "#/definitions/reddit.Post" }, "type": "array" }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "role": { + "sort": { + "example": "hot", "type": "string" }, - "slug": { - "type": "string" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "social_links": { + "subreddits": { + "example": [ + "OpenAI", + "MachineLearning" + ], "items": { "type": "string" }, "type": "array" }, - "url": { + "time": { + "example": "week", "type": "string" } }, "type": "object" }, - "sevennow.CatalogCategory": { + "reddit.Pagination": { "properties": { - "id": { - "example": "48423", + "after": { + "example": "t3_1abcxyz", "type": "string" }, - "name": { - "example": "Fresh Food", - "type": "string" + "limit": { + "example": 25, + "type": "integer" } }, "type": "object" }, - "sevennow.CatalogItem": { + "reddit.Post": { "properties": { - "age_restricted": { - "example": false, - "type": "boolean" + "author": { + "$ref": "#/definitions/reddit.Author" }, - "brand": { - "example": "Hot Food Pizza", - "type": "string" + "award_count": { + "type": "integer" }, - "calories": { - "example": "360", - "type": "string" + "comment_count": { + "type": "integer" }, - "category": { - "example": "Fresh Food", + "created": { + "example": "2024-04-19T00:00:00Z", "type": "string" }, - "flavor_name": { - "example": "Pepperoni Pizza", - "type": "string" + "created_utc": { + "example": 1713484800, + "type": "integer" }, - "image_url": { + "domain": { + "example": "self.OpenAI", "type": "string" }, - "name": { - "example": "Large Pizza - Ultimate Pepperoni", - "type": "string" + "estimated_downvotes": { + "type": "integer" }, - "original_price_cents": { - "example": 1099, + "estimated_upvotes": { "type": "integer" }, - "product_id": { - "example": "178322-2-6-2", + "flair": { + "example": "Discussion", "type": "string" }, - "promo_description": { - "example": "On Sale $6.99", + "id": { + "example": "1abcxyz", "type": "string" }, - "promo_price_cents": { - "example": 699, - "type": "integer" + "is_self": { + "type": "boolean" }, - "subcategory": { - "example": "Pizza", - "type": "string" + "is_video": { + "type": "boolean" }, - "upc": { - "example": "00072180687340", + "locked": { + "type": "boolean" + }, + "name": { + "example": "t3_1abcxyz", "type": "string" - } - }, - "type": "object" - }, - "sevennow.CatalogResponse": { - "properties": { - "active_items": { - "example": 2664, - "type": "integer" }, - "categories": { - "items": { - "$ref": "#/definitions/sevennow.CatalogCategory" - }, - "type": "array" + "over_18": { + "type": "boolean" }, - "fetched_at": { + "permalink": { + "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/", "type": "string" }, - "limit": { - "example": 20, + "score": { "type": "integer" }, - "out_of_stock_items": { - "example": 435, - "type": "integer" + "selftext": { + "example": "Discussion body", + "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/sevennow.CatalogSection" - }, - "type": "array" + "source_feed_url": { + "example": "https://www.reddit.com/r/OpenAI/.rss", + "type": "string" }, - "skip": { - "example": 0, - "type": "integer" + "stickied": { + "type": "boolean" }, - "source_url": { + "subreddit": { + "example": "OpenAI", "type": "string" }, - "store_id": { - "example": "39226", + "thumbnail": { + "example": "https://b.thumbs.redditmedia.com/example.jpg", + "type": "string" + }, + "title": { + "example": "OpenAI discussion thread", + "type": "string" + }, + "upvote_ratio": { + "type": "number" + }, + "url": { + "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/", "type": "string" + }, + "vote_counts_estimated": { + "type": "boolean" } }, "type": "object" }, - "sevennow.CatalogSection": { + "reddit.PostResponse": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "display_order": { - "example": 3, - "type": "integer" - }, - "items": { - "items": { - "$ref": "#/definitions/sevennow.CatalogItem" - }, - "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" + "metrics_source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "section_id": { - "example": "48423", - "type": "string" + "post": { + "$ref": "#/definitions/reddit.Post" }, - "total": { - "example": 200, - "type": "integer" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" } }, "type": "object" }, - "sevennow.CategoriesResponse": { + "reddit.SearchResponse": { "properties": { - "count": { - "example": 25, - "type": "integer" + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "departments": { - "description": "Departments are the store's permanent browsable departments.", + "posts": { "items": { - "$ref": "#/definitions/sevennow.CategoryRef" + "$ref": "#/definitions/reddit.Post" }, "type": "array" }, - "fetched_at": { + "query": { + "example": "openai", "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" + "sort": { + "example": "relevance", + "type": "string" }, - "source_url": { + "source": { + "$ref": "#/definitions/reddit.SourceDetail" + }, + "subreddit": { + "example": "OpenAI", "type": "string" }, - "store_id": { - "example": "39640", + "time": { + "example": "week", "type": "string" } }, "type": "object" }, - "sevennow.CategoryItem": { + "reddit.SourceDetail": { "properties": { - "age_restricted": { - "example": false, - "type": "boolean" - }, - "available": { - "example": true, - "type": "boolean" - }, - "available_quantity": { - "example": 100, - "type": "integer" + "type": { + "example": "rss", + "type": "string" }, - "calories": { - "example": "360", + "url": { + "example": "https://www.reddit.com/r/OpenAI/.rss", + "type": "string" + } + }, + "type": "object" + }, + "reddit.SubredditAboutResponse": { + "properties": { + "display_name": { + "example": "r/OpenAI", "type": "string" }, - "image_url": { + "feed_url": { + "example": "https://www.reddit.com/r/OpenAI.rss?limit=10", "type": "string" }, - "name": { - "example": "Large Pizza - Ultimate Pepperoni", + "latest_post_created": { + "example": "2024-04-19T00:00:00Z", "type": "string" }, - "price_cents": { - "example": 1299, + "latest_post_created_utc": { + "example": 1713484800, "type": "integer" }, - "product_id": { - "example": "178322-2-6-2", - "type": "string" - }, - "promo_description": { - "example": "On Sale $6.99", + "public_url": { + "example": "https://www.reddit.com/r/OpenAI/", "type": "string" }, - "promo_price_cents": { - "example": 699, + "recent_post_count": { + "example": 10, "type": "integer" }, - "subcategory": { - "example": "Pizza", + "sample_posts": { + "items": { + "$ref": "#/definitions/reddit.Post" + }, + "type": "array" + }, + "source": { + "$ref": "#/definitions/reddit.SourceDetail" + }, + "subreddit": { + "example": "OpenAI", "type": "string" }, - "upc": { - "example": "00052548537524", + "title": { + "example": "OpenAI", "type": "string" } }, "type": "object" }, - "sevennow.CategoryRef": { + "reddit.SubredditCommentsResponse": { "properties": { - "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" + "comments": { + "items": { + "$ref": "#/definitions/reddit.Comment" + }, + "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" + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "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" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "name": { - "example": "Drinks", + "subreddit": { + "example": "OpenAI", "type": "string" } }, "type": "object" }, - "sevennow.CategoryResponse": { + "reddit.SubredditPostsResponse": { "properties": { - "category_id": { - "example": "48423", - "type": "string" + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "fetched_at": { - "type": "string" + "posts": { + "items": { + "$ref": "#/definitions/reddit.Post" + }, + "type": "array" }, - "limit": { - "example": 20, - "type": "integer" + "sort": { + "example": "hot", + "type": "string" }, - "skip": { - "example": 0, - "type": "integer" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "source_url": { + "subreddit": { + "example": "OpenAI", "type": "string" }, - "stats": { - "$ref": "#/definitions/sevennow.CategoryStats" - }, - "store_id": { - "example": "39226", + "time": { + "example": "week", "type": "string" + } + }, + "type": "object" + }, + "reddit.TrendsResponse": { + "properties": { + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "subcategories": { + "posts": { "items": { - "$ref": "#/definitions/sevennow.CategorySubcategory" + "$ref": "#/definitions/reddit.Post" }, "type": "array" + }, + "sort": { + "example": "hot", + "type": "string" + }, + "source": { + "$ref": "#/definitions/reddit.SourceDetail" + }, + "time": { + "example": "day", + "type": "string" } }, "type": "object" }, - "sevennow.CategoryStats": { + "reddit.UserCommentsResponse": { "properties": { - "available": { - "example": 99, - "type": "integer" + "comments": { + "items": { + "$ref": "#/definitions/reddit.Comment" + }, + "type": "array" }, - "out_of_stock": { - "example": 22, - "type": "integer" + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "percentage_available": { - "example": 82, - "type": "integer" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "total": { - "example": 121, - "type": "integer" + "username": { + "example": "reddit", + "type": "string" } }, "type": "object" }, - "sevennow.CategorySubcategory": { + "reddit.UserPostsResponse": { "properties": { - "items": { + "pagination": { + "$ref": "#/definitions/reddit.Pagination" + }, + "posts": { "items": { - "$ref": "#/definitions/sevennow.CategoryItem" + "$ref": "#/definitions/reddit.Post" }, "type": "array" }, - "name": { - "example": "Pizza", + "source": { + "$ref": "#/definitions/reddit.SourceDetail" + }, + "username": { + "example": "reddit", "type": "string" } }, "type": "object" }, - "sevennow.Combo": { + "reddit.commentsResponseDoc": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "bundle_id": { - "example": "B00037", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "description": { - "type": "string" + "data": { + "$ref": "#/definitions/reddit.CommentsResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reddit.domainPostsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "7NOW Combo Builder SLIN 22 - $6.99 Pizza", - "type": "string" + "data": { + "$ref": "#/definitions/reddit.DomainPostsResponse" }, - "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", + "msg": { + "example": "OK", "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "sevennow.ComboGroup": { + "reddit.leadsResponseDoc": { "properties": { - "is_primary": { - "example": true, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/sevennow.DealItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/redditleads.Response" }, - "name": { - "example": "Eligible Whole Pizzas", + "msg": { + "example": "OK", "type": "string" - }, - "quantity": { - "example": 1, - "type": "integer" } }, "type": "object" }, - "sevennow.ComboResponse": { + "reddit.multiSubredditPostsResponseDoc": { "properties": { - "count": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "groups": { - "items": { - "$ref": "#/definitions/sevennow.ComboGroup" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.MultiSubredditPostsResponse" }, - "promo_id": { - "example": "6a849a8fa1df2409010c719f", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reddit.postResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/reddit.PostResponse" }, - "store_id": { - "example": "39640", + "msg": { + "example": "OK", "type": "string" - }, - "terms": { - "$ref": "#/definitions/sevennow.ComboTerms" } }, "type": "object" }, - "sevennow.ComboTerms": { + "reddit.searchResponseDoc": { "properties": { - "description": { - "example": "Any Whole Pizza $6.99 each", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "legal_terms": { - "type": "string" + "data": { + "$ref": "#/definitions/reddit.SearchResponse" }, - "title": { - "example": "$6.99 Pizza", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sevennow.CombosResponse": { + "reddit.subredditAboutResponseDoc": { "properties": { - "combos": { - "items": { - "$ref": "#/definitions/sevennow.Combo" - }, - "type": "array" - }, - "count": { - "example": 5, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/reddit.SubredditAboutResponse" }, - "store_id": { - "example": "39640", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sevennow.DealItem": { + "reddit.subredditCommentsResponseDoc": { "properties": { - "age_restricted": { - "example": false, - "type": "boolean" - }, - "available": { - "example": true, - "type": "boolean" - }, - "available_quantity": { - "example": 5, + "code": { + "example": 200, "type": "integer" }, - "brand": { - "example": "Ben & Jerry's", - "type": "string" + "data": { + "$ref": "#/definitions/reddit.SubredditCommentsResponse" }, - "calories": { - "example": "370", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reddit.subredditPostsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "category": { - "example": "Ice Cream", - "type": "string" + "data": { + "$ref": "#/definitions/reddit.SubredditPostsResponse" }, - "category_id": { - "example": "48396", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reddit.trendsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/reddit.TrendsResponse" }, - "name": { - "example": "Ben & Jerry's Sundae Cookie Vermont-ster 14oz", + "msg": { + "example": "OK", "type": "string" - }, - "price_cents": { - "example": 999, + } + }, + "type": "object" + }, + "reddit.userCommentsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "product_id": { - "example": "191743-0-1", - "type": "string" - }, - "promos": { - "items": { - "$ref": "#/definitions/sevennow.DealPromo" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.UserCommentsResponse" }, - "subcategory": { - "example": "Ben & Jerry's", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reddit.userPostsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "upc": { - "example": "00076840004294", + "data": { + "$ref": "#/definitions/reddit.UserPostsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sevennow.DealPromo": { + "redditleads.Lead": { "properties": { - "expiration_date": { - "example": "10/27/2026", + "author": { + "example": "someuser", "type": "string" }, - "id": { - "example": "6a9746d488cc35e1bbff1584", + "comment_count": { + "example": 12, + "type": "integer" + }, + "created": { + "example": "2026-08-01T00:00:00Z", "type": "string" }, - "long_description": { + "permalink": { + "example": "https://www.reddit.com/r/smallbusiness/comments/1abcxyz/", "type": "string" }, - "promo_price_cents": { - "example": 700, + "post_score": { + "example": 20, "type": "integer" }, - "promo_type": { - "example": "item", + "reason": { + "example": "Asking for a CRM and states a monthly budget.", "type": "string" }, - "short_description": { - "example": "On Sale $7", + "score": { + "example": 9, + "type": "integer" + }, + "signals": { + "items": { + "$ref": "#/definitions/redditleads.Signal" + }, + "type": "array" + }, + "subreddit": { + "example": "smallbusiness", "type": "string" }, - "start_date": { - "example": "09/01/2026", + "title": { + "example": "Looking for a CRM for a 3-person team, budget ~$50/mo", "type": "string" } }, "type": "object" }, - "sevennow.DealsResponse": { + "redditleads.Response": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { + "classifier": { + "example": "llm", "type": "string" }, - "has_more": { - "example": true, + "degraded": { + "example": false, "type": "boolean" }, - "items": { + "leads": { "items": { - "$ref": "#/definitions/sevennow.DealItem" + "$ref": "#/definitions/redditleads.Lead" }, "type": "array" }, - "limit": { - "example": 20, + "min_score": { + "example": 4, "type": "integer" }, - "skip": { - "example": 0, - "type": "integer" + "model": { + "example": "gpt-5.4", + "type": "string" }, - "source_url": { + "query": { + "example": "crm for small teams", "type": "string" }, "stats": { - "$ref": "#/definitions/sevennow.DealsStats" + "$ref": "#/definitions/redditleads.Stats" }, - "store_id": { - "example": "39640", + "subreddit": { + "example": "smallbusiness", + "type": "string" + } + }, + "type": "object" + }, + "redditleads.Signal": { + "properties": { + "id": { + "example": "explicit-ask", "type": "string" }, - "total": { - "example": 548, - "type": "integer" + "label": { + "example": "asking for a tool", + "type": "string" } }, "type": "object" }, - "sevennow.DealsStats": { + "redditleads.Stats": { "properties": { - "available": { - "example": 503, + "classified": { + "example": 12, "type": "integer" }, - "out_of_stock": { - "example": 45, + "prefiltered": { + "example": 88, "type": "integer" }, - "percentage_available": { - "example": 92, + "returned": { + "example": 9, "type": "integer" }, - "total": { - "example": 548, + "scanned": { + "example": 100, "type": "integer" } }, "type": "object" }, - "sevennow.NutritionEntry": { + "redfin.EstimateResponse": { "properties": { - "name": { - "example": "Total Fat", + "address": { "type": "string" }, - "value": { - "example": "11.0Gram", + "baths": { + "type": "number" + }, + "beds": { + "type": "number" + }, + "city_time_series": { + "items": { + "type": "number" + }, + "type": "array" + }, + "county_time_series": { + "items": { + "type": "number" + }, + "type": "array" + }, + "estimate": { + "type": "number" + }, + "estimate_text": { "type": "string" - } - }, - "type": "object" - }, - "sevennow.NutritionGroup": { - "properties": { - "entries": { + }, + "latitude": { + "type": "number" + }, + "listing_price": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "postal_code_time_series": { "items": { - "$ref": "#/definitions/sevennow.NutritionEntry" + "type": "number" }, "type": "array" }, - "group": { - "example": "fat", + "property_id": { + "example": "1715020", "type": "string" + }, + "property_time_series": { + "items": { + "type": "number" + }, + "type": "array" + }, + "sqft": { + "type": "number" + }, + "updated_at": { + "type": "integer" + }, + "year_built": { + "type": "integer" } }, "type": "object" }, - "sevennow.Offer": { + "redfin.PropertyItem": { "properties": { - "button_text": { + "address": { "type": "string" }, - "description": { - "example": "Any Whole Pizza $6.99 each", - "type": "string" + "baths": { + "type": "number" }, - "image_url": { + "beds": { + "type": "number" + }, + "city": { "type": "string" }, - "legal_terms": { + "days_on_market": { + "type": "integer" + }, + "hoa_monthly": { + "type": "number" + }, + "image": { "type": "string" }, - "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)", + "latitude": { + "type": "number" + }, + "listing_id": { "type": "string" }, - "offer_id": { - "example": "6a8879a4478334ff62f902d9-sE4Q1s2116PXg7di5yN2tt-7NOW_WEB", + "longitude": { + "type": "number" + }, + "lot_size": { + "type": "number" + }, + "mls_number": { "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" + "price": { + "type": "number" }, - "sort_order": { - "example": 2, - "type": "integer" + "price_per_sqft": { + "type": "number" }, - "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", + "property_id": { + "example": "1715020", "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", + "property_type": { "type": "string" }, - "target_url": { + "sqft": { + "type": "number" + }, + "state": { "type": "string" }, - "title": { - "example": "$6.99 Pizza", + "status": { "type": "string" }, - "web_image_url": { + "url": { + "type": "string" + }, + "year_built": { + "type": "integer" + }, + "zip": { "type": "string" } }, "type": "object" }, - "sevennow.OffersResponse": { + "redfin.PropertyResponse": { "properties": { - "count": { - "example": 4, + "address": { + "type": "string" + }, + "baths": { + "type": "number" + }, + "beds": { + "type": "number" + }, + "city": { + "type": "string" + }, + "days_on_market": { "type": "integer" }, - "fetched_at": { + "description": { "type": "string" }, - "offers": { + "facts": { "items": { - "$ref": "#/definitions/sevennow.Offer" + "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" + "hoa_monthly": { + "type": "number" }, - "store_id": { - "example": "39640", + "image": { "type": "string" - } - }, - "type": "object" - }, - "sevennow.PopularResponse": { - "properties": { - "fetched_at": { + }, + "latitude": { + "type": "number" + }, + "listing_id": { "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", + "longitude": { + "type": "number" + }, + "lot_size": { + "type": "number" + }, + "mls_number": { "type": "string" }, - "source_url": { + "price": { + "type": "number" + }, + "price_per_sqft": { + "type": "number" + }, + "property_id": { + "example": "1715020", "type": "string" }, - "store_id": { - "example": "39226", + "property_type": { "type": "string" }, - "suggestions": { - "example": [ - "ice cream", - "coffee", - "pizza" - ], - "items": { - "type": "string" - }, - "type": "array" + "sqft": { + "type": "number" }, - "vertical": { - "description": "Vertical echoes back which index was read.", - "example": "convenience", - "type": "string" - } - }, - "type": "object" - }, - "sevennow.ProductPromo": { - "properties": { - "expiration_date": { - "example": "01/05/2027", + "state": { "type": "string" }, - "id": { - "example": "6a849a8fa1df2409010c719f", + "status": { "type": "string" }, - "long_description": { - "example": "$6.99 Whole Pizza!", + "url": { "type": "string" }, - "promo_price_cents": { - "example": 699, + "year_built": { "type": "integer" }, - "short_description": { - "example": "On Sale $6.99", - "type": "string" - }, - "start_date": { - "example": "08/21/2026", + "zip": { "type": "string" } }, "type": "object" }, - "sevennow.ProductResponse": { + "redfin.RegionTrendsResponse": { "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.", + "avg_days_on_market": { "type": "string" }, - "brand": { - "example": "Hot Food Pizza", + "avg_down_payment": { "type": "string" }, - "calories": { - "example": "360", + "avg_num_offers": { "type": "string" }, - "category": { - "example": "Fresh Food", + "median_list_per_sqft": { "type": "string" }, - "category_id": { - "example": "48423", + "median_list_price": { + "example": "$1.29M", "type": "string" }, - "description": { + "median_sale_per_list": { "type": "string" }, - "fetched_at": { + "median_sale_per_sqft": { "type": "string" }, - "flavor_choices": { - "items": { - "type": "string" - }, - "type": "array" + "median_sale_price": { + "example": "$1.76M", + "type": "string" }, - "flavor_name": { - "example": "Pepperoni Pizza", + "num_homes_on_market": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "num_homes_sold": { + "type": "string" }, - "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" + "region_id": { + "example": 17151, + "type": "integer" }, - "limit_per_order": { - "example": 100, + "region_type": { + "example": 6, "type": "integer" }, - "name": { - "example": "Large Pizza - Ultimate Pepperoni", + "yoy_sale_per_sqft": { "type": "string" }, - "nutrition": { - "items": { - "$ref": "#/definitions/sevennow.NutritionGroup" - }, - "type": "array" + "yoy_sale_price": { + "type": "string" + } + }, + "type": "object" + }, + "redfin.SearchResponse": { + "properties": { + "location": { + "example": "San Francisco, CA", + "type": "string" }, - "nutrition_disclaimers": { - "description": "NutritionDisclaimers carries upstream's own RDI/daily-value notices.", - "items": { - "type": "string" - }, - "type": "array" + "page": { + "example": 1, + "type": "integer" }, - "product_id": { - "example": "178322-2-6-2", - "type": "string" + "region_id": { + "example": 17151, + "type": "integer" }, - "promos": { - "items": { - "$ref": "#/definitions/sevennow.ProductPromo" - }, - "type": "array" + "region_type": { + "example": 6, + "type": "integer" }, - "related_items": { + "results": { "items": { - "$ref": "#/definitions/sevennow.RelatedProduct" + "$ref": "#/definitions/redfin.PropertyItem" }, "type": "array" + } + }, + "type": "object" + }, + "redfin.SimilarResponse": { + "properties": { + "property_id": { + "example": "1715020", + "type": "string" }, - "size_choices": { + "results": { "items": { - "type": "string" + "$ref": "#/definitions/redfin.PropertyItem" }, "type": "array" + } + }, + "type": "object" + }, + "referrals.referralAttributionDoc": { + "properties": { + "campaign": { + "example": "spring-launch", + "type": "string" }, - "size_value": { - "example": "1WholePizza", + "code": { + "example": "A1B2C3D4E5F6", "type": "string" }, - "slin": { - "example": "178322", + "created_at": { "type": "string" }, - "source_url": { + "expires_at": { "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "example": "abc123", + "type": "string" }, - "upc": { - "example": "00072180687340", + "qualified_at": { + "type": "string" + }, + "reward_credits": { + "example": 10000, + "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", "type": "string" } }, "type": "object" }, - "sevennow.PromotionDetail": { + "referrals.referralClickRequestDoc": { "properties": { - "display_priority": { - "example": 2, - "type": "integer" - }, - "expiration_date": { - "example": "2026-10-27T23:59:59.000Z", + "click_id": { + "example": "refclk_abc123", "type": "string" }, - "id": { - "example": "6a9746d488cc35e1bbff1584", + "code": { + "example": "A1B2C3D4E5F6", "type": "string" }, - "long_description": { + "landing_path": { + "example": "/pricing", "type": "string" }, - "mark_down_slins": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "example": "US_7N_Ben & Jerry's Pints $7_(9/1/2026-10/27/2026) - FOR 7NOW", + "utm_campaign": { + "example": "spring-launch", "type": "string" }, - "offer_type": { - "example": "item_discount", + "utm_medium": { + "example": "email", "type": "string" }, - "promo_price_cents": { - "example": 700, - "type": "integer" - }, - "promo_type": { - "example": "item", + "utm_source": { + "example": "newsletter", "type": "string" - }, - "short_description": { - "example": "On Sale $7", + } + }, + "type": "object" + }, + "referrals.referralClickResponseDoc": { + "properties": { + "click_id": { + "example": "refclk_abc123", "type": "string" }, - "start_date": { - "example": "2026-09-01T00:00:00.000Z", + "code": { + "example": "A1B2C3D4E5F6", "type": "string" - }, - "terms": { + } + }, + "type": "object" + }, + "referrals.referralsEventsResponseDoc": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/referrals.referralAttributionDoc" }, "type": "array" } }, "type": "object" }, - "sevennow.PromotionResponse": { + "referrals.referralsMeResponseDoc": { "properties": { - "count": { - "example": 14, + "attribution_window_days": { + "example": 30, "type": "integer" }, - "fetched_at": { + "code": { + "example": "A1B2C3D4E5F6", "type": "string" }, - "has_more": { - "example": false, - "type": "boolean" - }, "items": { "items": { - "$ref": "#/definitions/sevennow.DealItem" + "$ref": "#/definitions/referrals.referralAttributionDoc" }, "type": "array" }, - "limit": { - "example": 20, + "monthly_referrer_reward_cap": { + "example": 10, "type": "integer" }, - "promo_id": { - "example": "6a9746d488cc35e1bbff1584", - "type": "string" - }, - "promotion": { - "$ref": "#/definitions/sevennow.PromotionDetail" - }, - "skip": { - "example": 0, + "referred_reward_credits": { + "example": 10000, "type": "integer" }, - "source_url": { - "type": "string" + "reward_credits": { + "example": 10000, + "type": "integer" }, - "store_id": { - "example": "39640", + "share_path": { + "example": "/r/A1B2C3D4E5F6", "type": "string" }, - "total": { - "example": 14, - "type": "integer" + "stats": { + "$ref": "#/definitions/referrals.referralsStatsDoc" } }, "type": "object" }, - "sevennow.RelatedProduct": { + "referrals.referralsStatsDoc": { "properties": { - "brand": { - "example": "Hot Food Pizza", - "type": "string" - }, - "calories": { - "example": "550", - "type": "string" + "attributed": { + "example": 3, + "type": "integer" }, - "category": { - "example": "Fresh Food", - "type": "string" + "capped": { + "example": 0, + "type": "integer" }, - "flavor_name": { - "example": "Sausage Breakfast Pizza", - "type": "string" + "expired": { + "example": 0, + "type": "integer" }, - "image_url": { - "type": "string" + "qualified": { + "example": 1, + "type": "integer" }, - "name": { - "example": "Whole Breakfast Pizza - Sausage", - "type": "string" + "rejected": { + "example": 0, + "type": "integer" }, - "product_id": { - "example": "170776-1-8", - "type": "string" + "review_required": { + "example": 0, + "type": "integer" }, - "size_value": { - "example": "1WholePizza", - "type": "string" + "rewarded": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "sevennow.SearchBrand": { + "resy.AvailabilityResponse": { "properties": { - "brand_id": { - "example": "262b9206-d316-3cf8-9ccf-a06998c5c0a1", - "type": "string" - }, - "brand_name": { - "example": "Pringles", + "date": { "type": "string" }, - "is_sponsored": { - "example": false, - "type": "boolean" + "party_size": { + "type": "integer" }, - "logo_url": { + "restaurant_id": { "type": "string" }, - "rank": { - "example": 25, - "type": "integer" + "timeslots": { + "items": { + "$ref": "#/definitions/resy.Timeslot" + }, + "type": "array" } }, "type": "object" }, - "sevennow.SearchItem": { + "resy.CuisinesResponse": { "properties": { - "age_restricted": { - "example": false, - "type": "boolean" + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" }, - "available": { - "example": true, - "type": "boolean" + "location": { + "type": "string" + } + }, + "type": "object" + }, + "resy.Event": { + "properties": { + "city": { + "type": "string" }, - "available_quantity": { - "example": 100, - "type": "integer" + "currency": { + "example": "USD", + "type": "string" }, - "bundle_id": { - "example": "B00037", + "date": { + "example": "2026-09-20", "type": "string" }, - "calories": { - "example": "360", + "description": { "type": "string" }, - "category": { - "example": "Fresh Food", + "end_time": { + "example": "17:00:00", "type": "string" }, - "image_url": { + "general_sale_date": { "type": "string" }, - "list_price_cents": { - "example": 1299, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "is_presale": { + "type": "boolean" + }, + "max_party_size": { + "example": 8, + "type": "integer" + }, + "min_party_size": { + "example": 1, "type": "integer" }, "name": { - "example": "Large Pizza - Ultimate Pepperoni", + "example": "Breakfast & Citi Field Trip", "type": "string" }, - "price_cents": { - "example": 1099, - "type": "integer" + "neighborhood": { + "type": "string" }, - "product_id": { - "example": "178322-2-6-2", + "price_max": { + "example": 85, + "type": "number" + }, + "price_min": { + "example": 85, + "type": "number" + }, + "restaurant_id": { "type": "string" }, - "product_type": { - "example": "product", + "restaurant_name": { "type": "string" }, - "promo_description": { - "example": "On Sale $6.99", + "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" }, - "promo_price_cents": { - "example": 699, + "shift_id": { "type": "integer" }, - "subcategory": { - "example": "Pizza", + "time": { + "example": "09:30:00", "type": "string" }, - "upc": { - "example": "00072180687340", + "url_slug": { + "type": "string" + }, + "why_we_like_it": { "type": "string" } }, "type": "object" }, - "sevennow.SearchResponse": { + "resy.EventDetailResponse": { "properties": { - "brands": { + "currency": { + "type": "string" + }, + "date": { + "type": "string" + }, + "description": { + "type": "string" + }, + "end_time": { + "type": "string" + }, + "enhanced_description": { + "type": "string" + }, + "enhanced_need_to_know": { + "type": "string" + }, + "general_sale_date": { + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/sevennow.SearchBrand" + "type": "string" }, "type": "array" }, - "count": { - "example": 20, + "is_presale": { + "type": "boolean" + }, + "max_party_size": { "type": "integer" }, - "fetched_at": { + "min_party_size": { + "type": "integer" + }, + "name": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "need_to_know": { + "type": "string" }, - "items": { + "packages": { "items": { - "$ref": "#/definitions/sevennow.SearchItem" + "$ref": "#/definitions/resy.EventPackage" }, "type": "array" }, - "limit": { - "example": 20, + "price_max": { + "type": "number" + }, + "price_min": { + "type": "number" + }, + "shift_id": { "type": "integer" }, - "query": { - "example": "pizza", + "time": { "type": "string" }, - "skip": { - "example": 0, + "url_slug": { + "type": "string" + } + }, + "type": "object" + }, + "resy.EventPackage": { + "properties": { + "max_party_size": { + "example": 8, "type": "integer" }, - "source_url": { + "min_party_size": { + "example": 1, + "type": "integer" + }, + "name": { + "example": "One Ticket for Breakfast & Citi Field Trip", "type": "string" }, - "store_id": { - "example": "39226", + "price_total": { + "example": 85, + "type": "number" + }, + "price_total_str": { + "example": "$85.00", "type": "string" }, - "total": { - "example": 100, + "quantity_remaining": { + "example": 22, + "type": "integer" + }, + "quantity_total": { + "example": 40, "type": "integer" + }, + "sold_out": { + "type": "boolean" + }, + "timeslots": { + "items": { + "$ref": "#/definitions/resy.Timeslot" + }, + "type": "array" + }, + "whats_included": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "sevennow.Store": { + "resy.EventsResponse": { "properties": { - "address": { - "example": "866 6TH AVE", - "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.", + "events": { "items": { - "$ref": "#/definitions/sevennow.StoreAlcoholDay" + "$ref": "#/definitions/resy.Event" }, "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", - "type": "string" - }, - "brand_logo_url": { + "location": { "type": "string" }, - "city": { - "example": "New York", + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "resy.Location": { + "properties": { + "code": { + "example": "ny", "type": "string" }, "country": { - "example": "US", + "example": "United States", "type": "string" }, - "county": { - "example": "New York County", + "country_code": { + "example": "US", "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", + "id": { + "example": "1", "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", + "example": "New York", "type": "string" }, - "store_id": { - "example": "39226", + "time_zone": { + "example": "America/New_York", "type": "string" }, - "zip": { - "example": "10001", + "url_slug": { + "example": "new-york-ny", "type": "string" } }, "type": "object" }, - "sevennow.StoreAlcoholDay": { + "resy.LocationsResponse": { "properties": { - "day": { - "example": "Sunday", - "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.", + "locations": { "items": { - "$ref": "#/definitions/sevennow.StoreAlcoholWindow" + "$ref": "#/definitions/resy.Location" }, "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "sevennow.StoreAlcoholWindow": { + "resy.RestaurantResponse": { "properties": { - "end_time": { - "example": "2359", + "about": { "type": "string" }, - "start_time": { - "example": "0800", + "address": { + "example": "181 Thompson Street", "type": "string" - } - }, - "type": "object" - }, - "sevennow.StoresResponse": { - "properties": { - "count": { - "example": 15, - "type": "integer" }, - "fetched_at": { + "average_cost_per_person": { + "example": "$150", "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", + "city": { + "example": "New York", "type": "string" }, - "latitude": { - "example": 40.7480997, - "type": "number" - }, - "longitude": { - "example": -73.9849926, - "type": "number" - }, - "query": { - "example": "350 5th Ave, New York, NY", + "country": { "type": "string" }, - "resolved_address": { - "example": "350 5th Ave, New York, NY 10118, USA", + "cross_street": { "type": "string" }, - "source_url": { + "cuisine": { + "example": "Italian", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/sevennow.Store" - }, - "type": "array" - } - }, - "type": "object" - }, - "sevennow.SuggestResponse": { - "properties": { - "fetched_at": { + "currency_symbol": { + "example": "$", "type": "string" }, - "query": { - "example": "chi", + "description": { "type": "string" }, - "source_url": { + "id": { "type": "string" }, - "suggestions": { - "example": [ - "chips ahoy", - "chips", - "chicken" - ], + "images": { "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" }, - "data": { - "$ref": "#/definitions/sevennow.CatalogResponse" + "latitude": { + "type": "number" }, - "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" + "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" }, - "data": { - "$ref": "#/definitions/sevennow.CategoriesResponse" + "longitude": { + "type": "number" }, - "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", + "max_party_size": { + "example": 14, "type": "integer" }, - "data": { - "$ref": "#/definitions/sevennow.CategoryResponse" + "menu_url": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "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", + "min_party_size": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/sevennow.ComboResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" + "need_to_know": { + "type": "string" + }, + "neighborhood": { + "example": "Greenwich Village", + "type": "string" + }, + "phone_number": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "price_range": { + "example": 4, + "type": "integer" + }, + "rating": { + "example": 4.75, + "type": "number" + }, + "region": { + "example": "NY", + "type": "string" + }, + "review_count": { + "example": 33837, + "type": "integer" + }, + "url_slug": { + "example": "carbone", + "type": "string" + }, + "website": { + "type": "string" + }, + "why_we_like_it": { + "type": "string" + } + }, + "type": "object" }, - "sevennow.combosResponseDoc": { + "resy.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", + "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" + }, + "results": { + "items": { + "$ref": "#/definitions/resy.SearchResult" + }, + "type": "array" + }, + "term": { + "type": "string" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "resy.SearchResult": { + "properties": { + "city": { + "example": "New York", + "type": "string" + }, + "cuisines": { + "example": [ + "Italian" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "example": "6194", + "type": "string" + }, + "latitude": { + "type": "number" + }, + "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" + }, + "location_url_slug": { + "example": "new-york-ny", + "type": "string" + }, + "longitude": { + "type": "number" + }, + "name": { + "example": "Carbone", + "type": "string" + }, + "neighborhood": { + "example": "Greenwich Village", + "type": "string" + }, + "phone_number": { + "type": "string" + }, + "price_range": { + "example": 4, "type": "integer" }, - "data": { - "$ref": "#/definitions/sevennow.CombosResponse" + "rating": { + "example": 4.75, + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "region": { + "example": "NY", + "type": "string" + }, + "review_count": { + "example": 33837, + "type": "integer" + }, + "timeslots": { + "items": { + "$ref": "#/definitions/resy.Timeslot" + }, + "type": "array" + }, + "url_slug": { + "example": "carbone", + "type": "string" } }, "type": "object" }, - "sevennow.dealsResponseDoc": { + "resy.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", + "end": { + "example": "2026-09-20 20:30:00", + "type": "string" + }, + "max_party_size": { + "example": 4, "type": "integer" }, - "data": { - "$ref": "#/definitions/sevennow.DealsResponse" + "min_party_size": { + "example": 1, + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "seating_type": { + "example": "Dining Room", + "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", + "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.", + "type": "string" } }, "type": "object" }, - "sevennow.offersResponseDoc": { + "resy.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", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sevennow.OffersResponse" + "$ref": "#/definitions/resy.AvailabilityResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sevennow.popularResponseDoc": { + "resy.cuisinesResponseDoc": { "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/sevennow.PopularResponse" + "$ref": "#/definitions/resy.CuisinesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sevennow.productResponseDoc": { + "resy.eventDetailResponseDoc": { "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/sevennow.ProductResponse" + "$ref": "#/definitions/resy.EventDetailResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sevennow.promotionResponseDoc": { + "resy.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/sevennow.PromotionResponse" + "$ref": "#/definitions/resy.EventsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sevennow.searchResponseDoc": { + "resy.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", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sevennow.SearchResponse" + "$ref": "#/definitions/resy.LocationsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sevennow.storesResponseDoc": { + "resy.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/sevennow.StoresResponse" + "$ref": "#/definitions/resy.RestaurantResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sevennow.suggestResponseDoc": { + "resy.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/sevennow.SuggestResponse" + "$ref": "#/definitions/resy.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sfgate.AuthorArticle": { + "retailmenot.AutocompleteGroup": { "properties": { - "summary": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/retailmenot.AutocompleteItem" + }, + "type": "array" }, - "title": { + "label": { "type": "string" }, - "url": { + "name": { "type": "string" } }, "type": "object" }, - "sfgate.AuthorResponse": { + "retailmenot.AutocompleteItem": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/sfgate.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "category_slug": { + "description": "CategorySlug is set on category suggestions; use it with\nGET /retailmenot/category.", + "type": "string" }, - "image_url": { + "domain": { "type": "string" }, - "job_title": { + "meta_info": { "type": "string" }, - "name": { + "offer_id": { "type": "string" }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" + "title": { + "type": "string" }, "url": { "type": "string" @@ -139939,1077 +140204,1063 @@ }, "type": "object" }, - "shakeshack.DeliveryFeeTier": { + "retailmenot.AutocompleteResponse": { "properties": { - "amount": { - "example": 1.99, - "type": "number" - }, - "subtotal_minimum": { - "example": 12.01, - "type": "number" + "groups": { + "items": { + "$ref": "#/definitions/retailmenot.AutocompleteGroup" + }, + "type": "array" } }, "type": "object" }, - "shakeshack.LocationSummary": { + "retailmenot.BlogCategoriesResponse": { "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" + "categories": { + "items": { + "$ref": "#/definitions/retailmenot.BlogCategory" + }, + "type": "array" } }, "type": "object" }, - "shakeshack.LocationsResponse": { + "retailmenot.BlogCategory": { "properties": { "count": { - "example": 100, "type": "integer" }, - "fetched_at": { + "description": { "type": "string" }, - "locations": { - "items": { - "$ref": "#/definitions/shakeshack.LocationSummary" - }, - "type": "array" - }, - "page": { - "example": 1, + "id": { "type": "integer" }, - "source_url": { + "name": { "type": "string" }, - "total": { - "example": 1322, + "parent_id": { "type": "integer" }, - "total_pages": { - "example": 14, - "type": "integer" + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "shakeshack.MenuCategory": { + "retailmenot.BlogLink": { "properties": { "name": { - "example": "Burgers & More", "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/shakeshack.MenuProduct" - }, - "type": "array" + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "shakeshack.MenuProduct": { + "retailmenot.BlogPostResponse": { "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", + "author": { "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", + "categories": { + "items": { + "$ref": "#/definitions/retailmenot.BlogTerm" + }, + "type": "array" + }, + "coupon_categories": { + "items": { + "$ref": "#/definitions/retailmenot.BlogLink" + }, + "type": "array" + }, + "description": { "type": "string" }, - "base_calories": { - "description": "BaseCalories is 0 when upstream reports none.", - "example": 880, - "type": "integer" + "excerpt": { + "type": "string" }, - "chain_product_id": { - "example": 1119032, + "id": { "type": "integer" }, - "description": { + "image_url": { "type": "string" }, - "image_url": { + "modified": { "type": "string" }, - "modifiers": { + "published": { + "type": "string" + }, + "sections": { "items": { - "$ref": "#/definitions/shakeshack.ModifierGroup" + "$ref": "#/definitions/retailmenot.BlogSection" }, "type": "array" }, - "name": { - "example": "West Coast Burger", + "slug": { "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" + "stores": { + "items": { + "$ref": "#/definitions/retailmenot.BlogLink" + }, + "type": "array" + }, + "tags": { + "items": { + "$ref": "#/definitions/retailmenot.BlogTerm" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "shakeshack.MenuResponse": { + "retailmenot.BlogPostSummary": { "properties": { + "author": { + "type": "string" + }, "categories": { "items": { - "$ref": "#/definitions/shakeshack.MenuCategory" + "$ref": "#/definitions/retailmenot.BlogTerm" }, "type": "array" }, - "category_count": { - "example": 11, - "type": "integer" + "description": { + "type": "string" }, - "fetched_at": { + "excerpt": { "type": "string" }, - "location_id": { - "example": 14992, + "id": { "type": "integer" }, - "product_count": { - "example": 76, - "type": "integer" + "image_url": { + "type": "string" }, - "source_url": { + "modified": { + "type": "string" + }, + "published": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "tags": { + "items": { + "$ref": "#/definitions/retailmenot.BlogTerm" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "shakeshack.ModifierChoice": { + "retailmenot.BlogPostsResponse": { "properties": { - "calorie_delta": { - "example": -1, + "category": { + "type": "string" + }, + "order": { + "enum": [ + "desc", + "asc" + ], + "type": "string" + }, + "order_by": { + "enum": [ + "date", + "modified", + "title", + "relevance" + ], + "type": "string" + }, + "page": { "type": "integer" }, - "chain_option_id": { - "example": 213463, + "page_size": { "type": "integer" }, - "groups": { + "posts": { "items": { - "$ref": "#/definitions/shakeshack.ModifierGroup" + "$ref": "#/definitions/retailmenot.BlogPostSummary" }, "type": "array" }, - "is_default": { - "type": "boolean" + "query": { + "type": "string" }, - "name": { - "example": "No Lettuce", + "tag": { "type": "string" }, - "option_id": { - "example": 4127201667, + "total": { "type": "integer" }, - "price": { - "example": 0, - "type": "number" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "shakeshack.ModifierGroup": { + "retailmenot.BlogSection": { "properties": { - "chain_modifier_id": { - "example": 38041, - "type": "integer" - }, - "choices": { + "lists": { "items": { - "$ref": "#/definitions/shakeshack.ModifierChoice" + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" }, - "group_id": { - "example": 890226904, - "type": "integer" - }, - "name": { - "example": "Remove Lettuce:", - "type": "string" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": { - "example": "REMOVAL", + "title": { "type": "string" } }, "type": "object" }, - "shakeshack.NearbyAddress": { + "retailmenot.BlogTagsResponse": { "properties": { - "city": { - "example": "New York", - "type": "string" + "page": { + "type": "integer" }, - "postal_code": { - "example": "10036", - "type": "string" + "page_size": { + "type": "integer" }, - "region": { - "example": "NY", + "query": { "type": "string" }, - "street": { - "example": "691 Eighth Avenue", - "type": "string" + "tags": { + "items": { + "$ref": "#/definitions/retailmenot.BlogTerm" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "shakeshack.NearbyHours": { + "retailmenot.BlogTerm": { "properties": { - "closes": { - "example": "23:00", + "count": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "name": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "slug": { "type": "string" }, - "opens": { - "example": "10:00", + "url": { "type": "string" } }, "type": "object" }, - "shakeshack.NearbyLocation": { + "retailmenot.CashBackResponse": { "properties": { - "address": { - "$ref": "#/definitions/shakeshack.NearbyAddress" - }, - "delivery_fees": { - "items": { - "$ref": "#/definitions/shakeshack.DeliveryFeeTier" - }, - "type": "array" - }, - "distance_miles": { - "example": 0.19, - "type": "number" - }, - "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\".", + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/retailmenot.OfferSection" }, "type": "array" - }, - "hours": { - "description": "Hours is the current rolling week, Monday-first.", + } + }, + "type": "object" + }, + "retailmenot.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/shakeshack.NearbyHours" + "$ref": "#/definitions/retailmenot.Category" }, "type": "array" - }, - "is_online_ordering_available": { - "type": "boolean" - }, - "latitude": { - "example": 40.7584054, - "type": "number" - }, - "location_id": { - "example": 14992, + } + }, + "type": "object" + }, + "retailmenot.Category": { + "properties": { + "level": { "type": "integer" }, - "longitude": { - "example": -73.9891734, - "type": "number" - }, "name": { - "example": "Theater District", "type": "string" }, - "phone_number": { - "example": "(646) 435-0135", + "parent_slug": { "type": "string" }, - "timezone": { - "example": "America/New_York", + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "shakeshack.NearbyResponse": { + "retailmenot.CategoryOffer": { "properties": { - "count": { - "example": 10, - "type": "integer" + "discount": { + "type": "string" }, - "fetched_at": { + "id": { "type": "string" }, - "locations": { - "items": { - "$ref": "#/definitions/shakeshack.NearbyLocation" - }, - "type": "array" + "offer_type": { + "type": "string" }, - "radius_miles": { - "example": 15, + "position": { "type": "integer" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "shakeshack.StoreAddress": { - "properties": { - "city": { - "example": "Houston", + "store_domain": { "type": "string" }, - "country": { - "example": "United States", + "store_name": { "type": "string" }, - "line1": { - "example": "8815 W Loop S", + "store_url": { "type": "string" }, - "postal_code": { - "example": "77096", + "title": { "type": "string" }, - "region": { - "example": "TX", + "type_label": { "type": "string" } }, "type": "object" }, - "shakeshack.StoreHours": { + "retailmenot.CategoryRef": { "properties": { - "closed": { - "description": "Closed is true when Shake Shack publishes the day with no open\ninterval.", - "example": false, - "type": "boolean" - }, - "closes": { - "example": "23:00", + "name": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "slug": { "type": "string" }, - "opens": { - "example": "10:00", + "url": { "type": "string" } }, "type": "object" }, - "shakeshack.StoreResponse": { + "retailmenot.CategoryResponse": { "properties": { - "address": { - "$ref": "#/definitions/shakeshack.StoreAddress" + "description": { + "type": "string" }, - "fetched_at": { + "name": { "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).", + "offers": { "items": { - "$ref": "#/definitions/shakeshack.StoreHours" + "$ref": "#/definitions/retailmenot.CategoryOffer" }, "type": "array" }, - "latitude": { - "example": 29.6856442, - "type": "number" - }, - "longitude": { - "example": -95.4574726, - "type": "number" - }, - "name": { - "example": "Meyerland", - "type": "string" + "page": { + "type": "integer" }, - "order_types": { - "description": "OrderTypes are the fulfillment types Shake Shack publishes for this\nlocation, e.g. \"Dine In\", \"Delivery\".", + "similar_stores": { "items": { - "type": "string" + "$ref": "#/definitions/retailmenot.StoreRef" }, "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.", - "type": "string" - }, - "phone_number": { - "example": "281-819-8763", - "type": "string" - }, - "source_url": { - "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", + "slug": { "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", - "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", - "type": "integer" }, - "data": { - "$ref": "#/definitions/shakeshack.MenuResponse" + "stats": { + "items": { + "$ref": "#/definitions/retailmenot.Stat" + }, + "type": "array" }, - "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", + "total_pages": { "type": "integer" }, - "data": { - "$ref": "#/definitions/shakeshack.NearbyResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "url": { + "type": "string" } }, "type": "object" }, - "shakeshack.storeResponseDoc": { + "retailmenot.DealEventRef": { "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/shakeshack.StoreResponse" + "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" }, - "shein.AggregationFilters": { + "retailmenot.DealEventResponse": { "properties": { - "category": { - "$ref": "#/definitions/shein.FacetCategory" + "name": { + "type": "string" }, - "filters": { + "sections": { "items": { - "$ref": "#/definitions/shein.FacetGroup" + "$ref": "#/definitions/retailmenot.OfferSection" }, "type": "array" }, - "keyword": { - "example": "dress", - "type": "string" - }, - "max_price": { - "example": "569", + "slug": { "type": "string" }, - "min_price": { - "example": "18", + "url": { "type": "string" } }, "type": "object" }, - "shein.AutocompleteResponse": { + "retailmenot.DealEventsResponse": { "properties": { - "suggestions": { + "events": { "items": { - "$ref": "#/definitions/shein.AutocompleteSuggestion" + "$ref": "#/definitions/retailmenot.DealEventRef" }, "type": "array" - }, - "word": { - "example": "dres", - "type": "string" } }, "type": "object" }, - "shein.AutocompleteSuggestion": { + "retailmenot.FAQ": { "properties": { - "type": { - "example": "common", - "type": "string" - }, - "word": { - "example": "Dress For Women", + "answer": { "type": "string" }, - "word_id": { - "example": "163784", + "question": { "type": "string" } }, "type": "object" }, - "shein.CategoryFiltersResponse": { + "retailmenot.HomeResponse": { "properties": { - "cat_id": { - "example": "1766", - "type": "string" - }, - "currency": { - "example": "HK$", - "type": "string" - }, - "filters": { + "faqs": { "items": { - "$ref": "#/definitions/shein.Filter" + "$ref": "#/definitions/retailmenot.FAQ" }, "type": "array" }, - "max_price": { - "example": 569, - "type": "number" - }, - "min_price": { - "example": 18, - "type": "number" - } - }, - "type": "object" - }, - "shein.CategoryGoodsResponse": { - "properties": { - "cat_id": { - "example": "1727", - "type": "string" - }, - "category_name": { - "example": "Dresses", - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "products": { + "product_deals": { "items": { - "$ref": "#/definitions/shein.Product" + "$ref": "#/definitions/retailmenot.ProductDeal" }, "type": "array" }, - "total": { - "example": 1187, - "type": "integer" - } - }, - "type": "object" - }, - "shein.CategoryNavResponse": { - "properties": { - "cat_id": { - "example": "1766", - "type": "string" - }, - "navs": { + "sections": { "items": { - "$ref": "#/definitions/shein.NavTab" + "$ref": "#/definitions/retailmenot.OfferSection" }, "type": "array" } }, "type": "object" }, - "shein.ColorVariant": { + "retailmenot.Offer": { "properties": { - "color_image": { + "button_text": { "type": "string" }, - "color_name": { - "example": "Blue", + "cash_back": { "type": "string" }, - "goods_id": { - "example": "162996968", - "type": "string" + "details": { + "items": { + "type": "string" + }, + "type": "array" }, - "goods_sn": { - "example": "sz25081190840936964", + "discount": { "type": "string" }, - "goods_url_name": { + "id": { "type": "string" }, - "image": { - "type": "string" - } - }, - "type": "object" - }, - "shein.FacetCategory": { - "properties": { - "children": { + "labels": { "items": { - "$ref": "#/definitions/shein.FacetCategory" + "type": "string" }, "type": "array" }, - "id": { - "example": "2030", + "offer_type": { + "description": "OfferType is RetailMeNot's offer kind, for example \"COUPON\", \"SALE\", or\n\"REWARD\" (observed values; returned as data).", "type": "string" }, - "name": { - "example": "Women Clothing", + "position": { + "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" + }, + "title": { + "type": "string" + }, + "type_label": { "type": "string" } }, "type": "object" }, - "shein.FacetGroup": { + "retailmenot.OfferSection": { "properties": { - "id": { - "example": "87", + "category_slug": { "type": "string" }, "name": { - "example": "Size", "type": "string" }, - "options": { + "offers": { "items": { - "$ref": "#/definitions/shein.FacetOption" + "$ref": "#/definitions/retailmenot.CategoryOffer" }, "type": "array" } }, "type": "object" }, - "shein.FacetOption": { + "retailmenot.ProductDeal": { "properties": { - "id": { - "example": "87_757", + "discount": { "type": "string" }, - "name": { - "example": "XXS", + "id": { "type": "string" - } - }, - "type": "object" - }, - "shein.Filter": { - "properties": { - "node_id": { - "example": "87", + }, + "image_url": { "type": "string" }, - "node_name": { - "example": "Size", + "position": { + "type": "integer" + }, + "product_url": { "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/shein.FilterOption" - }, - "type": "array" + "title": { + "type": "string" } }, "type": "object" }, - "shein.FilterOption": { + "retailmenot.Rating": { "properties": { - "node_id": { - "example": "87_757", - "type": "string" + "count": { + "type": "integer" }, - "node_name": { - "example": "XXS", - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "shein.Keyword": { + "retailmenot.Stat": { "properties": { - "from": { - "example": "search", - "type": "string" - }, - "type": { - "example": "goods_pool", - "type": "string" - }, - "word": { - "example": "Mother And Daughter", + "label": { "type": "string" }, - "word_id": { - "example": "199828", - "type": "string" + "value": { + "type": "integer" } }, "type": "object" }, - "shein.NavTab": { + "retailmenot.StoreRef": { "properties": { - "goods_id": { - "example": "52544880", - "type": "string" - }, - "nav_id": { - "example": "1738", - "type": "string" - }, - "nav_img": { + "domain": { "type": "string" }, - "nav_name": { - "example": "T-Shirts", + "name": { "type": "string" }, - "nav_type": { - "example": "1", + "url": { "type": "string" } }, "type": "object" }, - "shein.Product": { + "retailmenot.StoreResponse": { "properties": { - "brand_code": { - "example": "1qmfm", - "type": "string" - }, - "category_id": { - "example": "12476", + "address": { "type": "string" }, - "category_name": { - "example": "Women Long Dresses", - "type": "string" + "category": { + "$ref": "#/definitions/retailmenot.CategoryRef" }, - "color_img": { + "description": { "type": "string" }, - "comment_avg": { - "example": "4.68", + "domain": { "type": "string" }, - "comment_count": { - "example": 1001, - "type": "integer" - }, - "detail_images": { + "faqs": { "items": { - "type": "string" + "$ref": "#/definitions/retailmenot.FAQ" }, "type": "array" }, - "goods_id": { - "example": "163003837", + "heading": { "type": "string" }, - "goods_img": { + "last_reviewed": { "type": "string" }, - "goods_name": { - "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", + "logo_url": { "type": "string" }, - "goods_sn": { - "example": "sz25081193234595996", + "market": { + "enum": [ + "us", + "ca" + ], "type": "string" }, - "goods_url_name": { - "example": "Sweetra-Women-s-Oblique-Shoulder-Fitted-Bandeau-Dress", + "name": { "type": "string" }, - "mall_code": { - "example": "1", - "type": "string" - }, - "on_sale": { - "example": true, - "type": "boolean" + "offers": { + "items": { + "$ref": "#/definitions/retailmenot.Offer" + }, + "type": "array" }, - "retail_price": { - "example": "HK$119.00", + "phone": { "type": "string" }, - "sale_price": { - "example": "HK$119.00", - "type": "string" + "rating": { + "$ref": "#/definitions/retailmenot.Rating" }, - "sold_out": { - "example": false, - "type": "boolean" + "similar_stores": { + "items": { + "$ref": "#/definitions/retailmenot.StoreRef" + }, + "type": "array" }, - "spu": { - "example": "z250520775866", - "type": "string" + "stats": { + "items": { + "$ref": "#/definitions/retailmenot.Stat" + }, + "type": "array" }, - "store_code": { - "example": "7945614031", + "url": { "type": "string" }, - "usd_price": { - "example": "$15.16", + "website": { "type": "string" } }, "type": "object" }, - "shein.ProductDetail": { + "retailmenot.StoresResponse": { "properties": { - "brand_code": { - "example": "1qmfm", - "type": "string" - }, - "category_id": { - "example": "12476", + "letter": { "type": "string" }, - "category_name": { - "example": "Women Dresses", + "market": { + "enum": [ + "us", + "ca" + ], "type": "string" }, - "color_variants": { + "stores": { "items": { - "$ref": "#/definitions/shein.ColorVariant" + "$ref": "#/definitions/retailmenot.StoreRef" }, "type": "array" - }, - "description": { + } + }, + "type": "object" + }, + "retailmenot.autocompleteResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.AutocompleteResponse" + } + }, + "type": "object" + }, + "retailmenot.blogCategoriesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.BlogCategoriesResponse" + } + }, + "type": "object" + }, + "retailmenot.blogPostResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.BlogPostResponse" + } + }, + "type": "object" + }, + "retailmenot.blogPostsResponseDoc": { + "properties": { + "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" + }, + "reuters.ArticleItem": { + "properties": { + "image_url": { "type": "string" }, - "goods_id": { - "example": "163003837", + "title": { "type": "string" }, - "goods_name": { - "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", + "updated_at": { "type": "string" }, - "goods_sn": { - "example": "sz25081193234595996", + "url": { "type": "string" - }, - "images": { + } + }, + "type": "object" + }, + "reuters.ArticleResponse": { + "properties": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "on_sale": { - "example": true, - "type": "boolean" - }, - "retail_price": { - "example": "HK$119.00", + "description": { "type": "string" }, - "sale_price": { - "example": "HK$119.00", + "image_caption": { "type": "string" }, - "size_guide_url": { + "image_url": { "type": "string" }, - "sizes": { + "paragraphs": { "items": { - "$ref": "#/definitions/shein.SizeOption" + "type": "string" }, "type": "array" }, - "skus": { - "items": { - "$ref": "#/definitions/shein.SkuVariant" - }, - "type": "array" + "published_at": { + "type": "string" }, - "store_code": { - "example": "7945614031", + "title": { "type": "string" }, - "usd_price": { - "example": "$15.16", + "updated_at": { "type": "string" }, - "video_url": { + "url": { "type": "string" } }, "type": "object" }, - "shein.SearchKeywordsResponse": { + "reuters.ArticlesResponse": { "properties": { - "keywords": { + "items": { "items": { - "$ref": "#/definitions/shein.Keyword" + "$ref": "#/definitions/reuters.ArticleItem" }, "type": "array" + }, + "page": { + "type": "integer" } }, "type": "object" }, - "shein.SearchProductsResponse": { + "reuters.AuthorArticle": { "properties": { - "keyword": { - "example": "dress", + "image_url": { "type": "string" }, - "origin_word": { - "example": "dress", + "published_at": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "summary": { + "type": "string" }, - "products": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "reuters.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/shein.Product" + "$ref": "#/definitions/reuters.AuthorArticle" }, "type": "array" }, - "suggest_words": { + "company": { + "type": "string" + }, + "email": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "social_accounts": { "items": { - "type": "string" + "$ref": "#/definitions/reuters.AuthorSocialAccount" }, "type": "array" }, - "total": { - "example": 6535, + "total_articles": { "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "shein.SizeOption": { + "reuters.AuthorSocialAccount": { "properties": { - "attr_id": { - "example": "87", + "platform": { "type": "string" }, - "attr_name": { - "example": "Size", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "reuters.NewsItem": { + "properties": { + "image_caption": { "type": "string" }, - "attr_value_id": { - "example": "757", + "image_url": { "type": "string" }, - "attr_value_name": { - "example": "XXS", + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "shein.SkuVariant": { + "reuters.NewsResponse": { "properties": { - "retail_price": { - "example": "HK$119.00", + "items": { + "items": { + "$ref": "#/definitions/reuters.NewsItem" + }, + "type": "array" + }, + "page": { + "type": "integer" + } + }, + "type": "object" + }, + "reuters.Section": { + "properties": { + "name": { "type": "string" }, - "sale_price": { - "example": "HK$119.00", + "slug": { "type": "string" }, - "sku_code": { - "example": "I6ar22eezl2i", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "reuters.SectionItem": { + "properties": { + "image_caption": { "type": "string" }, - "sku_sale_attr": { + "image_url": { "type": "string" }, - "stock": { - "example": "20", + "updated_at": { "type": "string" }, - "usd_price": { - "example": "$15.16", + "url": { "type": "string" } }, "type": "object" }, - "shein.aggregationFiltersResponseDoc": { + "reuters.SectionResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/reuters.SectionItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/shein.AggregationFilters" + "page": { + "type": "integer" }, - "msg": { - "example": "OK", + "section": { "type": "string" } }, "type": "object" }, - "shein.autocompleteResponseDoc": { + "reuters.SectionsResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/reuters.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "reuters.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.AutocompleteResponse" + "$ref": "#/definitions/reuters.ArticleResponse" }, "msg": { "example": "OK", @@ -141018,14 +141269,14 @@ }, "type": "object" }, - "shein.categoryFiltersResponseDoc": { + "reuters.articlesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.CategoryFiltersResponse" + "$ref": "#/definitions/reuters.ArticlesResponse" }, "msg": { "example": "OK", @@ -141034,14 +141285,14 @@ }, "type": "object" }, - "shein.categoryGoodsResponseDoc": { + "reuters.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.CategoryGoodsResponse" + "$ref": "#/definitions/reuters.AuthorResponse" }, "msg": { "example": "OK", @@ -141050,14 +141301,14 @@ }, "type": "object" }, - "shein.categoryNavResponseDoc": { + "reuters.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.CategoryNavResponse" + "$ref": "#/definitions/reuters.NewsResponse" }, "msg": { "example": "OK", @@ -141066,14 +141317,14 @@ }, "type": "object" }, - "shein.productDetailResponseDoc": { + "reuters.sectionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.ProductDetail" + "$ref": "#/definitions/reuters.SectionResponse" }, "msg": { "example": "OK", @@ -141082,14 +141333,14 @@ }, "type": "object" }, - "shein.productsSearchResponseDoc": { + "reuters.sectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.SearchProductsResponse" + "$ref": "#/definitions/reuters.SectionsResponse" }, "msg": { "example": "OK", @@ -141098,596 +141349,604 @@ }, "type": "object" }, - "shein.searchKeywordsResponseDoc": { + "rightmove.AgentAffiliation": { "properties": { - "code": { - "example": 200, + "id": { + "example": 19, "type": "integer" }, - "data": { - "$ref": "#/definitions/shein.SearchKeywordsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Property Redress Scheme", "type": "string" } }, "type": "object" }, - "shopapp.AnalysisResponse": { + "rightmove.AgentBranchResponse": { "properties": { - "currencies": { - "example": [ - "USD", - "GBP" - ], - "items": { - "type": "string" - }, - "type": "array" + "address": { + "example": "18 Pilgrimage Street,\nLondon Bridge,\nLondon,\nSE1 4LL", + "type": "string" }, - "discounts": { - "$ref": "#/definitions/shopapp.DiscountSummary" + "branch_name": { + "example": "London", + "type": "string" }, - "groups_count": { - "example": 5, - "type": "integer" + "brand_name": { + "example": "1 Ability Estate Agents", + "type": "string" }, - "prices_by_currency": { - "items": { - "$ref": "#/definitions/shopapp.CurrencyPriceSummary" - }, - "type": "array" + "build_to_rent": { + "type": "boolean" }, - "products_count": { - "example": 20, - "type": "integer" + "commercial": { + "type": "boolean" }, - "query": { - "example": "sneakers", + "company_id": { + "example": "4294", "type": "string" }, - "sale_count": { - "example": 6, - "type": "integer" + "company_name": { + "example": "1st Avenue", + "type": "string" }, - "sampled_product_ids": { - "example": [ - "8075903107261", - "7093164834901" - ], - "items": { - "type": "string" - }, - "type": "array" + "description": { + "type": "string" }, - "shops_count": { - "example": 8, - "type": "integer" + "development": { + "type": "boolean" }, - "top_shops": { - "items": { - "$ref": "#/definitions/shopapp.ShopSummary" - }, - "type": "array" - } - }, - "type": "object" - }, - "shopapp.CategoriesResponse": { - "properties": { - "categories": { + "display_name": { + "example": "1 Ability Estate Agents, London", + "type": "string" + }, + "id": { + "example": "181787", + "type": "string" + }, + "industry_affiliations": { "items": { - "$ref": "#/definitions/shopapp.CategoryItem" + "$ref": "#/definitions/rightmove.AgentAffiliation" }, "type": "array" + }, + "latitude": { + "type": "number" + }, + "lettings": { + "type": "boolean" + }, + "lettings_properties": { + "$ref": "#/definitions/rightmove.AgentPropertyList" + }, + "lettings_telephone": { + "example": "020 3910 6304", + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "longitude": { + "type": "number" + }, + "main_telephone": { + "example": "020 8293 8600", + "type": "string" + }, + "overseas": { + "type": "boolean" + }, + "postcode": { + "example": "SE1 4LL", + "type": "string" + }, + "sales": { + "type": "boolean" + }, + "sales_properties": { + "$ref": "#/definitions/rightmove.AgentPropertyList" + }, + "sales_telephone": { + "example": "020 3909 6734", + "type": "string" } }, "type": "object" }, - "shopapp.CategoryItem": { + "rightmove.AgentItem": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/shopapp.CategoryItem" - }, - "type": "array" + "address": { + "example": "18 Pilgrimage Street,\nLondon Bridge,\nLondon,\nSE1 4LL", + "type": "string" }, - "gid": { - "example": "gid://shopify/ProductCategory/1?version=13", + "brand_name": { + "example": "1 Ability Estate Agents", "type": "string" }, - "has_children": { - "type": "boolean" + "description": { + "type": "string" }, - "id": { - "example": "1", + "display_name": { + "example": "1 Ability Estate Agents, London", "type": "string" }, - "image": { + "id": { + "example": "181787", "type": "string" }, - "name": { - "example": "Women", + "lettings": { + "type": "boolean" + }, + "logo_url": { + "example": "https://media.rightmove.co.uk/partner-logo/19103090-LOGO-1765975389.png", "type": "string" }, - "path": { + "sales": { + "type": "boolean" + }, + "telephones": { "items": { - "$ref": "#/definitions/shopapp.CategoryPath" + "$ref": "#/definitions/rightmove.AgentTelephone" }, "type": "array" }, - "slug": { - "example": "women", + "url": { + "example": "https://www.rightmove.co.uk/estate-agents/agent/1-Ability-Estate-Agents/London-181787.html", "type": "string" } }, "type": "object" }, - "shopapp.CategoryPath": { + "rightmove.AgentPropertyItem": { "properties": { - "gid": { - "example": "gid://shopify/ProductCategory/1?version=13", + "address": { + "example": "West Parkside, London, SE10", + "type": "string" + }, + "bathrooms": { + "example": 2, + "type": "integer" + }, + "bedrooms": { + "example": 2, + "type": "integer" + }, + "channel": { + "example": "RES_LET", "type": "string" }, "id": { - "example": "1", + "example": "92527095", "type": "string" }, - "name": { - "example": "Women", + "image": { "type": "string" - } - }, - "type": "object" - }, - "shopapp.CurrencyPriceSummary": { - "properties": { - "average": { - "example": 72.42, - "type": "number" }, - "count": { - "example": 12, + "price": { + "example": 634, "type": "integer" }, - "currency": { - "example": "USD", + "price_frequency": { + "example": "weekly", "type": "string" }, - "max": { - "example": 149.99, - "type": "number" + "price_text": { + "example": "£634 pw", + "type": "string" }, - "min": { - "example": 35.9, - "type": "number" + "property_type": { + "example": "Flat", + "type": "string" + }, + "status": { + "example": "available", + "type": "string" + }, + "url": { + "example": "https://www.rightmove.co.uk/properties/92537946#/?channel=RES_LET", + "type": "string" } }, "type": "object" }, - "shopapp.DiscountSummary": { + "rightmove.AgentPropertyList": { "properties": { - "average_percent": { - "example": 24.6, - "type": "number" - }, - "max_percent": { - "example": 60, - "type": "number" + "properties": { + "items": { + "$ref": "#/definitions/rightmove.AgentPropertyItem" + }, + "type": "array" }, - "min_percent": { - "example": 10, - "type": "number" + "total": { + "example": 37, + "type": "integer" } }, "type": "object" }, - "shopapp.ImageItem": { + "rightmove.AgentTelephone": { "properties": { - "alt": { - "example": "Product image", + "direct_number": { + "example": "020 3903 2323", "type": "string" }, - "url": { - "example": "https://cdn.shopify.com/example.jpg", + "number": { + "example": "020 3910 6304", + "type": "string" + }, + "type": { + "example": "LETTING", "type": "string" } }, "type": "object" }, - "shopapp.LocationAddress": { + "rightmove.AgentsResponse": { "properties": { - "address1": { - "example": "175b Mott Street", + "location": { + "example": "REGION^87490", "type": "string" }, - "address2": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "city": { - "example": "New York", + "results": { + "items": { + "$ref": "#/definitions/rightmove.AgentItem" + }, + "type": "array" + }, + "total": { + "example": 3614, + "type": "integer" + } + }, + "type": "object" + }, + "rightmove.AutocompleteItem": { + "properties": { + "entity_type": { + "example": "REGION", "type": "string" }, - "country": { - "example": "US", + "full_name": { + "example": "London, Greater London, England", "type": "string" }, - "postal_code": { - "example": "10012", + "id": { + "example": "REGION^12345", "type": "string" }, - "zone_code": { - "example": "NY", + "name": { + "example": "London, Greater London", "type": "string" } }, "type": "object" }, - "shopapp.OptionGroup": { + "rightmove.AutocompleteResponse": { "properties": { - "name": { - "example": "Size", + "query": { + "example": "London", "type": "string" }, - "values": { + "results": { "items": { - "type": "string" + "$ref": "#/definitions/rightmove.AutocompleteItem" }, "type": "array" } }, "type": "object" }, - "shopapp.ProductDetail": { + "rightmove.PropertyCustomerReviews": { "properties": { - "available": { - "type": "boolean" + "average_score": { + "example": 4.5, + "type": "number" }, - "currency": { - "example": "HKD", - "type": "string" + "count": { + "example": 5, + "type": "integer" }, - "description": { + "latest_review": { + "example": "Great property and excellent service from the agent.", "type": "string" - }, - "external_url": { + } + }, + "type": "object" + }, + "rightmove.PropertyItem": { + "properties": { + "added_or_reduced": { + "example": "Price reduced", "type": "string" }, - "id": { - "example": "4596217053229", + "address": { + "example": "123 Example Street, London", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/shopapp.ImageItem" - }, - "type": "array" + "bathrooms": { + "example": 2, + "type": "integer" }, - "option_groups": { - "items": { - "$ref": "#/definitions/shopapp.OptionGroup" - }, - "type": "array" + "bedrooms": { + "example": 3, + "type": "integer" }, - "original_price": { - "example": 1166, - "type": "number" + "currency": { + "example": "GBP", + "type": "string" }, - "price": { - "example": 1076, - "type": "number" + "days_on_market": { + "example": 14, + "type": "integer" }, - "rating": { - "example": 4.4, - "type": "number" + "development": { + "example": true, + "type": "boolean" }, - "related_products": { - "items": { - "$ref": "#/definitions/shopapp.ProductItem" - }, - "type": "array" + "id": { + "example": "12345678", + "type": "string" }, - "reviews": { - "items": { - "$ref": "#/definitions/shopapp.ReviewItem" - }, - "type": "array" + "image": { + "example": "https://media.rightmove.co.uk/property-photo/.../12345678.jpg", + "type": "string" }, - "reviews_count": { - "example": 22, + "price": { + "example": 500000, "type": "integer" }, - "shop_handle": { - "example": "n1r478fp0h", + "price_frequency": { + "example": "monthly", "type": "string" }, - "shop_id": { + "price_text": { + "example": "£500,000", "type": "string" }, - "shop_name": { - "example": "Wide Fit Shoes UK", + "property_type": { + "example": "Semi-detached", "type": "string" }, - "slug": { - "example": "mens-wide-fit-new-balance-624v5-black-trainers-abzorb", + "receptions": { + "example": 2, + "type": "integer" + }, + "size": { + "example": "538 sq. ft.", "type": "string" }, - "title": { - "example": "Mens Wide Fit New Balance 624V5 Black Trainers ABZORB", + "status": { + "example": "For Sale", "type": "string" }, - "url": { + "tenure": { + "example": "LEASEHOLD", "type": "string" }, - "variant_id": { - "example": "34761278160941", + "title": { + "example": "3 bedroom semi-detached house for sale", + "type": "string" + }, + "url": { + "example": "https://www.rightmove.co.uk/properties/12345678", "type": "string" } }, "type": "object" }, - "shopapp.ProductDetailResponse": { - "properties": { - "product": { - "$ref": "#/definitions/shopapp.ProductDetail" - } - }, - "type": "object" - }, - "shopapp.ProductItem": { + "rightmove.PropertyResponse": { "properties": { + "added_or_reduced": { + "example": "Price reduced", + "type": "string" + }, + "address": { + "example": "123 Example Street, London", + "type": "string" + }, + "available_from": { + "type": "string" + }, + "bathrooms": { + "example": 2, + "type": "integer" + }, + "bedrooms": { + "example": 3, + "type": "integer" + }, + "council_tax_band": { + "type": "string" + }, "currency": { - "example": "USD", + "example": "GBP", "type": "string" }, - "group_query": { - "example": "kids' athletic sneakers", + "customer_reviews": { + "$ref": "#/definitions/rightmove.PropertyCustomerReviews" + }, + "days_on_market": { + "example": 14, + "type": "integer" + }, + "description": { "type": "string" }, - "group_title": { - "example": "kids' athletic sneakers", + "development": { + "example": true, + "type": "boolean" + }, + "epc_rating": { + "type": "string" + }, + "features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "floor_plan": { "type": "string" }, "id": { - "example": "8075903107261", + "example": "12345678", "type": "string" }, "image": { - "example": "https://cdn.shopify.com/s/files/1/1145/5784/files/example.jpg", + "example": "https://media.rightmove.co.uk/property-photo/.../12345678.jpg", "type": "string" }, - "image_alt": { - "example": "Black sneaker side view", + "nearby_schools": { + "items": { + "$ref": "#/definitions/rightmove.PropertySchool" + }, + "type": "array" + }, + "price": { + "example": 500000, + "type": "integer" + }, + "price_frequency": { + "example": "monthly", "type": "string" }, - "on_sale": { - "type": "boolean" + "price_text": { + "example": "£500,000", + "type": "string" }, - "original_price": { - "example": 120, - "type": "number" + "property_type": { + "example": "Semi-detached", + "type": "string" }, - "position": { - "example": 1, + "receptions": { + "example": 2, "type": "integer" }, - "price": { - "example": 100, - "type": "number" + "size": { + "example": "538 sq. ft.", + "type": "string" }, - "shop_id": { - "example": "62696", + "status": { + "example": "For Sale", "type": "string" }, - "shop_name": { - "example": "BILLY Footwear", + "tenure": { "type": "string" }, "title": { - "example": "Black/Black/Gum BILLY Sport Inclusion DZ1", + "example": "3 bedroom semi-detached house for sale", "type": "string" }, "url": { - "example": "https://billyfootwear.com/products/black-black-gum-billy-sport-inclusion-dz1-zipper-shoes?utm_source=shop_app", - "type": "string" - }, - "variant_id": { - "example": "46242960965821", + "example": "https://www.rightmove.co.uk/properties/12345678", "type": "string" } }, "type": "object" }, - "shopapp.ProductShopResponse": { + "rightmove.PropertySchool": { "properties": { - "product_id": { - "example": "4596217053229", + "distance": { + "example": "0.2 miles", "type": "string" }, - "shop": { - "$ref": "#/definitions/shopapp.ShopDetail" - } - }, - "type": "object" - }, - "shopapp.ProductVariantResponse": { - "properties": { - "product_id": { - "example": "4596217053229", + "name": { + "example": "St. Mary's Primary School", "type": "string" }, - "variant": { - "$ref": "#/definitions/shopapp.VariantItem" + "rating": { + "example": "Outstanding", + "type": "string" + }, + "type": { + "example": "Primary", + "type": "string" } }, "type": "object" }, - "shopapp.RelatedResponse": { + "rightmove.SearchResponse": { "properties": { - "limit": { - "example": 20, - "type": "integer" - }, - "product_id": { - "example": "4596217053229", + "location": { + "example": "REGION^87490", "type": "string" }, - "products": { + "page": { + "example": 1, + "type": "integer" + }, + "results": { "items": { - "$ref": "#/definitions/shopapp.ProductItem" + "$ref": "#/definitions/rightmove.PropertyItem" }, "type": "array" + }, + "total": { + "example": 1245, + "type": "integer" } }, "type": "object" }, - "shopapp.ReviewItem": { + "rnz.AuthorArticle": { "properties": { - "author": { - "example": "Donal", - "type": "string" - }, - "body": { - "example": "Perfect fit.", + "image_url": { "type": "string" }, - "date": { - "example": "December 6, 2025", + "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" }, - "helpful_count": { - "type": "integer" - }, - "id": { + "summary": { "type": "string" }, - "product": { - "$ref": "#/definitions/shopapp.ReviewProduct" - }, - "rating": { - "example": 5, - "type": "number" - }, "title": { "type": "string" }, - "variant_label": { - "example": "Black / 12.5 / 4E", + "url": { "type": "string" } }, "type": "object" }, - "shopapp.ReviewProduct": { + "rnz.AuthorResponse": { "properties": { - "id": { - "example": "8114373328975", - "type": "string" + "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" }, - "image": { + "articles": { + "items": { + "$ref": "#/definitions/rnz.AuthorArticle" + }, + "type": "array" + }, + "bio": { "type": "string" }, - "image_alt": { - "type": "string" - }, - "slug": { - "example": "solana-brown-woven-leather-backstrap-clogs", - "type": "string" - }, - "title": { - "example": "Solana Brown Woven Leather Backstrap Clogs", - "type": "string" - }, - "url": { - "type": "string" - }, - "variant": { - "example": "7 / Brown Woven / Leather", - "type": "string" - } - }, - "type": "object" - }, - "shopapp.ReviewsResponse": { - "properties": { - "limit": { - "example": 20, - "type": "integer" - }, - "product_id": { - "example": "4596217053229", + "email": { "type": "string" }, - "reviews": { - "items": { - "$ref": "#/definitions/shopapp.ReviewItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "shopapp.SearchGroup": { - "properties": { - "product_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "products_seen": { - "example": 4, - "type": "integer" - }, - "query": { - "example": "men's running sneakers", + "image_url": { "type": "string" }, - "title": { - "example": "men's running sneakers", + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "shopapp.SearchResponse": { - "properties": { - "groups": { - "items": { - "$ref": "#/definitions/shopapp.SearchGroup" - }, - "type": "array" - }, - "limit": { - "example": 20, - "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/shopapp.ProductItem" - }, - "type": "array" - }, - "query": { - "example": "sneakers", - "type": "string" - } - }, - "type": "object" - }, - "shopapp.ShopCollection": { - "properties": { - "id": { - "example": "292518002767", + "name": { "type": "string" }, "slug": { - "example": "mens-dress-shoes", "type": "string" }, - "title": { - "example": "Mens Dress Shoes", + "twitter": { "type": "string" }, "url": { @@ -141696,412 +141955,255 @@ }, "type": "object" }, - "shopapp.ShopDetail": { + "roblox.Badge": { "properties": { - "banner": { - "type": "string" - }, - "collections": { - "items": { - "$ref": "#/definitions/shopapp.ShopCollection" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "handle": { - "example": "marcnolan", - "type": "string" - }, - "id": { - "example": "186720", - "type": "string" + "awarding_root_place_id": { + "type": "integer" }, - "logo": { + "awarding_universe": { "type": "string" }, - "name": { - "example": "Marc Nolan", - "type": "string" + "awarding_universe_id": { + "type": "integer" }, - "rating": { - "example": 4.7, - "type": "number" + "awards_all_time": { + "type": "integer" }, - "reviews_count": { - "example": 19699, + "awards_past_day": { "type": "integer" }, - "shopify_id": { + "created_at": { "type": "string" }, - "storefront": { + "description": { "type": "string" }, - "url": { - "type": "string" + "enabled": { + "type": "boolean" }, - "uuid": { + "icon_url": { "type": "string" - } - }, - "type": "object" - }, - "shopapp.ShopLocationItem": { - "properties": { - "address": { - "$ref": "#/definitions/shopapp.LocationAddress" }, "id": { - "example": "gid://shopify/Location/78620459087", - "type": "string" - }, - "latitude": { - "example": 40.7205232, - "type": "number" - }, - "longitude": { - "example": -73.9961032, - "type": "number" + "type": "integer" }, "name": { - "example": "NYC", + "type": "string" + }, + "updated_at": { "type": "string" } }, "type": "object" }, - "shopapp.ShopLocationsResponse": { + "roblox.BadgesResponse": { "properties": { - "limit": { - "example": 10, - "type": "integer" - }, - "locations": { + "badges": { "items": { - "$ref": "#/definitions/shopapp.ShopLocationItem" + "$ref": "#/definitions/roblox.Badge" }, "type": "array" }, "next_cursor": { "type": "string" }, - "shop_handle": { - "example": "marcnolan", - "type": "string" - }, - "shop_id": { - "example": "186720", + "previous_cursor": { "type": "string" }, - "total_count": { - "example": 2, + "universe_id": { "type": "integer" } }, "type": "object" }, - "shopapp.ShopProductsResponse": { + "roblox.Creator": { "properties": { - "collection": { - "$ref": "#/definitions/shopapp.ShopCollection" - }, - "collection_id": { - "example": "292518002767", - "type": "string" - }, - "limit": { - "example": 30, + "id": { "type": "integer" }, - "next_cursor": { + "name": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/shopapp.ProductItem" - }, - "type": "array" - }, - "shop_handle": { - "example": "marcnolan", + "type": { "type": "string" }, - "sort_by": { - "example": "MOST_SALES", - "type": "string" - } - }, - "type": "object" - }, - "shopapp.ShopResponse": { - "properties": { - "shop": { - "$ref": "#/definitions/shopapp.ShopDetail" + "verified": { + "type": "boolean" } }, "type": "object" }, - "shopapp.ShopReviewsResponse": { + "roblox.Experience": { "properties": { - "limit": { - "example": 20, + "creator_id": { "type": "integer" }, - "next_cursor": { - "type": "string" - }, - "reviews": { - "items": { - "$ref": "#/definitions/shopapp.ReviewItem" - }, - "type": "array" - }, - "shop_handle": { - "example": "marcnolan", + "creator_name": { "type": "string" }, - "shop_id": { - "example": "186720", + "description": { "type": "string" }, - "total_count": { - "example": 15015, - "type": "integer" - } - }, - "type": "object" - }, - "shopapp.ShopSummary": { - "properties": { - "count": { - "example": 4, + "down_votes": { "type": "integer" }, - "shop_id": { - "example": "3961166", + "genre": { "type": "string" }, - "shop_name": { - "example": "Start Fitness", + "is_sponsored": { + "type": "boolean" + }, + "maturity": { "type": "string" - } - }, - "type": "object" - }, - "shopapp.ShopTypeaheadItem": { - "properties": { - "collection": { - "$ref": "#/definitions/shopapp.ShopCollection" }, - "id": { - "example": "7438827651151", + "maturity_label": { "type": "string" }, - "position": { - "example": 1, + "minimum_age": { "type": "integer" }, - "product": { - "$ref": "#/definitions/shopapp.ProductItem" - }, - "text": { - "example": "loafer", + "name": { "type": "string" }, - "type": { - "example": "product", - "type": "string" + "player_count": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "shopapp.ShopTypeaheadResponse": { - "properties": { - "limit": { - "example": 20, + "root_place_id": { "type": "integer" }, - "query": { - "example": "loafer", - "type": "string" + "universe_id": { + "type": "integer" }, - "shop_handle": { - "example": "marcnolan", - "type": "string" + "up_votes": { + "type": "integer" }, - "shop_id": { - "example": "186720", + "url": { "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/shopapp.ShopTypeaheadItem" - }, - "type": "array" + "verified_creator": { + "type": "boolean" } }, "type": "object" }, - "shopapp.SuggestResponse": { + "roblox.Game": { "properties": { - "limit": { - "example": 10, + "access_price": { "type": "integer" }, - "query": { - "example": "sneakers", + "avatar_type": { "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/shopapp.SuggestionItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "shopapp.SuggestionItem": { - "properties": { - "image": { + "content_restricted": { + "type": "boolean" + }, + "created_at": { "type": "string" }, - "rating": { - "example": 4.79, - "type": "number" + "creator": { + "$ref": "#/definitions/roblox.Creator" }, - "shop_handle": { - "example": "gr21z45he0", + "description": { "type": "string" }, - "shop_id": { - "example": "365323", - "type": "string" + "down_votes": { + "type": "integer" }, - "shop_name": { - "example": "Sneakers Plus", - "type": "string" + "favorites": { + "type": "integer" }, - "text": { - "example": "sneakers", + "genre": { "type": "string" }, - "type": { - "example": "query", + "genre_l1": { "type": "string" }, - "url": { - "example": "https://shop.app/search/results?query=sneakers", + "genre_l2": { "type": "string" - } - }, - "type": "object" - }, - "shopapp.VariantItem": { - "properties": { - "available_for_sale": { - "type": "boolean" }, - "currency": { + "image_url": { "type": "string" }, - "gid": { - "example": "gid://shopify/ProductVariant/34761278160941", - "type": "string" + "max_players": { + "type": "integer" }, - "id": { - "example": "34761278160941", + "name": { "type": "string" }, - "image": { - "$ref": "#/definitions/shopapp.ImageItem" + "playing": { + "type": "integer" }, - "options": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "root_place_id": { + "type": "integer" }, - "original_price": { - "type": "number" + "universe_id": { + "type": "integer" }, - "price": { - "type": "number" + "up_votes": { + "type": "integer" }, - "requires_shipping": { - "type": "boolean" + "updated_at": { + "type": "string" }, - "title": { - "example": "Black / 7 / 6E", + "url": { "type": "string" + }, + "visits": { + "type": "integer" } }, "type": "object" }, - "shopapp.VariantsResponse": { + "roblox.GameResponse": { "properties": { - "limit": { - "example": 50, - "type": "integer" - }, - "product_id": { - "example": "4596217053229", - "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/shopapp.VariantItem" - }, - "type": "array" + "game": { + "$ref": "#/definitions/roblox.Game" } }, "type": "object" }, - "shopapp.analysisResponseDoc": { + "roblox.RankingsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "display_name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/shopapp.AnalysisResponse" + "experiences": { + "items": { + "$ref": "#/definitions/roblox.Experience" + }, + "type": "array" }, - "msg": { - "example": "OK", + "sort_id": { "type": "string" } }, "type": "object" }, - "shopapp.categoriesResponseDoc": { + "roblox.SearchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "experiences": { + "items": { + "$ref": "#/definitions/roblox.Experience" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/shopapp.CategoriesResponse" + "next_page": { + "type": "string" }, - "msg": { - "example": "OK", + "query": { "type": "string" } }, "type": "object" }, - "shopapp.productResponseDoc": { + "roblox.badgesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ProductDetailResponse" + "$ref": "#/definitions/roblox.BadgesResponse" }, "msg": { "example": "OK", @@ -142110,14 +142212,14 @@ }, "type": "object" }, - "shopapp.productShopResponseDoc": { + "roblox.gameResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ProductShopResponse" + "$ref": "#/definitions/roblox.GameResponse" }, "msg": { "example": "OK", @@ -142126,14 +142228,14 @@ }, "type": "object" }, - "shopapp.productVariantResponseDoc": { + "roblox.rankingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ProductVariantResponse" + "$ref": "#/definitions/roblox.RankingsResponse" }, "msg": { "example": "OK", @@ -142142,14 +142244,14 @@ }, "type": "object" }, - "shopapp.relatedResponseDoc": { + "roblox.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.RelatedResponse" + "$ref": "#/definitions/roblox.SearchResponse" }, "msg": { "example": "OK", @@ -142158,917 +142260,858 @@ }, "type": "object" }, - "shopapp.reviewsResponseDoc": { + "rollingstone.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/rollingstone.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/shopapp.ReviewsResponse" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "shopapp.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/shopapp.SearchResponse" + "job_title": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "shopapp.shopLocationsResponseDoc": { + "rollingstone.HeadlineItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "author": { + "type": "string" }, - "data": { - "$ref": "#/definitions/shopapp.ShopLocationsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "shopapp.shopProductsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/shopapp.ShopProductsResponse" + "summary": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { "type": "string" - } - }, - "type": "object" - }, - "shopapp.shopResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/shopapp.ShopResponse" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "shopapp.shopReviewsResponseDoc": { + "rottentomatoes.BrowseFilter": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/shopapp.ShopReviewsResponse" + "key": { + "example": "genres", + "type": "string" }, - "msg": { - "example": "OK", + "label": { + "example": "Genre", "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/rottentomatoes.BrowseFilterValue" + }, + "type": "array" } }, "type": "object" }, - "shopapp.shopTypeaheadResponseDoc": { + "rottentomatoes.BrowseFilterValue": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/shopapp.ShopTypeaheadResponse" + "label": { + "example": "Action", + "type": "string" }, - "msg": { - "example": "OK", + "value": { + "example": "action", "type": "string" } }, "type": "object" }, - "shopapp.suggestionsResponseDoc": { + "rottentomatoes.BrowseFiltersResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "fetched_at": { + "example": "2026-09-26T10:00:00Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/shopapp.SuggestResponse" + "filters": { + "items": { + "$ref": "#/definitions/rottentomatoes.BrowseFilter" + }, + "type": "array" }, - "msg": { - "example": "OK", + "list": { + "example": "movies_in_theaters", "type": "string" - } - }, - "type": "object" - }, - "shopapp.variantsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/shopapp.VariantsResponse" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.rottentomatoes.com/browse/movies_in_theaters/sort:popular", "type": "string" } }, "type": "object" }, - "shopify.CollectionItem": { + "rottentomatoes.BrowseItem": { "properties": { - "created_at": { + "critics_review_count": { + "example": 136, + "type": "integer" + }, + "date_created": { + "example": "2026", "type": "string" }, - "description": { + "image_url": { "type": "string" }, - "handle": { - "example": "mens", + "media_type": { + "example": "Movie", "type": "string" }, - "id": { - "example": "278435758160", + "path": { + "example": "/m/wildwood_nj", "type": "string" }, - "products_count": { - "example": 24, + "position": { + "example": 1, "type": "integer" }, - "published_at": { - "type": "string" - }, "title": { - "example": "Men", + "example": "Wildwood, NJ", "type": "string" }, - "updated_at": { - "type": "string" + "tomatometer_score": { + "example": 87, + "type": "integer" }, "url": { - "example": "https://www.allbirds.com/collections/mens", + "example": "https://www.rottentomatoes.com/m/wildwood_nj", "type": "string" + }, + "video": { + "$ref": "#/definitions/rottentomatoes.EpisodeVideo" } }, "type": "object" }, - "shopify.CollectionProductsResponse": { + "rottentomatoes.BrowseResponse": { "properties": { - "collection": { - "example": "mens", + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "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" - }, - "type": "object" - }, - "filters": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" + "items": { + "items": { + "$ref": "#/definitions/rottentomatoes.BrowseItem" }, - "type": "object" - }, - "in_stock_only": { - "type": "boolean" + "type": "array" }, "limit": { - "example": 50, + "example": 10, "type": "integer" }, - "max_price": { - "type": "number" - }, - "min_price": { - "type": "number" - }, - "page": { - "example": 1, - "type": "integer" + "list": { + "example": "movies_in_theaters", + "type": "string" }, - "product_type": { - "items": { - "type": "string" - }, - "type": "array" + "page_info": { + "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" }, - "products": { - "items": { - "$ref": "#/definitions/shopify.ProductItem" - }, - "type": "array" + "public_page_derived": { + "example": true, + "type": "boolean" }, "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", + "example": "popular", "type": "string" }, "source_url": { - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "example": "https://www.allbirds.com", + "example": "https://www.rottentomatoes.com/browse/movies_in_theaters/sort:popular", "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": { - "example": 4, - "type": "integer" - }, - "transport_mode": { - "enum": [ - "ssr_embedded", - "storefront_filtered" - ], - "example": "ssr_embedded", + "title": { + "example": "Movies in Theaters (2026)", "type": "string" - }, - "variant_options": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" } }, "type": "object" }, - "shopify.CollectionsResponse": { + "rottentomatoes.CriticAuthor": { "properties": { - "collections": { + "badges": { + "example": [ + "Individually approved" + ], "items": { - "$ref": "#/definitions/shopify.CollectionItem" + "type": "string" }, "type": "array" }, - "limit": { - "example": 50, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" - }, - "source_url": { - "example": "https://www.allbirds.com", + "name": { + "example": "Mae Abdulbaki", "type": "string" }, - "store_url": { - "example": "https://www.allbirds.com", + "path": { + "example": "/critics/mae-abdulbaki", "type": "string" }, - "transport_mode": { - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", + "publication_label": { + "example": "when published by", "type": "string" + }, + "publications": { + "items": { + "$ref": "#/definitions/rottentomatoes.CriticAuthorPublication" + }, + "type": "array" } }, "type": "object" }, - "shopify.FacetStat": { + "rottentomatoes.CriticAuthorPublication": { "properties": { - "avg": { - "example": 56.46, - "type": "number" + "editorial_url": { + "example": "https://example.com/reviews", + "type": "string" }, - "max": { - "example": 85, - "type": "number" + "id": { + "example": "2784", + "type": "string" }, - "min": { - "example": 27, - "type": "number" + "name": { + "example": "Firstpost", + "type": "string" + }, + "path": { + "example": "/critics/source/2784", + "type": "string" } }, "type": "object" }, - "shopify.ImageItem": { + "rottentomatoes.CriticsAuthorsResponse": { "properties": { - "alt": { - "example": "Product image", + "after": { + "example": "", "type": "string" }, - "created_at": { + "authors": { + "items": { + "$ref": "#/definitions/rottentomatoes.CriticAuthor" + }, + "type": "array" + }, + "before": { + "example": "", "type": "string" }, - "height": { - "example": 1600, - "type": "integer" + "fetched_at": { + "example": "2026-09-26T10:00:00Z", + "type": "string" }, - "id": { - "example": "36411373027408", + "has_next_page": { + "example": true, + "type": "boolean" + }, + "has_previous_page": { + "example": false, + "type": "boolean" + }, + "inactive": { + "example": false, + "type": "boolean" + }, + "letter": { + "example": "a", "type": "string" }, - "position": { - "example": 1, + "limit": { + "example": 100, "type": "integer" }, - "updated_at": { + "next_cursor": { + "example": "MQ==", "type": "string" }, - "url": { - "example": "https://cdn.shopify.com/s/files/1/example.jpg", + "previous_cursor": { + "example": "MA==", "type": "string" }, - "variant_ids": { - "items": { - "type": "string" - }, - "type": "array" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "width": { - "example": 1600, - "type": "integer" - } - }, - "type": "object" - }, - "shopify.OptionItem": { - "properties": { - "name": { - "example": "Size", + "search": { + "example": "", "type": "string" }, - "position": { - "example": 1, - "type": "integer" - }, - "values": { - "items": { - "type": "string" - }, - "type": "array" + "source_url": { + "example": "https://www.rottentomatoes.com/napi/critics/authors?isInactiveCriticsList=false&letter=a&pageCount=100&userToken=null", + "type": "string" } }, "type": "object" }, - "shopify.PageItem": { + "rottentomatoes.EditorialContentItem": { "properties": { - "content": { - "type": "string" + "author_id": { + "example": 944, + "type": "integer" }, - "created_at": { + "excerpt": { + "example": "A ranked guide to essential 21st century biopics.", "type": "string" }, - "handle": { - "example": "accessibility", - "type": "string" + "featured_media_id": { + "example": 297622, + "type": "integer" }, "id": { - "example": "54831906896", + "example": 297618, + "type": "integer" + }, + "modified_at": { + "example": "2026-09-25T09:04:07", "type": "string" }, "published_at": { + "example": "2026-09-25T09:04:07", "type": "string" }, + "term_ids": { + "example": [ + 121877, + 121876 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, "title": { - "example": "Accessibility", + "example": "Essential 21st Century Biopics Ranked", "type": "string" }, - "updated_at": { + "type": { + "enum": [ + "article", + "guide", + "gallery", + "hub-subpage", + "non-rt-publication", + "rt-hub", + "how-to", + "otg-article", + "prev", + "rt_poll", + "page" + ], + "example": "guide", "type": "string" }, "url": { - "example": "https://www.allbirds.com/pages/accessibility", + "example": "https://editorial.rottentomatoes.com/guide/essential-21st-century-biopic-movies/", "type": "string" } }, "type": "object" }, - "shopify.PageResponse": { + "rottentomatoes.EditorialContentResponse": { "properties": { - "page": { - "$ref": "#/definitions/shopify.PageItem" - }, - "source_url": { - "example": "https://www.allbirds.com", + "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, - "store_url": { - "example": "https://www.allbirds.com", - "type": "string" + "has_next_page": { + "example": true, + "type": "boolean" }, - "transport_mode": { - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", - "type": "string" - } - }, - "type": "object" - }, - "shopify.PagesResponse": { - "properties": { "limit": { - "example": 50, + "example": 20, "type": "integer" }, - "page": { - "example": 1, + "operator": { + "enum": [ + "AND", + "OR" + ], + "example": "OR", + "type": "string" + }, + "page": { + "example": 1, "type": "integer" }, - "pages": { + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "query": { + "example": "horror", + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/shopify.PageItem" + "$ref": "#/definitions/rottentomatoes.EditorialContentItem" }, "type": "array" }, "source_url": { - "example": "https://www.allbirds.com", + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/guide?page=1&per_page=20", "type": "string" }, - "store_url": { - "example": "https://www.allbirds.com", + "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" }, - "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.", + "term_ids": { + "example": [ + 121877, + 121876 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, + "total": { + "example": 1194, + "type": "integer" + }, + "total_pages": { + "example": 60, + "type": "integer" + }, + "type": { "enum": [ - "ssr_embedded" + "article", + "guide", + "gallery", + "hub-subpage", + "non-rt-publication", + "rt-hub", + "how-to", + "otg-article", + "prev", + "rt_poll", + "pages" ], - "example": "ssr_embedded", + "example": "guide", "type": "string" } }, "type": "object" }, - "shopify.ProductItem": { + "rottentomatoes.EditorialContentType": { "properties": { - "available": { + "label": { + "example": "Guides", + "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" + } + }, + "type": "object" + }, + "rottentomatoes.EditorialContentTypesResponse": { + "properties": { + "public_page_derived": { + "example": true, "type": "boolean" }, - "canonical_colour": { - "example": "black", + "source_url": { + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/types", "type": "string" }, - "collection_tags": { + "types": { "items": { - "type": "string" + "$ref": "#/definitions/rottentomatoes.EditorialContentType" }, "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", + "verified_at": { + "example": "2026-09-26", "type": "string" - }, - "compare_at_price": { - "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": "object" + }, + "rottentomatoes.EditorialDetailLink": { + "properties": { + "text": { "type": "string" }, - "created_at": { + "url": { "type": "string" - }, - "description": { + } + }, + "type": "object" + }, + "rottentomatoes.EditorialDetailResponse": { + "properties": { + "body_html": { "type": "string" }, - "discount_percentage": { - "example": 20, - "type": "number" - }, - "featured_image": { + "fetched_at": { "type": "string" }, - "handle": { - "example": "mens-wool-runners", - "type": "string" + "headings": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { - "example": "6616124981328", + "image_url": { "type": "string" }, "images": { "items": { - "$ref": "#/definitions/shopify.ImageItem" + "type": "string" }, "type": "array" }, - "labels": { - "example": [ - "new" - ], + "links": { "items": { - "type": "string" + "$ref": "#/definitions/rottentomatoes.EditorialDetailLink" }, "type": "array" }, - "options": { + "modified_at": { + "type": "string" + }, + "paragraphs": { "items": { - "$ref": "#/definitions/shopify.OptionItem" + "type": "string" }, "type": "array" }, - "price": { - "example": 98, - "type": "number" - }, - "product_type": { - "example": "Shoes", + "path": { + "example": "/guide/all-brad-pitt-movies-ranked-by-tomatometer/", "type": "string" }, + "public_page_derived": { + "type": "boolean" + }, "published_at": { "type": "string" }, - "rating": { - "example": 4.2, - "type": "number" - }, - "rating_count": { - "example": 1549, - "type": "integer" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "source_url": { + "type": "string" }, - "title": { - "example": "Men's Wool Runners", + "subtitle": { "type": "string" }, - "updated_at": { + "title": { + "example": "Brad Pitt Movies Ranked by Tomatometer", "type": "string" }, - "url": { - "example": "https://www.allbirds.com/products/mens-wool-runners", + "type": { + "enum": [ + "article", + "gallery", + "guide", + "otg-article", + "prev" + ], + "example": "guide", "type": "string" }, - "variants": { + "video_urls": { "items": { - "$ref": "#/definitions/shopify.VariantItem" + "type": "string" }, "type": "array" - }, - "vendor": { - "example": "Allbirds", - "type": "string" } }, "type": "object" }, - "shopify.ProductRecommendationsResponse": { + "rottentomatoes.EditorialSearchResponse": { "properties": { - "handle": { - "example": "mens-wool-runners", + "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, - "intent": { - "example": "related", - "type": "string" + "has_next_page": { + "example": true, + "type": "boolean" }, "limit": { "example": 10, "type": "integer" }, - "product_id": { - "example": "6616124981328", + "page": { + "example": 1, + "type": "integer" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "query": { + "example": "horror", "type": "string" }, - "products": { + "results": { "items": { - "$ref": "#/definitions/shopify.ProductItem" + "$ref": "#/definitions/rottentomatoes.EditorialSearchResult" }, "type": "array" }, "source_url": { - "example": "https://www.allbirds.com", + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/search?page=1&per_page=10&search=horror", "type": "string" }, - "store_url": { - "example": "https://www.allbirds.com", - "type": "string" + "total": { + "example": 5110, + "type": "integer" }, - "transport_mode": { - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", - "type": "string" + "total_pages": { + "example": 511, + "type": "integer" } }, "type": "object" }, - "shopify.ProductResponse": { + "rottentomatoes.EditorialSearchResult": { "properties": { - "product": { - "$ref": "#/definitions/shopify.ProductItem" + "id": { + "example": 282182, + "type": "integer" }, - "source_url": { - "example": "https://www.allbirds.com", + "subtype": { + "example": "guide", "type": "string" }, - "store_url": { - "example": "https://www.allbirds.com", + "title": { + "example": "Best New Horror Movies of 2026", "type": "string" }, - "transport_mode": { - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", + "type": { + "example": "post", + "type": "string" + }, + "url": { + "example": "https://editorial.rottentomatoes.com/guide/best-new-horror-movies-2026/", "type": "string" } }, "type": "object" }, - "shopify.ProductsResponse": { + "rottentomatoes.EditorialSectionItem": { "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" - }, - "type": "object" - }, - "filters": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" + "image_url": { + "example": "https://editorial.rottentomatoes.com/wp-content/uploads/2026/04/poster.png?w=300", + "type": "string" }, - "in_stock_only": { - "type": "boolean" + "published_at": { + "example": "September 25, 2026", + "type": "string" }, - "limit": { - "example": 50, - "type": "integer" + "title": { + "example": "Robert Pattinson Movies Ranked by Tomatometer", + "type": "string" }, - "max_price": { - "type": "number" + "url": { + "example": "https://editorial.rottentomatoes.com/guide/robert-pattinson/", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.EditorialSectionResponse": { + "properties": { + "fetched_at": { + "example": "2026-09-26T10:00:00Z", + "type": "string" }, - "min_price": { - "type": "number" + "has_next_page": { + "example": true, + "type": "boolean" }, "page": { "example": 1, "type": "integer" }, - "product_type": { - "items": { - "type": "string" - }, - "type": "array" + "path": { + "example": "/countdown/", + "type": "string" }, - "products": { + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "results": { "items": { - "$ref": "#/definitions/shopify.ProductItem" + "$ref": "#/definitions/rottentomatoes.EditorialSectionItem" }, "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": { - "example": "https://www.allbirds.com", + "example": "https://editorial.rottentomatoes.com/countdown/", "type": "string" }, - "store_url": { - "example": "https://www.allbirds.com", + "title": { + "example": "Countdown", "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": { - "example": 4, + "example": 40, "type": "integer" - }, - "transport_mode": { - "enum": [ - "ssr_embedded", - "storefront_filtered" - ], - "example": "ssr_embedded", - "type": "string" - }, - "variant_options": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" } }, "type": "object" }, - "shopify.ReviewDTO": { + "rottentomatoes.EditorialTaxonomiesResponse": { "properties": { - "body": { - "example": "Excellent condition, fast shipping!", - "type": "string" - }, - "created_at": { - "example": "2026-08-25T18:17:23.000Z", - "type": "string" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "id": { - "example": "4a8567d4-b397-5ff5-b327-a8cbec368987", + "source_url": { + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/taxonomies", "type": "string" }, - "is_shop_review": { - "type": "boolean" - }, - "pictures": { + "taxonomies": { "items": { - "type": "string" + "$ref": "#/definitions/rottentomatoes.EditorialTaxonomy" }, "type": "array" }, - "product_title": { + "verified_at": { + "example": "2026-09-26", "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.EditorialTaxonomy": { + "properties": { + "hierarchical": { + "example": false, + "type": "boolean" }, - "product_url": { + "label": { + "example": "Related Movie Ids", "type": "string" }, - "rating": { - "example": 5, - "type": "integer" - }, - "reviewer_name": { - "example": "Mario Henao", - "type": "string" + "types": { + "example": [ + "article", + "guide", + "gallery" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "title": { + "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" - }, - "verified_buyer": { - "example": true, - "type": "boolean" } }, "type": "object" }, - "shopify.ReviewsResponse": { + "rottentomatoes.EditorialTerm": { "properties": { - "page": { - "example": 1, + "count": { + "example": 3072, "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/shopify.ReviewDTO" - }, - "type": "array" - }, - "source_url": { - "example": "https://cdn.judge.me/reviews/all_reviews_js_based", + "description": { "type": "string" }, - "store_url": { - "example": "https://www.pristinemarketplace.com", + "id": { + "example": 10732, + "type": "integer" + }, + "link": { + "example": "https://editorial.rottentomatoes.com/author/cap-rt-staff/", "type": "string" }, - "total_count": { - "example": 88, - "type": "integer" + "name": { + "example": "RT Staff", + "type": "string" }, - "total_pages": { - "example": 18, + "parent": { + "example": 0, "type": "integer" - } - }, - "type": "object" - }, - "shopify.SearchQueryItem": { - "properties": { - "text": { - "example": "wool", - "type": "string" }, - "url": { - "example": "https://www.allbirds.com/search?q=wool", + "slug": { + "example": "cap-rt-staff", "type": "string" } }, "type": "object" }, - "shopify.SearchResponse": { + "rottentomatoes.EditorialTermsResponse": { "properties": { - "availability": { - "description": "Availability is the availability filter that was applied (available,\nsold, or all). Only set by Fashionphile search.", - "example": "available", + "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, - "condition": { - "example": "Excellent", - "type": "string" + "has_next_page": { + "example": true, + "type": "boolean" }, "limit": { "example": 20, @@ -143078,473 +143121,1165 @@ "example": 1, "type": "integer" }, - "products": { + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "results": { "items": { - "$ref": "#/definitions/shopify.ProductItem" + "$ref": "#/definitions/rottentomatoes.EditorialTerm" }, "type": "array" }, - "query": { - "example": "chanel", - "type": "string" - }, - "sort": { - "example": "relevance", + "search": { + "example": "RT Staff", "type": "string" }, "source_url": { - "example": "https://www.fashionphile.com", + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/coauthors?page=1&per_page=20", "type": "string" }, - "store_url": { - "example": "https://www.fashionphile.com", + "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" }, - "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, + "total": { + "example": 927, "type": "integer" }, - "vendor": { - "example": "Chanel", - "type": "string" + "total_pages": { + "example": 47, + "type": "integer" } }, "type": "object" }, - "shopify.SearchSuggestResponse": { + "rottentomatoes.EpisodeResponse": { "properties": { - "collections": { - "items": { - "$ref": "#/definitions/shopify.CollectionItem" - }, - "type": "array" + "air_date": { + "example": "2008-01-20", + "type": "string" }, - "limit": { - "example": 10, - "type": "integer" + "audience_score": { + "$ref": "#/definitions/rottentomatoes.Score" }, - "products": { + "cast": { "items": { - "$ref": "#/definitions/shopify.ProductItem" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" }, - "queries": { + "critics_score": { + "$ref": "#/definitions/rottentomatoes.Score" + }, + "description": { + "type": "string" + }, + "directors": { "items": { - "$ref": "#/definitions/shopify.SearchQueryItem" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" }, - "query": { - "example": "wool", + "ems_id": { + "example": "ccda9549-4dcb-3147-9a2b-1106dcf852f7", "type": "string" }, - "source_url": { - "example": "https://www.allbirds.com", - "type": "string" + "episode_number": { + "example": 1, + "type": "integer" }, - "store_url": { - "example": "https://www.allbirds.com", + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "types": { + "genres": { "example": [ - "product", - "collection", - "query" + "Crime" ], "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "shopify.SiteSearchResponse": { - "properties": { - "limit": { - "example": 20, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/shopify.ProductItem" - }, - "type": "array" }, - "query": { - "example": "jordan", + "image_url": { "type": "string" }, - "source_url": { + "lifecycle": { + "example": "NOT_AIRING", "type": "string" }, - "store_url": { - "example": "https://www.pristinemarketplace.com", + "media_type": { + "example": "TvEpisode", "type": "string" }, - "total_count": { - "example": 413, - "type": "integer" + "parent_season": { + "$ref": "#/definitions/rottentomatoes.SeasonSummary" }, - "total_pages": { - "example": 26, - "type": "integer" - } - }, - "type": "object" - }, - "shopify.SitemapImage": { - "properties": { - "caption": { - "type": "string" + "parent_series": { + "$ref": "#/definitions/rottentomatoes.SeriesSummary" }, - "title": { - "example": "Men's Wool Runner", + "path": { + "example": "/tv/breaking_bad/s01/e01", "type": "string" }, - "url": { - "example": "https://cdn.shopify.com/example.png", - "type": "string" - } - }, - "type": "object" - }, - "shopify.SitemapIndexResponse": { - "properties": { - "sitemaps": { + "producers": { "items": { - "$ref": "#/definitions/shopify.SitemapItem" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "season_number": { + "example": 1, + "type": "integer" + }, "source_url": { - "example": "https://www.allbirds.com", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", "type": "string" }, - "store_url": { - "example": "https://www.allbirds.com", - "type": "string" - } - }, - "type": "object" - }, - "shopify.SitemapItem": { - "properties": { - "loc": { - "example": "https://www.allbirds.com/sitemap_products_1.xml", + "title": { + "example": "Pilot", "type": "string" }, - "type": { - "example": "products", + "url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", "type": "string" + }, + "video": { + "$ref": "#/definitions/rottentomatoes.EpisodeVideo" } }, "type": "object" }, - "shopify.SitemapURLItem": { + "rottentomatoes.EpisodeVideo": { "properties": { - "changefreq": { - "example": "weekly", + "description": { "type": "string" }, - "handle": { - "example": "mens-wool-runners", + "duration": { + "example": "2:32", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/shopify.SitemapImage" - }, - "type": "array" + "thumbnail": { + "type": "string" }, - "lastmod": { - "example": "2026-03-19T11:41:39-07:00", + "title": { + "example": "Breaking Bad: Official Clip - Walter Wants to Cook", "type": "string" }, - "loc": { - "example": "https://www.allbirds.com/products/mens-wool-runners", + "upload_date": { + "example": "2024-07-11T19:23:03", "type": "string" }, - "type": { - "example": "products", + "url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01/videos/JR3ymbH1dpLb", "type": "string" } }, "type": "object" }, - "shopify.SitemapURLsResponse": { + "rottentomatoes.MovieResponse": { "properties": { - "limit": { - "example": 50, - "type": "integer" + "audience_reviews": { + "items": { + "$ref": "#/definitions/rottentomatoes.Review" + }, + "type": "array" }, - "source_url": { - "example": "https://www.allbirds.com", - "type": "string" + "audience_score": { + "$ref": "#/definitions/rottentomatoes.Score" }, - "store_url": { - "example": "https://www.allbirds.com", + "cast": { + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "content_rating": { + "example": "PG-13", "type": "string" }, - "type": { - "example": "products", + "critics_score": { + "$ref": "#/definitions/rottentomatoes.Score" + }, + "description": { "type": "string" }, - "urls": { + "directors": { "items": { - "$ref": "#/definitions/shopify.SitemapURLItem" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" - } - }, - "type": "object" - }, - "shopify.StoreResponse": { - "properties": { - "city": { - "example": "San Francisco", - "type": "string" }, - "country": { - "example": "US", - "type": "string" - }, - "currency": { - "example": "USD", + "ems_id": { + "example": "afbf1c81-1bfe-3996-9cbc-2e1be23d1f61", "type": "string" }, - "description": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "domain": { - "example": "www.gymshark.com", - "type": "string" + "genres": { + "example": [ + "Sci-Fi" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "myshopify_domain": { - "example": "gymsharkusa.myshopify.com", + "image_url": { "type": "string" }, - "name": { - "example": "Allbirds", + "media_type": { + "example": "Movie", "type": "string" }, - "province": { - "example": "CA", + "path": { + "example": "/m/inception", "type": "string" }, - "published_collections_count": { - "example": 42, - "type": "integer" + "producers": { + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" }, - "published_products_count": { - "example": 638, - "type": "integer" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "requested_url": { - "example": "https://www.gymshark.com", + "release_date": { + "example": "2010-07-16", "type": "string" }, - "source_domain": { - "example": "gymsharkusa.myshopify.com", + "reviews_url": { + "example": "https://www.rottentomatoes.com/m/inception/reviews/all-audience", "type": "string" }, "source_url": { - "example": "https://gymsharkusa.myshopify.com", + "example": "https://www.rottentomatoes.com/m/inception", "type": "string" }, - "transport_mode": { - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", + "title": { + "example": "Inception", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/m/inception", "type": "string" } }, "type": "object" }, - "shopify.VariantItem": { + "rottentomatoes.MovieReview": { "properties": { - "available": { - "type": "boolean" - }, - "barcode": { + "created_at": { + "example": "2024-04-11T23:40:16.000Z", "type": "string" }, - "compare_at_price": { - "example": 120, - "type": "number" - }, - "created_at": { + "critic_url": { + "example": "https://www.rottentomatoes.com/critic/danilo-castro", "type": "string" }, - "featured_image": { + "display_name": { + "example": "Danilo Castro", "type": "string" }, - "grams": { - "example": 400, - "type": "integer" + "has_profanity": { + "example": false, + "type": "boolean" + }, + "has_spoilers": { + "example": false, + "type": "boolean" }, "id": { - "example": "34761278160941", + "example": "102903742", "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": { + "original_score": { + "example": "9/10", "type": "string" }, - "option2": { + "publication": { + "example": "Next Best Picture", "type": "string" }, - "option3": { - "type": "string" + "publication_approved": { + "example": true, + "type": "boolean" }, - "position": { - "example": 1, - "type": "integer" + "publication_review_url": { + "example": "https://nextbestpicture.com/inception/", + "type": "string" }, - "price": { - "example": 98, + "rating": { + "example": 4.5, "type": "number" }, - "product_id": { - "example": "6616124981328", + "rating_label": { + "example": "STAR_4_5", "type": "string" }, - "requires_shipping": { - "type": "boolean" + "review": { + "type": "string" }, - "sku": { - "example": "A123", + "score_sentiment": { + "example": "POSITIVE", "type": "string" }, - "taxable": { + "super_reviewer": { + "example": false, "type": "boolean" }, - "title": { - "example": "Natural Black / 10", - "type": "string" + "tomatometer_approved": { + "example": true, + "type": "boolean" }, - "updated_at": { - "type": "string" - } - }, - "type": "object" - }, - "shopify.collectionProductsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "top_critic": { + "example": false, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/shopify.CollectionProductsResponse" + "top_publication": { + "example": false, + "type": "boolean" }, - "msg": { - "example": "OK", + "top_review": { + "example": false, + "type": "boolean" + }, + "type": { + "example": "critic", "type": "string" + }, + "verified": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "shopify.collectionsResponseDoc": { + "rottentomatoes.Person": { "properties": { - "code": { - "example": 200, - "type": "integer" + "image_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/shopify.CollectionsResponse" + "name": { + "example": "Christopher Nolan", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", "type": "string" } }, "type": "object" }, - "shopify.pageResponseDoc": { + "rottentomatoes.PersonCredit": { "properties": { - "code": { - "example": 200, - "type": "integer" + "audience_score": { + "$ref": "#/definitions/rottentomatoes.Score" }, - "data": { - "$ref": "#/definitions/shopify.PageResponse" + "credits": { + "example": "Director, Screenwriter, Producer", + "type": "string" }, - "msg": { - "example": "OK", + "critics_score": { + "$ref": "#/definitions/rottentomatoes.Score" + }, + "path": { + "example": "/m/oppenheimer_2023", + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "poster_url": { + "type": "string" + }, + "title": { + "example": "Oppenheimer", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/m/oppenheimer_2023", + "type": "string" + }, + "years_featured": { + "example": "2023", "type": "string" } }, "type": "object" }, - "shopify.pagesResponseDoc": { + "rottentomatoes.PersonRatedTitle": { "properties": { - "code": { - "example": 200, + "path": { + "example": "/m/the_dark_knight", + "type": "string" + }, + "score": { + "example": 94, "type": "integer" }, - "data": { - "$ref": "#/definitions/shopify.PagesResponse" + "title": { + "example": "The Dark Knight", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://www.rottentomatoes.com/m/the_dark_knight", + "type": "string" + }, + "year": { + "example": "2008", "type": "string" } }, "type": "object" }, - "shopify.productRecommendationsResponseDoc": { + "rottentomatoes.PersonResponse": { "properties": { - "code": { - "example": 200, + "birth_date": { + "example": "1970-07-30", + "type": "string" + }, + "birthplace": { + "example": "London, England, UK", + "type": "string" + }, + "description": { + "type": "string" + }, + "ems_id": { + "example": "a015d515-713e-38e3-abbe-cf0cdaa519b0", + "type": "string" + }, + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "filmography": { + "items": { + "$ref": "#/definitions/rottentomatoes.PersonCredit" + }, + "type": "array" + }, + "filmography_api_url": { + "example": "https://www.rottentomatoes.com/cnapi/modules/filmography/a015d515-713e-38e3-abbe-cf0cdaa519b0/movie/newest", + "type": "string" + }, + "highest_rated": { + "$ref": "#/definitions/rottentomatoes.PersonRatedTitle" + }, + "image_url": { + "type": "string" + }, + "lowest_rated": { + "$ref": "#/definitions/rottentomatoes.PersonRatedTitle" + }, + "name": { + "example": "Christopher Nolan", + "type": "string" + }, + "page_info": { + "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" + }, + "path": { + "example": "/celebrity/christopher_nolan", + "type": "string" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "source_url": { + "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.Review": { + "properties": { + "display_date": { + "example": "Mar 19", + "type": "string" + }, + "display_name": { + "example": "Rylee", + "type": "string" + }, + "fandango_review": { + "example": true, + "type": "boolean" + }, + "rating": { + "example": 5, + "type": "number" + }, + "rating_id": { + "example": "e0812d98-c1d5-467d-ae35-c19cdd575f90", + "type": "string" + }, + "rating_range": { + "example": "Rated 5/5 Stars", + "type": "string" + }, + "review": { + "type": "string" + }, + "verified": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "rottentomatoes.ReviewMovieSummary": { + "properties": { + "ems_id": { + "example": "afbf1c81-1bfe-3996-9cbc-2e1be23d1f61", + "type": "string" + }, + "media_type": { + "example": "Movie", + "type": "string" + }, + "path": { + "example": "/m/inception", + "type": "string" + }, + "title": { + "example": "Inception", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/m/inception", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.ReviewPageInfo": { + "properties": { + "end_cursor": { + "example": "Mjk=", + "type": "string" + }, + "has_next_page": { + "example": true, + "type": "boolean" + }, + "has_previous_page": { + "example": true, + "type": "boolean" + }, + "start_cursor": { + "example": "MA==", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.ReviewsResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "limit": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/shopify.ProductRecommendationsResponse" + "movie": { + "$ref": "#/definitions/rottentomatoes.ReviewMovieSummary" }, - "msg": { - "example": "OK", + "page_info": { + "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "reviews": { + "items": { + "$ref": "#/definitions/rottentomatoes.MovieReview" + }, + "type": "array" + }, + "reviews_api_url": { + "example": "https://www.rottentomatoes.com/napi/rtcf/v1/movies/afbf1c81-1bfe-3996-9cbc-2e1be23d1f61/reviews?type=critic&pageCount=10", + "type": "string" + }, + "source_url": { + "example": "https://www.rottentomatoes.com/m/inception/reviews", + "type": "string" + }, + "type": { + "example": "critics", "type": "string" } }, "type": "object" }, - "shopify.productResponseDoc": { + "rottentomatoes.Score": { "properties": { - "code": { - "example": 200, + "average_rating": { + "example": "8.40", + "type": "string" + }, + "banded_rating_count": { + "example": "250,000+ Ratings", + "type": "string" + }, + "certified": { + "example": true, + "type": "boolean" + }, + "liked_count": { + "example": 314, "type": "integer" }, - "data": { - "$ref": "#/definitions/shopify.ProductResponse" + "not_liked_count": { + "example": 49, + "type": "integer" }, - "msg": { - "example": "OK", + "rating_count": { + "example": 363, + "type": "integer" + }, + "review_count": { + "example": 363, + "type": "integer" + }, + "reviews_page_url": { + "example": "https://www.rottentomatoes.com/m/inception/reviews", + "type": "string" + }, + "score": { + "example": 87, + "type": "integer" + }, + "score_percent": { + "example": "87%", + "type": "string" + }, + "score_type": { + "example": "ALL", + "type": "string" + }, + "sentiment": { + "example": "POSITIVE", + "type": "string" + }, + "title": { + "example": "Tomatometer", "type": "string" } }, "type": "object" }, - "shopify.productsResponseDoc": { + "rottentomatoes.SearchMovie": { + "properties": { + "cast": { + "example": "Leonardo DiCaprio,Joseph Gordon-Levitt,Elliot Page", + "type": "string" + }, + "certified_fresh": { + "example": true, + "type": "boolean" + }, + "end_year": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "path": { + "example": "/m/inception", + "type": "string" + }, + "release_year": { + "example": "2010", + "type": "string" + }, + "start_year": { + "type": "string" + }, + "title": { + "example": "Inception", + "type": "string" + }, + "tomatometer_score": { + "example": 87, + "type": "integer" + }, + "tomatometer_sentiment": { + "example": "POSITIVE", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/m/inception", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SearchResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "limit": { + "example": 10, + "type": "integer" + }, + "query": { + "example": "inception", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/rottentomatoes.SearchMovie" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.rottentomatoes.com/search?search=inception", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SeasonEpisode": { + "properties": { + "air_date": { + "example": "2008-01-20", + "type": "string" + }, + "description": { + "type": "string" + }, + "episode_number": { + "example": "1", + "type": "string" + }, + "path": { + "example": "/tv/breaking_bad/s01/e01", + "type": "string" + }, + "title": { + "example": "Pilot", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SeasonResponse": { + "properties": { + "audience_score": { + "$ref": "#/definitions/rottentomatoes.Score" + }, + "cast": { + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "critics_score": { + "$ref": "#/definitions/rottentomatoes.Score" + }, + "description": { + "type": "string" + }, + "directors": { + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "ems_id": { + "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", + "type": "string" + }, + "episode_count": { + "example": 7, + "type": "integer" + }, + "episodes": { + "items": { + "$ref": "#/definitions/rottentomatoes.SeasonEpisode" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "genres": { + "example": [ + "Crime" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "lifecycle": { + "example": "NOT_AIRING", + "type": "string" + }, + "media_type": { + "example": "TvSeason", + "type": "string" + }, + "parent_series": { + "$ref": "#/definitions/rottentomatoes.SeriesSummary" + }, + "path": { + "example": "/tv/breaking_bad/s01", + "type": "string" + }, + "producers": { + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "release_date": { + "example": "2008-01-20", + "type": "string" + }, + "season_number": { + "example": 1, + "type": "integer" + }, + "source_url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "type": "string" + }, + "title": { + "example": "Season 1", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SeasonSummary": { + "properties": { + "ems_id": { + "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", + "type": "string" + }, + "path": { + "example": "/tv/breaking_bad/s01", + "type": "string" + }, + "season_number": { + "example": 1, + "type": "integer" + }, + "title": { + "example": "Season 1", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SeriesResponse": { + "properties": { + "audience_score": { + "$ref": "#/definitions/rottentomatoes.Score" + }, + "cast": { + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "content_rating": { + "example": "TV-14", + "type": "string" + }, + "critics_score": { + "$ref": "#/definitions/rottentomatoes.Score" + }, + "description": { + "type": "string" + }, + "directors": { + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "ems_id": { + "example": "6a74def4-dc62-319e-ae3d-360dcf360244", + "type": "string" + }, + "end_date": { + "example": "2013-09-29", + "type": "string" + }, + "fetched_at": { + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "genres": { + "example": [ + "Crime" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "lifecycle": { + "example": "NOT_AIRING", + "type": "string" + }, + "media_type": { + "example": "TvSeries", + "type": "string" + }, + "number_of_seasons": { + "example": 5, + "type": "integer" + }, + "path": { + "example": "/tv/breaking_bad", + "type": "string" + }, + "producers": { + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "seasons": { + "items": { + "$ref": "#/definitions/rottentomatoes.TVSeason" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad", + "type": "string" + }, + "start_date": { + "example": "2008-01-20", + "type": "string" + }, + "title": { + "example": "Breaking Bad", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SeriesSummary": { + "properties": { + "ems_id": { + "example": "6a74def4-dc62-319e-ae3d-360dcf360244", + "type": "string" + }, + "path": { + "example": "/tv/breaking_bad", + "type": "string" + }, + "title": { + "example": "Breaking Bad", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.Sitemap": { + "properties": { + "family": { + "example": "movie", + "type": "string" + }, + "index": { + "example": 0, + "type": "integer" + }, + "last_modified": { + "example": "2025-11-12", + "type": "string" + }, + "name": { + "example": "movie_0", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/sitemaps/movie_0.xml", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SitemapIndexResponse": { + "properties": { + "fetched_at": { + "example": "2026-09-26T10:00:00Z", + "type": "string" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "sitemaps": { + "items": { + "$ref": "#/definitions/rottentomatoes.Sitemap" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.rottentomatoes.com/sitemaps/sitemap.xml", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SitemapURL": { + "properties": { + "last_modified": { + "example": "2025-11-12", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/m/inception", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SitemapURLResponse": { + "properties": { + "fetched_at": { + "example": "2026-09-26T10:00:00Z", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "limit": { + "example": 100, + "type": "integer" + }, + "name": { + "example": "movie_0", + "type": "string" + }, + "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" + }, + "rottentomatoes.TVSeason": { + "properties": { + "name": { + "example": "Season 1", + "type": "string" + }, + "path": { + "example": "/tv/breaking_bad/s01", + "type": "string" + }, + "url": { + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.browseFiltersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.ProductsResponse" + "$ref": "#/definitions/rottentomatoes.BrowseFiltersResponse" }, "msg": { "example": "OK", @@ -143553,14 +144288,14 @@ }, "type": "object" }, - "shopify.searchSuggestResponseDoc": { + "rottentomatoes.browseResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.SearchSuggestResponse" + "$ref": "#/definitions/rottentomatoes.BrowseResponse" }, "msg": { "example": "OK", @@ -143569,14 +144304,14 @@ }, "type": "object" }, - "shopify.sitemapIndexResponseDoc": { + "rottentomatoes.criticsAuthorsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.SitemapIndexResponse" + "$ref": "#/definitions/rottentomatoes.CriticsAuthorsResponse" }, "msg": { "example": "OK", @@ -143585,14 +144320,14 @@ }, "type": "object" }, - "shopify.sitemapURLsResponseDoc": { + "rottentomatoes.editorialContentResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.SitemapURLsResponse" + "$ref": "#/definitions/rottentomatoes.EditorialContentResponse" }, "msg": { "example": "OK", @@ -143601,14 +144336,14 @@ }, "type": "object" }, - "shopify.storeResponseDoc": { + "rottentomatoes.editorialContentTypesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.StoreResponse" + "$ref": "#/definitions/rottentomatoes.EditorialContentTypesResponse" }, "msg": { "example": "OK", @@ -143617,14 +144352,14 @@ }, "type": "object" }, - "shopifybrands.collectionProductsResponseDoc": { + "rottentomatoes.editorialDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.CollectionProductsResponse" + "$ref": "#/definitions/rottentomatoes.EditorialDetailResponse" }, "msg": { "example": "OK", @@ -143633,14 +144368,14 @@ }, "type": "object" }, - "shopifybrands.collectionsResponseDoc": { + "rottentomatoes.editorialSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.CollectionsResponse" + "$ref": "#/definitions/rottentomatoes.EditorialSearchResponse" }, "msg": { "example": "OK", @@ -143649,14 +144384,14 @@ }, "type": "object" }, - "shopifybrands.pageResponseDoc": { + "rottentomatoes.editorialSectionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.PageResponse" + "$ref": "#/definitions/rottentomatoes.EditorialSectionResponse" }, "msg": { "example": "OK", @@ -143665,14 +144400,14 @@ }, "type": "object" }, - "shopifybrands.pagesResponseDoc": { + "rottentomatoes.editorialTaxonomiesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.PagesResponse" + "$ref": "#/definitions/rottentomatoes.EditorialTaxonomiesResponse" }, "msg": { "example": "OK", @@ -143681,14 +144416,14 @@ }, "type": "object" }, - "shopifybrands.productRecommendationsResponseDoc": { + "rottentomatoes.editorialTermsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.ProductRecommendationsResponse" + "$ref": "#/definitions/rottentomatoes.EditorialTermsResponse" }, "msg": { "example": "OK", @@ -143697,14 +144432,14 @@ }, "type": "object" }, - "shopifybrands.productResponseDoc": { + "rottentomatoes.episodeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.ProductResponse" + "$ref": "#/definitions/rottentomatoes.EpisodeResponse" }, "msg": { "example": "OK", @@ -143713,14 +144448,14 @@ }, "type": "object" }, - "shopifybrands.productsResponseDoc": { + "rottentomatoes.movieResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.ProductsResponse" + "$ref": "#/definitions/rottentomatoes.MovieResponse" }, "msg": { "example": "OK", @@ -143729,14 +144464,14 @@ }, "type": "object" }, - "shopifybrands.reviewsResponseDoc": { + "rottentomatoes.personResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.ReviewsResponse" + "$ref": "#/definitions/rottentomatoes.PersonResponse" }, "msg": { "example": "OK", @@ -143745,14 +144480,14 @@ }, "type": "object" }, - "shopifybrands.searchResponseDoc": { + "rottentomatoes.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.SearchResponse" + "$ref": "#/definitions/rottentomatoes.ReviewsResponse" }, "msg": { "example": "OK", @@ -143761,14 +144496,14 @@ }, "type": "object" }, - "shopifybrands.searchSuggestResponseDoc": { + "rottentomatoes.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.SearchSuggestResponse" + "$ref": "#/definitions/rottentomatoes.SearchResponse" }, "msg": { "example": "OK", @@ -143777,14 +144512,14 @@ }, "type": "object" }, - "shopifybrands.siteSearchResponseDoc": { + "rottentomatoes.seasonResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.SiteSearchResponse" + "$ref": "#/definitions/rottentomatoes.SeasonResponse" }, "msg": { "example": "OK", @@ -143793,14 +144528,14 @@ }, "type": "object" }, - "shopifybrands.sitemapIndexResponseDoc": { + "rottentomatoes.seriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.SitemapIndexResponse" + "$ref": "#/definitions/rottentomatoes.SeriesResponse" }, "msg": { "example": "OK", @@ -143809,14 +144544,14 @@ }, "type": "object" }, - "shopifybrands.sitemapURLsResponseDoc": { + "rottentomatoes.sitemapIndexResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.SitemapURLsResponse" + "$ref": "#/definitions/rottentomatoes.SitemapIndexResponse" }, "msg": { "example": "OK", @@ -143825,14 +144560,14 @@ }, "type": "object" }, - "shopifybrands.storeResponseDoc": { + "rottentomatoes.sitemapURLResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopify.StoreResponse" + "$ref": "#/definitions/rottentomatoes.SitemapURLResponse" }, "msg": { "example": "OK", @@ -143841,746 +144576,363 @@ }, "type": "object" }, - "similarweb.SearchResp": { + "rover.ProfileResponse": { "properties": { - "apps": { - "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" + "bio": { + "type": "string" }, - "companies": { + "city": { + "type": "string" + }, + "is_star_sitter": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "neighborhood": { + "type": "string" + }, + "price_unit": { + "type": "string" + }, + "profile_image": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "repeat_client_count": { + "type": "integer" + }, + "review_count": { + "type": "integer" + }, + "reviews": { "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" + "$ref": "#/definitions/rover.ReviewExcerpt" }, "type": "array" }, - "websites": { + "services": { "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" + "$ref": "#/definitions/rover.ServiceOffering" }, "type": "array" + }, + "slug": { + "type": "string" + }, + "starting_price": { + "type": "number" + }, + "state": { + "type": "string" + }, + "url": { + "type": "string" + }, + "years_experience": { + "type": "integer" } }, "type": "object" }, - "similarweb.SimilarWebResp": { + "rover.ReviewExcerpt": { "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": { + "date": { "type": "string" }, - "CategoryRank": { - "properties": { - "Category": { - "type": "string" - }, - "Rank": { - "type": "string" - } - }, - "type": "object" - }, - "Competitors": { - "properties": { - "TopSimilarityCompetitors": { - "items": {}, - "type": "array" - } - }, - "type": "object" - }, - "Countries": { - "items": { - "properties": { - "Code": { - "type": "string" - }, - "Name": { - "type": "string" - }, - "UrlCode": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "CountryRank": { - "properties": { - "Country": { - "type": "integer" - }, - "CountryCode": { - "type": "string" - }, - "Rank": { - "type": "integer" - } - }, - "type": "object" + "rating": { + "type": "number" }, - "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", + "reviewer": { "type": "string" }, - "Description": { + "service_type": { "type": "string" }, - "Engagments": { - "properties": { - "BounceRate": { - "type": "string" - }, - "Month": { - "type": "string" - }, - "PagePerVisit": { - "type": "string" - }, - "TimeOnSite": { - "type": "string" - }, - "Visits": { - "type": "string" - }, - "Year": { - "type": "string" - } - }, - "type": "object" - }, - "EstimatedMonthlyVisits": { - "properties": { - "2024-09-01": { - "type": "integer" - }, - "2024-10-01": { - "type": "integer" - }, - "2024-11-01": { - "type": "integer" - } - }, - "type": "object" - }, - "GlobalCategoryRank": {}, - "GlobalRank": { - "properties": { - "Rank": { - "type": "integer" - } - }, - "type": "object" - }, - "IsDataFromGa": { - "type": "boolean" - }, - "IsSmall": { - "type": "boolean" - }, - "LargeScreenshot": { + "text": { + "type": "string" + } + }, + "type": "object" + }, + "rover.SearchResponse": { + "properties": { + "location": { "type": "string" }, - "Notification": { - "properties": { - "Content": {} - }, - "type": "object" - }, - "Policy": { + "page": { "type": "integer" }, - "SiteName": { - "type": "string" + "page_count": { + "type": "integer" }, - "SnapshotDate": { - "type": "string" + "per_page": { + "type": "integer" }, - "Title": { + "service_type": { "type": "string" }, - "TopCountryShares": { - "items": { - "properties": { - "Country": { - "type": "integer" - }, - "CountryCode": { - "type": "string" - }, - "Value": { - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "TopKeywords": { + "sitters": { "items": { - "properties": { - "Cpc": { - "type": "number" - }, - "EstimatedValue": { - "type": "number" - }, - "Name": { - "type": "string" - }, - "Volume": { - "type": "number" - } - }, - "type": "object" + "$ref": "#/definitions/rover.SitterSummary" }, "type": "array" }, - "TrafficSources": { - "properties": { - "Direct": { - "type": "number" - }, - "Mail": { - "type": "number" - }, - "Paid Referrals": { - "type": "number" - }, - "Referrals": { - "type": "number" - }, - "Search": { - "type": "number" - }, - "Social": { - "type": "number" - } - }, - "type": "object" - }, - "Version": { + "total_count": { "type": "integer" } }, "type": "object" }, - "similarweb.searchResponseDoc": { + "rover.ServiceOffering": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/similarweb.SearchResp" - }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "similarweb.webResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/similarweb.SimilarWebResp" + "price": { + "type": "number" }, - "msg": { - "example": "OK", + "unit": { "type": "string" } }, "type": "object" }, - "skynews.AuthorInfoItem": { + "rover.SitterSummary": { "properties": { - "label": { - "type": "string" - }, - "url": { + "city": { "type": "string" }, - "value": { + "description": { "type": "string" - } - }, - "type": "object" - }, - "skynews.AuthorResponse": { - "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" + "is_star_sitter": { + "type": "boolean" }, "name": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "skynews.HeadlineItem": { - "properties": { - "author": { - "type": "string" - }, - "image_url": { + "neighborhood": { "type": "string" }, - "published_at": { + "price_unit": { "type": "string" }, - "summary": { + "profile_image": { "type": "string" }, - "title": { + "profile_url": { "type": "string" }, - "type": { - "type": "string" + "rating": { + "type": "number" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "skynews.VideoResponse": { - "properties": { - "description": { - "type": "string" + "repeat_client_count": { + "type": "integer" }, - "duration_seconds": { + "review_count": { "type": "integer" }, - "embed_url": { + "service_type": { "type": "string" }, - "published_at": { + "slug": { "type": "string" }, - "thumbnail_urls": { - "items": { - "type": "string" - }, - "type": "array" + "starting_price": { + "type": "number" }, - "title": { + "state": { "type": "string" }, - "url": { + "years_experience": { + "type": "integer" + }, + "zip": { "type": "string" } }, "type": "object" }, - "skynews.VideosResponse": { + "rover.TrainerEducation": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/skynews.HeadlineItem" - }, - "type": "array" + "organization": { + "type": "string" + }, + "text": { + "type": "string" } }, "type": "object" }, - "skysports.AuthorResponse": { + "rover.TrainerProfileResponse": { "properties": { - "articles": { + "availability_details": { + "type": "string" + }, + "behaviors": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "biography": { + "education": { "items": { - "type": "string" + "$ref": "#/definitions/rover.TrainerEducation" }, "type": "array" }, - "job_title": { + "experience_details": { "type": "string" }, - "name": { + "headline": { "type": "string" }, - "url": { + "methodology": { "type": "string" - } - }, - "type": "object" - }, - "slate.ArticleResponse": { - "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" }, - "description": { + "methodology_details": { "type": "string" }, - "headings": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { + "name": { "type": "string" }, - "is_paywalled": { - "type": "boolean" + "profile_image": { + "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "rating": { + "type": "number" }, - "published_at": { - "type": "string" + "repeat_client_count": { + "type": "integer" }, - "section": { - "type": "string" + "review_count": { + "type": "integer" }, - "tags": { + "skills": { "items": { "type": "string" }, "type": "array" }, - "title": { - "type": "string" - }, - "updated_at": { + "slug": { "type": "string" }, "url": { "type": "string" + }, + "years_of_training": { + "type": "integer" } }, "type": "object" }, - "slate.CategoriesResponse": { + "rover.TrainerSearchResponse": { "properties": { - "sections": { + "location": { + "type": "string" + }, + "trainers": { "items": { - "$ref": "#/definitions/slate.Section" + "$ref": "#/definitions/rover.TrainerSummary" }, "type": "array" } }, "type": "object" }, - "slate.HeadlineItem": { + "rover.TrainerSummary": { "properties": { - "author": { - "type": "string" - }, - "categories": { + "behaviors": { "items": { "type": "string" }, "type": "array" }, - "id": { + "city": { "type": "string" }, - "image_url": { + "experience_details": { "type": "string" }, - "published_at": { + "headline": { "type": "string" }, - "summary": { + "methodology": { "type": "string" }, - "title": { + "name": { "type": "string" }, - "url": { + "price_unit": { "type": "string" - } - }, - "type": "object" - }, - "slate.HeadlinesResponse": { - "properties": { - "feed_url": { + }, + "profile_image": { "type": "string" }, - "items": { + "profile_url": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "repeat_client_count": { + "type": "integer" + }, + "review_count": { + "type": "integer" + }, + "skills": { "items": { - "$ref": "#/definitions/slate.HeadlineItem" + "type": "string" }, "type": "array" }, - "section": { + "slug": { + "type": "string" + }, + "starting_price": { + "type": "number" + }, + "state": { + "type": "string" + }, + "years_experience": { + "type": "integer" + }, + "zip": { "type": "string" } }, "type": "object" }, - "slate.Section": { + "rover.profileResponseDoc": { "properties": { - "feed_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/rover.ProfileResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "slate.articleResponseDoc": { + "rover.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slate.ArticleResponse" + "$ref": "#/definitions/rover.SearchResponse" }, "msg": { "example": "OK", @@ -144589,14 +144941,14 @@ }, "type": "object" }, - "slate.categoriesResponseDoc": { + "rover.trainerProfileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slate.CategoriesResponse" + "$ref": "#/definitions/rover.TrainerProfileResponse" }, "msg": { "example": "OK", @@ -144605,14 +144957,14 @@ }, "type": "object" }, - "slate.headlinesResponseDoc": { + "rover.trainerSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slate.HeadlinesResponse" + "$ref": "#/definitions/rover.TrainerSearchResponse" }, "msg": { "example": "OK", @@ -144621,694 +144973,457 @@ }, "type": "object" }, - "slickdeals.CategoriesResponse": { + "rte.AuthorResponse": { "properties": { - "categories": { + "articles": { "items": { - "$ref": "#/definitions/slickdeals.CategoryRef" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "count": { - "example": 421, - "type": "integer" + "image_url": { + "type": "string" }, - "fetched_at": { + "name": { "type": "string" }, - "source_url": { + "role": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "slickdeals.CategoryDeal": { + "salon.AuthorArticle": { "properties": { - "comment_count": { - "example": 1, - "type": "integer" - }, - "found_by": { - "example": "phoinix", + "title": { "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", + "url": { "type": "string" + } + }, + "type": "object" + }, + "salon.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/salon.AuthorArticle" + }, + "type": "array" }, - "posted_at": { - "example": "2026-08-28T14:21:36Z", + "bio": { "type": "string" }, - "price": { - "example": "$24.99", + "image_url": { "type": "string" }, - "store": { - "example": "Morningsave.com", + "job_title": { "type": "string" }, - "thread_id": { - "example": 19842723, - "type": "integer" - }, - "title": { - "example": "Hex Evolve Backpack Aspect Duffel Bag $24.99 Free Shipping", + "name": { "type": "string" }, + "same_as": { + "items": { + "type": "string" + }, + "type": "array" + }, "url": { "type": "string" - }, - "vote_score": { - "example": 9, - "type": "integer" } }, "type": "object" }, - "slickdeals.CategoryRef": { + "samsclub.CategoryBreadcrumbEntry": { "properties": { - "name": { - "example": "Laptop Bags", + "id": { + "example": "100001", "type": "string" }, - "slug": { - "example": "laptop-bag", + "name": { + "example": "All Departments", "type": "string" }, "url": { - "example": "https://slickdeals.net/deals/laptop-bag/", + "example": "https://www.samsclub.com/all-departments", "type": "string" } }, "type": "object" }, - "slickdeals.CategoryResponse": { + "samsclub.CategoryProduct": { "properties": { - "count": { - "example": 37, - "type": "integer" - }, - "deals": { - "items": { - "$ref": "#/definitions/slickdeals.CategoryDeal" - }, - "type": "array" - }, - "fetched_at": { + "availability": { + "example": "IN_STOCK", "type": "string" }, - "slug": { - "example": "laptop-bag", + "brand": { + "example": "Tide", "type": "string" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "slickdeals.Comment": { - "properties": { - "author": { - "example": "OutFr0mUndr", + "currency_code": { + "example": "USD", "type": "string" }, - "author_post_count": { - "example": 49, - "type": "integer" + "current_price": { + "example": 19.98, + "type": "number" }, - "author_title": { - "example": "L2: Beginner", + "image_url": { "type": "string" }, - "content": { - "example": "Shows as $358.53 for me...", + "item_id": { + "example": "13610014888", "type": "string" }, - "content_html": { + "name": { + "example": "Tide Power PODS + Ultra OXI Laundry Detergent Pacs, 72 ct.", "type": "string" }, - "funny_count": { - "type": "integer" + "on_sale": { + "example": true, + "type": "boolean" }, - "helpful_count": { - "type": "integer" + "rating": { + "example": 4.8, + "type": "number" }, - "like_count": { - "example": 1, - "type": "integer" + "regular_price": { + "example": 24.98, + "type": "number" }, - "not_helpful_count": { + "review_count": { + "example": 4122, "type": "integer" }, - "permalink": { + "savings_amount": { + "example": 5, + "type": "number" + }, + "type": { + "example": "Laundry Detergents", "type": "string" }, - "post_id": { - "example": 186692484, - "type": "integer" + "unit_price_text": { + "example": "$0.28/ea", + "type": "string" }, - "posted_at": { - "example": "2026-09-14T19:17:54-07:00", + "url": { + "example": "https://www.samsclub.com/ip/Tide-Power-PODS-Ultra-OXI-Laundry-Detergent-Pacs-72-ct/13610014888", "type": "string" } }, "type": "object" }, - "slickdeals.CommentsResponse": { + "samsclub.CategoryResponse": { "properties": { - "comments": { + "breadcrumb": { "items": { - "$ref": "#/definitions/slickdeals.Comment" + "$ref": "#/definitions/samsclub.CategoryBreadcrumbEntry" }, "type": "array" }, + "category_id": { + "example": "15660127", + "type": "string" + }, "count": { - "example": 4, + "example": 47, "type": "integer" }, "fetched_at": { "type": "string" }, "has_more": { + "example": true, "type": "boolean" }, - "source_url": { - "type": "string" - }, - "thread_id": { - "example": 20015817, + "max_page": { + "example": 16, "type": "integer" - } - }, - "type": "object" - }, - "slickdeals.Deal": { - "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" + "page": { + "example": 1, + "type": "integer" }, - "category_paths": { - "example": [ - "Computers > Laptops", - "Computers" - ], + "products": { "items": { - "type": "string" + "$ref": "#/definitions/samsclub.CategoryProduct" }, "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", + "source_url": { "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", + "title": { + "example": "Results for \"Savings\"", "type": "string" }, - "forum_id": { - "example": 9, + "total_count": { + "example": 687, "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": { + } + }, + "type": "object" + }, + "samsclub.ContentResponse": { + "properties": { + "breadcrumb": { "items": { - "type": "string" + "$ref": "#/definitions/samsclub.CategoryBreadcrumbEntry" }, "type": "array" }, - "is_expired": { - "example": false, - "type": "boolean" + "category_links": { + "items": { + "$ref": "#/definitions/samsclub.DepartmentLink" + }, + "type": "array" }, - "list_price": { - "example": "$1,200.00", + "fetched_at": { "type": "string" }, - "posted_at": { - "example": "2026-09-14T19:13:22-07:00", + "id": { + "example": "16050279", "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.", + "shelves": { "items": { - "$ref": "#/definitions/slickdeals.RelatedDeal" + "$ref": "#/definitions/samsclub.RelatedShelf" }, "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", + "example": "Savings Center", "type": "string" - }, - "vote_score": { - "example": -1, - "type": "integer" } }, "type": "object" }, - "slickdeals.DealTypeRef": { + "samsclub.Department": { "properties": { "id": { - "example": 1774, - "type": "integer" + "example": "1444", + "type": "string" + }, + "image_url": { + "type": "string" }, "name": { - "example": "Free / Freebie", + "example": "Grocery", "type": "string" - } - }, - "type": "object" - }, - "slickdeals.DealTypesResponse": { - "properties": { - "count": { - "example": 10, - "type": "integer" }, - "deal_types": { + "subcategories": { "items": { - "$ref": "#/definitions/slickdeals.DealTypeRef" + "$ref": "#/definitions/samsclub.DepartmentLink" }, "type": "array" }, - "fetched_at": { + "type": { + "example": "browse", "type": "string" }, - "source_url": { + "url": { + "example": "https://www.samsclub.com/browse/1444", "type": "string" } }, "type": "object" }, - "slickdeals.ForumRef": { + "samsclub.DepartmentLink": { "properties": { "id": { - "example": 9, - "type": "integer" + "example": "1444", + "type": "string" }, "name": { - "example": "Hot Deals", + "example": "Grocery", + "type": "string" + }, + "type": { + "example": "browse", "type": "string" }, "url": { - "example": "https://slickdeals.net/forums/forumdisplay.php?f=9", + "example": "https://www.samsclub.com/browse/1444", "type": "string" } }, "type": "object" }, - "slickdeals.ForumsResponse": { + "samsclub.DepartmentsResponse": { "properties": { - "count": { - "example": 26, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "forums": { + "departments": { "items": { - "$ref": "#/definitions/slickdeals.ForumRef" + "$ref": "#/definitions/samsclub.Department" }, "type": "array" }, + "fetched_at": { + "type": "string" + }, "source_url": { "type": "string" } }, "type": "object" }, - "slickdeals.FrontpageResponse": { + "samsclub.Product": { "properties": { - "deals": { + "availability": { + "example": "IN_STOCK", + "type": "string" + }, + "brand": { + "example": "Tide", + "type": "string" + }, + "category": { + "example": [ + "All Departments", + "Household Essentials", + "Laundry Supplies", + "Laundry Detergent" + ], "items": { - "$ref": "#/definitions/slickdeals.SearchAdvancedResult" + "type": "string" }, "type": "array" }, - "fetched_at": { + "currency_code": { + "example": "USD", "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" + "current_price": { + "example": 19.98, + "type": "number" }, - "source_url": { + "description": { "type": "string" - } - }, - "type": "object" - }, - "slickdeals.PrimaryCategoriesResponse": { - "properties": { - "categories": { + }, + "highlights": { "items": { - "$ref": "#/definitions/slickdeals.CategoryRef" + "type": "string" }, "type": "array" }, - "count": { - "example": 13, - "type": "integer" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "item_id": { + "example": "13610014888", "type": "string" - } - }, - "type": "object" - }, - "slickdeals.PrimaryCategoryResponse": { - "properties": { - "count": { - "example": 40, - "type": "integer" - }, - "deals": { - "items": { - "$ref": "#/definitions/slickdeals.CategoryDeal" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "slug": { - "example": "laptop-deals", - "type": "string" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "slickdeals.RelatedDeal": { - "properties": { - "comment_count": { - "type": "integer" }, - "final_price": { - "example": "$22", + "item_number": { + "example": "990471947", "type": "string" }, - "found_by": { - "example": "iconian", + "name": { + "example": "Tide Power PODS + Ultra OXI Laundry Detergent Pacs, 72 ct.", "type": "string" }, - "list_price": { - "example": "$37", - "type": "string" + "on_sale": { + "example": true, + "type": "boolean" }, - "posted_at": { - "type": "string" + "rating": { + "example": 4.8, + "type": "number" }, - "source": { - "description": "Source names which sidebar this entry came from: \"popular\" or\n\"trending\".", - "example": "popular", - "type": "string" + "regular_price": { + "example": 24.98, + "type": "number" }, - "thread_id": { - "example": 20013396, + "review_count": { + "example": 4122, "type": "integer" }, - "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": { + "savings_amount": { "example": 5, - "type": "integer" - } - }, - "type": "object" - }, - "slickdeals.SearchAdvancedResponse": { - "properties": { - "facets": { - "items": { - "$ref": "#/definitions/slickdeals.SearchFacetGroup" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" + "type": "number" }, - "per_page": { - "example": 40, - "type": "integer" + "unit_price": { + "example": 0.28, + "type": "number" }, - "query": { - "example": "laptop", + "unit_price_text": { + "example": "$0.28/ea", "type": "string" }, - "result_count": { - "example": 915, - "type": "integer" - }, - "results": { - "items": { - "$ref": "#/definitions/slickdeals.SearchAdvancedResult" - }, - "type": "array" - }, - "source_url": { + "upc": { + "example": "030772073438", "type": "string" }, - "total_pages": { - "example": 23, - "type": "integer" + "url": { + "example": "https://www.samsclub.com/ip/13610014888", + "type": "string" } }, "type": "object" }, - "slickdeals.SearchAdvancedResult": { + "samsclub.RelatedItem": { "properties": { - "comment_count": { - "example": 4, - "type": "integer" - }, - "discount": { - "example": 26, - "type": "integer" - }, - "final_price": { - "example": "$66", + "availability": { + "example": "IN_STOCK", "type": "string" }, - "forum_id": { - "example": 9, - "type": "integer" - }, - "found_by": { - "example": "htp182", + "currency_code": { + "example": "USD", "type": "string" }, - "has_rebate": { - "example": false, - "type": "boolean" - }, "image_url": { "type": "string" }, - "is_expired": { - "example": false, - "type": "boolean" - }, - "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" - }, - "is_frontpage": { - "example": true, - "type": "boolean" - }, - "is_new": { - "example": false, - "type": "boolean" - }, - "is_popular": { - "example": true, - "type": "boolean" - }, - "list_price": { - "example": "$90", + "item_id": { + "example": "13576901230", "type": "string" }, - "posted_at": { + "name": { + "example": "Tide PODS Laundry Detergent Pacs, Spring Meadow, 156 ct.", "type": "string" }, - "store": { - "example": "Newegg", - "type": "string" + "price": { + "example": 29.98, + "type": "number" }, - "store_id": { - "example": 701, - "type": "integer" + "rating": { + "example": 4.8184, + "type": "number" }, - "thread_id": { - "example": 19618338, + "review_count": { + "example": 13701, "type": "integer" }, - "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" - } - }, - "type": "object" - }, - "slickdeals.SearchFacetGroup": { - "properties": { - "label": { - "example": "Categories", - "type": "string" - }, - "options": { - "items": { - "$ref": "#/definitions/slickdeals.SearchFacetOption" - }, - "type": "array" - } - }, - "type": "object" - }, - "slickdeals.SearchFacetOption": { - "properties": { - "count": { - "example": 27, - "type": "integer" - }, - "label": { - "example": "Laptops", - "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).", - "type": "string" - }, - "value": { - "example": "34", + "example": "https://www.samsclub.com/ip/Tide-PODS-Laundry-Detergent-Pacs-Spring-Meadow-156-ct/13576901230", "type": "string" } }, "type": "object" }, - "slickdeals.SearchResponse": { + "samsclub.RelatedItemsResponse": { "properties": { - "count": { - "example": 25, - "type": "integer" - }, "fetched_at": { "type": "string" }, - "query": { - "example": "laptop", + "item_id": { + "example": "13610014888", "type": "string" }, - "results": { + "shelves": { "items": { - "$ref": "#/definitions/slickdeals.SearchResult" + "$ref": "#/definitions/samsclub.RelatedShelf" }, "type": "array" }, @@ -145318,244 +145433,191 @@ }, "type": "object" }, - "slickdeals.SearchResult": { + "samsclub.RelatedShelf": { "properties": { - "found_by": { - "example": "BML6182", - "type": "string" - }, - "price": { - "example": "$358.53", - "type": "string" - }, - "published_at": { - "example": "2026-09-15T02:13:22Z", - "type": "string" - }, - "store": { - "example": "ebay.com", - "type": "string" - }, - "thread_id": { - "example": 20015817, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/samsclub.RelatedItem" + }, + "type": "array" }, "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" - }, - "slickdeals.UserProfile": { - "properties": { - "avatar_url": { - "type": "string" - }, - "deals_posted": { - "example": 175, - "type": "integer" - }, - "join_date": { - "example": "Nov 2017", - "type": "string" - }, - "reputation": { - "example": 685, - "type": "integer" - }, - "total_comments": { - "example": 519, - "type": "integer" - }, - "total_votes": { - "example": 728, - "type": "integer" - }, - "user_id": { - "example": "13480663", + "example": "Members also considered", "type": "string" } }, "type": "object" }, - "slickdeals.categoriesResponseDoc": { + "samsclub.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/slickdeals.CategoriesResponse" + "$ref": "#/definitions/samsclub.CategoryResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.categoryResponseDoc": { + "samsclub.contentResponseDoc": { "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/samsclub.ContentResponse" }, "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": { + "samsclub.departmentsResponseDoc": { "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/samsclub.DepartmentsResponse" }, "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": { + "samsclub.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.Deal" + "$ref": "#/definitions/samsclub.Product" }, "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": { + "samsclub.relatedItemsResponseDoc": { "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/samsclub.RelatedItemsResponse" }, "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": { + "sbsnews.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" + "published_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/slickdeals.ForumsResponse" + "summary": { + "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" }, - "slickdeals.frontpageResponseDoc": { + "sbsnews.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/sbsnews.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/slickdeals.FrontpageResponse" + "biography": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "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" + "has_next_page": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/slickdeals.PrimaryCategoriesResponse" + "headshot_url": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "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" + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/slickdeals.PrimaryCategoryResponse" + "page": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "url": { + "type": "string" } }, "type": "object" }, - "slickdeals.searchAdvancedResponseDoc": { + "sciencealert.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/newsplatform.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/slickdeals.SearchAdvancedResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "slickdeals.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", + "has_next_page": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/slickdeals.SearchResponse" + "slug": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "social_links": { + "items": { + "$ref": "#/definitions/sciencealert.AuthorSocialLink" + }, + "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sloanreview.ArticleIndexItem": { + "sciencealert.AuthorSocialLink": { "properties": { - "last_modified": { + "platform": { "type": "string" }, "url": { @@ -145564,18 +145626,21 @@ }, "type": "object" }, - "sloanreview.ArticleResponse": { + "scmp.ArticleResponse": { "properties": { - "archive_timestamp": { - "type": "string" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "archive_url": { - "type": "string" + "content_locked": { + "type": "boolean" }, - "authors": { + "description": { "type": "string" }, - "description": { + "image_url": { "type": "string" }, "paragraphs": { @@ -145584,81 +145649,109 @@ }, "type": "array" }, + "paywall_types": { + "items": { + "type": "string" + }, + "type": "array" + }, "published_at": { "type": "string" }, + "section": { + "type": "string" + }, "title": { "type": "string" }, - "url": { + "topics": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { "type": "string" }, - "word_count": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sloanreview.ArticlesResponse": { + "scmp.AuthorResponse": { "properties": { - "has_next": { - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/scmp.HeadlineItem" + }, + "type": "array" }, - "items": { + "bio": { + "type": "string" + }, + "expertise": { "items": { - "$ref": "#/definitions/sloanreview.ArticleIndexItem" + "type": "string" }, "type": "array" }, - "page": { - "type": "integer" + "headshot_url": { + "type": "string" }, - "page_size": { - "type": "integer" + "languages": { + "items": { + "type": "string" + }, + "type": "array" }, - "total": { - "type": "integer" + "location": { + "type": "string" }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "sloanreview.CategoriesResponse": { - "properties": { - "categories": { + "name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/sloanreview.Category" + "$ref": "#/definitions/scmp.AuthorSocialLink" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sloanreview.Category": { + "scmp.AuthorSocialLink": { "properties": { - "name": { + "type": { "type": "string" }, - "slug": { + "url": { "type": "string" } }, "type": "object" }, - "sloanreview.HeadlineItem": { + "scmp.HeadlineItem": { "properties": { - "authors": { + "author": { + "type": "string" + }, + "image_url": { "type": "string" }, "published_at": { "type": "string" }, - "title": { + "summary": { "type": "string" }, - "topic": { + "title": { "type": "string" }, "url": { @@ -145667,55 +145760,59 @@ }, "type": "object" }, - "sloanreview.HeadlinesResponse": { + "scmp.HeadlinesResponse": { "properties": { "items": { "items": { - "$ref": "#/definitions/sloanreview.HeadlineItem" + "$ref": "#/definitions/scmp.HeadlineItem" }, "type": "array" + }, + "section": { + "type": "string" } }, "type": "object" }, - "sloanreview.TopicResponse": { + "scmp.Section": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/sloanreview.HeadlineItem" - }, - "type": "array" + "name": { + "type": "string" }, - "topic": { + "parent_name": { + "type": "string" + }, + "parent_slug": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sloanreview.articleResponseDoc": { + "scmp.SectionsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sloanreview.ArticleResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/scmp.Section" + }, + "type": "array" } }, "type": "object" }, - "sloanreview.articlesResponseDoc": { + "scmp.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sloanreview.ArticlesResponse" + "$ref": "#/definitions/scmp.ArticleResponse" }, "msg": { "example": "OK", @@ -145724,14 +145821,14 @@ }, "type": "object" }, - "sloanreview.categoriesResponseDoc": { + "scmp.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sloanreview.CategoriesResponse" + "$ref": "#/definitions/scmp.AuthorResponse" }, "msg": { "example": "OK", @@ -145740,14 +145837,14 @@ }, "type": "object" }, - "sloanreview.headlinesResponseDoc": { + "scmp.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sloanreview.HeadlinesResponse" + "$ref": "#/definitions/scmp.HeadlinesResponse" }, "msg": { "example": "OK", @@ -145756,14 +145853,14 @@ }, "type": "object" }, - "sloanreview.topicResponseDoc": { + "scmp.sectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sloanreview.TopicResponse" + "$ref": "#/definitions/scmp.SectionsResponse" }, "msg": { "example": "OK", @@ -145772,51 +145869,41 @@ }, "type": "object" }, - "smh.ArticleResponse": { + "screenrant.AuthorResponse": { "properties": { - "authors": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "description": { + "biography": { "type": "string" }, "image_url": { "type": "string" }, - "is_accessible_for_free": { - "type": "boolean" - }, - "is_truncated": { - "type": "boolean" - }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "name": { + "type": "string" }, - "paragraphs": { + "social_links": { "items": { - "type": "string" + "$ref": "#/definitions/screenrant.AuthorSocialLink" }, "type": "array" }, - "paywalled": { - "type": "boolean" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, "title": { "type": "string" }, - "updated_at": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "screenrant.AuthorSocialLink": { + "properties": { + "type": { "type": "string" }, "url": { @@ -145825,1067 +145912,691 @@ }, "type": "object" }, - "smh.AuthorResponse": { + "seatgeek.CategoriesResult": { "properties": { - "articles": { + "categories": { "items": { - "$ref": "#/definitions/smh.HeadlineItem" + "$ref": "#/definitions/seatgeek.Category" }, "type": "array" }, - "bio": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "seatgeek.Category": { + "properties": { + "event_count": { + "type": "integer" + }, + "id": { + "example": 1010100, + "type": "integer" + }, + "image": { "type": "string" }, - "email": { + "is_visible": { + "type": "boolean" + }, + "name": { + "example": "MLB", "type": "string" }, - "image_url": { + "next_event_datetime_utc": { "type": "string" }, - "name": { + "parent_id": { + "example": 1010000, + "type": "integer" + }, + "performer_count": { + "type": "integer" + }, + "rank": { + "type": "integer" + }, + "seo_event_type": { "type": "string" }, - "social_links": { + "short_name": { + "type": "string" + }, + "slug": { + "example": "mlb", + "type": "string" + } + }, + "type": "object" + }, + "seatgeek.CitiesResult": { + "properties": { + "cities": { "items": { - "type": "string" + "$ref": "#/definitions/seatgeek.City" }, "type": "array" }, - "url": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "smh.HeadlineItem": { + "seatgeek.City": { "properties": { - "author": { + "country": { + "example": "United States", "type": "string" }, - "image_url": { - "type": "string" + "id": { + "example": 72, + "type": "integer" }, - "published_at": { - "type": "string" + "lat": { + "type": "number" }, - "summary": { + "lon": { + "type": "number" + }, + "name": { + "example": "Albuquerque", "type": "string" }, - "title": { + "radius": { + "example": "20mi", "type": "string" }, - "type": { + "show_concerts": { + "type": "boolean" + }, + "show_sports": { + "type": "boolean" + }, + "show_theater": { + "type": "boolean" + }, + "slug": { + "example": "albuquerque", "type": "string" }, - "url": { + "state": { + "example": "New Mexico", "type": "string" } }, "type": "object" }, - "sofascore.EventDetail": { + "seatgeek.Event": { "properties": { - "attendance": { - "type": "integer" - }, - "away_score": { - "$ref": "#/definitions/sofascore.ScoreLine" + "date_tbd": { + "type": "boolean" }, - "away_team": { - "$ref": "#/definitions/sofascore.TeamRef" + "datetime_local": { + "type": "string" }, - "home_score": { - "$ref": "#/definitions/sofascore.ScoreLine" + "datetime_utc": { + "type": "string" }, - "home_team": { - "$ref": "#/definitions/sofascore.TeamRef" + "description": { + "type": "string" }, "id": { - "example": 14025013, + "example": 17695775, "type": "integer" }, - "referee": { - "$ref": "#/definitions/sofascore.Referee" + "is_open": { + "type": "boolean" }, - "slug": { + "performers": { + "items": { + "$ref": "#/definitions/seatgeek.EventPerformer" + }, + "type": "array" + }, + "popularity": { + "type": "number" + }, + "score": { + "type": "number" + }, + "season_stage": { "type": "string" }, - "start_time": { - "example": "2025-08-15T19:00:00Z", + "short_title": { "type": "string" }, - "start_timestamp": { - "type": "integer" + "stats": { + "$ref": "#/definitions/seatgeek.EventStats" }, "status": { - "$ref": "#/definitions/sofascore.EventStatus" - }, - "tournament": { - "$ref": "#/definitions/sofascore.TournamentRef" + "type": "string" }, - "venue": { - "$ref": "#/definitions/sofascore.Venue" + "taxonomies": { + "items": { + "$ref": "#/definitions/seatgeek.Taxonomy" + }, + "type": "array" }, - "winner_code": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.EventH2HResponse": { - "properties": { - "event_id": { - "type": "integer" + "time_tbd": { + "type": "boolean" }, - "fetched_at": { + "title": { "type": "string" }, - "manager_duel": { - "$ref": "#/definitions/sofascore.TeamDuel" + "type": { + "example": "mlb", + "type": "string" }, - "source_url": { + "url": { "type": "string" }, - "team_duel": { - "$ref": "#/definitions/sofascore.TeamDuel" + "venue": { + "$ref": "#/definitions/seatgeek.Venue" } }, "type": "object" }, - "sofascore.EventIncidentsResponse": { + "seatgeek.EventPerformer": { "properties": { - "count": { - "type": "integer" + "home_team": { + "type": "boolean" }, - "event_id": { + "id": { "type": "integer" }, - "fetched_at": { + "image": { "type": "string" }, - "incidents": { - "items": { - "$ref": "#/definitions/sofascore.Incident" - }, - "type": "array" + "name": { + "type": "string" }, - "source_url": { + "primary": { + "type": "boolean" + }, + "type": { + "example": "mlb", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sofascore.EventLineupsResponse": { + "seatgeek.EventStats": { "properties": { - "away": { - "$ref": "#/definitions/sofascore.TeamLineup" + "average_price": { + "type": "number" }, - "confirmed": { - "type": "boolean" + "highest_price": { + "type": "number" }, - "event_id": { + "listing_count": { "type": "integer" }, - "fetched_at": { - "type": "string" + "lowest_price": { + "type": "number" }, - "home": { - "$ref": "#/definitions/sofascore.TeamLineup" + "lowest_sg_base_price": { + "type": "number" }, - "source_url": { - "type": "string" + "median_price": { + "type": "number" + }, + "ticket_count": { + "type": "integer" } }, "type": "object" }, - "sofascore.EventOddsResponse": { + "seatgeek.EventsByCategoryResult": { "properties": { - "count": { + "events": { + "items": { + "$ref": "#/definitions/seatgeek.Event" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "event_id": { + "per_page": { "type": "integer" }, - "fetched_at": { - "type": "string" + "taxonomy_id": { + "type": "integer" }, - "markets": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "seatgeek.EventsNearResult": { + "properties": { + "events": { "items": { - "$ref": "#/definitions/sofascore.OddsMarket" + "$ref": "#/definitions/seatgeek.Event" }, "type": "array" }, - "source_url": { - "type": "string" + "geolocation": { + "$ref": "#/definitions/seatgeek.GeoResolved" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "sofascore.EventResponse": { + "seatgeek.GeoLocation": { "properties": { - "event": { - "$ref": "#/definitions/sofascore.EventDetail" - }, - "fetched_at": { - "type": "string" + "lat": { + "type": "number" }, - "source_url": { - "type": "string" + "lon": { + "type": "number" } }, "type": "object" }, - "sofascore.EventStatisticsResponse": { + "seatgeek.GeoResolved": { "properties": { - "event_id": { - "type": "integer" + "city": { + "type": "string" }, - "fetched_at": { + "country": { "type": "string" }, - "periods": { - "items": { - "$ref": "#/definitions/sofascore.StatPeriod" - }, - "type": "array" + "display_name": { + "example": "Albuquerque, NM", + "type": "string" }, - "source_url": { + "range": { + "example": "50mi", + "type": "string" + }, + "state": { "type": "string" } }, "type": "object" }, - "sofascore.EventStatus": { + "seatgeek.Performer": { "properties": { - "code": { + "event_count": { "type": "integer" }, - "description": { - "example": "Ended", - "type": "string" + "has_upcoming_events": { + "type": "boolean" }, - "type": { - "example": "finished", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.EventSummary": { - "properties": { - "away_score": { - "$ref": "#/definitions/sofascore.ScoreLine" - }, - "away_team": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "home_score": { - "$ref": "#/definitions/sofascore.ScoreLine" - }, - "home_team": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "id": { - "example": 14025013, - "type": "integer" - }, - "slug": { - "type": "string" - }, - "start_time": { - "example": "2025-08-15T19:00:00Z", - "type": "string" - }, - "start_timestamp": { - "type": "integer" - }, - "status": { - "$ref": "#/definitions/sofascore.EventStatus" - }, - "tournament": { - "$ref": "#/definitions/sofascore.TournamentRef" - }, - "winner_code": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.Incident": { - "properties": { - "added_time": { - "type": "integer" - }, - "away_score": { + "home_venue_id": { "type": "integer" }, - "card_color": { - "example": "yellow", - "type": "string" - }, - "home_score": { + "id": { + "example": 1, "type": "integer" }, - "is_home": { - "type": "boolean" - }, - "player": { - "type": "string" - }, - "player_in": { - "type": "string" - }, - "player_out": { - "type": "string" - }, - "reason": { + "image": { "type": "string" }, - "text": { - "example": "FT", + "name": { "type": "string" }, - "time": { + "num_upcoming_events": { "type": "integer" }, - "type": { - "example": "goal", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.LineupPlayer": { - "properties": { - "jersey_number": { - "type": "string" + "popularity": { + "type": "number" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerRef" + "score": { + "type": "number" }, - "position": { + "short_name": { "type": "string" }, - "substitute": { - "type": "boolean" - } - }, - "type": "object" - }, - "sofascore.LiveEventsResponse": { - "properties": { - "count": { - "example": 10, - "type": "integer" - }, - "events": { + "taxonomies": { "items": { - "$ref": "#/definitions/sofascore.EventSummary" + "$ref": "#/definitions/seatgeek.Taxonomy" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "sport": { - "example": "football", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.OddsChoice": { - "properties": { - "name": { - "example": "1", + "type": { + "example": "mlb", "type": "string" }, - "value": { - "example": "29/100", + "url": { "type": "string" - }, - "winning": { - "type": "boolean" } }, "type": "object" }, - "sofascore.OddsMarket": { + "seatgeek.PerformerEventsResult": { "properties": { - "choices": { + "events": { "items": { - "$ref": "#/definitions/sofascore.OddsChoice" + "$ref": "#/definitions/seatgeek.Event" }, "type": "array" }, - "group": { - "example": "1X2", - "type": "string" + "page": { + "type": "integer" }, - "name": { - "example": "Full time", - "type": "string" + "per_page": { + "type": "integer" }, - "period": { - "example": "Full-time", - "type": "string" + "performer_id": { + "type": "integer" }, - "suspended": { - "type": "boolean" + "total": { + "type": "integer" } }, "type": "object" }, - "sofascore.PlayerDetail": { + "seatgeek.SearchEvent": { "properties": { - "country": { - "type": "string" + "date_tbd": { + "type": "boolean" }, - "date_of_birth": { + "datetime_local": { "type": "string" }, - "deceased": { - "type": "boolean" - }, - "height": { - "type": "integer" + "datetime_utc": { + "type": "string" }, "id": { "type": "integer" }, - "jersey_number": { - "type": "string" - }, - "market_value": { - "type": "integer" + "lowest_price": { + "type": "number" }, - "market_value_currency": { + "short_title": { "type": "string" }, - "name": { - "type": "string" + "time_tbd": { + "type": "boolean" }, - "position": { + "title": { "type": "string" }, - "preferred_foot": { + "type": { + "example": "mlb", "type": "string" }, - "short_name": { + "url": { "type": "string" }, - "slug": { + "venue_location": { + "example": "Los Angeles, CA", "type": "string" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "venue_name": { + "type": "string" } }, "type": "object" }, - "sofascore.PlayerRef": { + "seatgeek.SearchPerformer": { "properties": { - "country": { - "example": "Spain", - "type": "string" + "event_count": { + "type": "integer" }, "id": { - "example": 855833, "type": "integer" }, - "name": { - "example": "Ferran Torres", + "image": { "type": "string" }, - "position": { - "example": "F", + "name": { "type": "string" }, "short_name": { - "example": "F. Torres", - "type": "string" - }, - "slug": { - "example": "ferran-torres", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.PlayerResponse": { - "properties": { - "fetched_at": { "type": "string" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerDetail" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "sofascore.Referee": { - "properties": { - "country": { - "example": "England", + "type": { + "example": "mlb", "type": "string" }, - "id": { - "type": "integer" - }, - "name": { - "example": "Anthony Taylor", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.RoundEventsResponse": { + "seatgeek.SearchResult": { "properties": { - "count": { - "type": "integer" - }, "events": { "items": { - "$ref": "#/definitions/sofascore.EventSummary" + "$ref": "#/definitions/seatgeek.SearchEvent" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "round": { - "type": "integer" - }, - "season_id": { - "type": "integer" - }, - "source_url": { - "type": "string" - }, - "tournament_id": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.ScoreLine": { - "properties": { - "current": { - "type": "integer" - }, - "period1": { - "type": "integer" - }, - "period2": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.SearchResponse": { - "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" + "performers": { + "items": { + "$ref": "#/definitions/seatgeek.SearchPerformer" + }, + "type": "array" }, "query": { "type": "string" }, - "results": { + "venues": { "items": { - "$ref": "#/definitions/sofascore.SearchResult" + "$ref": "#/definitions/seatgeek.SearchVenue" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "sofascore.SearchResult": { + "seatgeek.SearchVenue": { "properties": { - "country": { - "type": "string" - }, - "id": { + "capacity": { "type": "integer" }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "sport": { + "display_location": { + "example": "Los Angeles, CA", "type": "string" }, - "team_id": { + "event_count": { "type": "integer" }, - "team_name": { - "type": "string" - }, - "type": { - "example": "team", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.Season": { - "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, - "year": { + "url": { "type": "string" } }, "type": "object" }, - "sofascore.SquadPlayer": { + "seatgeek.Taxonomy": { "properties": { - "country": { - "type": "string" - }, - "date_of_birth": { - "type": "string" - }, - "height": { - "type": "integer" - }, "id": { + "example": 1010100, "type": "integer" }, - "jersey_number": { - "type": "string" - }, - "market_value": { - "type": "integer" - }, - "market_value_currency": { - "type": "string" - }, "name": { + "example": "mlb", "type": "string" }, - "position": { - "type": "string" - }, - "preferred_foot": { - "type": "string" - }, - "short_name": { - "type": "string" + "parent_id": { + "example": 1010000, + "type": "integer" }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "sofascore.StandingsGroup": { - "properties": { - "name": { + "seo_event_type": { "type": "string" - }, - "rows": { - "items": { - "$ref": "#/definitions/sofascore.StandingsRow" - }, - "type": "array" } }, "type": "object" }, - "sofascore.StandingsResponse": { + "seatgeek.TrendingItem": { "properties": { - "fetched_at": { - "type": "string" - }, - "groups": { - "items": { - "$ref": "#/definitions/sofascore.StandingsGroup" - }, - "type": "array" - }, - "season_id": { + "entity_id": { "type": "integer" }, - "source_url": { + "entity_image_url": { "type": "string" }, - "tournament_id": { - "type": "integer" - }, - "type": { - "example": "total", + "entity_name": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.StandingsRow": { - "properties": { - "draws": { - "type": "integer" - }, - "losses": { - "type": "integer" }, - "matches": { - "type": "integer" + "entity_type": { + "example": "event", + "type": "string" }, - "points": { - "type": "integer" + "entity_url": { + "type": "string" }, - "position": { - "type": "integer" + "event_datetime_local": { + "type": "string" }, - "promotion": { - "example": "Champions League", + "event_datetime_utc": { "type": "string" }, - "scores_against": { - "type": "integer" + "lowest_price": { + "type": "number" }, - "scores_for": { + "rank": { "type": "integer" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "wins": { + "rank_change": { "type": "integer" } }, "type": "object" }, - "sofascore.StatGroup": { + "seatgeek.TrendingResult": { "properties": { "items": { "items": { - "$ref": "#/definitions/sofascore.StatItem" + "$ref": "#/definitions/seatgeek.TrendingItem" }, "type": "array" }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "sofascore.StatItem": { - "properties": { - "away": { - "example": "39%", - "type": "string" - }, - "home": { - "example": "61%", - "type": "string" - }, - "key": { - "example": "ballPossession", + "list_display_name": { "type": "string" }, - "name": { - "example": "Ball possession", + "list_id": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.StatPeriod": { - "properties": { - "groups": { - "items": { - "$ref": "#/definitions/sofascore.StatGroup" - }, - "type": "array" }, - "period": { - "example": "ALL", + "list_type": { "type": "string" } }, "type": "object" }, - "sofascore.TeamDetail": { + "seatgeek.Venue": { "properties": { - "country": { - "example": "Spain", - "type": "string" - }, - "id": { - "example": 2817, + "capacity": { "type": "integer" }, - "manager": { - "type": "string" - }, - "name": { - "example": "FC Barcelona", - "type": "string" - }, - "national": { - "type": "boolean" - }, - "primary_color": { + "city": { "type": "string" }, - "short_name": { - "example": "Barcelona", + "country": { + "example": "US", "type": "string" }, - "slug": { - "example": "barcelona", + "display_location": { + "example": "Los Angeles, CA", "type": "string" }, - "sport": { - "example": "Football", - "type": "string" + "has_upcoming_events": { + "type": "boolean" }, - "tournament_id": { + "id": { "type": "integer" }, - "tournament_name": { - "type": "string" - }, - "venue": { - "type": "string" - }, - "venue_capacity": { - "type": "integer" + "location": { + "$ref": "#/definitions/seatgeek.GeoLocation" }, - "venue_city": { + "name": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.TeamDuel": { - "properties": { - "away_wins": { - "type": "integer" }, - "draws": { + "num_upcoming_events": { "type": "integer" }, - "home_wins": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.TeamEventsResponse": { - "properties": { - "count": { - "type": "integer" + "popularity": { + "type": "number" }, - "direction": { - "example": "next", + "postal_code": { "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "type": "array" + "score": { + "type": "number" }, - "fetched_at": { + "slug": { "type": "string" }, - "has_next_page": { - "type": "boolean" + "state": { + "type": "string" }, - "page": { - "type": "integer" + "stats": { + "$ref": "#/definitions/seatgeek.VenueStats" }, - "source_url": { + "timezone": { + "example": "America/New_York", "type": "string" }, - "team_id": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.TeamLineup": { - "properties": { - "formation": { - "example": "4-3-3", + "url": { "type": "string" - }, - "players": { - "items": { - "$ref": "#/definitions/sofascore.LineupPlayer" - }, - "type": "array" } }, "type": "object" }, - "sofascore.TeamPlayersResponse": { + "seatgeek.VenueEventsResult": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "players": { + "events": { "items": { - "$ref": "#/definitions/sofascore.SquadPlayer" + "$ref": "#/definitions/seatgeek.Event" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "team_id": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.TeamRef": { - "properties": { - "country": { - "example": "Spain", - "type": "string" - }, - "id": { - "example": 2817, - "type": "integer" - }, - "name": { - "example": "FC Barcelona", - "type": "string" - }, - "national": { - "type": "boolean" - }, - "short_name": { - "example": "Barcelona", - "type": "string" - }, - "slug": { - "example": "barcelona", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.TeamResponse": { - "properties": { - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "team": { - "$ref": "#/definitions/sofascore.TeamDetail" - } - }, - "type": "object" - }, - "sofascore.TournamentRef": { - "properties": { - "category": { - "example": "England", - "type": "string" - }, - "id": { + "page": { "type": "integer" }, - "name": { - "example": "Premier League", - "type": "string" - }, - "slug": { - "example": "premier-league", - "type": "string" - }, - "unique_tournament_id": { - "example": 17, + "per_page": { "type": "integer" }, - "unique_tournament_name": { - "example": "Premier League", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.TournamentSeasonsResponse": { - "properties": { - "count": { + "total": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "seasons": { - "items": { - "$ref": "#/definitions/sofascore.Season" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "tournament_id": { + "venue_id": { "type": "integer" } }, "type": "object" }, - "sofascore.Venue": { + "seatgeek.VenueStats": { "properties": { - "capacity": { - "example": 61276, + "event_count": { "type": "integer" - }, - "city": { - "example": "Liverpool", - "type": "string" - }, - "country": { - "example": "England", - "type": "string" - }, - "name": { - "example": "Anfield", - "type": "string" } }, "type": "object" }, - "sofascore.eventH2HResponseDoc": { + "seatgeek.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventH2HResponse" + "$ref": "#/definitions/seatgeek.CategoriesResult" }, "msg": { "example": "OK", @@ -146894,14 +146605,14 @@ }, "type": "object" }, - "sofascore.eventIncidentsResponseDoc": { + "seatgeek.citiesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventIncidentsResponse" + "$ref": "#/definitions/seatgeek.CitiesResult" }, "msg": { "example": "OK", @@ -146910,14 +146621,14 @@ }, "type": "object" }, - "sofascore.eventLineupsResponseDoc": { + "seatgeek.eventResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventLineupsResponse" + "$ref": "#/definitions/seatgeek.Event" }, "msg": { "example": "OK", @@ -146926,14 +146637,14 @@ }, "type": "object" }, - "sofascore.eventOddsResponseDoc": { + "seatgeek.eventsByCategoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventOddsResponse" + "$ref": "#/definitions/seatgeek.EventsByCategoryResult" }, "msg": { "example": "OK", @@ -146942,14 +146653,14 @@ }, "type": "object" }, - "sofascore.eventResponseDoc": { + "seatgeek.eventsNearResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventResponse" + "$ref": "#/definitions/seatgeek.EventsNearResult" }, "msg": { "example": "OK", @@ -146958,14 +146669,14 @@ }, "type": "object" }, - "sofascore.eventStatisticsResponseDoc": { + "seatgeek.performerEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventStatisticsResponse" + "$ref": "#/definitions/seatgeek.PerformerEventsResult" }, "msg": { "example": "OK", @@ -146974,14 +146685,14 @@ }, "type": "object" }, - "sofascore.liveEventsResponseDoc": { + "seatgeek.performerResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.LiveEventsResponse" + "$ref": "#/definitions/seatgeek.Performer" }, "msg": { "example": "OK", @@ -146990,14 +146701,14 @@ }, "type": "object" }, - "sofascore.playerResponseDoc": { + "seatgeek.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.PlayerResponse" + "$ref": "#/definitions/seatgeek.SearchResult" }, "msg": { "example": "OK", @@ -147006,14 +146717,14 @@ }, "type": "object" }, - "sofascore.roundEventsResponseDoc": { + "seatgeek.trendingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.RoundEventsResponse" + "$ref": "#/definitions/seatgeek.TrendingResult" }, "msg": { "example": "OK", @@ -147022,14 +146733,14 @@ }, "type": "object" }, - "sofascore.searchResponseDoc": { + "seatgeek.venueEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.SearchResponse" + "$ref": "#/definitions/seatgeek.VenueEventsResult" }, "msg": { "example": "OK", @@ -147038,14 +146749,14 @@ }, "type": "object" }, - "sofascore.standingsResponseDoc": { + "seatgeek.venueResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.StandingsResponse" + "$ref": "#/definitions/seatgeek.Venue" }, "msg": { "example": "OK", @@ -147054,181 +146765,184 @@ }, "type": "object" }, - "sofascore.teamEventsResponseDoc": { + "seattletimes.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.TeamEventsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamPlayersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamPlayersResponse" + "summary": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sofascore.teamResponseDoc": { + "seattletimes.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/seattletimes.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/sofascore.TeamResponse" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "email": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.tournamentSeasonsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentSeasonsResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "type": "string" + }, + "twitter": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sonic.AvailabilityChannel": { + "sec.CompanyIntelligenceResponse": { "properties": { - "days": { + "degraded": { "items": { - "$ref": "#/definitions/sonic.AvailabilityDay" + "type": "string" }, "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", - "type": "string" - } - }, - "type": "object" - }, - "sonic.AvailabilityDay": { - "properties": { - "count": { - "example": 96, - "type": "integer" + "financial_snapshot": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" }, - "date": { - "example": "2026-09-05", - "type": "string" + "hiring": { + "$ref": "#/definitions/sec.HiringBlock" }, - "slots": { + "latest_8k": { + "$ref": "#/definitions/sec.Filing" + }, + "latest_annual_10k": { + "$ref": "#/definitions/sec.Filing" + }, + "latest_quarterly_10q": { + "$ref": "#/definitions/sec.Filing" + }, + "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)." + }, + "news": { "items": { - "$ref": "#/definitions/sonic.AvailabilitySlot" + "$ref": "#/definitions/sec.NewsItem" }, "type": "array" - } - }, - "type": "object" - }, - "sonic.AvailabilityResponse": { - "properties": { - "channels": { + }, + "profile": { + "$ref": "#/definitions/sec.CompanyProfile" + }, + "recent_events": { "items": { - "$ref": "#/definitions/sonic.AvailabilityChannel" + "$ref": "#/definitions/sec.EventFiling" }, "type": "array" }, - "fetched_at": { - "type": "string" + "snapshot_fiscal_year": { + "type": "integer" }, - "fulfillment": { - "example": "PICKUP", + "snapshot_period_end": { "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" - }, - "service_types": { - "description": "ServiceTypes is every channel the store supports, which is a\nsuperset of the channels that have slots in this response.", + "source_urls": { "items": { "type": "string" }, "type": "array" - }, - "slot_duration_minutes": { - "description": "SlotDurationMinutes is how long each window lasts.", - "example": 5, + } + }, + "type": "object" + }, + "sec.CompanyMatch": { + "properties": { + "cik": { + "example": 320193, "type": "integer" }, - "source_url": { + "cik_padded": { + "example": "CIK0000320193", "type": "string" }, - "store_id": { - "example": "4521", + "name": { + "example": "Apple Inc.", "type": "string" }, - "timezone": { - "example": "America/Denver", + "ticker": { + "example": "AAPL", "type": "string" - }, - "total_slots": { - "example": 288, - "type": "integer" } }, "type": "object" }, - "sonic.AvailabilitySlot": { + "sec.CompanyProfile": { "properties": { - "end_time": { - "example": "2026-09-05T16:50:00Z", + "cik": { + "type": "integer" + }, + "name": { "type": "string" }, - "start_time": { - "example": "2026-09-05T16:45:00Z", + "sic": { + "type": "string" + }, + "sic_description": { + "type": "string" + }, + "ticker": { "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "sonic.CategoriesResponse": { + "sec.CompanySearchResponse": { "properties": { - "categories": { + "count": { + "example": 1, + "type": "integer" + }, + "matches": { "items": { - "$ref": "#/definitions/sonic.Category" + "$ref": "#/definitions/sec.CompanyMatch" }, "type": "array" }, - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { + "query": { + "example": "apple", "type": "string" }, "source_url": { @@ -147237,20 +146951,15 @@ }, "type": "object" }, - "sonic.Category": { + "sec.EventFiling": { "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", + "accession_number": { "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" + "filing_date": { + "type": "string" }, - "slug": { - "example": "tea-coffee", + "items": { "type": "string" }, "url": { @@ -147259,81 +146968,51 @@ }, "type": "object" }, - "sonic.Deal": { + "sec.Filing": { "properties": { - "cta_text": { - "description": "CTAText is the call-to-action button label, e.g. \"Order Now\".", - "example": "Order Now", + "accession_number": { + "example": "0000320193-25-000081", "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", + "description": { "type": "string" }, - "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.", + "filing_date": { + "example": "2025-10-31", "type": "string" }, - "headline": { - "description": "Headline is the marketing headline shown on the card.", - "example": "BACON MAKES EVERYTHING BETTER", + "filing_index_url": { "type": "string" }, - "image_url": { - "description": "ImageURL is the promotion's full-resolution creative.", + "form": { + "example": "10-K", "type": "string" }, - "name": { - "description": "Name is the promotion's public name.", - "example": "$1.99 Jr Bacon Cheeseburger", - "type": "string" + "is_xbrl": { + "type": "boolean" }, - "section": { - "description": "Section is the on-page grouping this deal appeared under, e.g.\n\"Featured Deals\".", - "example": "Featured Deals", + "items": { "type": "string" }, - "terms": { - "description": "Terms is the promotion's legal/limitations text when published.", + "primary_doc_url": { "type": "string" - } - }, - "type": "object" - }, - "sonic.DealsResponse": { - "properties": { - "count": { - "example": 3, - "type": "integer" - }, - "deals": { - "items": { - "$ref": "#/definitions/sonic.Deal" - }, - "type": "array" }, - "fetched_at": { + "primary_document": { "type": "string" }, - "heading": { - "example": "Featured Sonic Deals", + "report_date": { + "example": "2025-09-27", "type": "string" }, - "source_url": { - "type": "string" + "size": { + "type": "integer" } }, "type": "object" }, - "sonic.DeliveryProvider": { + "sec.FilingDocument": { "properties": { - "is_active": { - "type": "boolean" - }, "name": { - "example": "DoorDash", "type": "string" }, "url": { @@ -147342,113 +147021,59 @@ }, "type": "object" }, - "sonic.DirectoryCity": { + "sec.FilingResponse": { "properties": { - "count": { - "example": 1, - "type": "integer" - }, - "name": { - "example": "Albertville", + "accession_number": { + "example": "0000320193-25-000081", "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", - "type": "string" - } - }, - "type": "object" - }, - "sonic.DirectoryCountry": { - "properties": { - "count": { - "example": 3364, + "cik": { "type": "integer" }, - "country_code": { - "example": "US", + "cik_padded": { "type": "string" }, - "country_name": { - "example": "United States", + "description": { "type": "string" }, - "states": { - "items": { - "$ref": "#/definitions/sonic.DirectoryState" - }, - "type": "array" - } - }, - "type": "object" - }, - "sonic.DirectoryResponse": { - "properties": { - "countries": { + "documents": { "items": { - "$ref": "#/definitions/sonic.DirectoryCountry" + "$ref": "#/definitions/sec.FilingDocument" }, "type": "array" }, - "fetched_at": { + "filing_date": { + "example": "2025-10-31", "type": "string" }, - "source_url": { + "filing_index_url": { "type": "string" }, - "total_count": { - "example": 3364, - "type": "integer" - } - }, - "type": "object" - }, - "sonic.DirectoryState": { - "properties": { - "cities": { - "items": { - "$ref": "#/definitions/sonic.DirectoryCity" - }, - "type": "array" - }, - "code": { - "example": "AL", + "form": { + "example": "10-K", "type": "string" }, - "count": { - "example": 95, - "type": "integer" + "is_xbrl": { + "type": "boolean" }, - "name": { - "example": "Alabama", - "type": "string" - } - }, - "type": "object" - }, - "sonic.ItemResponse": { - "properties": { - "description": { - "example": "Local Favorite! Fluffy egg, melty cheese, and bacon between a toasted bagel.", + "items": { "type": "string" }, - "fetched_at": { + "name": { "type": "string" }, - "image_url": { + "primary_doc_url": { "type": "string" }, - "name": { - "example": "Bacon, Egg and Cheese Bagel", + "primary_document": { "type": "string" }, - "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.", + "report_date": { + "example": "2025-09-27", "type": "string" }, - "path": { - "type": "string" + "size": { + "type": "integer" }, "source_url": { "type": "string" @@ -147456,1358 +147081,1527 @@ }, "type": "object" }, - "sonic.LocationEntry": { + "sec.FilingSection": { "properties": { - "address_slug": { - "example": "2540-dell-range-blvd", - "type": "string" - }, - "city_slug": { - "example": "cheyenne", - "type": "string" + "char_count": { + "type": "integer" }, - "country_code": { - "example": "US", + "item": { + "example": "1A", "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", + "text": { "type": "string" }, - "state_code": { - "example": "WY", + "title": { + "example": "Risk Factors", "type": "string" }, - "store_id": { - "example": "4521", - "type": "string" + "truncated": { + "type": "boolean" } }, "type": "object" }, - "sonic.LocationSuggestResponse": { + "sec.FilingSectionsResponse": { "properties": { - "count": { - "example": 5, - "type": "integer" - }, - "country": { - "example": "US", + "accession_number": { "type": "string" }, - "fetched_at": { - "type": "string" + "cik": { + "type": "integer" }, - "limit": { - "example": 5, + "count": { "type": "integer" }, - "query": { - "example": "cheyenne wy", + "document_url": { "type": "string" }, - "source_url": { + "form": { "type": "string" }, - "suggestions": { + "sections": { "items": { - "$ref": "#/definitions/sonic.LocationSuggestion" + "$ref": "#/definitions/sec.FilingSection" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "sonic.LocationSuggestion": { + "sec.FinancialPeriod": { "properties": { - "city": { - "example": "Cheyenne", + "currency": { + "example": "USD", "type": "string" }, - "confidence": { - "description": "Confidence is the geocoder's own match confidence: \"exact\",\n\"interpolated\", or \"fallback\".", - "example": "exact", + "end_date": { "type": "string" }, - "country": { - "example": "United States", + "fiscal_period": { + "example": "FY", "type": "string" }, - "country_code": { - "example": "US", - "type": "string" + "fiscal_year": { + "type": "integer" }, - "county": { - "example": "Laramie", + "form": { "type": "string" }, - "formatted_address": { - "example": "2540 Dell Range Blvd, Cheyenne, WY 82009 US", + "lines": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "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" + }, + "sec.FinancialsResponse": { + "properties": { + "cik": { + "type": "integer" + }, + "line_order": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { "type": "string" }, - "label": { - "example": "2540 Dell Range Blvd", + "period": { + "example": "annual", "type": "string" }, - "latitude": { - "example": 41.160549, - "type": "number" + "periods": { + "items": { + "$ref": "#/definitions/sec.FinancialPeriod" + }, + "type": "array" }, - "layer": { - "description": "Layer is the match's granularity: \"address\", \"locality\", \"state\",\n\"postalCode\", or \"place\".", - "example": "address", + "source_url": { "type": "string" }, - "longitude": { - "example": -104.777671, - "type": "number" + "statement": { + "example": "income", + "type": "string" }, - "number": { - "example": "2540", + "ticker": { + "type": "string" + } + }, + "type": "object" + }, + "sec.FrameFact": { + "properties": { + "accession_number": { "type": "string" }, - "postal_code": { - "example": "82009", + "cik": { + "type": "integer" + }, + "end": { "type": "string" }, - "state": { - "example": "Wyoming", + "entity_name": { "type": "string" }, - "state_code": { - "example": "WY", + "form": { "type": "string" }, - "street": { - "example": "Dell Range Blvd", + "start": { "type": "string" + }, + "value": { + "type": "number" } }, "type": "object" }, - "sonic.LocationsResponse": { + "sec.FramesResponse": { "properties": { - "city": { - "example": "cheyenne", + "concept": { + "example": "Assets", "type": "string" }, "count": { - "example": 100, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "locations": { + "facts": { "items": { - "$ref": "#/definitions/sonic.LocationEntry" + "$ref": "#/definitions/sec.FrameFact" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 100, - "type": "integer" + "period": { + "example": "CY2024Q4I", + "type": "string" }, "source_url": { "type": "string" }, - "state": { - "example": "WY", + "taxonomy": { + "example": "us-gaap", "type": "string" }, "total": { - "example": 5125, - "type": "integer" - }, - "total_pages": { - "example": 52, - "type": "integer" - } - }, - "type": "object" - }, - "sonic.MenuItem": { - "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" }, - "name": { - "example": "Bacon, Egg and Cheese Bagel", + "unit": { + "example": "USD", "type": "string" } }, "type": "object" }, - "sonic.MenuResponse": { + "sec.FullTextHit": { "properties": { - "category": { - "example": "breakfast", + "accession_number": { "type": "string" }, - "count": { - "example": 24, + "cik": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "items": { + "company_names": { "items": { - "$ref": "#/definitions/sonic.MenuItem" + "type": "string" }, "type": "array" }, - "source_url": { + "document_url": { + "type": "string" + }, + "filed_at": { + "type": "string" + }, + "form": { "type": "string" } }, "type": "object" }, - "sonic.NearbyResponse": { + "sec.FullTextSearchResponse": { "properties": { - "fetched_at": { - "type": "string" - }, - "is_last_page": { - "type": "boolean" - }, - "latitude": { - "example": 35.4676, - "type": "number" - }, - "limit": { - "example": 10, + "count": { "type": "integer" }, - "longitude": { - "example": -97.5164, - "type": "number" + "hits": { + "items": { + "$ref": "#/definitions/sec.FullTextHit" + }, + "type": "array" }, "page": { - "example": 0, - "type": "integer" - }, - "radius_miles": { - "example": 25, "type": "integer" }, - "returned_count": { - "example": 10, - "type": "integer" + "query": { + "type": "string" }, "source_url": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/sonic.NearbyStore" - }, - "type": "array" - }, - "total_pages": { - "example": 2, - "type": "integer" - }, - "total_stores": { - "example": 17, + "total": { "type": "integer" } }, "type": "object" }, - "sonic.NearbyStore": { + "sec.HiringBlock": { "properties": { - "address": { - "$ref": "#/definitions/sonic.StoreAddress" - }, - "amenities": { - "items": { - "type": "string" - }, - "type": "array" - }, - "delivery_providers": { - "items": { - "$ref": "#/definitions/sonic.DeliveryProvider" - }, - "type": "array" + "new_last_30d": { + "type": "integer" }, - "display_name": { - "example": "2540 Dell Range Blvd, Cheyenne, WY", + "provider": { "type": "string" }, - "distance_miles": { - "example": 3.45, - "type": "number" - }, - "has_drive_through": { - "type": "boolean" - }, - "hours": { - "items": { - "$ref": "#/definitions/sonic.StoreHours" - }, - "type": "array" - }, - "is_delivery_enabled": { - "type": "boolean" - }, - "is_digitally_enabled": { - "type": "boolean" - }, - "latitude": { - "example": 41.160531, - "type": "number" - }, - "longitude": { - "example": -104.777659, + "remote_pct": { "type": "number" }, - "phone": { - "example": "307-632-9188", + "source_url": { "type": "string" }, - "service_hours": { + "top_departments": { "items": { - "$ref": "#/definitions/sonic.StoreServiceHours" + "$ref": "#/definitions/sec.NameCount" }, "type": "array" }, - "status": { - "example": "OPEN", - "type": "string" - }, - "store_id": { - "example": "4521", - "type": "string" - }, - "timezone": { - "example": "America/Denver", - "type": "string" + "total_open_roles": { + "type": "integer" } }, "type": "object" }, - "sonic.NutritionDocument": { + "sec.Holding": { "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", + "cusip": { "type": "string" }, - "content_type": { - "description": "ContentType is the document's MIME type, in practice\n\"application/pdf\".", - "example": "application/pdf", + "investment_discretion": { "type": "string" }, - "file_name": { - "example": "61667-1_FEE_0926_Nutrition.pdf", + "issuer": { "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", + "put_call": { "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": { - "example": "61131-13 SUM26 NAT WOP-English FA cp WCAG", + "share_type": { "type": "string" }, - "updated_at": { - "description": "UpdatedAt is when Sonic last republished the file.", - "example": "2026-06-30T16:45:09.549Z", - "type": "string" + "shares": { + "type": "number" }, - "url": { - "example": "https://downloads.ctfassets.net/.../nutrition-guide.pdf", + "title_of_class": { "type": "string" + }, + "value": { + "type": "number" } }, "type": "object" }, - "sonic.NutritionDocumentsResponse": { + "sec.HoldingsResponse": { "properties": { + "accession_number": { + "type": "string" + }, + "cik": { + "type": "integer" + }, "count": { - "example": 5, "type": "integer" }, - "documents": { + "filing_date": { + "type": "string" + }, + "holdings": { "items": { - "$ref": "#/definitions/sonic.NutritionDocument" + "$ref": "#/definitions/sec.Holding" }, "type": "array" }, - "fetched_at": { + "manager_name": { "type": "string" }, - "heading": { - "example": "Sonic Nutrition & Allergen Information", + "report_date": { "type": "string" }, "source_url": { "type": "string" + }, + "total_holdings": { + "type": "integer" + }, + "total_value": { + "type": "number" } }, "type": "object" }, - "sonic.SitemapEntry": { + "sec.InsiderResponse": { "properties": { - "kind": { - "description": "Kind classifies the page -- see SitemapOption.Kind's enum per section.", - "example": "item", + "cik": { + "type": "integer" + }, + "count": { + "type": "integer" + }, + "name": { "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", + "source_url": { "type": "string" }, - "url": { + "ticker": { "type": "string" + }, + "transactions": { + "items": { + "$ref": "#/definitions/sec.InsiderTransaction" + }, + "type": "array" } }, "type": "object" }, - "sonic.SitemapResponse": { + "sec.InsiderTransaction": { "properties": { - "count": { - "example": 100, - "type": "integer" + "accession_number": { + "type": "string" }, - "entries": { - "items": { - "$ref": "#/definitions/sonic.SitemapEntry" - }, - "type": "array" + "acquired_or_disposed": { + "type": "string" }, - "fetched_at": { + "code": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "filing_date": { + "type": "string" }, - "section": { - "example": "menu", + "filing_url": { "type": "string" }, - "source_url": { + "form": { "type": "string" }, - "total": { - "example": 298, - "type": "integer" + "is_director": { + "type": "boolean" }, - "total_pages": { - "example": 3, - "type": "integer" + "is_officer": { + "type": "boolean" + }, + "is_ten_percent_owner": { + "type": "boolean" + }, + "owner_name": { + "type": "string" + }, + "owner_title": { + "type": "string" + }, + "price_per_share": { + "type": "number" + }, + "security_title": { + "type": "string" + }, + "shares": { + "type": "number" + }, + "shares_owned_after": { + "type": "number" + }, + "transaction_date": { + "type": "string" } }, "type": "object" }, - "sonic.StoreAddress": { + "sec.MarketBlock": { "properties": { - "city": { - "example": "Cheyenne", - "type": "string" + "change_percent": { + "type": "number" }, - "country": { - "example": "US", + "currency": { "type": "string" }, - "line1": { - "example": "2540 Dell Range Blvd", - "type": "string" + "day_high": { + "type": "number" }, - "line2": { + "day_low": { + "type": "number" + }, + "market_cap": { + "type": "number" + }, + "name": { "type": "string" }, - "postal_code": { - "example": "82009", + "price": { + "type": "number" + }, + "symbol": { "type": "string" + } + }, + "type": "object" + }, + "sec.NameCount": { + "properties": { + "count": { + "type": "integer" }, - "state": { - "example": "WY", + "name": { "type": "string" } }, "type": "object" }, - "sonic.StoreHours": { + "sec.NewsItem": { "properties": { - "closes": { - "example": "21:45", + "published_at": { "type": "string" }, - "day_of_week": { - "example": "MONDAY", + "publisher": { "type": "string" }, - "is_24_hour": { - "type": "boolean" + "title": { + "type": "string" }, - "opens": { - "example": "07:00", + "url": { "type": "string" } }, "type": "object" }, - "sonic.StoreResponse": { + "sec.SubmissionsResponse": { "properties": { - "address": { - "$ref": "#/definitions/sonic.StoreAddress" + "category": { + "example": "Large accelerated filer", + "type": "string" }, - "amenities": { + "cik": { + "example": 320193, + "type": "integer" + }, + "cik_padded": { + "example": "CIK0000320193", + "type": "string" + }, + "count": { + "type": "integer" + }, + "entity_type": { + "example": "operating", + "type": "string" + }, + "exchanges": { + "example": [ + "Nasdaq" + ], "items": { "type": "string" }, "type": "array" }, - "delivery_providers": { + "filings": { "items": { - "$ref": "#/definitions/sonic.DeliveryProvider" + "$ref": "#/definitions/sec.Filing" }, "type": "array" }, - "display_name": { - "example": "2540 Dell Range Blvd, Cheyenne, WY", - "type": "string" - }, - "fetched_at": { + "fiscal_year_end": { + "example": "0930", "type": "string" }, - "has_drive_through": { - "type": "boolean" - }, - "hours": { + "former_names": { "items": { - "$ref": "#/definitions/sonic.StoreHours" + "type": "string" }, "type": "array" }, - "is_delivery_enabled": { - "type": "boolean" - }, - "is_digitally_enabled": { - "type": "boolean" - }, - "latitude": { - "example": 41.160531, - "type": "number" - }, - "longitude": { - "example": -104.777659, - "type": "number" - }, - "path": { + "name": { + "example": "Apple Inc.", "type": "string" }, - "phone": { - "example": "307-632-9188", + "sic": { "type": "string" }, - "service_hours": { - "items": { - "$ref": "#/definitions/sonic.StoreServiceHours" - }, - "type": "array" - }, - "source_url": { + "sic_description": { "type": "string" }, - "status": { - "example": "OPEN", + "source_url": { "type": "string" }, - "store_id": { - "example": "4521", + "state_of_incorporation": { + "example": "CA", "type": "string" }, - "timezone": { - "example": "America/Denver", - "type": "string" - } - }, - "type": "object" - }, - "sonic.StoreServiceHours": { - "properties": { - "hours": { + "tickers": { "items": { - "$ref": "#/definitions/sonic.StoreHours" + "type": "string" }, "type": "array" - }, - "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" }, - "sonic.availabilityResponseDoc": { + "sec.companySearchResponseDoc": { "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/sonic.AvailabilityResponse" + "$ref": "#/definitions/sec.CompanySearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.categoriesResponseDoc": { + "sec.filingResponseDoc": { "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/sonic.CategoriesResponse" + "$ref": "#/definitions/sec.FilingResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.dealsResponseDoc": { + "sec.filingSectionsResponseDoc": { "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/sonic.DealsResponse" + "$ref": "#/definitions/sec.FilingSectionsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.directoryResponseDoc": { + "sec.financialsResponseDoc": { "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/sonic.DirectoryResponse" + "$ref": "#/definitions/sec.FinancialsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.itemResponseDoc": { + "sec.framesResponseDoc": { "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/sonic.ItemResponse" + "$ref": "#/definitions/sec.FramesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.locationSuggestResponseDoc": { + "sec.fullTextResponseDoc": { "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/sonic.LocationSuggestResponse" + "$ref": "#/definitions/sec.FullTextSearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.locationsResponseDoc": { + "sec.holdingsResponseDoc": { "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/sonic.LocationsResponse" + "$ref": "#/definitions/sec.HoldingsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.menuResponseDoc": { + "sec.insiderResponseDoc": { "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/sonic.MenuResponse" + "$ref": "#/definitions/sec.InsiderResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.nearbyResponseDoc": { + "sec.intelligenceResponseDoc": { "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/sonic.NearbyResponse" + "$ref": "#/definitions/sec.CompanyIntelligenceResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.nutritionDocumentsResponseDoc": { + "sec.submissionsResponseDoc": { "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/sonic.NutritionDocumentsResponse" + "$ref": "#/definitions/sec.SubmissionsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sonic.sitemapResponseDoc": { + "sephora.Answer": { "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" + }, + "helpful_votes": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sonic.SitemapResponse" + "id": { + "type": "string" }, - "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", + "is_brand_answer": { + "type": "boolean" + }, + "not_helpful_votes": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sonic.StoreResponse" + "submitted_at": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "text": { + "type": "string" } }, "type": "object" }, - "soundcloud.Playlist": { + "sephora.Brand": { "properties": { - "artwork_url": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "genre": { + "brand_id": { + "example": "5644", "type": "string" }, - "id": { - "type": "integer" - }, - "is_album": { + "is_new": { "type": "boolean" }, - "likes_count": { - "example": 1024, - "type": "integer" - }, - "owner": { - "$ref": "#/definitions/soundcloud.Uploader" - }, - "permalink_url": { + "name": { + "example": "Lancôme", "type": "string" }, - "public": { - "example": true, - "type": "boolean" - }, - "reposts_count": { - "type": "integer" + "slug": { + "example": "lancome", + "type": "string" + } + }, + "type": "object" + }, + "sephora.BrandsResponse": { + "properties": { + "brands": { + "items": { + "$ref": "#/definitions/sephora.Brand" + }, + "type": "array" }, - "tag_list": { + "fetched_at": { "type": "string" }, - "title": { + "source_url": { "type": "string" }, - "track_count": { - "example": 416, + "total_count": { + "example": 373, "type": "integer" - }, - "tracks": { + } + }, + "type": "object" + }, + "sephora.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/soundcloud.Track" + "$ref": "#/definitions/sephora.CategoryEntry" }, "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "soundcloud.Profile": { + "sephora.CategoryEntry": { "properties": { - "avatar_url": { + "department": { + "example": "makeup", "type": "string" }, - "city": { + "group": { + "example": "Eye", "type": "string" }, - "country_code": { - "example": "US", + "name": { + "example": "Mascara", "type": "string" }, - "description": { + "slug": { + "example": "mascara", "type": "string" + } + }, + "type": "object" + }, + "sephora.CategoryResponse": { + "properties": { + "brand": { + "items": { + "type": "string" + }, + "type": "array" }, - "followers_count": { - "example": 255531, - "type": "integer" - }, - "followings_count": { - "example": 634, - "type": "integer" - }, - "full_name": { + "category_id": { "type": "string" }, - "id": { - "type": "integer" - }, - "likes_count": { - "example": 1032, + "count": { "type": "integer" }, - "permalink": { + "display_name": { + "example": "Makeup", "type": "string" }, - "permalink_url": { + "fetched_at": { "type": "string" }, - "playlist_count": { - "example": 27, + "filter": { + "items": { + "type": "string" + }, + "type": "array" + }, + "is_new": { + "type": "boolean" + }, + "page": { + "example": 1, "type": "integer" }, - "track_count": { - "example": 712, + "page_size": { + "example": 60, "type": "integer" }, - "username": { - "type": "string" + "price_max": { + "type": "integer" }, - "verified": { - "type": "boolean" - } - }, - "type": "object" - }, - "soundcloud.SearchResponse": { - "properties": { - "count": { - "example": 20, + "price_min": { "type": "integer" }, - "query": { - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/sephora.SearchProduct" + }, + "type": "array" }, - "tracks": { + "rating_min": { + "type": "integer" + }, + "related_categories": { "items": { - "$ref": "#/definitions/soundcloud.Track" + "type": "string" }, "type": "array" + }, + "slug": { + "example": "makeup-cosmetics", + "type": "string" + }, + "sort_by": { + "example": "featured", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total_products": { + "example": 2492, + "type": "integer" } }, "type": "object" }, - "soundcloud.Track": { + "sephora.FullReview": { "properties": { - "artwork_url": { + "author": { "type": "string" }, - "comment_count": { - "example": 57, + "body": { + "type": "string" + }, + "helpful_votes": { "type": "integer" }, - "created_at": { - "example": "2021-06-14T15:40:10Z", + "id": { "type": "string" }, - "description": { + "location": { "type": "string" }, - "duration_ms": { - "example": 165218, + "not_helpful_votes": { "type": "integer" }, - "genre": { - "type": "string" + "photo_urls": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { + "rating": { "type": "integer" }, - "likes_count": { - "example": 10101, - "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" }, - "permalink_url": { + "recommended": { + "type": "boolean" + }, + "secondary_ratings": { + "items": { + "$ref": "#/definitions/sephora.ReviewSecondaryRating" + }, + "type": "array" + }, + "submitted_at": { "type": "string" }, - "playback_count": { - "example": 2593224, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "sephora.ProductQuestionsResponse": { + "properties": { + "count": { "type": "integer" }, - "public": { - "example": true, - "type": "boolean" + "fetched_at": { + "type": "string" }, - "reposts_count": { - "example": 196, + "page": { "type": "integer" }, - "streamable": { - "example": true, - "type": "boolean" + "page_size": { + "type": "integer" }, - "tag_list": { + "product_id": { "type": "string" }, - "title": { + "questions": { + "items": { + "$ref": "#/definitions/sephora.Question" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "uploader": { - "$ref": "#/definitions/soundcloud.Uploader" + "total_pages": { + "type": "integer" + }, + "total_questions": { + "type": "integer" } }, "type": "object" }, - "soundcloud.Uploader": { + "sephora.ProductResponse": { "properties": { - "avatar_url": { + "brand": { + "example": "LANEIGE", "type": "string" }, - "city": { + "category": { "type": "string" }, - "followers_count": { - "example": 220, - "type": "integer" + "description": { + "type": "string" }, - "id": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "permalink": { + "image": { "type": "string" }, - "permalink_url": { + "name": { "type": "string" }, - "track_count": { - "example": 12, + "product_group_id": { + "example": "P420652", + "type": "string" + }, + "rating": { + "example": 4.3, + "type": "number" + }, + "review_count": { "type": "integer" }, - "username": { + "review_sample": { + "items": { + "$ref": "#/definitions/sephora.ReviewSample" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "verified": { - "type": "boolean" + "url": { + "type": "string" + }, + "variants": { + "items": { + "$ref": "#/definitions/sephora.Variant" + }, + "type": "array" } }, "type": "object" }, - "soundcloud.UserTracksResponse": { + "sephora.ProductReviewsResponse": { "properties": { + "average_rating": { + "type": "number" + }, "count": { - "example": 20, "type": "integer" }, - "profile_url": { + "fetched_at": { "type": "string" }, - "tracks": { + "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/soundcloud.Track" + "type": "integer" + }, + "type": "array" + }, + "recommended_ratio": { + "type": "number" + }, + "reviews": { + "items": { + "$ref": "#/definitions/sephora.FullReview" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_reviews": { + "type": "integer" } }, "type": "object" }, - "soundcloud.playlistResponseDoc": { + "sephora.Question": { "properties": { - "code": { - "example": 200, + "answer_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/soundcloud.Playlist" + "answers": { + "items": { + "$ref": "#/definitions/sephora.Answer" + }, + "type": "array" }, - "msg": { - "example": "OK", + "author": { + "type": "string" + }, + "has_best_answer": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "submitted_at": { + "type": "string" + }, + "text": { "type": "string" } }, "type": "object" }, - "soundcloud.profileResponseDoc": { + "sephora.ReviewSample": { "properties": { - "code": { - "example": 200, - "type": "integer" + "author": { + "type": "string" }, - "data": { - "$ref": "#/definitions/soundcloud.Profile" + "body": { + "type": "string" }, - "msg": { - "example": "OK", + "date_published": { + "type": "string" + }, + "id": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "title": { "type": "string" } }, "type": "object" }, - "soundcloud.searchResponseDoc": { + "sephora.ReviewSecondaryRating": { "properties": { - "code": { - "example": 200, + "max_value": { + "example": 5, "type": "integer" }, - "data": { - "$ref": "#/definitions/soundcloud.SearchResponse" - }, - "msg": { - "example": "OK", + "name": { + "example": "Value", "type": "string" + }, + "value": { + "example": 4, + "type": "integer" } }, "type": "object" }, - "soundcloud.trackResponseDoc": { + "sephora.SearchProduct": { "properties": { - "code": { - "example": 200, + "brand_name": { + "example": "tarte", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "list_price": { + "example": "$25.00", + "type": "string" + }, + "more_colors": { "type": "integer" }, - "data": { - "$ref": "#/definitions/soundcloud.Track" + "product_id": { + "example": "P520769", + "type": "string" }, - "msg": { - "example": "OK", + "product_name": { "type": "string" - } - }, - "type": "object" - }, - "soundcloud.userTracksResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "rating": { + "example": 4.5, + "type": "number" + }, + "review_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/soundcloud.UserTracksResponse" + "sku_id": { + "type": "string" }, - "msg": { - "example": "OK", + "sponsored": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "value_price": { "type": "string" } }, "type": "object" }, - "space.AuthorResponse": { + "sephora.SearchResponse": { "properties": { - "articles": { + "brand": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "biography": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "filter": { "items": { "type": "string" }, "type": "array" }, - "image_url": { - "type": "string" + "is_new": { + "type": "boolean" }, - "job_title": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "name": { - "type": "string" + "page_size": { + "example": 60, + "type": "integer" }, - "slug": { - "type": "string" + "price_max": { + "example": 30, + "type": "integer" }, - "url": { + "price_min": { + "example": 15, + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/sephora.SearchProduct" + }, + "type": "array" + }, + "query": { + "example": "mascara", "type": "string" - } - }, - "type": "object" - }, - "sparkfun.CategoriesResponse": { - "properties": { - "categories": { + }, + "rating_min": { + "example": 4, + "type": "integer" + }, + "related_searches": { "items": { - "$ref": "#/definitions/sparkfun.Category" + "type": "string" }, "type": "array" + }, + "sort_by": { + "example": "featured", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total_products": { + "example": 180, + "type": "integer" } }, "type": "object" }, - "sparkfun.Category": { + "sephora.Store": { "properties": { - "id": { + "address": { + "$ref": "#/definitions/sephora.StoreAddress" + }, + "display_name": { + "example": "STATE STREET", "type": "string" }, - "name": { + "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" }, - "url_key": { + "store_type": { + "example": "SEPHORA", "type": "string" }, - "url_path": { + "url": { "type": "string" } }, "type": "object" }, - "sparkfun.CategoryResponse": { + "sephora.StoreAddress": { "properties": { - "category": { - "$ref": "#/definitions/sparkfun.Category" + "address1": { + "type": "string" }, - "filters": { - "items": { - "$ref": "#/definitions/sparkfun.Filter" - }, - "type": "array" + "address2": { + "type": "string" }, - "page": { - "type": "integer" + "city": { + "type": "string" }, - "per_page": { - "type": "integer" + "country": { + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/sparkfun.Product" - }, - "type": "array" + "mall_name": { + "type": "string" }, - "total": { - "type": "integer" + "phone": { + "type": "string" }, - "total_pages": { - "type": "integer" + "postal_code": { + "type": "string" + }, + "state": { + "type": "string" } }, "type": "object" }, - "sparkfun.Filter": { + "sephora.StoreHours": { "properties": { - "attribute": { + "friday": { "type": "string" }, - "label": { + "monday": { "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/sparkfun.FilterOption" - }, - "type": "array" + "saturday": { + "type": "string" + }, + "sunday": { + "type": "string" + }, + "thursday": { + "type": "string" + }, + "time_zone": { + "example": "America/Chicago", + "type": "string" + }, + "tuesday": { + "type": "string" + }, + "wednesday": { + "type": "string" } }, "type": "object" }, - "sparkfun.FilterOption": { + "sephora.StoresResponse": { "properties": { "count": { "type": "integer" }, - "label": { + "fetched_at": { "type": "string" }, - "value": { + "latitude": { + "example": 41.88325, + "type": "number" + }, + "longitude": { + "example": -87.6323879, + "type": "number" + }, + "radius": { + "example": 50, + "type": "integer" + }, + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/sephora.Store" + }, + "type": "array" } }, "type": "object" }, - "sparkfun.Image": { + "sephora.SuggestCategory": { "properties": { - "label": { + "name": { + "example": "Mascara", "type": "string" }, "url": { + "example": "https://www.sephora.com/shop/mascara", "type": "string" } }, "type": "object" }, - "sparkfun.Price": { + "sephora.SuggestProduct": { "properties": { - "currency": { + "brand_name": { + "example": "ILIA", "type": "string" }, - "value": { + "image_url": { + "type": "string" + }, + "product_id": { + "example": "P431750", + "type": "string" + }, + "product_name": { + "type": "string" + }, + "rating": { + "example": 4.1361, "type": "number" + }, + "review_count": { + "type": "integer" + }, + "sku_id": { + "type": "string" } }, "type": "object" }, - "sparkfun.Product": { + "sephora.SuggestResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/sparkfun.Category" + "$ref": "#/definitions/sephora.SuggestCategory" }, "type": "array" }, - "description": { + "fetched_at": { "type": "string" }, - "image": { - "$ref": "#/definitions/sparkfun.Image" - }, - "media": { + "products": { "items": { - "$ref": "#/definitions/sparkfun.Image" + "$ref": "#/definitions/sephora.SuggestProduct" }, "type": "array" }, - "name": { + "query": { + "example": "masc", "type": "string" }, - "price": { - "$ref": "#/definitions/sparkfun.Price" + "source_url": { + "type": "string" }, - "recommendations": { + "terms": { "items": { - "$ref": "#/definitions/sparkfun.ProductRecommendation" + "$ref": "#/definitions/sephora.SuggestTerm" }, "type": "array" - }, - "sku": { - "type": "string" - }, - "stock_status": { - "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "sparkfun.ProductRecommendation": { + "sephora.SuggestTerm": { "properties": { - "product": { - "$ref": "#/definitions/sparkfun.Product" - }, - "relation": { + "term": { + "example": "mascara", "type": "string" } }, "type": "object" }, - "sparkfun.SearchResponse": { + "sephora.Variant": { "properties": { - "filters": { - "items": { - "$ref": "#/definitions/sparkfun.Filter" - }, - "type": "array" + "availability": { + "example": "InStock", + "type": "string" }, - "page": { - "type": "integer" + "color": { + "example": "Acai Mango Smoothie", + "type": "string" }, - "per_page": { - "type": "integer" + "currency_code": { + "example": "USD", + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/sparkfun.Product" - }, - "type": "array" + "image": { + "type": "string" }, - "query": { + "name": { "type": "string" }, - "total": { - "type": "integer" + "price": { + "example": "25.00", + "type": "string" }, - "total_pages": { - "type": "integer" + "sku": { + "type": "string" } }, "type": "object" }, - "sparkfun.categoriesResponseDoc": { + "sephora.brandsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sparkfun.CategoriesResponse" + "$ref": "#/definitions/sephora.BrandsResponse" }, "msg": { "example": "OK", @@ -148816,14 +148610,14 @@ }, "type": "object" }, - "sparkfun.categoryResponseDoc": { + "sephora.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sparkfun.CategoryResponse" + "$ref": "#/definitions/sephora.CategoriesResponse" }, "msg": { "example": "OK", @@ -148832,14 +148626,14 @@ }, "type": "object" }, - "sparkfun.productResponseDoc": { + "sephora.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sparkfun.Product" + "$ref": "#/definitions/sephora.CategoryResponse" }, "msg": { "example": "OK", @@ -148848,14 +148642,14 @@ }, "type": "object" }, - "sparkfun.searchResponseDoc": { + "sephora.productQuestionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sparkfun.SearchResponse" + "$ref": "#/definitions/sephora.ProductQuestionsResponse" }, "msg": { "example": "OK", @@ -148864,62 +148658,87 @@ }, "type": "object" }, - "sportingnews.AuthorArticle": { + "sephora.productResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "published_at": { - "type": "string" + "data": { + "$ref": "#/definitions/sephora.ProductResponse" }, - "section": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sephora.productReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/sephora.ProductReviewsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportingnews.AuthorResponse": { + "sephora.searchResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/sportingnews.AuthorArticle" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "bio": { - "type": "string" + "data": { + "$ref": "#/definitions/sephora.SearchResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sephora.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/sephora.StoresResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sephora.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/sephora.SuggestResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.AuthorResponse": { + "sevennewsau.AuthorResponse": { "properties": { "articles": { "items": { @@ -148945,5763 +148764,6274 @@ "slug": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.DataTable": { - "properties": { - "columns": { + "social_links": { "items": { "type": "string" }, "type": "array" }, - "name": { - "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" } }, "type": "object" }, - "sportskeeda.DepthChartResponse": { + "sevennow.CatalogCategory": { "properties": { - "slug": { + "id": { + "example": "48423", "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/sportskeeda.DepthChartTeam" - }, - "type": "array" - }, - "title": { + "name": { + "example": "Fresh Food", "type": "string" } }, "type": "object" }, - "sportskeeda.DepthChartTeam": { + "sevennow.CatalogItem": { "properties": { - "name": { + "age_restricted": { + "example": false, + "type": "boolean" + }, + "brand": { + "example": "Hot Food Pizza", "type": "string" }, - "positions": { - "items": { - "$ref": "#/definitions/sportskeeda.DepthChartPosition" - }, - "type": "array" + "calories": { + "example": "360", + "type": "string" }, - "slug": { + "category": { + "example": "Fresh Food", "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.FeedItem": { - "properties": { - "age": { + }, + "flavor_name": { + "example": "Pepperoni Pizza", "type": "string" }, - "category": { + "image_url": { "type": "string" }, - "image": { + "name": { + "example": "Large Pizza - Ultimate Pepperoni", "type": "string" }, - "section": { + "original_price_cents": { + "example": 1099, + "type": "integer" + }, + "product_id": { + "example": "178322-2-6-2", "type": "string" }, - "slug": { + "promo_description": { + "example": "On Sale $6.99", "type": "string" }, - "title": { + "promo_price_cents": { + "example": 699, + "type": "integer" + }, + "subcategory": { + "example": "Pizza", "type": "string" }, - "url": { + "upc": { + "example": "00072180687340", "type": "string" } }, "type": "object" }, - "sportskeeda.FeedResponse": { + "sevennow.CatalogResponse": { "properties": { - "items": { + "active_items": { + "example": 2664, + "type": "integer" + }, + "categories": { "items": { - "$ref": "#/definitions/sportskeeda.FeedItem" + "$ref": "#/definitions/sevennow.CatalogCategory" }, "type": "array" }, - "next_page": { + "fetched_at": { + "type": "string" + }, + "limit": { + "example": 20, "type": "integer" }, - "page": { + "out_of_stock_items": { + "example": 435, "type": "integer" }, - "slug": { + "sections": { + "items": { + "$ref": "#/definitions/sevennow.CatalogSection" + }, + "type": "array" + }, + "skip": { + "example": 0, + "type": "integer" + }, + "source_url": { "type": "string" }, - "title": { + "store_id": { + "example": "39226", "type": "string" } }, "type": "object" }, - "sportskeeda.FootballDataResponse": { + "sevennow.CatalogSection": { "properties": { - "event": { - "type": "string" - }, - "event_name": { - "type": "string" - }, - "matchday": { - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "matchday_name": { - "type": "string" + "display_order": { + "example": 3, + "type": "integer" }, - "matches": { + "items": { "items": { - "$ref": "#/definitions/sportskeeda.FootballFixture" + "$ref": "#/definitions/sevennow.CatalogItem" }, "type": "array" }, - "next_matchday": { + "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" }, - "previous_matchday": { + "section_id": { + "example": "48423", "type": "string" }, - "standings": { - "items": { - "$ref": "#/definitions/sportskeeda.FootballStanding" - }, - "type": "array" - }, - "status": { - "enum": [ - "ok", - "no_matches" - ], - "type": "string" + "total": { + "example": 200, + "type": "integer" } }, "type": "object" }, - "sportskeeda.FootballEvent": { + "sevennow.CategoriesResponse": { "properties": { - "logo": { + "count": { + "example": 25, + "type": "integer" + }, + "departments": { + "description": "Departments are the store's permanent browsable departments.", + "items": { + "$ref": "#/definitions/sevennow.CategoryRef" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "name": { + "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" + }, + "source_url": { "type": "string" }, - "slug": { + "store_id": { + "example": "39640", "type": "string" } }, "type": "object" }, - "sportskeeda.FootballFixture": { + "sevennow.CategoryItem": { "properties": { - "away": { - "type": "string" + "age_restricted": { + "example": false, + "type": "boolean" }, - "away_score": { - "type": "string" + "available": { + "example": true, + "type": "boolean" }, - "away_slug": { - "type": "string" + "available_quantity": { + "example": 100, + "type": "integer" }, - "datetime": { + "calories": { + "example": "360", "type": "string" }, - "home": { + "image_url": { "type": "string" }, - "home_score": { + "name": { + "example": "Large Pizza - Ultimate Pepperoni", "type": "string" }, - "home_slug": { - "type": "string" + "price_cents": { + "example": 1299, + "type": "integer" }, - "id": { + "product_id": { + "example": "178322-2-6-2", "type": "string" }, - "postponed": { - "type": "boolean" - }, - "result": { + "promo_description": { + "example": "On Sale $6.99", "type": "string" }, - "slug": { + "promo_price_cents": { + "example": 699, + "type": "integer" + }, + "subcategory": { + "example": "Pizza", "type": "string" }, - "status": { + "upc": { + "example": "00052548537524", "type": "string" } }, "type": "object" }, - "sportskeeda.FootballMatchday": { + "sevennow.CategoryRef": { "properties": { - "end": { - "type": "string" - }, - "match_count": { + "display_order": { + "description": "DisplayOrder is the shelf's position on the store homepage. Only\nmeaningful for shelves.", + "example": 18, "type": "integer" }, - "name": { + "id": { + "example": "48395", "type": "string" }, - "selected": { - "type": "boolean" + "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" }, - "slug": { + "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" }, - "start": { + "name": { + "example": "Drinks", "type": "string" } }, "type": "object" }, - "sportskeeda.FootballOptionsResponse": { + "sevennow.CategoryResponse": { "properties": { - "event": { + "category_id": { + "example": "48423", "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/sportskeeda.FootballEvent" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "matchdays": { - "items": { - "$ref": "#/definitions/sportskeeda.FootballMatchday" - }, - "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.FootballStanding": { - "properties": { - "draws": { + "limit": { + "example": 20, "type": "integer" }, - "goal_difference": { - "type": "string" - }, - "goals_against": { - "type": "string" + "skip": { + "example": 0, + "type": "integer" }, - "goals_for": { + "source_url": { "type": "string" }, - "group": { - "type": "string" + "stats": { + "$ref": "#/definitions/sevennow.CategoryStats" }, - "league": { + "store_id": { + "example": "39226", "type": "string" }, - "losses": { - "type": "integer" - }, - "played": { + "subcategories": { + "items": { + "$ref": "#/definitions/sevennow.CategorySubcategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "sevennow.CategoryStats": { + "properties": { + "available": { + "example": 99, "type": "integer" }, - "points": { + "out_of_stock": { + "example": 22, "type": "integer" }, - "position": { + "percentage_available": { + "example": 82, "type": "integer" }, - "qualification": { - "type": "string" - }, - "team": { - "type": "string" - }, - "team_code": { - "type": "string" - }, - "team_slug": { - "type": "string" - }, - "wins": { + "total": { + "example": 121, "type": "integer" } }, "type": "object" }, - "sportskeeda.NavigationGroup": { + "sevennow.CategorySubcategory": { "properties": { "items": { "items": { - "$ref": "#/definitions/sportskeeda.SectionLink" + "$ref": "#/definitions/sevennow.CategoryItem" }, "type": "array" }, "name": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "url": { + "example": "Pizza", "type": "string" } }, "type": "object" }, - "sportskeeda.PageFilter": { + "sevennow.Combo": { "properties": { - "label": { - "type": "string" + "available": { + "example": true, + "type": "boolean" }, - "name": { + "bundle_id": { + "example": "B00037", "type": "string" }, - "values": { - "items": { - "$ref": "#/definitions/sportskeeda.PageFilterValue" - }, - "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.PageFilterValue": { - "properties": { - "name": { + "description": { "type": "string" }, - "selected": { - "type": "boolean" + "image_url": { + "type": "string" }, - "slug": { + "name": { + "example": "7NOW Combo Builder SLIN 22 - $6.99 Pizza", "type": "string" }, - "value": { + "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" - } - }, - "type": "object" - }, - "sportskeeda.PageGroup": { - "properties": { - "items": { + }, + "tags": { "items": { - "$ref": "#/definitions/sportskeeda.PageView" + "type": "string" }, "type": "array" - }, - "name": { - "type": "string" } }, "type": "object" }, - "sportskeeda.PageMenu": { + "sevennow.ComboGroup": { "properties": { - "groups": { + "is_primary": { + "example": true, + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/sportskeeda.PageGroup" + "$ref": "#/definitions/sevennow.DealItem" }, "type": "array" }, "name": { + "example": "Eligible Whole Pizzas", "type": "string" + }, + "quantity": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "sportskeeda.PageOptionsResponse": { + "sevennow.ComboResponse": { "properties": { - "filters": { - "items": { - "$ref": "#/definitions/sportskeeda.PageFilter" - }, - "type": "array" - }, - "menus": { - "items": { - "$ref": "#/definitions/sportskeeda.PageMenu" - }, - "type": "array" + "count": { + "example": 1, + "type": "integer" }, - "slug": { + "fetched_at": { "type": "string" }, - "sports": { - "items": { - "$ref": "#/definitions/sportskeeda.PageView" - }, - "type": "array" - }, - "tabs": { + "groups": { "items": { - "$ref": "#/definitions/sportskeeda.PageView" + "$ref": "#/definitions/sevennow.ComboGroup" }, "type": "array" }, - "title": { + "promo_id": { + "example": "6a849a8fa1df2409010c719f", "type": "string" }, - "views": { - "items": { - "$ref": "#/definitions/sportskeeda.PageView" - }, - "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.PageView": { - "properties": { - "name": { + "source_url": { "type": "string" }, - "slug": { + "store_id": { + "example": "39640", "type": "string" + }, + "terms": { + "$ref": "#/definitions/sevennow.ComboTerms" } }, "type": "object" }, - "sportskeeda.PlayerSeasonStats": { + "sevennow.ComboTerms": { "properties": { - "event_type": { + "description": { + "example": "Any Whole Pizza $6.99 each", "type": "string" }, - "games_played": { - "type": "integer" - }, - "games_started": { - "type": "integer" - }, - "metrics": { - "additionalProperties": {}, - "type": "object" - }, - "name": { + "legal_terms": { "type": "string" }, - "season": { - "type": "integer" - }, - "team": { - "$ref": "#/definitions/sportskeeda.PlayerStatsTeam" + "title": { + "example": "$6.99 Pizza", + "type": "string" } }, "type": "object" }, - "sportskeeda.PlayerStatsResponse": { + "sevennow.CombosResponse": { "properties": { - "event_types": { - "items": { - "$ref": "#/definitions/sportskeeda.PageFilterValue" - }, - "type": "array" - }, - "records": { + "combos": { "items": { - "$ref": "#/definitions/sportskeeda.PlayerSeasonStats" + "$ref": "#/definitions/sevennow.Combo" }, "type": "array" }, - "selected_event_type": { - "type": "string" + "count": { + "example": 5, + "type": "integer" }, - "slug": { + "fetched_at": { "type": "string" }, - "sport": { + "source_url": { "type": "string" }, - "stat_fields": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { + "store_id": { + "example": "39640", "type": "string" } }, "type": "object" }, - "sportskeeda.PlayerStatsTeam": { + "sevennow.DealItem": { "properties": { - "abbreviation": { - "type": "string" + "age_restricted": { + "example": false, + "type": "boolean" }, - "id": { + "available": { + "example": true, + "type": "boolean" + }, + "available_quantity": { + "example": 5, "type": "integer" }, - "image_url": { + "brand": { + "example": "Ben & Jerry's", "type": "string" }, - "name": { + "calories": { + "example": "370", "type": "string" }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.ProfileFact": { - "properties": { - "name": { + "category": { + "example": "Ice Cream", "type": "string" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.ProfileResponse": { - "properties": { - "description": { + "category_id": { + "example": "48396", "type": "string" }, - "facts": { - "items": { - "$ref": "#/definitions/sportskeeda.ProfileFact" - }, - "type": "array" - }, - "kind": { + "image_url": { "type": "string" }, "name": { + "example": "Ben & Jerry's Sundae Cookie Vermont-ster 14oz", "type": "string" }, - "news": { + "price_cents": { + "example": 999, + "type": "integer" + }, + "product_id": { + "example": "191743-0-1", + "type": "string" + }, + "promos": { "items": { - "$ref": "#/definitions/sportskeeda.FeedItem" + "$ref": "#/definitions/sevennow.DealPromo" }, "type": "array" }, - "slug": { + "subcategory": { + "example": "Ben & Jerry's", + "type": "string" + }, + "upc": { + "example": "00076840004294", "type": "string" } }, "type": "object" }, - "sportskeeda.ScheduleMatch": { + "sevennow.DealPromo": { "properties": { - "competition": { - "type": "string" - }, - "date_time": { - "type": "string" - }, - "result": { - "type": "string" - }, - "score_1": { - "type": "string" - }, - "score_2": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "status": { + "expiration_date": { + "example": "10/27/2026", "type": "string" }, - "team_1": { + "id": { + "example": "6a9746d488cc35e1bbff1584", "type": "string" }, - "team_2": { + "long_description": { "type": "string" }, - "venue": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.SectionLink": { - "properties": { - "external": { - "type": "boolean" + "promo_price_cents": { + "example": 700, + "type": "integer" }, - "name": { + "promo_type": { + "example": "item", "type": "string" }, - "slug": { + "short_description": { + "example": "On Sale $7", "type": "string" }, - "url": { + "start_date": { + "example": "09/01/2026", "type": "string" } }, "type": "object" }, - "sportskeeda.SectionsResponse": { - "properties": { - "navigation": { - "items": { - "$ref": "#/definitions/sportskeeda.NavigationGroup" - }, - "type": "array" - }, - "sections": { - "items": { - "$ref": "#/definitions/sportskeeda.SportSection" - }, - "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.SitemapItem": { + "sevennow.DealsResponse": { "properties": { - "last_modified": { - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "slug": { + "fetched_at": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.SitemapItemsResponse": { - "properties": { "has_more": { + "example": true, "type": "boolean" }, "items": { "items": { - "$ref": "#/definitions/sportskeeda.SitemapItem" + "$ref": "#/definitions/sevennow.DealItem" }, "type": "array" }, "limit": { + "example": 20, "type": "integer" }, - "offset": { + "skip": { + "example": 0, "type": "integer" }, - "sitemap_url": { + "source_url": { "type": "string" }, - "slug": { + "stats": { + "$ref": "#/definitions/sevennow.DealsStats" + }, + "store_id": { + "example": "39640", "type": "string" }, "total": { + "example": 548, "type": "integer" } }, "type": "object" }, - "sportskeeda.SitemapSource": { + "sevennow.DealsStats": { "properties": { - "last_modified": { - "type": "string" + "available": { + "example": 503, + "type": "integer" }, - "name": { - "type": "string" + "out_of_stock": { + "example": 45, + "type": "integer" }, - "slug": { - "type": "string" + "percentage_available": { + "example": 92, + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.SitemapsResponse": { - "properties": { - "sources": { - "items": { - "$ref": "#/definitions/sportskeeda.SitemapSource" - }, - "type": "array" + "total": { + "example": 548, + "type": "integer" } }, "type": "object" }, - "sportskeeda.SportSection": { + "sevennow.NutritionEntry": { "properties": { - "last_modified": { - "type": "string" - }, - "slug": { + "name": { + "example": "Total Fat", "type": "string" }, - "url": { + "value": { + "example": "11.0Gram", "type": "string" } }, "type": "object" }, - "sportskeeda.StandingsOptionsResponse": { + "sevennow.NutritionGroup": { "properties": { - "conferences": { - "items": { - "$ref": "#/definitions/sportskeeda.PageView" - }, - "type": "array" - }, - "seasons": { + "entries": { "items": { - "type": "integer" + "$ref": "#/definitions/sevennow.NutritionEntry" }, "type": "array" }, - "slug": { + "group": { + "example": "fat", "type": "string" } }, "type": "object" }, - "sportskeeda.TableCell": { + "sevennow.Offer": { "properties": { - "slug": { + "button_text": { "type": "string" }, - "text": { + "description": { + "example": "Any Whole Pizza $6.99 each", "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.TablesResponse": { - "properties": { - "matches": { - "items": { - "$ref": "#/definitions/sportskeeda.ScheduleMatch" - }, - "type": "array" }, - "slug": { + "image_url": { "type": "string" }, - "status": { + "legal_terms": { "type": "string" }, - "tables": { - "items": { - "$ref": "#/definitions/sportskeeda.DataTable" - }, - "type": "array" + "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" }, - "title": { + "offer_id": { + "example": "6a8879a4478334ff62f902d9-sE4Q1s2116PXg7di5yN2tt-7NOW_WEB", "type": "string" }, - "views": { + "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": { - "$ref": "#/definitions/sportskeeda.PageView" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.TaxonomyResult": { - "properties": { - "id": { - "type": "string" }, - "image": { - "type": "string" + "sort_order": { + "example": 2, + "type": "integer" }, - "path_slug": { + "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" }, - "post_count": { - "type": "integer" - }, - "slug": { + "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" }, - "taxonomy": { + "target_url": { "type": "string" }, "title": { + "example": "$6.99 Pizza", "type": "string" }, - "url": { + "web_image_url": { "type": "string" } }, "type": "object" }, - "sportskeeda.TaxonomySearchResponse": { + "sevennow.OffersResponse": { "properties": { - "query": { + "count": { + "example": 4, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "results": { + "offers": { "items": { - "$ref": "#/definitions/sportskeeda.TaxonomyResult" + "$ref": "#/definitions/sevennow.Offer" }, "type": "array" }, - "taxonomies": { - "items": { - "enum": [ - "category", - "event", - "team", - "player", - "wiki", - "wiki_tag" - ], - "type": "string" - }, - "type": "array" + "source_url": { + "type": "string" + }, + "store_id": { + "example": "39640", + "type": "string" } }, "type": "object" }, - "sportskeeda.TradeValuePlayer": { + "sevennow.PopularResponse": { "properties": { - "name": { + "fetched_at": { "type": "string" }, - "position": { + "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" }, - "rank": { - "type": "integer" - }, - "slug": { + "source_url": { "type": "string" }, - "team": { + "store_id": { + "example": "39226", "type": "string" }, - "value": { + "suggestions": { + "example": [ + "ice cream", + "coffee", + "pizza" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "vertical": { + "description": "Vertical echoes back which index was read.", + "example": "convenience", "type": "string" } }, "type": "object" }, - "sportskeeda.TradeValuesResponse": { + "sevennow.ProductPromo": { "properties": { - "limit": { - "type": "integer" - }, - "mode": { - "type": "string" - }, - "next_offset": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "players": { - "items": { - "$ref": "#/definitions/sportskeeda.TradeValuePlayer" - }, - "type": "array" - }, - "position": { + "expiration_date": { + "example": "01/05/2027", "type": "string" }, - "scoring": { + "id": { + "example": "6a849a8fa1df2409010c719f", "type": "string" }, - "slug": { + "long_description": { + "example": "$6.99 Whole Pizza!", "type": "string" }, - "superflex": { - "type": "boolean" - }, - "total": { + "promo_price_cents": { + "example": 699, "type": "integer" }, - "updated_at": { + "short_description": { + "example": "On Sale $6.99", + "type": "string" + }, + "start_date": { + "example": "08/21/2026", "type": "string" } }, "type": "object" }, - "sportskeeda.VideoItem": { + "sevennow.ProductResponse": { "properties": { - "channel": { - "type": "string" + "age_restricted": { + "example": false, + "type": "boolean" }, - "duration": { + "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" }, - "image": { + "brand": { + "example": "Hot Food Pizza", "type": "string" }, - "slug": { + "calories": { + "example": "360", "type": "string" }, - "title": { + "category": { + "example": "Fresh Food", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.VideoResponse": { - "properties": { - "description": { + "category_id": { + "example": "48423", "type": "string" }, - "id": { + "description": { "type": "string" }, - "poster": { + "fetched_at": { "type": "string" }, - "slug": { - "type": "string" + "flavor_choices": { + "items": { + "type": "string" + }, + "type": "array" }, - "stream_url": { + "flavor_name": { + "example": "Pepperoni Pizza", "type": "string" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.VideosResponse": { - "properties": { - "channels": { + "images": { "items": { - "$ref": "#/definitions/sportskeeda.PageView" + "type": "string" }, "type": "array" }, - "items": { + "ingredients": { + "description": "Ingredients is the declared ingredient list. Upstream splits it on\ncommas, so a parenthesised sub-list arrives as several entries.", "items": { - "$ref": "#/definitions/sportskeeda.VideoItem" + "type": "string" }, "type": "array" }, - "slug": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "spotify.AlbumMeta": { - "properties": { - "appVersion": { - "type": "string" - }, - "fetchedAt": { - "type": "string" - }, - "operationName": { - "type": "string" - }, - "trackCount": { + "limit_per_order": { + "example": 100, "type": "integer" - } - }, - "type": "object" - }, - "spotify.AlbumResponse": { - "properties": { - "albumType": { + }, + "name": { + "example": "Large Pizza - Ultimate Pepperoni", "type": "string" }, - "artists": { + "nutrition": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sevennow.NutritionGroup" }, "type": "array" }, - "copyrights": { + "nutrition_disclaimers": { + "description": "NutritionDisclaimers carries upstream's own RDI/daily-value notices.", "items": { "type": "string" }, "type": "array" }, - "durationMs": { - "type": "integer" - }, - "externalUrl": { - "type": "string" - }, - "id": { - "type": "string" - }, - "imageUrl": { + "product_id": { + "example": "178322-2-6-2", "type": "string" }, - "images": { + "promos": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "$ref": "#/definitions/sevennow.ProductPromo" }, "type": "array" }, - "isExplicit": { - "type": "boolean" - }, - "isPlayable": { - "type": "boolean" - }, - "limit": { - "type": "integer" + "related_items": { + "items": { + "$ref": "#/definitions/sevennow.RelatedProduct" + }, + "type": "array" }, - "meta": { - "$ref": "#/definitions/spotify.AlbumMeta" + "size_choices": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { + "size_value": { + "example": "1WholePizza", "type": "string" }, - "offset": { - "type": "integer" - }, - "releaseDate": { + "slin": { + "example": "178322", "type": "string" }, - "shareUrl": { + "source_url": { "type": "string" }, - "totalTracks": { - "type": "integer" - }, - "tracks": { + "tags": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "type": "string" }, "type": "array" }, - "type": { - "type": "string" - }, - "uri": { + "upc": { + "example": "00072180687340", "type": "string" } }, "type": "object" }, - "spotify.ArtistAlbumsMeta": { + "sevennow.PromotionDetail": { "properties": { - "appVersion": { - "type": "string" - }, - "count": { + "display_priority": { + "example": 2, "type": "integer" }, - "fetchedAt": { + "expiration_date": { + "example": "2026-10-27T23:59:59.000Z", "type": "string" }, - "operationName": { - "type": "string" - } - }, - "type": "object" - }, - "spotify.ArtistAlbumsResponse": { - "properties": { "id": { + "example": "6a9746d488cc35e1bbff1584", "type": "string" }, - "items": { + "long_description": { + "type": "string" + }, + "mark_down_slins": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "type": "string" }, "type": "array" }, - "limit": { - "type": "integer" + "name": { + "example": "US_7N_Ben & Jerry's Pints $7_(9/1/2026-10/27/2026) - FOR 7NOW", + "type": "string" }, - "meta": { - "$ref": "#/definitions/spotify.ArtistAlbumsMeta" + "offer_type": { + "example": "item_discount", + "type": "string" }, - "offset": { + "promo_price_cents": { + "example": 700, "type": "integer" }, - "order": { + "promo_type": { + "example": "item", "type": "string" }, - "total": { - "type": "integer" - }, - "type": { + "short_description": { + "example": "On Sale $7", "type": "string" }, - "uri": { + "start_date": { + "example": "2026-09-01T00:00:00.000Z", "type": "string" + }, + "terms": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "spotify.ArtistCollectionMeta": { + "sevennow.PromotionResponse": { "properties": { - "appVersion": { - "type": "string" - }, "count": { + "example": 14, "type": "integer" }, - "fetchedAt": { + "fetched_at": { "type": "string" }, - "operationName": { - "type": "string" - } - }, - "type": "object" - }, - "spotify.ArtistCollectionResponse": { - "properties": { - "id": { - "type": "string" + "has_more": { + "example": false, + "type": "boolean" }, "items": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sevennow.DealItem" }, "type": "array" }, - "meta": { - "$ref": "#/definitions/spotify.ArtistCollectionMeta" + "limit": { + "example": 20, + "type": "integer" }, - "uri": { - "type": "string" - } - }, - "type": "object" - }, - "spotify.ArtistMeta": { - "properties": { - "appVersion": { + "promo_id": { + "example": "6a9746d488cc35e1bbff1584", "type": "string" }, - "discographyCount": { + "promotion": { + "$ref": "#/definitions/sevennow.PromotionDetail" + }, + "skip": { + "example": 0, "type": "integer" }, - "fetchedAt": { + "source_url": { "type": "string" }, - "operationName": { + "store_id": { + "example": "39640", "type": "string" }, - "playlistCount": { - "type": "integer" - }, - "relatedCount": { - "type": "integer" - }, - "topTrackCount": { + "total": { + "example": 14, "type": "integer" } }, "type": "object" }, - "spotify.ArtistResponse": { + "sevennow.RelatedProduct": { "properties": { - "biography": { + "brand": { + "example": "Hot Food Pizza", "type": "string" }, - "discography": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "calories": { + "example": "550", + "type": "string" }, - "externalUrl": { + "category": { + "example": "Fresh Food", "type": "string" }, - "followers": { - "type": "integer" + "flavor_name": { + "example": "Sausage Breakfast Pizza", + "type": "string" }, - "id": { + "image_url": { "type": "string" }, - "imageUrl": { + "name": { + "example": "Whole Breakfast Pizza - Sausage", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" - }, - "meta": { - "$ref": "#/definitions/spotify.ArtistMeta" - }, - "monthlyUsers": { - "type": "integer" - }, - "name": { + "product_id": { + "example": "170776-1-8", "type": "string" }, - "playlists": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "related": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "shareUrl": { + "size_value": { + "example": "1WholePizza", "type": "string" - }, - "topTracks": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "type": { + } + }, + "type": "object" + }, + "sevennow.SearchBrand": { + "properties": { + "brand_id": { + "example": "262b9206-d316-3cf8-9ccf-a06998c5c0a1", "type": "string" }, - "uri": { + "brand_name": { + "example": "Pringles", "type": "string" }, - "verified": { + "is_sponsored": { + "example": false, "type": "boolean" + }, + "logo_url": { + "type": "string" + }, + "rank": { + "example": 25, + "type": "integer" } }, "type": "object" }, - "spotify.AudiobookChaptersMeta": { + "sevennow.SearchItem": { "properties": { - "appVersion": { - "type": "string" + "age_restricted": { + "example": false, + "type": "boolean" }, - "count": { + "available": { + "example": true, + "type": "boolean" + }, + "available_quantity": { + "example": 100, "type": "integer" }, - "fetchedAt": { + "bundle_id": { + "example": "B00037", "type": "string" }, - "operationName": { + "calories": { + "example": "360", "type": "string" - } - }, - "type": "object" - }, - "spotify.AudiobookChaptersResponse": { - "properties": { - "chapters": { - "items": { - "$ref": "#/definitions/spotify.PodcastEpisodeSummary" - }, - "type": "array" }, - "id": { + "category": { + "example": "Fresh Food", "type": "string" }, - "limit": { + "image_url": { + "type": "string" + }, + "list_price_cents": { + "example": 1299, "type": "integer" }, - "meta": { - "$ref": "#/definitions/spotify.AudiobookChaptersMeta" + "name": { + "example": "Large Pizza - Ultimate Pepperoni", + "type": "string" }, - "offset": { + "price_cents": { + "example": 1099, "type": "integer" }, - "total": { - "type": "integer" + "product_id": { + "example": "178322-2-6-2", + "type": "string" }, - "uri": { + "product_type": { + "example": "product", "type": "string" - } - }, - "type": "object" - }, - "spotify.AudiobookMeta": { - "properties": { - "appVersion": { + }, + "promo_description": { + "example": "On Sale $6.99", "type": "string" }, - "fetchedAt": { + "promo_price_cents": { + "example": 699, + "type": "integer" + }, + "subcategory": { + "example": "Pizza", "type": "string" }, - "operationName": { + "upc": { + "example": "00072180687340", "type": "string" } }, "type": "object" }, - "spotify.AudiobookResponse": { + "sevennow.SearchResponse": { "properties": { - "authors": { + "brands": { "items": { - "type": "string" + "$ref": "#/definitions/sevennow.SearchBrand" }, "type": "array" }, - "description": { - "type": "string" - }, - "externalUrl": { - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "id": { + "fetched_at": { "type": "string" }, - "imageUrl": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "images": { + "items": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "$ref": "#/definitions/sevennow.SearchItem" }, "type": "array" }, - "isExplicit": { - "type": "boolean" + "limit": { + "example": 20, + "type": "integer" }, - "mediaType": { + "query": { + "example": "pizza", "type": "string" }, - "meta": { - "$ref": "#/definitions/spotify.AudiobookMeta" + "skip": { + "example": 0, + "type": "integer" }, - "name": { + "source_url": { "type": "string" }, - "narrators": { + "store_id": { + "example": "39226", + "type": "string" + }, + "total": { + "example": 100, + "type": "integer" + } + }, + "type": "object" + }, + "sevennow.Store": { + "properties": { + "address": { + "example": "866 6TH AVE", + "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": { - "type": "string" + "$ref": "#/definitions/sevennow.StoreAlcoholDay" }, "type": "array" }, - "publisher": { + "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" }, - "totalChapters": { - "type": "integer" - }, - "type": { + "brand_logo_url": { "type": "string" }, - "uri": { + "city": { + "example": "New York", "type": "string" - } - }, - "type": "object" - }, - "spotify.BrowsePageItem": { - "properties": { - "description": { - "example": "The official podcast of comedian Joe Rogan.", + }, + "country": { + "example": "US", "type": "string" }, - "externalUrl": { - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "county": { + "example": "New York County", "type": "string" }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "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" }, - "images": { - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" + "latitude": { + "example": 40.747508, + "type": "number" }, - "publisher": { - "example": "Joe Rogan", + "longitude": { + "example": -73.989099, + "type": "number" + }, + "name": { + "example": "7-Eleven", "type": "string" }, - "subtitle": { - "example": "Joe Rogan", + "state": { + "example": "NY", "type": "string" }, - "title": { - "example": "The Joe Rogan Experience", + "store_category": { + "example": "7now", "type": "string" }, - "type": { - "example": "Podcast", + "store_id": { + "example": "39226", "type": "string" }, - "uri": { - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "zip": { + "example": "10001", "type": "string" } }, "type": "object" }, - "spotify.BrowsePageMeta": { + "sevennow.StoreAlcoholDay": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", + "day": { + "example": "Sunday", "type": "string" }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", + "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" + }, + "sevennow.StoreAlcoholWindow": { + "properties": { + "end_time": { + "example": "2359", "type": "string" }, - "operationName": { - "example": "browsePage", + "start_time": { + "example": "0800", "type": "string" - }, - "sectionCount": { - "example": 8, - "type": "integer" } }, "type": "object" }, - "spotify.BrowsePageResponse": { + "sevennow.StoresResponse": { "properties": { - "meta": { - "$ref": "#/definitions/spotify.BrowsePageMeta" + "count": { + "example": 15, + "type": "integer" }, - "sections": { - "items": { - "$ref": "#/definitions/spotify.BrowsePageSection" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "subtitle": { - "example": "New shows and episodes", + "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" }, - "title": { - "example": "Podcasts", + "latitude": { + "example": 40.7480997, + "type": "number" + }, + "longitude": { + "example": -73.9849926, + "type": "number" + }, + "query": { + "example": "350 5th Ave, New York, NY", "type": "string" }, - "type": { - "example": "BrowseSectionContainer", + "resolved_address": { + "example": "350 5th Ave, New York, NY 10118, USA", "type": "string" }, - "uri": { - "example": "spotify:genre:podcasts-web", + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/sevennow.Store" + }, + "type": "array" } }, "type": "object" }, - "spotify.BrowsePageSection": { + "sevennow.SuggestResponse": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/spotify.BrowsePageItem" - }, - "type": "array" - }, - "subtitle": { - "example": "Recommended shows", + "fetched_at": { "type": "string" }, - "title": { - "example": "Popular podcasts", + "query": { + "example": "chi", "type": "string" }, - "totalCount": { - "example": 20, - "type": "integer" - }, - "type": { - "example": "BrowseGenericSectionData", + "source_url": { "type": "string" }, - "uri": { - "example": "spotify:section:0JQ5IMCbQBLqNPkcmYxQPQ", - "type": "string" + "suggestions": { + "example": [ + "chips ahoy", + "chips", + "chicken" + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "spotify.BrowseSectionMeta": { + "sevennow.catalogResponseDoc": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" - }, - "count": { - "example": 20, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.CatalogResponse" }, - "operationName": { - "example": "browseSection", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "spotify.BrowseSectionResponse": { + "sevennow.categoriesResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/spotify.BrowsePageItem" - }, - "type": "array" - }, - "limit": { - "example": 20, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "meta": { - "$ref": "#/definitions/spotify.BrowseSectionMeta" + "data": { + "$ref": "#/definitions/sevennow.CategoriesResponse" }, - "offset": { - "example": 0, + "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" }, - "subtitle": { - "example": "Recommended shows", - "type": "string" - }, - "title": { - "example": "Popular podcasts", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.CategoryResponse" }, - "totalCount": { - "example": 50, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "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" }, - "type": { - "example": "BrowseGenericSectionData", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.ComboResponse" }, - "uri": { - "example": "spotify:section:0JQ5IMCbQBLqNPkcmYxQPQ", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "spotify.ChartItem": { + "sevennow.combosResponseDoc": { "properties": { - "description": { - "example": "The official podcast of comedian Joe Rogan.", - "type": "string" - }, - "episodeDescription": { - "example": "A representative chart episode.", - "type": "string" - }, - "episodeExternalUrl": { - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", - "type": "string" - }, - "episodeImageUrl": { - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", - "type": "string" - }, - "episodeName": { - "example": "Example episode", - "type": "string" - }, - "episodeUri": { - "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", - "type": "string" - }, - "externalUrl": { - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", - "type": "string" - }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", - "type": "string" - }, - "name": { - "example": "The Joe Rogan Experience", - "type": "string" - }, - "publisher": { - "example": "Joe Rogan", - "type": "string" - }, - "rank": { - "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" }, - "rankMove": { - "example": "UNCHANGED", - "type": "string" - }, - "showDescription": { - "example": "The official podcast of comedian Joe Rogan.", - "type": "string" - }, - "showExternalUrl": { - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", - "type": "string" - }, - "showImageUrl": { - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", - "type": "string" - }, - "showName": { - "example": "The Joe Rogan Experience", - "type": "string" - }, - "showPublisher": { - "example": "Joe Rogan", - "type": "string" - }, - "showUri": { - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.CombosResponse" }, - "uri": { - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "spotify.ChartMeta": { + "sevennow.dealsResponseDoc": { "properties": { - "count": { - "example": 100, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "fetchedAt": { - "example": "2026-05-13T20:41:13Z", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.DealsResponse" }, - "sourceUrl": { - "example": "https://podcastcharts.byspotify.com/api/charts/top-podcasts?region=us", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "spotify.ChartResponse": { + "sevennow.offersResponseDoc": { "properties": { - "chart": { - "example": "top-podcasts", - "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" }, - "chartName": { - "example": "Top Podcasts", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.OffersResponse" }, - "chartType": { - "example": "chart", - "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" }, - "items": { - "items": { - "$ref": "#/definitions/spotify.ChartItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/sevennow.PopularResponse" }, - "limit": { - "example": 100, + "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" }, - "meta": { - "$ref": "#/definitions/spotify.ChartMeta" - }, - "region": { - "example": "us", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.ProductResponse" }, - "regionName": { - "example": "United States", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "spotify.CountryHubContentID": { + "sevennow.promotionResponseDoc": { "properties": { - "id": { - "example": "CHARTS", - "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": "Featured Charts", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.PromotionResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "spotify.CountryHubContentMeta": { + "sevennow.searchResponseDoc": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "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" }, - "fetchedAt": { - "example": "2026-05-13T20:41:13Z", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.SearchResponse" }, - "itemCount": { - "example": 20, + "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" }, - "operationName": { - "example": "countryHubContent", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.StoresResponse" }, - "partialErrors": { - "description": "PartialErrors counts upstream GraphQL field errors tolerated alongside\nusable items. Zero on a fully clean response.", - "example": 1, - "type": "integer" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "spotify.CountryHubContentResponse": { + "sevennow.suggestResponseDoc": { "properties": { - "contentId": { - "example": "CHARTS", - "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" }, - "countryCode": { - "example": "US", - "type": "string" + "data": { + "$ref": "#/definitions/sevennow.SuggestResponse" }, - "countryName": { - "example": "United States", + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "sfgate.AuthorArticle": { + "properties": { + "summary": { "type": "string" }, - "hexColor": { - "example": "#1DB954", + "title": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/spotify.CountryHubItem" - }, - "type": "array" - }, - "meta": { - "$ref": "#/definitions/spotify.CountryHubContentMeta" - }, - "supportedContentIds": { - "items": { - "$ref": "#/definitions/spotify.CountryHubContentID" - }, - "type": "array" - }, - "supportedCountries": { - "items": { - "$ref": "#/definitions/spotify.PopularCountry" - }, - "type": "array" - }, - "title": { - "example": "Featured Charts", + "url": { "type": "string" } }, "type": "object" }, - "spotify.CountryHubItem": { + "sfgate.AuthorResponse": { "properties": { - "album": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "artists": { + "articles": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sfgate.AuthorArticle" }, "type": "array" }, - "attributes": { - "additionalProperties": { + "biography": { + "items": { "type": "string" }, - "example": { - "{\"chart\"": "\"top-50\"}" - }, - "type": "object" + "type": "array" }, - "description": { - "example": "Your daily update of the most played tracks right now.", + "image_url": { "type": "string" }, - "externalUrl": { - "example": "https://open.spotify.com/playlist/37i9dQZEVXbLRQDuF5jeBpM", + "job_title": { "type": "string" }, - "imageUrl": { - "example": "https://charts-images.scdn.co/assets/locale_en/regional/daily/region_us_default.jpg", + "name": { "type": "string" }, - "images": { + "same_as": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "type": "string" }, "type": "array" }, - "owner": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "subtitle": { - "example": "Spotify", + "url": { "type": "string" + } + }, + "type": "object" + }, + "shakeshack.DeliveryFeeTier": { + "properties": { + "amount": { + "example": 1.99, + "type": "number" }, - "title": { - "example": "Top 50 - USA", + "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" }, - "type": { - "example": "Playlist", + "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" }, - "uri": { - "example": "spotify:playlist:37i9dQZEVXbLRQDuF5jeBpM", + "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" }, - "spotify.CountryHubMeta": { + "shakeshack.LocationsResponse": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" + "count": { + "example": 100, + "type": "integer" }, - "fetchedAt": { - "example": "2026-05-13T20:41:13Z", + "fetched_at": { "type": "string" }, - "itemCount": { - "example": 20, + "locations": { + "items": { + "$ref": "#/definitions/shakeshack.LocationSummary" + }, + "type": "array" + }, + "page": { + "example": 1, "type": "integer" }, - "operationName": { - "example": "countryHubsPage", + "source_url": { "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, + "total": { + "example": 1322, "type": "integer" }, - "sectionCount": { - "example": 5, + "total_pages": { + "example": 14, "type": "integer" } }, "type": "object" }, - "spotify.CountryHubResponse": { + "shakeshack.MenuCategory": { "properties": { - "countryCode": { - "example": "US", - "type": "string" - }, - "countryName": { - "example": "United States", - "type": "string" - }, - "hexColor": { - "example": "#1DB954", + "name": { + "example": "Burgers & More", "type": "string" }, - "meta": { - "$ref": "#/definitions/spotify.CountryHubMeta" - }, - "sections": { - "items": { - "$ref": "#/definitions/spotify.CountryHubSection" - }, - "type": "array" - }, - "supportedCountries": { + "products": { "items": { - "$ref": "#/definitions/spotify.PopularCountry" + "$ref": "#/definitions/shakeshack.MenuProduct" }, "type": "array" } }, "type": "object" }, - "spotify.CountryHubSection": { + "shakeshack.MenuProduct": { "properties": { - "contentId": { - "example": "CHARTS", + "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" }, - "items": { + "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" + }, + "base_calories": { + "description": "BaseCalories is 0 when upstream reports none.", + "example": 880, + "type": "integer" + }, + "chain_product_id": { + "example": 1119032, + "type": "integer" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "modifiers": { "items": { - "$ref": "#/definitions/spotify.CountryHubItem" + "$ref": "#/definitions/shakeshack.ModifierGroup" }, "type": "array" }, - "title": { - "example": "Featured Charts", + "name": { + "example": "West Coast Burger", "type": "string" }, - "totalCount": { - "example": 20, - "type": "integer" + "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" }, - "spotify.HomeMeta": { + "shakeshack.MenuResponse": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/shakeshack.MenuCategory" + }, + "type": "array" }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", - "type": "string" + "category_count": { + "example": 11, + "type": "integer" }, - "operationName": { - "example": "home", + "fetched_at": { "type": "string" }, - "sectionCount": { - "example": 8, + "location_id": { + "example": 14992, + "type": "integer" + }, + "product_count": { + "example": 76, "type": "integer" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "spotify.HomeResponse": { + "shakeshack.ModifierChoice": { "properties": { - "facet": { - "example": "music", - "type": "string" - }, - "greeting": { - "example": "Good afternoon", - "type": "string" + "calorie_delta": { + "example": -1, + "type": "integer" }, - "meta": { - "$ref": "#/definitions/spotify.HomeMeta" + "chain_option_id": { + "example": 213463, + "type": "integer" }, - "sections": { + "groups": { "items": { - "$ref": "#/definitions/spotify.BrowsePageSection" + "$ref": "#/definitions/shakeshack.ModifierGroup" }, "type": "array" }, - "timeZone": { - "example": "UTC", + "is_default": { + "type": "boolean" + }, + "name": { + "example": "No Lettuce", "type": "string" + }, + "option_id": { + "example": 4127201667, + "type": "integer" + }, + "price": { + "example": 0, + "type": "number" } }, "type": "object" }, - "spotify.ImageAsset": { + "shakeshack.ModifierGroup": { "properties": { - "height": { - "example": 640, + "chain_modifier_id": { + "example": 38041, "type": "integer" }, - "url": { - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", - "type": "string" + "choices": { + "items": { + "$ref": "#/definitions/shakeshack.ModifierChoice" + }, + "type": "array" }, - "width": { - "example": 640, + "group_id": { + "example": 890226904, "type": "integer" + }, + "name": { + "example": "Remove Lettuce:", + "type": "string" + }, + "type": { + "example": "REMOVAL", + "type": "string" } }, "type": "object" }, - "spotify.PlaylistMeta": { + "shakeshack.NearbyAddress": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", + "city": { + "example": "New York", "type": "string" }, - "episodeCount": { - "example": 0, - "type": "integer" - }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", + "postal_code": { + "example": "10036", "type": "string" }, - "itemCount": { - "example": 20, - "type": "integer" - }, - "operationName": { - "example": "fetchPlaylist", + "region": { + "example": "NY", "type": "string" }, - "trackCount": { - "example": 20, - "type": "integer" + "street": { + "example": "691 Eighth Avenue", + "type": "string" } }, "type": "object" }, - "spotify.PlaylistResponse": { + "shakeshack.NearbyHours": { "properties": { - "collaborative": { - "example": false, - "type": "boolean" + "closes": { + "example": "23:00", + "type": "string" }, - "description": { - "example": "Your daily update of the most played tracks right now.", + "day_of_week": { + "example": "Monday", "type": "string" }, - "episodes": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "externalUrl": { - "example": "https://open.spotify.com/playlist/37i9dQZEVXbLwpL8TjsxOG", + "opens": { + "example": "10:00", "type": "string" + } + }, + "type": "object" + }, + "shakeshack.NearbyLocation": { + "properties": { + "address": { + "$ref": "#/definitions/shakeshack.NearbyAddress" }, - "followers": { - "example": 17500000, - "type": "integer" - }, - "id": { - "example": "37i9dQZEVXbLwpL8TjsxOG", - "type": "string" + "delivery_fees": { + "items": { + "$ref": "#/definitions/shakeshack.DeliveryFeeTier" + }, + "type": "array" }, - "imageUrl": { - "example": "https://charts-images.scdn.co/assets/locale_en/regional/daily/region_global_default.jpg", - "type": "string" + "distance_miles": { + "example": 0.19, + "type": "number" }, - "images": { + "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/spotify.ImageAsset" + "type": "string" }, "type": "array" }, - "items": { + "hours": { + "description": "Hours is the current rolling week, Monday-first.", "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/shakeshack.NearbyHours" }, "type": "array" }, - "limit": { - "example": 20, + "is_online_ordering_available": { + "type": "boolean" + }, + "latitude": { + "example": 40.7584054, + "type": "number" + }, + "location_id": { + "example": 14992, "type": "integer" }, - "meta": { - "$ref": "#/definitions/spotify.PlaylistMeta" + "longitude": { + "example": -73.9891734, + "type": "number" }, "name": { - "example": "Top 50 - Global", + "example": "Theater District", "type": "string" }, - "offset": { - "example": 0, - "type": "integer" - }, - "owner": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "shareUrl": { - "example": "https://open.spotify.com/playlist/37i9dQZEVXbLwpL8TjsxOG", + "phone_number": { + "example": "(646) 435-0135", "type": "string" }, - "total": { - "example": 50, + "timezone": { + "example": "America/New_York", + "type": "string" + } + }, + "type": "object" + }, + "shakeshack.NearbyResponse": { + "properties": { + "count": { + "example": 10, "type": "integer" }, - "tracks": { + "fetched_at": { + "type": "string" + }, + "locations": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/shakeshack.NearbyLocation" }, "type": "array" }, - "type": { - "example": "Playlist", - "type": "string" + "radius_miles": { + "example": 15, + "type": "integer" }, - "uri": { - "example": "spotify:playlist:37i9dQZEVXbLwpL8TjsxOG", + "source_url": { "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodeMeta": { + "shakeshack.StoreAddress": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", + "city": { + "example": "Houston", "type": "string" }, - "fetchedAt": { - "example": "2026-05-13T20:41:13Z", + "country": { + "example": "United States", "type": "string" }, - "operationName": { - "example": "getEpisodeOrChapter", + "line1": { + "example": "8815 W Loop S", "type": "string" }, - "sourceUrl": { - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", + "postal_code": { + "example": "77096", + "type": "string" + }, + "region": { + "example": "TX", "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodeResponse": { + "shakeshack.StoreHours": { "properties": { - "description": { - "example": "A new adventure from the Stinky Dragon crew.", - "type": "string" - }, - "durationMs": { - "example": 3600000, - "type": "integer" + "closed": { + "description": "Closed is true when Shake Shack publishes the day with no open\ninterval.", + "example": false, + "type": "boolean" }, - "externalUrl": { - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", + "closes": { + "example": "23:00", "type": "string" }, - "htmlDescription": { - "example": "A new adventure from the Stinky Dragon crew.", + "day_of_week": { + "example": "Monday", "type": "string" }, - "id": { - "example": "2C2Y5kNq7qCVOVhbA0G3os", + "opens": { + "example": "10:00", "type": "string" + } + }, + "type": "object" + }, + "shakeshack.StoreResponse": { + "properties": { + "address": { + "$ref": "#/definitions/shakeshack.StoreAddress" }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "fetched_at": { "type": "string" }, - "images": { + "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/spotify.ImageAsset" + "$ref": "#/definitions/shakeshack.StoreHours" }, "type": "array" }, - "isExplicit": { - "example": false, - "type": "boolean" + "latitude": { + "example": 29.6856442, + "type": "number" }, - "isPaywallContent": { - "example": false, - "type": "boolean" + "longitude": { + "example": -95.4574726, + "type": "number" }, - "isPlayable": { - "example": true, - "type": "boolean" + "name": { + "example": "Meyerland", + "type": "string" }, - "mediaTypes": { - "example": [ - "AUDIO" - ], + "order_types": { + "description": "OrderTypes are the fulfillment types Shake Shack publishes for this\nlocation, e.g. \"Dine In\", \"Delivery\".", "items": { "type": "string" }, "type": "array" }, - "meta": { - "$ref": "#/definitions/spotify.PodcastEpisodeMeta" - }, - "name": { - "example": "Tales from the Stinky Dragon", + "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" }, - "playabilityReason": { - "example": "PLAYABLE", + "phone_number": { + "example": "281-819-8763", "type": "string" }, - "previewAudioUrl": { - "example": "https://p.scdn.co/mp3-preview/example", + "source_url": { "type": "string" }, - "previewAudioUrls": { - "example": [ - "https://p.scdn.co/mp3-preview/example" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "previewVideoUrl": { - "example": "https://p.scdn.co/video-preview/example", + "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", + "type": "integer" }, - "releaseDate": { - "example": "2026-05-13", - "type": "string" + "data": { + "$ref": "#/definitions/shakeshack.LocationsResponse" }, - "releaseDatePrecision": { - "example": "DAY", - "type": "string" + "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", + "type": "integer" }, - "shareUrl": { - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", - "type": "string" + "data": { + "$ref": "#/definitions/shakeshack.MenuResponse" }, - "show": { - "$ref": "#/definitions/spotify.PodcastEpisodeShowSummary" + "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" }, - "transcriptCount": { - "example": 1, + "data": { + "$ref": "#/definitions/shakeshack.NearbyResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "shakeshack.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" }, - "type": { - "example": "Episode", - "type": "string" + "data": { + "$ref": "#/definitions/shakeshack.StoreResponse" }, - "unplayabilityReasons": { - "example": [ - "not_available_in_region" - ], + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "shein.AggregationFilters": { + "properties": { + "category": { + "$ref": "#/definitions/shein.FacetCategory" + }, + "filters": { "items": { - "type": "string" + "$ref": "#/definitions/shein.FacetGroup" }, "type": "array" }, - "uri": { - "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", + "keyword": { + "example": "dress", "type": "string" }, - "videoThumbnailUrl": { - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "max_price": { + "example": "569", "type": "string" }, - "videoThumbnails": { + "min_price": { + "example": "18", + "type": "string" + } + }, + "type": "object" + }, + "shein.AutocompleteResponse": { + "properties": { + "suggestions": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "$ref": "#/definitions/shein.AutocompleteSuggestion" }, "type": "array" + }, + "word": { + "example": "dres", + "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodeShowSummary": { + "shein.AutocompleteSuggestion": { "properties": { - "description": { - "example": "Tales from the Stinky Dragon is an actual-play comedy podcast.", + "type": { + "example": "common", "type": "string" }, - "externalUrl": { - "example": "https://open.spotify.com/show/1QQJ7FElLE0K6CIfZNCxU4", + "word": { + "example": "Dress For Women", "type": "string" }, - "id": { - "example": "1QQJ7FElLE0K6CIfZNCxU4", + "word_id": { + "example": "163784", + "type": "string" + } + }, + "type": "object" + }, + "shein.CategoryFiltersResponse": { + "properties": { + "cat_id": { + "example": "1766", "type": "string" }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "currency": { + "example": "HK$", "type": "string" }, - "images": { + "filters": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "$ref": "#/definitions/shein.Filter" }, "type": "array" }, - "mediaType": { - "example": "MIXED", - "type": "string" + "max_price": { + "example": 569, + "type": "number" }, - "name": { - "example": "Tales from the Stinky Dragon", + "min_price": { + "example": 18, + "type": "number" + } + }, + "type": "object" + }, + "shein.CategoryGoodsResponse": { + "properties": { + "cat_id": { + "example": "1727", "type": "string" }, - "publisher": { - "example": "Stinky Dragon", + "category_name": { + "example": "Dresses", "type": "string" }, - "showTypes": { - "example": [ - "PODCAST" - ], + "page": { + "example": 1, + "type": "integer" + }, + "products": { "items": { - "type": "string" + "$ref": "#/definitions/shein.Product" }, "type": "array" }, - "type": { - "example": "Podcast", - "type": "string" - }, - "uri": { - "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", - "type": "string" + "total": { + "example": 1187, + "type": "integer" } }, "type": "object" }, - "spotify.PodcastEpisodeSummary": { + "shein.CategoryNavResponse": { "properties": { - "description": { - "example": "A new adventure from the Stinky Dragon crew.", - "type": "string" - }, - "durationMs": { - "example": 3600000, - "type": "integer" - }, - "externalUrl": { - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", - "type": "string" - }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "cat_id": { + "example": "1766", "type": "string" }, - "images": { + "navs": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "$ref": "#/definitions/shein.NavTab" }, "type": "array" + } + }, + "type": "object" + }, + "shein.ColorVariant": { + "properties": { + "color_image": { + "type": "string" }, - "isExplicit": { - "example": false, - "type": "boolean" - }, - "isPlayable": { - "example": true, - "type": "boolean" + "color_name": { + "example": "Blue", + "type": "string" }, - "name": { - "example": "Tales from the Stinky Dragon", + "goods_id": { + "example": "162996968", "type": "string" }, - "releaseDate": { - "example": "2026-05-13", + "goods_sn": { + "example": "sz25081190840936964", "type": "string" }, - "type": { - "example": "Episode", + "goods_url_name": { "type": "string" }, - "uri": { - "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", + "image": { "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodesMeta": { + "shein.FacetCategory": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" + "children": { + "items": { + "$ref": "#/definitions/shein.FacetCategory" + }, + "type": "array" }, - "fetchedAt": { - "example": "2026-05-13T20:41:13Z", + "id": { + "example": "2030", "type": "string" }, - "operationName": { - "example": "queryPodcastEpisodes", + "name": { + "example": "Women Clothing", "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodesResponse": { + "shein.FacetGroup": { "properties": { - "episodes": { + "id": { + "example": "87", + "type": "string" + }, + "name": { + "example": "Size", + "type": "string" + }, + "options": { "items": { - "$ref": "#/definitions/spotify.PodcastEpisodeSummary" + "$ref": "#/definitions/shein.FacetOption" }, "type": "array" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "meta": { - "$ref": "#/definitions/spotify.PodcastEpisodesMeta" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "total": { - "example": 202, - "type": "integer" - }, - "uri": { - "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", - "type": "string" } }, "type": "object" }, - "spotify.PopularCountry": { + "shein.FacetOption": { "properties": { - "code": { - "example": "us", + "id": { + "example": "87_757", "type": "string" }, "name": { - "example": "United States", + "example": "XXS", "type": "string" } }, "type": "object" }, - "spotify.RecommendationSummary": { + "shein.Filter": { "properties": { - "description": { - "example": "The official podcast of comedian Joe Rogan.", - "type": "string" - }, - "externalUrl": { - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "node_id": { + "example": "87", "type": "string" }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "node_name": { + "example": "Size", "type": "string" }, - "images": { + "options": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "$ref": "#/definitions/shein.FilterOption" }, "type": "array" - }, - "publisher": { - "example": "Joe Rogan", + } + }, + "type": "object" + }, + "shein.FilterOption": { + "properties": { + "node_id": { + "example": "87_757", "type": "string" }, - "subtitle": { - "example": "Joe Rogan", + "node_name": { + "example": "XXS", "type": "string" - }, - "title": { - "example": "The Joe Rogan Experience", + } + }, + "type": "object" + }, + "shein.Keyword": { + "properties": { + "from": { + "example": "search", "type": "string" }, "type": { - "example": "Podcast", + "example": "goods_pool", "type": "string" }, - "uri": { - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "word": { + "example": "Mother And Daughter", + "type": "string" + }, + "word_id": { + "example": "199828", "type": "string" } }, "type": "object" }, - "spotify.SearchMeta": { + "shein.NavTab": { "properties": { - "albumCount": { - "example": 3, - "type": "integer" - }, - "appVersion": { - "example": "1.2.90.403.gf901f20f", + "goods_id": { + "example": "52544880", "type": "string" }, - "artistCount": { - "example": 5, - "type": "integer" - }, - "audiobookCount": { - "example": 2, - "type": "integer" - }, - "episodeCount": { - "example": 2, - "type": "integer" - }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", + "nav_id": { + "example": "1738", "type": "string" }, - "operationName": { - "example": "searchDesktop", + "nav_img": { "type": "string" }, - "playlistCount": { - "example": 2, - "type": "integer" - }, - "resultCount": { - "example": 22, - "type": "integer" - }, - "showCount": { - "example": 4, - "type": "integer" - }, - "topCount": { - "example": 3, - "type": "integer" - }, - "trackCount": { - "example": 2, - "type": "integer" + "nav_name": { + "example": "T-Shirts", + "type": "string" }, - "userCount": { - "example": 2, - "type": "integer" + "nav_type": { + "example": "1", + "type": "string" } }, "type": "object" }, - "spotify.SearchPodcastsMeta": { + "shein.Product": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", + "brand_code": { + "example": "1qmfm", "type": "string" }, - "episodeCount": { - "example": 2, - "type": "integer" + "category_id": { + "example": "12476", + "type": "string" }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", + "category_name": { + "example": "Women Long Dresses", "type": "string" }, - "operationName": { - "example": "searchPodcasts", + "color_img": { "type": "string" }, - "showCount": { - "example": 4, - "type": "integer" + "comment_avg": { + "example": "4.68", + "type": "string" }, - "topCount": { - "example": 3, + "comment_count": { + "example": 1001, "type": "integer" - } - }, - "type": "object" - }, - "spotify.SearchPodcastsResponse": { - "properties": { - "episodes": { + }, + "detail_images": { "items": { - "$ref": "#/definitions/spotify.PodcastEpisodeSummary" + "type": "string" }, "type": "array" }, - "limit": { - "example": 20, - "type": "integer" + "goods_id": { + "example": "163003837", + "type": "string" }, - "meta": { - "$ref": "#/definitions/spotify.SearchPodcastsMeta" + "goods_img": { + "type": "string" }, - "offset": { - "example": 0, - "type": "integer" + "goods_name": { + "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", + "type": "string" }, - "searchTerm": { - "example": "hello", + "goods_sn": { + "example": "sz25081193234595996", "type": "string" }, - "shows": { - "items": { - "$ref": "#/definitions/spotify.RecommendationSummary" - }, - "type": "array" + "goods_url_name": { + "example": "Sweetra-Women-s-Oblique-Shoulder-Fitted-Bandeau-Dress", + "type": "string" }, - "topResults": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "mall_code": { + "example": "1", + "type": "string" + }, + "on_sale": { + "example": true, + "type": "boolean" + }, + "retail_price": { + "example": "HK$119.00", + "type": "string" + }, + "sale_price": { + "example": "HK$119.00", + "type": "string" + }, + "sold_out": { + "example": false, + "type": "boolean" + }, + "spu": { + "example": "z250520775866", + "type": "string" + }, + "store_code": { + "example": "7945614031", + "type": "string" + }, + "usd_price": { + "example": "$15.16", + "type": "string" } }, "type": "object" }, - "spotify.SearchResponse": { + "shein.ProductDetail": { "properties": { - "albums": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "brand_code": { + "example": "1qmfm", + "type": "string" }, - "artists": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "category_id": { + "example": "12476", + "type": "string" }, - "audiobooks": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "category_name": { + "example": "Women Dresses", + "type": "string" }, - "episodes": { + "color_variants": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/shein.ColorVariant" }, "type": "array" }, - "limit": { - "example": 20, - "type": "integer" + "description": { + "type": "string" }, - "meta": { - "$ref": "#/definitions/spotify.SearchMeta" + "goods_id": { + "example": "163003837", + "type": "string" }, - "offset": { - "example": 0, - "type": "integer" + "goods_name": { + "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", + "type": "string" }, - "playlists": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "goods_sn": { + "example": "sz25081193234595996", + "type": "string" }, - "results": { + "images": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "type": "string" }, "type": "array" }, - "searchTerm": { - "example": "hello", + "on_sale": { + "example": true, + "type": "boolean" + }, + "retail_price": { + "example": "HK$119.00", "type": "string" }, - "shows": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "sale_price": { + "example": "HK$119.00", + "type": "string" }, - "topResults": { + "size_guide_url": { + "type": "string" + }, + "sizes": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/shein.SizeOption" }, "type": "array" }, - "tracks": { + "skus": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/shein.SkuVariant" }, "type": "array" }, - "users": { + "store_code": { + "example": "7945614031", + "type": "string" + }, + "usd_price": { + "example": "$15.16", + "type": "string" + }, + "video_url": { + "type": "string" + } + }, + "type": "object" + }, + "shein.SearchKeywordsResponse": { + "properties": { + "keywords": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/shein.Keyword" }, "type": "array" } }, "type": "object" }, - "spotify.SearchResultSummary": { + "shein.SearchProductsResponse": { "properties": { - "description": { - "example": "The official podcast of comedian Joe Rogan.", + "keyword": { + "example": "dress", "type": "string" }, - "externalUrl": { - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "origin_word": { + "example": "dress", "type": "string" }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "images": { + "products": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "$ref": "#/definitions/shein.Product" }, "type": "array" }, - "publisher": { - "example": "Joe Rogan", - "type": "string" - }, - "subtitle": { - "example": "Joe Rogan", - "type": "string" - }, - "title": { - "example": "The Joe Rogan Experience", - "type": "string" - }, - "type": { - "example": "Podcast", - "type": "string" + "suggest_words": { + "items": { + "type": "string" + }, + "type": "array" }, - "uri": { - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", - "type": "string" + "total": { + "example": 6535, + "type": "integer" } }, "type": "object" }, - "spotify.ShowMetadataMeta": { + "shein.SizeOption": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", + "attr_id": { + "example": "87", "type": "string" }, - "fetchedAt": { - "example": "2026-05-13T20:41:13Z", + "attr_name": { + "example": "Size", "type": "string" }, - "operationName": { - "example": "queryShowMetadataV2", + "attr_value_id": { + "example": "757", + "type": "string" + }, + "attr_value_name": { + "example": "XXS", "type": "string" } }, "type": "object" }, - "spotify.ShowMetadataResponse": { + "shein.SkuVariant": { "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", + "retail_price": { + "example": "HK$119.00", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" - }, - "isExplicit": { - "example": false, - "type": "boolean" - }, - "mediaType": { - "example": "MIXED", + "sale_price": { + "example": "HK$119.00", "type": "string" }, - "meta": { - "$ref": "#/definitions/spotify.ShowMetadataMeta" - }, - "name": { - "example": "Tales from the Stinky Dragon", + "sku_code": { + "example": "I6ar22eezl2i", "type": "string" }, - "publisher": { - "example": "Stinky Dragon", + "sku_sale_attr": { "type": "string" }, - "totalEpisodes": { - "example": 202, - "type": "integer" - }, - "type": { - "example": "Podcast", + "stock": { + "example": "20", "type": "string" }, - "uri": { - "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", + "usd_price": { + "example": "$15.16", "type": "string" } }, "type": "object" }, - "spotify.ShowRecommendationsMeta": { + "shein.aggregationFiltersResponseDoc": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" - }, - "count": { - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "fetchedAt": { - "example": "2026-05-13T20:41:13Z", - "type": "string" + "data": { + "$ref": "#/definitions/shein.AggregationFilters" }, - "operationName": { - "example": "internalLinkRecommenderShow", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.ShowRecommendationsResponse": { + "shein.autocompleteResponseDoc": { "properties": { - "meta": { - "$ref": "#/definitions/spotify.ShowRecommendationsMeta" + "code": { + "example": 200, + "type": "integer" }, - "recommendations": { - "items": { - "$ref": "#/definitions/spotify.RecommendationSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shein.AutocompleteResponse" }, - "uri": { - "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.TrackMeta": { + "shein.categoryFiltersResponseDoc": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "fetchedAt": { - "example": "2026-05-13T20:41:10Z", - "type": "string" + "data": { + "$ref": "#/definitions/shein.CategoryFiltersResponse" }, - "operationName": { - "example": "getTrack", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.TrackRecommendedMeta": { + "shein.categoryGoodsResponseDoc": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" - }, - "count": { - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", - "type": "string" + "data": { + "$ref": "#/definitions/shein.CategoryGoodsResponse" }, - "operationName": { - "example": "internalLinkRecommenderTrack", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.TrackRecommendedResponse": { + "shein.categoryNavResponseDoc": { "properties": { - "limit": { - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "meta": { - "$ref": "#/definitions/spotify.TrackRecommendedMeta" - }, - "recommendations": { - "items": { - "$ref": "#/definitions/spotify.RecommendationSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shein.CategoryNavResponse" }, - "uri": { - "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.TrackResponse": { + "shein.productDetailResponseDoc": { "properties": { - "album": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "code": { + "example": 200, + "type": "integer" }, - "artists": { - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shein.ProductDetail" }, - "discNumber": { - "example": 1, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "shein.productsSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "durationMs": { - "example": 234083, - "type": "integer" + "data": { + "$ref": "#/definitions/shein.SearchProductsResponse" }, - "externalUrl": { - "example": "https://open.spotify.com/track/4vGg44GdCw3X8i8r01XJH0", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "shein.searchKeywordsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "id": { - "example": "4vGg44GdCw3X8i8r01XJH0", - "type": "string" + "data": { + "$ref": "#/definitions/shein.SearchKeywordsResponse" }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab67616d0000b273f377730d2a9c2e432139ac79", + "msg": { + "example": "OK", "type": "string" - }, - "images": { + } + }, + "type": "object" + }, + "shopapp.AnalysisResponse": { + "properties": { + "currencies": { + "example": [ + "USD", + "GBP" + ], "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "type": "string" }, "type": "array" }, - "isExplicit": { - "example": false, - "type": "boolean" - }, - "isPlayable": { - "example": true, - "type": "boolean" + "discounts": { + "$ref": "#/definitions/shopapp.DiscountSummary" }, - "meta": { - "$ref": "#/definitions/spotify.TrackMeta" + "groups_count": { + "example": 5, + "type": "integer" }, - "name": { - "example": "Example Track", - "type": "string" + "prices_by_currency": { + "items": { + "$ref": "#/definitions/shopapp.CurrencyPriceSummary" + }, + "type": "array" }, - "playabilityReason": { - "example": "PLAYABLE", - "type": "string" + "products_count": { + "example": 20, + "type": "integer" }, - "playcount": { - "example": "13129249", + "query": { + "example": "sneakers", "type": "string" }, - "previewAudioUrl": { - "example": "https://p.scdn.co/mp3-preview/example", - "type": "string" + "sale_count": { + "example": 6, + "type": "integer" }, - "previewAudioUrls": { + "sampled_product_ids": { "example": [ - "https://p.scdn.co/mp3-preview/example" + "8075903107261", + "7093164834901" ], "items": { "type": "string" }, "type": "array" }, - "shareUrl": { - "example": "https://open.spotify.com/track/4vGg44GdCw3X8i8r01XJH0", - "type": "string" - }, - "trackNumber": { - "example": 7, + "shops_count": { + "example": 8, "type": "integer" }, - "type": { - "example": "Track", - "type": "string" - }, - "unplayabilityReasons": { - "example": [ - "not_available_in_region" - ], + "top_shops": { "items": { - "type": "string" + "$ref": "#/definitions/shopapp.ShopSummary" }, "type": "array" - }, - "uri": { - "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", - "type": "string" } }, "type": "object" }, - "spotify.TrackSimilarAlbumsMeta": { + "shopapp.CategoriesResponse": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" - }, - "count": { - "example": 10, - "type": "integer" - }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", - "type": "string" - }, - "operationName": { - "example": "similarAlbumsBasedOnThisTrack", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/shopapp.CategoryItem" + }, + "type": "array" } }, "type": "object" }, - "spotify.TrackSimilarAlbumsResponse": { + "shopapp.CategoryItem": { "properties": { - "albums": { + "children": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/shopapp.CategoryItem" }, "type": "array" }, - "albumsOnly": { - "example": true, - "type": "boolean" - }, - "limit": { - "example": 10, - "type": "integer" + "gid": { + "example": "gid://shopify/ProductCategory/1?version=13", + "type": "string" }, - "meta": { - "$ref": "#/definitions/spotify.TrackSimilarAlbumsMeta" + "has_children": { + "type": "boolean" }, - "uri": { - "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", + "id": { + "example": "1", "type": "string" - } - }, - "type": "object" - }, - "spotify.UserProfileFollowersResponse": { - "properties": { - "limit": { - "example": 50, - "type": "integer" }, - "meta": { - "$ref": "#/definitions/spotify.UserProfileMeta" + "image": { + "type": "string" }, - "offset": { - "example": 0, - "type": "integer" + "name": { + "example": "Women", + "type": "string" }, - "profiles": { + "path": { "items": { - "$ref": "#/definitions/spotify.UserProfileSummary" + "$ref": "#/definitions/shopapp.CategoryPath" }, "type": "array" }, - "total": { - "example": 998, - "type": "integer" + "slug": { + "example": "women", + "type": "string" + } + }, + "type": "object" + }, + "shopapp.CategoryPath": { + "properties": { + "gid": { + "example": "gid://shopify/ProductCategory/1?version=13", + "type": "string" }, - "uri": { - "example": "spotify:user:spotify", + "id": { + "example": "1", "type": "string" }, - "username": { - "example": "spotify", + "name": { + "example": "Women", "type": "string" } }, "type": "object" }, - "spotify.UserProfileMeta": { + "shopapp.CurrencyPriceSummary": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", - "type": "string" + "average": { + "example": 72.42, + "type": "number" }, - "artistCount": { - "example": 0, + "count": { + "example": 12, "type": "integer" }, - "fetchedAt": { - "example": "2026-05-13T20:41:12Z", - "type": "string" - }, - "operationName": { - "example": "userProfileView", + "currency": { + "example": "USD", "type": "string" }, - "playlistCount": { - "example": 10, - "type": "integer" + "max": { + "example": 149.99, + "type": "number" }, - "profileCount": { - "example": 50, - "type": "integer" + "min": { + "example": 35.9, + "type": "number" } }, "type": "object" }, - "spotify.UserProfilePlaylist": { + "shopapp.DiscountSummary": { "properties": { - "externalUrl": { - "example": "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M", - "type": "string" + "average_percent": { + "example": 24.6, + "type": "number" }, - "followersCount": { - "example": 34324513, - "type": "integer" + "max_percent": { + "example": 60, + "type": "number" }, - "id": { - "example": "37i9dQZF1DXcBWIGoYBM5M", + "min_percent": { + "example": 10, + "type": "number" + } + }, + "type": "object" + }, + "shopapp.ImageItem": { + "properties": { + "alt": { + "example": "Product image", "type": "string" }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab67706f0000000273f7bb6e77ec5e23d7840ae5", + "url": { + "example": "https://cdn.shopify.com/example.jpg", "type": "string" - }, - "isFollowing": { - "example": false, - "type": "boolean" - }, - "name": { - "example": "Today’s Top Hits", + } + }, + "type": "object" + }, + "shopapp.LocationAddress": { + "properties": { + "address1": { + "example": "175b Mott Street", "type": "string" }, - "ownerName": { - "example": "Spotify", + "address2": { "type": "string" }, - "ownerUri": { - "example": "spotify:user:spotify", + "city": { + "example": "New York", "type": "string" }, - "ownerUrl": { - "example": "https://open.spotify.com/user/spotify", + "country": { + "example": "US", "type": "string" }, - "ownerUsername": { - "example": "spotify", + "postal_code": { + "example": "10012", "type": "string" }, - "uri": { - "example": "spotify:playlist:37i9dQZF1DXcBWIGoYBM5M", + "zone_code": { + "example": "NY", "type": "string" } }, "type": "object" }, - "spotify.UserProfilePlaylistsResponse": { + "shopapp.OptionGroup": { "properties": { - "limit": { - "example": 20, - "type": "integer" - }, - "meta": { - "$ref": "#/definitions/spotify.UserProfileMeta" - }, - "offset": { - "example": 0, - "type": "integer" + "name": { + "example": "Size", + "type": "string" }, - "publicPlaylists": { + "values": { "items": { - "$ref": "#/definitions/spotify.UserProfilePlaylist" + "type": "string" }, "type": "array" - }, - "totalPublicPlaylistsCount": { - "example": 1519, - "type": "integer" - }, - "uri": { - "example": "spotify:user:spotify", - "type": "string" - }, - "username": { - "example": "spotify", - "type": "string" } }, "type": "object" }, - "spotify.UserProfileResponse": { + "shopapp.ProductDetail": { "properties": { - "allowFollows": { - "example": true, + "available": { "type": "boolean" }, - "color": { - "example": 16085920, - "type": "integer" - }, - "externalUrl": { - "example": "https://open.spotify.com/user/spotify", + "currency": { + "example": "HKD", "type": "string" }, - "followersCount": { - "example": 12162371, - "type": "integer" - }, - "followingCount": { - "example": 327, - "type": "integer" - }, - "hasSpotifyImage": { - "example": true, - "type": "boolean" + "description": { + "type": "string" }, - "hasSpotifyName": { - "example": true, - "type": "boolean" + "external_url": { + "type": "string" }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", + "id": { + "example": "4596217053229", "type": "string" }, - "isCurrentUser": { - "example": false, - "type": "boolean" + "images": { + "items": { + "$ref": "#/definitions/shopapp.ImageItem" + }, + "type": "array" }, - "isVerified": { - "example": true, - "type": "boolean" + "option_groups": { + "items": { + "$ref": "#/definitions/shopapp.OptionGroup" + }, + "type": "array" }, - "meta": { - "$ref": "#/definitions/spotify.UserProfileMeta" + "original_price": { + "example": 1166, + "type": "number" }, - "name": { - "example": "Spotify", - "type": "string" + "price": { + "example": 1076, + "type": "number" }, - "publicPlaylists": { + "rating": { + "example": 4.4, + "type": "number" + }, + "related_products": { "items": { - "$ref": "#/definitions/spotify.UserProfilePlaylist" + "$ref": "#/definitions/shopapp.ProductItem" }, "type": "array" }, - "recentlyPlayedArtists": { + "reviews": { "items": { - "$ref": "#/definitions/spotify.UserProfileSummary" + "$ref": "#/definitions/shopapp.ReviewItem" }, "type": "array" }, - "showFollows": { - "example": true, - "type": "boolean" + "reviews_count": { + "example": 22, + "type": "integer" }, - "topArtists": { - "$ref": "#/definitions/spotify.UserProfileTopArtists" + "shop_handle": { + "example": "n1r478fp0h", + "type": "string" }, - "totalPublicPlaylistsCount": { - "example": 1519, - "type": "integer" + "shop_id": { + "type": "string" }, - "uri": { - "example": "spotify:user:spotify", + "shop_name": { + "example": "Wide Fit Shoes UK", "type": "string" }, - "username": { - "example": "spotify", + "slug": { + "example": "mens-wide-fit-new-balance-624v5-black-trainers-abzorb", + "type": "string" + }, + "title": { + "example": "Mens Wide Fit New Balance 624V5 Black Trainers ABZORB", + "type": "string" + }, + "url": { + "type": "string" + }, + "variant_id": { + "example": "34761278160941", "type": "string" } }, "type": "object" }, - "spotify.UserProfileSummary": { + "shopapp.ProductDetailResponse": { "properties": { - "color": { - "example": 16085920, - "type": "integer" - }, - "externalUrl": { - "example": "https://open.spotify.com/user/example", + "product": { + "$ref": "#/definitions/shopapp.ProductDetail" + } + }, + "type": "object" + }, + "shopapp.ProductItem": { + "properties": { + "currency": { + "example": "USD", "type": "string" }, - "followersCount": { - "example": 1000, - "type": "integer" - }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", + "group_query": { + "example": "kids' athletic sneakers", "type": "string" }, - "isFollowing": { - "example": false, - "type": "boolean" + "group_title": { + "example": "kids' athletic sneakers", + "type": "string" }, - "name": { - "example": "Example", + "id": { + "example": "8075903107261", "type": "string" }, - "uri": { - "example": "spotify:user:example", + "image": { + "example": "https://cdn.shopify.com/s/files/1/1145/5784/files/example.jpg", "type": "string" }, - "username": { - "example": "example", + "image_alt": { + "example": "Black sneaker side view", "type": "string" - } - }, - "type": "object" - }, - "spotify.UserProfileTopArtists": { - "properties": { - "imageUrl": { - "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", + }, + "on_sale": { + "type": "boolean" + }, + "original_price": { + "example": 120, + "type": "number" + }, + "position": { + "example": 1, + "type": "integer" + }, + "price": { + "example": 100, + "type": "number" + }, + "shop_id": { + "example": "62696", "type": "string" }, - "subtitle": { - "example": "Only visible to the user", + "shop_name": { + "example": "BILLY Footwear", "type": "string" }, "title": { - "example": "Top artists this month", + "example": "Black/Black/Gum BILLY Sport Inclusion DZ1", "type": "string" }, - "topArtistsPageUri": { - "example": "spotify:user:spotify:top:artists", + "url": { + "example": "https://billyfootwear.com/products/black-black-gum-billy-sport-inclusion-dz1-zipper-shoes?utm_source=shop_app", + "type": "string" + }, + "variant_id": { + "example": "46242960965821", "type": "string" } }, "type": "object" }, - "spotify.albumResponseDoc": { + "shopapp.ProductShopResponse": { "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.AlbumResponse" + "product_id": { + "example": "4596217053229", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "shop": { + "$ref": "#/definitions/shopapp.ShopDetail" } }, "type": "object" }, - "spotify.artistAlbumsResponseDoc": { + "shopapp.ProductVariantResponse": { "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.ArtistAlbumsResponse" + "product_id": { + "example": "4596217053229", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "variant": { + "$ref": "#/definitions/shopapp.VariantItem" } }, "type": "object" }, - "spotify.artistCollectionResponseDoc": { + "shopapp.RelatedResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "limit": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.ArtistCollectionResponse" + "product_id": { + "example": "4596217053229", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "products": { + "items": { + "$ref": "#/definitions/shopapp.ProductItem" + }, + "type": "array" } }, "type": "object" }, - "spotify.artistResponseDoc": { + "shopapp.ReviewItem": { "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": { + "example": "Donal", + "type": "string" + }, + "body": { + "example": "Perfect fit.", + "type": "string" + }, + "date": { + "example": "December 6, 2025", + "type": "string" + }, + "helpful_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.ArtistResponse" + "id": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "product": { + "$ref": "#/definitions/shopapp.ReviewProduct" + }, + "rating": { + "example": 5, + "type": "number" + }, + "title": { + "type": "string" + }, + "variant_label": { + "example": "Black / 12.5 / 4E", + "type": "string" } }, "type": "object" }, - "spotify.audiobookChaptersResponseDoc": { + "shopapp.ReviewProduct": { "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": "8114373328975", + "type": "string" }, - "data": { - "$ref": "#/definitions/spotify.AudiobookChaptersResponse" + "image": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "image_alt": { + "type": "string" + }, + "slug": { + "example": "solana-brown-woven-leather-backstrap-clogs", + "type": "string" + }, + "title": { + "example": "Solana Brown Woven Leather Backstrap Clogs", + "type": "string" + }, + "url": { + "type": "string" + }, + "variant": { + "example": "7 / Brown Woven / Leather", + "type": "string" } }, "type": "object" }, - "spotify.audiobookResponseDoc": { + "shopapp.ReviewsResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "limit": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.AudiobookResponse" + "product_id": { + "example": "4596217053229", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "reviews": { + "items": { + "$ref": "#/definitions/shopapp.ReviewItem" + }, + "type": "array" } }, "type": "object" }, - "spotify.browsePageResponseDoc": { + "shopapp.SearchGroup": { "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_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "products_seen": { + "example": 4, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.BrowsePageResponse" + "query": { + "example": "men's running sneakers", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "title": { + "example": "men's running sneakers", + "type": "string" } }, "type": "object" }, - "spotify.browseSectionResponseDoc": { + "shopapp.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", + "groups": { + "items": { + "$ref": "#/definitions/shopapp.SearchGroup" + }, + "type": "array" + }, + "limit": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.BrowseSectionResponse" + "products": { + "items": { + "$ref": "#/definitions/shopapp.ProductItem" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "query": { + "example": "sneakers", + "type": "string" } }, "type": "object" }, - "spotify.chartsResponseDoc": { + "shopapp.ShopCollection": { "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": "292518002767", + "type": "string" }, - "data": { - "$ref": "#/definitions/spotify.ChartResponse" + "slug": { + "example": "mens-dress-shoes", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "title": { + "example": "Mens Dress Shoes", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "spotify.countryHubContentResponseDoc": { + "shopapp.ShopDetail": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "banner": { + "type": "string" + }, + "collections": { + "items": { + "$ref": "#/definitions/shopapp.ShopCollection" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "handle": { + "example": "marcnolan", + "type": "string" + }, + "id": { + "example": "186720", + "type": "string" + }, + "logo": { + "type": "string" + }, + "name": { + "example": "Marc Nolan", + "type": "string" + }, + "rating": { + "example": 4.7, + "type": "number" + }, + "reviews_count": { + "example": 19699, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.CountryHubContentResponse" + "shopify_id": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "storefront": { + "type": "string" + }, + "url": { + "type": "string" + }, + "uuid": { + "type": "string" } }, "type": "object" }, - "spotify.countryHubResponseDoc": { + "shopapp.ShopLocationItem": { "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": { + "$ref": "#/definitions/shopapp.LocationAddress" }, - "data": { - "$ref": "#/definitions/spotify.CountryHubResponse" + "id": { + "example": "gid://shopify/Location/78620459087", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "latitude": { + "example": 40.7205232, + "type": "number" + }, + "longitude": { + "example": -73.9961032, + "type": "number" + }, + "name": { + "example": "NYC", + "type": "string" } }, "type": "object" }, - "spotify.episodeResponseDoc": { + "shopapp.ShopLocationsResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "limit": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.PodcastEpisodeResponse" + "locations": { + "items": { + "$ref": "#/definitions/shopapp.ShopLocationItem" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "next_cursor": { + "type": "string" + }, + "shop_handle": { + "example": "marcnolan", + "type": "string" + }, + "shop_id": { + "example": "186720", + "type": "string" + }, + "total_count": { + "example": 2, + "type": "integer" } }, "type": "object" }, - "spotify.homeResponseDoc": { + "shopapp.ShopProductsResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "collection": { + "$ref": "#/definitions/shopapp.ShopCollection" + }, + "collection_id": { + "example": "292518002767", + "type": "string" + }, + "limit": { + "example": 30, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.HomeResponse" + "next_cursor": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "products": { + "items": { + "$ref": "#/definitions/shopapp.ProductItem" + }, + "type": "array" + }, + "shop_handle": { + "example": "marcnolan", + "type": "string" + }, + "sort_by": { + "example": "MOST_SALES", + "type": "string" } }, "type": "object" }, - "spotify.playlistResponseDoc": { + "shopapp.ShopResponse": { "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" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "shop": { + "$ref": "#/definitions/shopapp.ShopDetail" } }, "type": "object" }, - "spotify.searchCatalogResponseDoc": { + "shopapp.ShopReviewsResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "limit": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.SearchResponse" + "next_cursor": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "reviews": { + "items": { + "$ref": "#/definitions/shopapp.ReviewItem" + }, + "type": "array" + }, + "shop_handle": { + "example": "marcnolan", + "type": "string" + }, + "shop_id": { + "example": "186720", + "type": "string" + }, + "total_count": { + "example": 15015, + "type": "integer" } }, "type": "object" }, - "spotify.searchResponseDoc": { + "shopapp.ShopSummary": { "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": 4, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.SearchPodcastsResponse" + "shop_id": { + "example": "3961166", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "shop_name": { + "example": "Start Fitness", + "type": "string" } }, "type": "object" }, - "spotify.showEpisodesResponseDoc": { + "shopapp.ShopTypeaheadItem": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "collection": { + "$ref": "#/definitions/shopapp.ShopCollection" + }, + "id": { + "example": "7438827651151", + "type": "string" + }, + "position": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.PodcastEpisodesResponse" + "product": { + "$ref": "#/definitions/shopapp.ProductItem" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "text": { + "example": "loafer", + "type": "string" + }, + "type": { + "example": "product", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "spotify.showRecommendationsResponseDoc": { + "shopapp.ShopTypeaheadResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "limit": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.ShowRecommendationsResponse" + "query": { + "example": "loafer", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "shop_handle": { + "example": "marcnolan", + "type": "string" + }, + "shop_id": { + "example": "186720", + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/shopapp.ShopTypeaheadItem" + }, + "type": "array" } }, "type": "object" }, - "spotify.showResponseDoc": { + "shopapp.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", + "limit": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.ShowMetadataResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "query": { + "example": "sneakers", + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/shopapp.SuggestionItem" + }, + "type": "array" } }, "type": "object" }, - "spotify.trackRecommendedResponseDoc": { + "shopapp.SuggestionItem": { "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" + "image": { + "type": "string" }, - "data": { - "$ref": "#/definitions/spotify.TrackRecommendedResponse" + "rating": { + "example": 4.79, + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "shop_handle": { + "example": "gr21z45he0", + "type": "string" + }, + "shop_id": { + "example": "365323", + "type": "string" + }, + "shop_name": { + "example": "Sneakers Plus", + "type": "string" + }, + "text": { + "example": "sneakers", + "type": "string" + }, + "type": { + "example": "query", + "type": "string" + }, + "url": { + "example": "https://shop.app/search/results?query=sneakers", + "type": "string" } }, "type": "object" }, - "spotify.trackResponseDoc": { + "shopapp.VariantItem": { "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_for_sale": { + "type": "boolean" + }, + "currency": { + "type": "string" + }, + "gid": { + "example": "gid://shopify/ProductVariant/34761278160941", + "type": "string" + }, + "id": { + "example": "34761278160941", + "type": "string" + }, + "image": { + "$ref": "#/definitions/shopapp.ImageItem" + }, + "options": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "original_price": { + "type": "number" + }, + "price": { + "type": "number" + }, + "requires_shipping": { + "type": "boolean" + }, + "title": { + "example": "Black / 7 / 6E", + "type": "string" + } + }, + "type": "object" + }, + "shopapp.VariantsResponse": { + "properties": { + "limit": { + "example": 50, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.TrackResponse" + "product_id": { + "example": "4596217053229", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "variants": { + "items": { + "$ref": "#/definitions/shopapp.VariantItem" + }, + "type": "array" } }, "type": "object" }, - "spotify.trackSimilarAlbumsResponseDoc": { + "shopapp.analysisResponseDoc": { "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/spotify.TrackSimilarAlbumsResponse" + "$ref": "#/definitions/shopapp.AnalysisResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "spotify.userProfileFollowersResponseDoc": { + "shopapp.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/spotify.UserProfileFollowersResponse" + "$ref": "#/definitions/shopapp.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "spotify.userProfilePlaylistsResponseDoc": { + "shopapp.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/spotify.UserProfilePlaylistsResponse" + "$ref": "#/definitions/shopapp.ProductDetailResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "spotify.userProfileResponseDoc": { + "shopapp.productShopResponseDoc": { "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/spotify.UserProfileResponse" + "$ref": "#/definitions/shopapp.ProductShopResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "standard.AuthorArticle": { + "shopapp.productVariantResponseDoc": { "properties": { - "section": { - "type": "string" - }, - "section_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.ProductVariantResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "standard.AuthorResponse": { + "shopapp.relatedResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/standard.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "twitter": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.RelatedResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "starbucks.Amenity": { + "shopapp.reviewsResponseDoc": { "properties": { "code": { - "type": "string" + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/shopapp.ReviewsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "starbucks.MenuCategory": { + "shopapp.searchResponseDoc": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/starbucks.MenuCategory" - }, - "type": "array" - }, - "display_order": { + "code": { + "example": 200, "type": "integer" }, - "hero_image_url": { - "type": "string" - }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.SearchResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" - }, - "products": { - "items": { - "$ref": "#/definitions/starbucks.MenuProduct" - }, - "type": "array" } }, "type": "object" }, - "starbucks.MenuProduct": { + "shopapp.shopLocationsResponseDoc": { "properties": { - "availability": { - "description": "Availability is \"Available\" on the unscoped menu; a store-scoped\nmenu also returns \"NotAvailableHere\" for items that store lacks.", - "type": "string" - }, - "default_size": { - "type": "string" - }, - "default_size_sku": { - "type": "string" - }, - "display_order": { + "code": { + "example": 200, "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.", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "menu_uri": { - "type": "string" - }, - "name": { - "type": "string" - }, - "product_detail_url": { - "type": "string" - }, - "product_number": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.ShopLocationsResponse" }, - "product_type": { - "description": "ProductType is Starbucks' own coarse classification: \"Beverage\",\n\"Food\", or \"Coffee\".", + "msg": { + "example": "OK", "type": "string" - }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "starbucks.MenuResponse": { + "shopapp.shopProductsResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/starbucks.MenuCategory" - }, - "type": "array" - }, - "category_count": { - "description": "CategoryCount counts top-level categories; ProductCount counts\ndistinct products anywhere in the tree.", + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.ShopProductsResponse" }, - "market": { + "msg": { + "example": "OK", "type": "string" - }, - "product_count": { + } + }, + "type": "object" + }, + "shopapp.shopResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.ShopResponse" }, - "store_number": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "starbucks.NearestStoreResponse": { + "shopapp.shopReviewsResponseDoc": { "properties": { - "distance_miles": { - "type": "number" - }, - "fetched_at": { - "type": "string" - }, - "found": { - "description": "Found is false when Starbucks reports no nearest store for the\npoint at all.", - "type": "boolean" - }, - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - }, - "market": { - "type": "string" - }, - "nearest_latitude": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "nearest_longitude": { - "type": "number" + "data": { + "$ref": "#/definitions/shopapp.ShopReviewsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "starbucks.Nutrition": { + "shopapp.shopTypeaheadResponseDoc": { "properties": { - "calories": { - "type": "string" - }, - "calories_from_fat": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "facts": { - "items": { - "$ref": "#/definitions/starbucks.NutritionFact" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shopapp.ShopTypeaheadResponse" }, - "serving_size": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "starbucks.NutritionFact": { + "shopapp.suggestionsResponseDoc": { "properties": { - "daily_percent_value": { - "type": "string" - }, - "name": { - "type": "string" - }, - "subfacts": { - "items": { - "$ref": "#/definitions/starbucks.NutritionFact" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "unit_of_measure": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.SuggestResponse" }, - "value": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "starbucks.NutritionModifier": { + "shopapp.variantsResponseDoc": { "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, + "code": { + "example": 200, "type": "integer" }, - "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" + "data": { + "$ref": "#/definitions/shopapp.VariantsResponse" }, - "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", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "starbucks.NutritionOption": { + "shopify.CollectionItem": { "properties": { - "form": { - "example": "hot", + "created_at": { "type": "string" }, - "market": { - "description": "Market selects which country site answers. Defaults to us.", - "example": "us", + "description": { "type": "string" }, - "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" + "handle": { + "example": "mens", + "type": "string" }, - "product_number": { - "description": "ProductNumber and Form identify the product. Only the four\ncombinations in dynamicNutritionProducts are supported upstream.", - "example": "406", + "id": { + "example": "278435758160", "type": "string" }, - "size_sku": { - "description": "SizeSKU is the sku of the size being built, from a /starbucks/product\nresult's sizes[].sku.", - "example": "93", + "products_count": { + "example": 24, + "type": "integer" + }, + "published_at": { + "type": "string" + }, + "title": { + "example": "Men", + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "example": "https://www.allbirds.com/collections/mens", "type": "string" } }, "type": "object" }, - "starbucks.NutritionResponse": { + "shopify.CollectionProductsResponse": { "properties": { - "fetched_at": { + "collection": { + "example": "mens", "type": "string" }, - "form": { - "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" }, - "market": { - "type": "string" + "facets_stats": { + "additionalProperties": { + "$ref": "#/definitions/shopify.FacetStat" + }, + "type": "object" }, - "modifiers": { + "filters": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + }, + "in_stock_only": { + "type": "boolean" + }, + "limit": { + "example": 50, + "type": "integer" + }, + "max_price": { + "type": "number" + }, + "min_price": { + "type": "number" + }, + "page": { + "example": 1, + "type": "integer" + }, + "product_type": { "items": { - "$ref": "#/definitions/starbucks.NutritionModifier" + "type": "string" }, "type": "array" }, - "product_number": { + "products": { + "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" }, - "size_sku": { + "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": { + "example": "https://www.allbirds.com", "type": "string" }, - "values": { - "items": { - "$ref": "#/definitions/starbucks.NutritionValue" - }, - "type": "array" - } - }, - "type": "object" - }, - "starbucks.NutritionValue": { - "properties": { - "key": { + "store_url": { + "example": "https://www.allbirds.com", "type": "string" }, - "name": { - "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" }, - "unit_of_measure": { - "type": "string" + "total_pages": { + "example": 4, + "type": "integer" }, - "value": { + "transport_mode": { + "enum": [ + "ssr_embedded", + "storefront_filtered" + ], + "example": "ssr_embedded", "type": "string" + }, + "variant_options": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" } }, "type": "object" }, - "starbucks.PickUpOption": { + "shopify.CollectionsResponse": { "properties": { - "available": { - "type": "boolean" + "collections": { + "items": { + "$ref": "#/definitions/shopify.CollectionItem" + }, + "type": "array" }, - "code": { + "limit": { + "example": 50, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { + "example": "https://www.allbirds.com", "type": "string" }, - "name": { + "store_url": { + "example": "https://www.allbirds.com", + "type": "string" + }, + "transport_mode": { + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "starbucks.ProductOptionGroup": { + "shopify.FacetStat": { "properties": { - "name": { - "type": "string" + "avg": { + "example": 56.46, + "type": "number" }, - "type": { - "type": "string" + "max": { + "example": 85, + "type": "number" + }, + "min": { + "example": 27, + "type": "number" } }, "type": "object" }, - "starbucks.ProductResponse": { + "shopify.ImageItem": { "properties": { - "description": { + "alt": { + "example": "Product image", "type": "string" }, - "fetched_at": { + "created_at": { "type": "string" }, - "form": { - "type": "string" + "height": { + "example": 1600, + "type": "integer" }, - "image_url": { + "id": { + "example": "36411373027408", "type": "string" }, - "in_catalog": { - "type": "boolean" + "position": { + "example": 1, + "type": "integer" }, - "market": { + "updated_at": { "type": "string" }, - "name": { + "url": { + "example": "https://cdn.shopify.com/s/files/1/example.jpg", "type": "string" }, - "options": { - "description": "Options are the customization choices Starbucks offers for this\nproduct, e.g. milk, syrups, espresso shots.", + "variant_ids": { "items": { - "$ref": "#/definitions/starbucks.ProductOptionGroup" + "type": "string" }, "type": "array" }, - "product_number": { + "width": { + "example": 1600, + "type": "integer" + } + }, + "type": "object" + }, + "shopify.OptionItem": { + "properties": { + "name": { + "example": "Size", "type": "string" }, - "product_type": { - "type": "string" + "position": { + "example": 1, + "type": "integer" }, - "sizes": { + "values": { "items": { - "$ref": "#/definitions/starbucks.ProductSize" + "type": "string" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "star_cost": { - "type": "integer" - }, - "store_number": { - "type": "string" } }, "type": "object" }, - "starbucks.ProductSize": { + "shopify.PageItem": { "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" + "content": { + "type": "string" }, - "display_name": { + "created_at": { "type": "string" }, - "nutrition": { - "$ref": "#/definitions/starbucks.Nutrition" + "handle": { + "example": "accessibility", + "type": "string" }, - "size_code": { + "id": { + "example": "54831906896", "type": "string" }, - "sku": { + "published_at": { + "type": "string" + }, + "title": { + "example": "Accessibility", + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "example": "https://www.allbirds.com/pages/accessibility", "type": "string" } }, "type": "object" }, - "starbucks.RecipeModifier": { + "shopify.PageResponse": { "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" + "page": { + "$ref": "#/definitions/shopify.PageItem" }, - "name": { + "source_url": { + "example": "https://www.allbirds.com", "type": "string" }, - "option_product_number": { - "description": "OptionProductNumber identifies the option in the product's own\noptions tree.", + "store_url": { + "example": "https://www.allbirds.com", "type": "string" }, - "sku": { - "description": "SKU is the value to send as a nutrition-calculate modifier sku.", + "transport_mode": { + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "starbucks.Store": { + "shopify.PagesResponse": { "properties": { - "address": { - "type": "string" + "limit": { + "example": 50, + "type": "integer" }, - "amenities": { - "description": "Amenities are the store's features, each with Starbucks' own code\nand its human-readable name.", + "page": { + "example": 1, + "type": "integer" + }, + "pages": { "items": { - "$ref": "#/definitions/starbucks.Amenity" + "$ref": "#/definitions/shopify.PageItem" }, "type": "array" }, - "city": { + "source_url": { + "example": "https://www.allbirds.com", "type": "string" }, - "country": { + "store_url": { + "example": "https://www.allbirds.com", "type": "string" }, - "distance_miles": { - "type": "number" - }, - "guest_ordering": { + "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" + }, + "shopify.ProductItem": { + "properties": { + "available": { "type": "boolean" }, - "hours_status": { + "canonical_colour": { + "example": "black", "type": "string" }, - "id": { - "type": "string" + "collection_tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "is_open_24_hours": { - "type": "boolean" + "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" }, - "latitude": { + "compare_at_price": { + "example": 120, "type": "number" }, - "longitude": { - "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" }, - "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.", + "created_at": { "type": "string" }, - "name": { + "description": { "type": "string" }, - "open": { - "type": "boolean" + "discount_percentage": { + "example": 20, + "type": "number" }, - "open_status": { + "featured_image": { "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é.", + "handle": { + "example": "mens-wool-runners", "type": "string" }, - "phone": { + "id": { + "example": "6616124981328", "type": "string" }, - "pick_up_options": { - "description": "PickUpOptions are the fulfillment modes the store supports, each\nwith its own live availability flag.", + "images": { "items": { - "$ref": "#/definitions/starbucks.PickUpOption" + "$ref": "#/definitions/shopify.ImageItem" }, "type": "array" }, - "postal_code": { - "type": "string" - }, - "schedule": { - "description": "Schedule is the store's weekly opening hours, Sunday-first as the\nupstream returns them.", + "labels": { + "example": [ + "new" + ], "items": { - "$ref": "#/definitions/starbucks.StoreDay" + "type": "string" }, "type": "array" }, - "state": { - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/shopify.OptionItem" + }, + "type": "array" }, - "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" + "price": { + "example": 98, + "type": "number" }, - "time_zone": { - "type": "string" - } - }, - "type": "object" - }, - "starbucks.StoreDay": { - "properties": { - "day_of_week": { + "product_type": { + "example": "Shoes", "type": "string" }, - "holiday": { + "published_at": { "type": "string" }, - "hours": { - "type": "string" + "rating": { + "example": 4.2, + "type": "number" }, - "open": { - "type": "boolean" - } - }, - "type": "object" - }, - "starbucks.StoreResponse": { - "properties": { - "count": { + "rating_count": { + "example": 1549, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "lng": { - "type": "number" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "market": { + "title": { + "example": "Men's Wool Runners", "type": "string" }, - "place": { + "updated_at": { "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": { + "url": { + "example": "https://www.allbirds.com/products/mens-wool-runners", "type": "string" }, - "stores": { + "variants": { "items": { - "$ref": "#/definitions/starbucks.Store" + "$ref": "#/definitions/shopify.VariantItem" }, "type": "array" - } - }, - "type": "object" - }, - "starbucks.menuResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/starbucks.MenuResponse" - }, - "msg": { - "example": "OK", + "vendor": { + "example": "Allbirds", "type": "string" } }, "type": "object" }, - "starbucks.nearestStoreResponseDoc": { + "shopify.ProductRecommendationsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/starbucks.NearestStoreResponse" + "handle": { + "example": "mens-wool-runners", + "type": "string" }, - "msg": { - "example": "OK", + "intent": { + "example": "related", "type": "string" - } - }, - "type": "object" - }, - "starbucks.nutritionResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/starbucks.NutritionResponse" + "limit": { + "example": 10, + "type": "integer" }, - "msg": { - "example": "OK", + "product_id": { + "example": "6616124981328", "type": "string" - } - }, - "type": "object" - }, - "starbucks.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/starbucks.ProductResponse" + "products": { + "items": { + "$ref": "#/definitions/shopify.ProductItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.allbirds.com", "type": "string" - } - }, - "type": "object" - }, - "starbucks.storesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/starbucks.StoreResponse" + "store_url": { + "example": "https://www.allbirds.com", + "type": "string" }, - "msg": { - "example": "OK", + "transport_mode": { + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "steam.AchievementsResponse": { + "shopify.ProductResponse": { "properties": { - "achievements": { - "items": { - "$ref": "#/definitions/steam.GlobalAchievement" - }, - "type": "array" + "product": { + "$ref": "#/definitions/shopify.ProductItem" }, - "appid": { + "source_url": { + "example": "https://www.allbirds.com", "type": "string" }, - "count": { - "type": "integer" + "store_url": { + "example": "https://www.allbirds.com", + "type": "string" }, - "source_url": { + "transport_mode": { + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "steam.AppDetails": { + "shopify.ProductsResponse": { "properties": { - "achievements_total": { - "type": "integer" - }, - "appid": { - "type": "integer" - }, - "background": { - "type": "string" - }, - "capsule_image": { - "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" }, - "categories": { - "items": { - "$ref": "#/definitions/steam.IDName" + "facets_stats": { + "additionalProperties": { + "$ref": "#/definitions/shopify.FacetStat" }, - "type": "array" + "type": "object" }, - "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" + "filters": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": "array" + "type": "object" }, - "controller_support": { - "type": "string" + "in_stock_only": { + "type": "boolean" }, - "developers": { + "limit": { + "example": 50, + "type": "integer" + }, + "max_price": { + "type": "number" + }, + "min_price": { + "type": "number" + }, + "page": { + "example": 1, + "type": "integer" + }, + "product_type": { "items": { "type": "string" }, "type": "array" }, - "dlc": { + "products": { "items": { - "type": "integer" + "$ref": "#/definitions/shopify.ProductItem" }, "type": "array" }, - "genres": { - "items": { - "$ref": "#/definitions/steam.IDName" - }, - "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" }, - "header_image": { + "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" }, - "is_free": { - "type": "boolean" + "source_url": { + "example": "https://www.allbirds.com", + "type": "string" }, - "metacritic": { - "$ref": "#/definitions/steam.Metacritic" + "store_url": { + "example": "https://www.allbirds.com", + "type": "string" }, - "movies": { + "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" }, - "name": { + "total_pages": { + "example": 4, + "type": "integer" + }, + "transport_mode": { + "enum": [ + "ssr_embedded", + "storefront_filtered" + ], + "example": "ssr_embedded", "type": "string" }, - "packages": { - "items": { - "type": "integer" + "variant_options": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": "array" + "type": "object" + } + }, + "type": "object" + }, + "shopify.ReviewDTO": { + "properties": { + "body": { + "example": "Excellent condition, fast shipping!", + "type": "string" }, - "platforms": { - "$ref": "#/definitions/steam.Platforms" + "created_at": { + "example": "2026-08-25T18:17:23.000Z", + "type": "string" }, - "price_overview": { - "$ref": "#/definitions/steam.Price" + "id": { + "example": "4a8567d4-b397-5ff5-b327-a8cbec368987", + "type": "string" }, - "publishers": { + "is_shop_review": { + "type": "boolean" + }, + "pictures": { "items": { "type": "string" }, "type": "array" }, - "recommendations": { - "type": "integer" + "product_title": { + "type": "string" }, - "release_date": { - "$ref": "#/definitions/steam.AppRelease" + "product_url": { + "type": "string" }, - "required_age": { + "rating": { + "example": 5, "type": "integer" }, - "screenshots": { - "type": "integer" + "reviewer_name": { + "example": "Mario Henao", + "type": "string" }, - "short_description": { + "title": { "type": "string" }, + "verified_buyer": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "shopify.ReviewsResponse": { + "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" }, - "supported_languages": { + "store_url": { + "example": "https://www.pristinemarketplace.com", "type": "string" }, - "type": { - "type": "string" + "total_count": { + "example": 88, + "type": "integer" }, - "website": { - "type": "string" + "total_pages": { + "example": 18, + "type": "integer" } }, "type": "object" }, - "steam.AppRelease": { + "shopify.SearchQueryItem": { "properties": { - "coming_soon": { - "type": "boolean" + "text": { + "example": "wool", + "type": "string" }, - "date": { + "url": { + "example": "https://www.allbirds.com/search?q=wool", "type": "string" } }, "type": "object" }, - "steam.CategoryBrowseResponse": { + "shopify.SearchResponse": { "properties": { - "count": { + "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" }, - "items": { + "page": { + "example": 1, + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/steam.CategoryItem" + "$ref": "#/definitions/shopify.ProductItem" }, "type": "array" }, - "slug": { + "query": { + "example": "chanel", + "type": "string" + }, + "sort": { + "example": "relevance", "type": "string" }, "source_url": { + "example": "https://www.fashionphile.com", "type": "string" }, - "start": { - "type": "integer" + "store_url": { + "example": "https://www.fashionphile.com", + "type": "string" }, - "tag_id": { + "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" }, - "tag_name": { + "vendor": { + "example": "Chanel", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "steam.CategoryItem": { + "shopify.SearchSuggestResponse": { "properties": { - "appid": { + "collections": { + "items": { + "$ref": "#/definitions/shopify.CollectionItem" + }, + "type": "array" + }, + "limit": { + "example": 10, "type": "integer" }, - "developers": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/shopify.ProductItem" }, "type": "array" }, - "name": { + "queries": { + "items": { + "$ref": "#/definitions/shopify.SearchQueryItem" + }, + "type": "array" + }, + "query": { + "example": "wool", "type": "string" }, - "platforms": { - "$ref": "#/definitions/steam.Platforms" + "source_url": { + "example": "https://www.allbirds.com", + "type": "string" }, - "price_overview": { - "$ref": "#/definitions/steam.Price" + "store_url": { + "example": "https://www.allbirds.com", + "type": "string" }, - "publishers": { + "types": { + "example": [ + "product", + "collection", + "query" + ], "items": { "type": "string" }, "type": "array" - }, - "release_date_unix": { + } + }, + "type": "object" + }, + "shopify.SiteSearchResponse": { + "properties": { + "limit": { + "example": 20, "type": "integer" }, - "review_count": { + "page": { + "example": 1, "type": "integer" }, - "review_percent_positive": { - "type": "integer" + "products": { + "items": { + "$ref": "#/definitions/shopify.ProductItem" + }, + "type": "array" }, - "review_summary": { + "query": { + "example": "jordan", "type": "string" }, - "short_description": { + "source_url": { "type": "string" }, - "tags": { - "items": { - "$ref": "#/definitions/steam.WeightedTag" - }, - "type": "array" + "store_url": { + "example": "https://www.pristinemarketplace.com", + "type": "string" }, - "type": { + "total_count": { + "example": 413, "type": "integer" }, - "url": { - "type": "string" + "total_pages": { + "example": 26, + "type": "integer" } }, "type": "object" }, - "steam.ChartRank": { + "shopify.SitemapImage": { "properties": { - "appid": { - "type": "integer" - }, - "concurrent_in_game": { - "type": "integer" - }, - "last_week_rank": { - "type": "integer" + "caption": { + "type": "string" }, - "name": { + "title": { + "example": "Men's Wool Runner", "type": "string" }, - "peak_in_game": { - "type": "integer" + "url": { + "example": "https://cdn.shopify.com/example.png", + "type": "string" + } + }, + "type": "object" + }, + "shopify.SitemapIndexResponse": { + "properties": { + "sitemaps": { + "items": { + "$ref": "#/definitions/shopify.SitemapItem" + }, + "type": "array" }, - "rank": { - "type": "integer" + "source_url": { + "example": "https://www.allbirds.com", + "type": "string" }, - "review_summary": { + "store_url": { + "example": "https://www.allbirds.com", "type": "string" } }, "type": "object" }, - "steam.ChartResponse": { + "shopify.SitemapItem": { "properties": { - "chart": { + "loc": { + "example": "https://www.allbirds.com/sitemap_products_1.xml", "type": "string" }, - "count": { - "type": "integer" + "type": { + "example": "products", + "type": "string" + } + }, + "type": "object" + }, + "shopify.SitemapURLItem": { + "properties": { + "changefreq": { + "example": "weekly", + "type": "string" }, - "enriched": { - "type": "boolean" + "handle": { + "example": "mens-wool-runners", + "type": "string" }, - "ranks": { + "images": { "items": { - "$ref": "#/definitions/steam.ChartRank" + "$ref": "#/definitions/shopify.SitemapImage" }, "type": "array" }, - "source_url": { + "lastmod": { + "example": "2026-03-19T11:41:39-07:00", "type": "string" }, - "updated_unix": { - "type": "integer" + "loc": { + "example": "https://www.allbirds.com/products/mens-wool-runners", + "type": "string" + }, + "type": { + "example": "products", + "type": "string" } }, "type": "object" }, - "steam.CommunityRecommendationsResponse": { + "shopify.SitemapURLsResponse": { "properties": { - "count": { + "limit": { + "example": 50, "type": "integer" }, - "review_filter": { + "source_url": { + "example": "https://www.allbirds.com", "type": "string" }, - "reviews": { + "store_url": { + "example": "https://www.allbirds.com", + "type": "string" + }, + "type": { + "example": "products", + "type": "string" + }, + "urls": { "items": { - "$ref": "#/definitions/steam.CommunityReview" + "$ref": "#/definitions/shopify.SitemapURLItem" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "steam.CommunityReview": { + "shopify.StoreResponse": { "properties": { - "appid": { + "city": { + "example": "San Francisco", "type": "string" }, - "author_name": { + "country": { + "example": "US", "type": "string" }, - "author_profile_url": { + "currency": { + "example": "USD", "type": "string" }, - "helpful": { + "description": { "type": "string" }, - "playtime": { + "domain": { + "example": "www.gymshark.com", "type": "string" }, - "recommendation_id": { + "myshopify_domain": { + "example": "gymsharkusa.myshopify.com", "type": "string" }, - "review_excerpt": { + "name": { + "example": "Allbirds", "type": "string" }, - "review_url": { + "province": { + "example": "CA", "type": "string" - } - }, - "type": "object" - }, - "steam.FeaturedBucket": { - "properties": { - "count": { + }, + "published_collections_count": { + "example": 42, "type": "integer" }, - "id": { + "published_products_count": { + "example": 638, + "type": "integer" + }, + "requested_url": { + "example": "https://www.gymshark.com", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" + "source_domain": { + "example": "gymsharkusa.myshopify.com", + "type": "string" }, - "name": { + "source_url": { + "example": "https://gymsharkusa.myshopify.com", + "type": "string" + }, + "transport_mode": { + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "steam.FeaturedCategoriesResponse": { + "shopify.VariantItem": { "properties": { - "coming_soon": { - "$ref": "#/definitions/steam.FeaturedBucket" - }, - "new_releases": { - "$ref": "#/definitions/steam.FeaturedBucket" + "available": { + "type": "boolean" }, - "source_url": { + "barcode": { "type": "string" }, - "specials": { - "$ref": "#/definitions/steam.FeaturedBucket" + "compare_at_price": { + "example": 120, + "type": "number" }, - "top_sellers": { - "$ref": "#/definitions/steam.FeaturedBucket" - } - }, - "type": "object" - }, - "steam.FeaturedItem": { - "properties": { - "currency": { + "created_at": { "type": "string" }, - "discount_percent": { + "featured_image": { + "type": "string" + }, + "grams": { + "example": 400, "type": "integer" }, - "discounted": { - "type": "boolean" + "id": { + "example": "34761278160941", + "type": "string" }, - "final_price": { + "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" }, - "header_image": { + "option1": { "type": "string" }, - "id": { + "option2": { + "type": "string" + }, + "option3": { + "type": "string" + }, + "position": { + "example": 1, "type": "integer" }, - "linux_available": { - "type": "boolean" + "price": { + "example": 98, + "type": "number" }, - "mac_available": { + "product_id": { + "example": "6616124981328", + "type": "string" + }, + "requires_shipping": { "type": "boolean" }, - "name": { + "sku": { + "example": "A123", "type": "string" }, - "original_price": { - "type": "integer" + "taxable": { + "type": "boolean" }, - "type": { - "type": "integer" + "title": { + "example": "Natural Black / 10", + "type": "string" }, - "windows_available": { - "type": "boolean" + "updated_at": { + "type": "string" } }, "type": "object" }, - "steam.FeaturedResponse": { + "shopify.collectionProductsResponseDoc": { "properties": { - "featured_linux": { - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" - }, - "featured_mac": { - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" - }, - "featured_win": { - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "large_capsules": { - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shopify.CollectionProductsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.GlobalAchievement": { + "shopify.collectionsResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "percent": { - "type": "number" + "data": { + "$ref": "#/definitions/shopify.CollectionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "steam.HistogramBucket": { + "shopify.pageResponseDoc": { "properties": { - "date": { + "code": { + "example": 200, "type": "integer" }, - "recommendations_down": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopify.PageResponse" }, - "recommendations_up": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "steam.IDName": { + "shopify.pagesResponseDoc": { "properties": { - "description": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "id": { + "data": { + "$ref": "#/definitions/shopify.PagesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.ItemsResponse": { + "shopify.productRecommendationsResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/steam.CategoryItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shopify.ProductRecommendationsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.Metacritic": { + "shopify.productResponseDoc": { "properties": { - "score": { + "code": { + "example": 200, "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/shopify.ProductResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.NewsItem": { + "shopify.productsResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "contents": { - "type": "string" - }, - "date": { + "code": { + "example": 200, "type": "integer" }, - "feedlabel": { - "type": "string" - }, - "feedname": { - "type": "string" - }, - "gid": { - "type": "string" - }, - "is_external_url": { - "type": "boolean" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.ProductsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.NewsResponse": { + "shopify.searchSuggestResponseDoc": { "properties": { - "appid": { - "type": "string" - }, - "count": { + "code": { + "example": 200, "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/steam.NewsItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shopify.SearchSuggestResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.PackageDetails": { + "shopify.sitemapIndexResponseDoc": { "properties": { - "apps": { - "items": { - "$ref": "#/definitions/steam.IDName" - }, - "type": "array" - }, - "header_image": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packageid": { + "code": { + "example": 200, "type": "integer" }, - "platforms": { - "$ref": "#/definitions/steam.Platforms" - }, - "price": { - "$ref": "#/definitions/steam.PackagePrice" - }, - "release_date": { - "$ref": "#/definitions/steam.AppRelease" + "data": { + "$ref": "#/definitions/shopify.SitemapIndexResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.PackagePrice": { + "shopify.sitemapURLsResponseDoc": { "properties": { - "currency": { - "type": "string" - }, - "discount_percent": { - "type": "integer" - }, - "final": { + "code": { + "example": 200, "type": "integer" }, - "individual": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopify.SitemapURLsResponse" }, - "initial": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "steam.Platforms": { + "shopify.storeResponseDoc": { "properties": { - "linux": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "mac": { - "type": "boolean" + "data": { + "$ref": "#/definitions/shopify.StoreResponse" }, - "windows": { - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "steam.PlayersResponse": { + "shopifybrands.collectionProductsResponseDoc": { "properties": { - "appid": { - "type": "string" - }, - "player_count": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { + "data": { + "$ref": "#/definitions/shopify.CollectionProductsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.Price": { + "shopifybrands.collectionsResponseDoc": { "properties": { - "currency": { - "type": "string" - }, - "discount_percent": { - "type": "integer" - }, - "final": { + "code": { + "example": 200, "type": "integer" }, - "final_formatted": { - "type": "string" - }, - "initial": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopify.CollectionsResponse" }, - "initial_formatted": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.Review": { + "shopifybrands.pageResponseDoc": { "properties": { - "author": { - "$ref": "#/definitions/steam.ReviewAuthor" - }, - "comment_count": { + "code": { + "example": 200, "type": "integer" }, - "language": { - "type": "string" - }, - "received_for_free": { - "type": "boolean" - }, - "recommendation_id": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.PageResponse" }, - "review": { + "msg": { + "example": "OK", "type": "string" - }, - "steam_purchase": { - "type": "boolean" - }, - "timestamp_created": { - "type": "integer" - }, - "timestamp_updated": { - "type": "integer" - }, - "voted_up": { - "type": "boolean" - }, - "votes_funny": { + } + }, + "type": "object" + }, + "shopifybrands.pagesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "votes_up": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopify.PagesResponse" }, - "weighted_vote_score": { + "msg": { + "example": "OK", "type": "string" - }, - "written_during_early_access": { - "type": "boolean" } }, "type": "object" }, - "steam.ReviewAuthor": { + "shopifybrands.productRecommendationsResponseDoc": { "properties": { - "last_played": { - "type": "integer" - }, - "num_games_owned": { - "type": "integer" - }, - "num_reviews": { - "type": "integer" - }, - "playtime_at_review": { - "type": "integer" - }, - "playtime_forever": { + "code": { + "example": 200, "type": "integer" }, - "playtime_last_two_weeks": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopify.ProductRecommendationsResponse" }, - "steamid": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.ReviewSummary": { + "shopifybrands.productResponseDoc": { "properties": { - "num_reviews": { + "code": { + "example": 200, "type": "integer" }, - "review_score": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopify.ProductResponse" }, - "review_score_desc": { + "msg": { + "example": "OK", "type": "string" - }, - "total_negative": { - "type": "integer" - }, - "total_positive": { - "type": "integer" - }, - "total_reviews": { - "type": "integer" } }, "type": "object" }, - "steam.ReviewsHistogramResponse": { + "shopifybrands.productsResponseDoc": { "properties": { - "appid": { - "type": "string" - }, - "count_all_reviews": { - "type": "integer" - }, - "end_date": { + "code": { + "example": 200, "type": "integer" }, - "recent": { - "items": { - "$ref": "#/definitions/steam.HistogramBucket" - }, - "type": "array" - }, - "rollup_type": { - "type": "string" - }, - "rollups": { - "items": { - "$ref": "#/definitions/steam.HistogramBucket" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shopify.ProductsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "start_date": { - "type": "integer" } }, "type": "object" }, - "steam.ReviewsResponse": { + "shopifybrands.reviewsResponseDoc": { "properties": { - "appid": { - "type": "string" - }, - "count": { + "code": { + "example": 200, "type": "integer" }, - "cursor": { - "type": "string" - }, - "query_summary": { - "$ref": "#/definitions/steam.ReviewSummary" - }, - "reviews": { - "items": { - "$ref": "#/definitions/steam.Review" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shopify.ReviewsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.SearchItem": { + "shopifybrands.searchResponseDoc": { "properties": { - "controller_support": { - "type": "string" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "metascore": { - "type": "string" - }, - "name": { - "type": "string" - }, - "platforms": { - "$ref": "#/definitions/steam.Platforms" - }, - "price": { - "$ref": "#/definitions/steam.Price" - }, - "streamingvideo": { - "type": "boolean" - }, - "tiny_image": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.SearchResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.SearchResponse": { + "shopifybrands.searchSuggestResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/steam.SearchItem" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.SearchSuggestResponse" }, - "term": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "steam.SearchResultRow": { + "shopifybrands.siteSearchResponseDoc": { "properties": { - "appid": { - "type": "string" - }, - "bundleid": { - "type": "string" - }, - "discount_pct": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.SiteSearchResponse" }, - "packageid": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "shopifybrands.sitemapIndexResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "platforms": { - "$ref": "#/definitions/steam.Platforms" + "data": { + "$ref": "#/definitions/shopify.SitemapIndexResponse" }, - "price": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "shopifybrands.sitemapURLsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "release_date": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.SitemapURLsResponse" }, - "review_summary": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "shopifybrands.storeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "tag_ids": { - "items": { - "type": "integer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shopify.StoreResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "steam.SearchResultsResponse": { + "similarweb.SearchResp": { "properties": { - "count": { - "type": "integer" + "apps": { + "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" }, - "results": { + "companies": { "items": { - "$ref": "#/definitions/steam.SearchResultRow" + "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" }, - "source_url": { - "type": "string" - }, - "start": { - "type": "integer" - }, - "term": { - "type": "string" - }, - "total": { - "type": "integer" + "websites": { + "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" } }, "type": "object" }, - "steam.SteamSpyResponse": { + "similarweb.SimilarWebResp": { "properties": { - "appid": { - "type": "integer" + "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" }, - "average_2weeks": { - "type": "integer" + "Category": { + "type": "string" }, - "average_forever": { - "type": "integer" + "CategoryRank": { + "properties": { + "Category": { + "type": "string" + }, + "Rank": { + "type": "string" + } + }, + "type": "object" }, - "ccu": { - "type": "integer" + "Competitors": { + "properties": { + "TopSimilarityCompetitors": { + "items": {}, + "type": "array" + } + }, + "type": "object" }, - "developer": { - "type": "string" + "Countries": { + "items": { + "properties": { + "Code": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "UrlCode": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" }, - "discount": { - "type": "string" + "CountryRank": { + "properties": { + "Country": { + "type": "integer" + }, + "CountryCode": { + "type": "string" + }, + "Rank": { + "type": "integer" + } + }, + "type": "object" }, - "genre": { + "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" }, - "initialprice": { + "Description": { "type": "string" }, - "languages": { - "type": "string" + "Engagments": { + "properties": { + "BounceRate": { + "type": "string" + }, + "Month": { + "type": "string" + }, + "PagePerVisit": { + "type": "string" + }, + "TimeOnSite": { + "type": "string" + }, + "Visits": { + "type": "string" + }, + "Year": { + "type": "string" + } + }, + "type": "object" }, - "median_2weeks": { - "type": "integer" + "EstimatedMonthlyVisits": { + "properties": { + "2024-09-01": { + "type": "integer" + }, + "2024-10-01": { + "type": "integer" + }, + "2024-11-01": { + "type": "integer" + } + }, + "type": "object" }, - "median_forever": { - "type": "integer" + "GlobalCategoryRank": {}, + "GlobalRank": { + "properties": { + "Rank": { + "type": "integer" + } + }, + "type": "object" }, - "name": { - "type": "string" + "IsDataFromGa": { + "type": "boolean" }, - "negative": { - "type": "integer" + "IsSmall": { + "type": "boolean" }, - "owners": { + "LargeScreenshot": { "type": "string" }, - "positive": { + "Notification": { + "properties": { + "Content": {} + }, + "type": "object" + }, + "Policy": { "type": "integer" }, - "price": { + "SiteName": { "type": "string" }, - "publisher": { + "SnapshotDate": { "type": "string" }, - "source": { + "Title": { "type": "string" }, - "source_url": { - "type": "string" + "TopCountryShares": { + "items": { + "properties": { + "Country": { + "type": "integer" + }, + "CountryCode": { + "type": "string" + }, + "Value": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" }, - "tags": { - "additionalProperties": { - "type": "integer" + "TopKeywords": { + "items": { + "properties": { + "Cpc": { + "type": "number" + }, + "EstimatedValue": { + "type": "number" + }, + "Name": { + "type": "string" + }, + "Volume": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "TrafficSources": { + "properties": { + "Direct": { + "type": "number" + }, + "Mail": { + "type": "number" + }, + "Paid Referrals": { + "type": "number" + }, + "Referrals": { + "type": "number" + }, + "Search": { + "type": "number" + }, + "Social": { + "type": "number" + } }, "type": "object" }, - "userscore": { + "Version": { "type": "integer" } }, "type": "object" }, - "steam.TagEntry": { + "similarweb.searchResponseDoc": { "properties": { - "name": { - "type": "string" - }, - "tagid": { + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/similarweb.SearchResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "steam.TagsListResponse": { + "similarweb.webResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "language": { - "type": "string" + "data": { + "$ref": "#/definitions/similarweb.SimilarWebResp" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "tags": { - "items": { - "$ref": "#/definitions/steam.TagEntry" - }, - "type": "array" } }, "type": "object" }, - "steam.TopReleasePage": { + "skynews.AuthorInfoItem": { "properties": { - "appids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "name": { + "label": { "type": "string" }, - "start_of_month_unix": { - "type": "integer" + "url": { + "type": "string" }, - "url_path": { + "value": { "type": "string" } }, "type": "object" }, - "steam.TopReleasesResponse": { + "skynews.AuthorResponse": { "properties": { - "count": { - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/skynews.HeadlineItem" + }, + "type": "array" }, - "pages": { + "biography": { "items": { - "$ref": "#/definitions/steam.TopReleasePage" + "type": "string" }, "type": "array" }, - "source_url": { + "info": { + "items": { + "$ref": "#/definitions/skynews.AuthorInfoItem" + }, + "type": "array" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "steam.TopSellerRank": { + "skynews.HeadlineItem": { "properties": { - "appid": { - "type": "integer" + "author": { + "type": "string" }, - "item": { - "$ref": "#/definitions/steam.CategoryItem" + "image_url": { + "type": "string" }, - "rank": { - "type": "integer" + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "steam.TopSellersResponse": { + "skynews.VideoResponse": { "properties": { - "count": { + "description": { + "type": "string" + }, + "duration_seconds": { "type": "integer" }, - "country_code": { + "embed_url": { "type": "string" }, - "ranks": { + "published_at": { + "type": "string" + }, + "thumbnail_urls": { "items": { - "$ref": "#/definitions/steam.TopSellerRank" + "type": "string" }, "type": "array" }, - "source_url": { + "title": { "type": "string" }, - "start_date_unix": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "steam.WeightedTag": { + "skynews.VideosResponse": { "properties": { - "tagid": { - "type": "integer" - }, - "weight": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/skynews.HeadlineItem" + }, + "type": "array" } }, "type": "object" }, - "steam.achievementsResponseDoc": { + "skysports.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/steam.AchievementsResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "steam.appResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.AppDetails" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "steam.categoryBrowseResponseDoc": { + "slate.ArticleResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/steam.CategoryBrowseResponse" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "steam.chartResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.ChartResponse" + "headings": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "steam.communityRecommendationsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.CommunityRecommendationsResponse" + "is_paywalled": { + "type": "boolean" }, - "msg": { - "example": "OK", + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "steam.featuredCategoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.FeaturedCategoriesResponse" + "section": { + "type": "string" }, - "msg": { - "example": "OK", + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { "type": "string" - } - }, - "type": "object" - }, - "steam.featuredResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.FeaturedResponse" + "updated_at": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "steam.histogramResponseDoc": { + "slate.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/steam.ReviewsHistogramResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/slate.Section" + }, + "type": "array" } }, "type": "object" }, - "steam.itemsResponseDoc": { + "slate.HeadlineItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "author": { + "type": "string" }, - "data": { - "$ref": "#/definitions/steam.ItemsResponse" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "id": { "type": "string" - } - }, - "type": "object" - }, - "steam.newsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.NewsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "steam.packageResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.PackageDetails" + "summary": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "steam.playersResponseDoc": { + "slate.HeadlinesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "feed_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/steam.PlayersResponse" + "items": { + "items": { + "$ref": "#/definitions/slate.HeadlineItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "section": { "type": "string" } }, "type": "object" }, - "steam.reviewsResponseDoc": { + "slate.Section": { "properties": { - "code": { - "example": 200, - "type": "integer" + "feed_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/steam.ReviewsResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "path": { "type": "string" - } - }, - "type": "object" - }, - "steam.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.SearchResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "steam.searchResultsResponseDoc": { + "slate.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.SearchResultsResponse" + "$ref": "#/definitions/slate.ArticleResponse" }, "msg": { "example": "OK", @@ -154710,14 +155040,14 @@ }, "type": "object" }, - "steam.steamspyResponseDoc": { + "slate.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.SteamSpyResponse" + "$ref": "#/definitions/slate.CategoriesResponse" }, "msg": { "example": "OK", @@ -154726,14 +155056,14 @@ }, "type": "object" }, - "steam.tagsListResponseDoc": { + "slate.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.TagsListResponse" + "$ref": "#/definitions/slate.HeadlinesResponse" }, "msg": { "example": "OK", @@ -154742,1382 +155072,1558 @@ }, "type": "object" }, - "steam.topReleasesResponseDoc": { + "slickdeals.CategoriesResponse": { "properties": { - "code": { - "example": 200, + "categories": { + "items": { + "$ref": "#/definitions/slickdeals.CategoryRef" + }, + "type": "array" + }, + "count": { + "example": 421, "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.TopReleasesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "steam.topSellersResponseDoc": { + "slickdeals.CategoryDeal": { "properties": { - "code": { - "example": 200, + "comment_count": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.TopSellersResponse" + "found_by": { + "example": "phoinix", + "type": "string" }, - "msg": { - "example": "OK", + "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" - } - }, - "type": "object" - }, - "stockx.AskServiceLevel": { - "properties": { - "count": { - "example": 1341, - "type": "integer" }, - "inventory_type": { - "example": "CUSTODIAL", + "posted_at": { + "example": "2026-08-28T14:21:36Z", "type": "string" }, - "lowest_ask": { - "example": 260, - "type": "integer" - } - }, - "type": "object" - }, - "stockx.Badge": { - "properties": { - "id": { - "example": "SELLING_FAST", + "price": { + "example": "$24.99", "type": "string" }, - "subtitle": { - "example": "This item sells fast.", + "store": { + "example": "Morningsave.com", "type": "string" }, + "thread_id": { + "example": 19842723, + "type": "integer" + }, "title": { - "example": "713 Sold in Last 3 Days!", + "example": "Hex Evolve Backpack Aspect Duffel Bag $24.99 Free Shipping", + "type": "string" + }, + "url": { "type": "string" + }, + "vote_score": { + "example": 9, + "type": "integer" } }, "type": "object" }, - "stockx.Brand": { + "slickdeals.CategoryRef": { "properties": { - "group": { - "example": "M-O", - "type": "string" - }, "name": { - "example": "Nike", + "example": "Laptop Bags", "type": "string" }, "slug": { - "example": "nike", + "example": "laptop-bag", + "type": "string" + }, + "url": { + "example": "https://slickdeals.net/deals/laptop-bag/", "type": "string" } }, "type": "object" }, - "stockx.BrandsResponse": { + "slickdeals.CategoryResponse": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/stockx.Brand" - }, - "type": "array" - }, - "total_count": { - "example": 396, + "count": { + "example": 37, "type": "integer" - } - }, - "type": "object" - }, - "stockx.CategoriesResponse": { - "properties": { - "categories": { + }, + "deals": { "items": { - "$ref": "#/definitions/stockx.Category" + "$ref": "#/definitions/slickdeals.CategoryDeal" }, "type": "array" - } - }, - "type": "object" - }, - "stockx.Category": { - "properties": { - "name": { - "example": "Shoes", + }, + "fetched_at": { "type": "string" }, "slug": { - "example": "shoes", + "example": "laptop-bag", "type": "string" }, - "subcategories": { - "items": { - "$ref": "#/definitions/stockx.Subcategory" - }, - "type": "array" + "source_url": { + "type": "string" } }, "type": "object" }, - "stockx.Listing": { + "slickdeals.Comment": { "properties": { - "condition": { - "example": "New - Other", - "type": "string" - }, - "condition_alias": { - "example": "new-other", - "type": "string" - }, - "condition_description": { - "example": "Replacement box", - "type": "string" - }, - "image_url": { + "author": { + "example": "OutFr0mUndr", "type": "string" }, - "price": { - "example": 250, + "author_post_count": { + "example": 49, "type": "integer" }, - "size": { - "example": "12", + "author_title": { + "example": "L2: Beginner", "type": "string" }, - "size_descriptor": { - "example": "Size", + "content": { + "example": "Shows as $358.53 for me...", "type": "string" - } - }, - "type": "object" - }, - "stockx.MarketData": { - "properties": { - "annual_average_price": { - "example": 253, - "type": "integer" - }, - "annual_sales_count": { - "example": 12394, - "type": "integer" - }, - "ask_service_levels": { - "additionalProperties": { - "$ref": "#/definitions/stockx.AskServiceLevel" - }, - "type": "object" }, - "highest_bid": { - "example": 315, - "type": "integer" + "content_html": { + "type": "string" }, - "last_90_days_average_price": { - "example": 253, + "funny_count": { "type": "integer" }, - "last_90_days_sales_count": { - "example": 12394, + "helpful_count": { "type": "integer" }, - "last_sale": { - "example": 271, + "like_count": { + "example": 1, "type": "integer" }, - "lowest_ask": { - "example": 260, + "not_helpful_count": { "type": "integer" }, - "number_of_asks": { - "example": 1341, - "type": "integer" + "permalink": { + "type": "string" }, - "number_of_bids": { - "example": 334, + "post_id": { + "example": 186692484, "type": "integer" }, - "sales_last_72_hours": { - "example": 713, - "type": "integer" + "posted_at": { + "example": "2026-09-14T19:17:54-07:00", + "type": "string" } }, "type": "object" }, - "stockx.ProductDetail": { + "slickdeals.CommentsResponse": { "properties": { - "badges": { + "comments": { "items": { - "$ref": "#/definitions/stockx.Badge" + "$ref": "#/definitions/slickdeals.Comment" }, "type": "array" }, - "brand": { - "example": "Jordan", - "type": "string" + "count": { + "example": 4, + "type": "integer" }, - "colorway": { - "example": "Black/University Blue/White", + "fetched_at": { "type": "string" }, - "description": { - "type": "string" + "has_more": { + "type": "boolean" }, - "gender": { - "example": "men", + "source_url": { "type": "string" }, - "id": { - "example": "019ac251-3a0d-7243-bb16-5128353be8bf", + "thread_id": { + "example": 20015817, + "type": "integer" + } + }, + "type": "object" + }, + "slickdeals.Deal": { + "properties": { + "brand": { + "example": "Microsoft", "type": "string" }, - "image_url": { + "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" }, - "listings": { + "category_paths": { + "example": [ + "Computers > Laptops", + "Computers" + ], "items": { - "$ref": "#/definitions/stockx.Listing" + "type": "string" }, "type": "array" }, - "market": { - "$ref": "#/definitions/stockx.MarketData" + "comment_count": { + "example": 4, + "type": "integer" }, - "model": { - "example": "Jordan 5 Retro", + "cta_text": { + "example": "Get Deal at eBay", "type": "string" }, - "primary_category": { - "example": "Air Jordan", + "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" }, - "primary_title": { - "example": "Jordan 5 Retro", + "description": { "type": "string" }, - "product_category": { - "example": "sneakers", + "description_html": { "type": "string" }, - "related_products": { - "items": { - "$ref": "#/definitions/stockx.ProductSummary" - }, - "type": "array" - }, - "release_date": { - "example": "2026-06-20", + "fetched_at": { "type": "string" }, - "retail_price": { - "example": "220", + "final_price": { + "example": "$358.53", "type": "string" }, - "secondary_title": { - "example": "Black University Blue (2026)", + "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" }, - "source_url": { - "example": "https://stockx.com/air-jordan-5-retro-black-university-blue-2026", - "type": "string" + "forum_id": { + "example": 9, + "type": "integer" }, - "style_id": { - "example": "DD0587-008", + "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" }, - "title": { - "example": "Jordan 5 Retro Black University Blue (2026)", - "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." }, - "traits": { + "image_urls": { "items": { - "$ref": "#/definitions/stockx.ProductTrait" + "type": "string" }, "type": "array" }, - "url_key": { - "example": "air-jordan-5-retro-black-university-blue-2026", - "type": "string" - } - }, - "type": "object" - }, - "stockx.ProductSummary": { - "properties": { - "brand": { - "example": "Jordan", - "type": "string" - }, - "gender": { - "example": "men", - "type": "string" - }, - "highest_bid": { - "example": 267, - "type": "integer" + "is_expired": { + "example": false, + "type": "boolean" }, - "id": { - "example": "9acafeb5-bc4a-4d66-bc3a-4899d2e64775", + "list_price": { + "example": "$1,200.00", "type": "string" }, - "image_url": { + "posted_at": { + "example": "2026-09-14T19:13:22-07:00", "type": "string" }, - "last_sale": { - "example": 176, - "type": "integer" - }, - "lowest_ask": { - "example": 173, - "type": "integer" + "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" }, - "model": { - "example": "Jordan 4 Retro", + "source_url": { "type": "string" }, - "product_category": { - "example": "sneakers", + "store": { + "example": "eBay", "type": "string" }, - "release_date": { - "example": "2026-08-05", + "sub_category": { + "example": "Laptops", "type": "string" }, - "title": { - "example": "Jordan 4 Retro Toro Bravo (2026)", - "type": "string" + "thread_id": { + "example": 20015817, + "type": "integer" }, - "url_key": { - "example": "air-jordan-4-retro-toro-bravo-2026", - "type": "string" - } - }, - "type": "object" - }, - "stockx.ProductTrait": { - "properties": { - "format": { - "example": "currency", + "title": { + "example": "Microsoft Surface Laptop 5 13.5\" 2.5GHz/16GB/256GB - Refurb w/Warranty $358.53", "type": "string" }, - "name": { - "example": "Style", + "url": { + "example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53", "type": "string" }, - "value": { - "example": "DD0587-008", - "type": "string" + "vote_score": { + "example": -1, + "type": "integer" } }, "type": "object" }, - "stockx.ReleaseCalendarResponse": { + "slickdeals.DealTypeRef": { "properties": { - "from": { - "example": "2026-08-04", - "type": "string" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "page": { - "example": 1, + "id": { + "example": 1774, "type": "integer" }, - "releases": { - "items": { - "$ref": "#/definitions/stockx.ProductSummary" - }, - "type": "array" - }, - "total_count": { - "example": 469, - "type": "integer" + "name": { + "example": "Free / Freebie", + "type": "string" } }, "type": "object" }, - "stockx.SearchResponse": { + "slickdeals.DealTypesResponse": { "properties": { - "category": { - "example": "sneakers", - "type": "string" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "page": { - "example": 1, + "count": { + "example": 10, "type": "integer" }, - "products": { + "deal_types": { "items": { - "$ref": "#/definitions/stockx.ProductSummary" + "$ref": "#/definitions/slickdeals.DealTypeRef" }, "type": "array" }, - "query": { - "example": "jordan 5", + "fetched_at": { "type": "string" }, - "sort": { - "example": "featured", + "source_url": { "type": "string" - }, - "total_count": { - "example": 1000, - "type": "integer" } }, "type": "object" }, - "stockx.Subcategory": { + "slickdeals.ForumRef": { "properties": { + "id": { + "example": 9, + "type": "integer" + }, "name": { - "example": "Boots", + "example": "Hot Deals", "type": "string" }, - "slug": { - "example": "boots", + "url": { + "example": "https://slickdeals.net/forums/forumdisplay.php?f=9", "type": "string" } }, "type": "object" }, - "stockx.brandsResponseDoc": { + "slickdeals.ForumsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 26, "type": "integer" }, - "data": { - "$ref": "#/definitions/stockx.BrandsResponse" - }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "stockx.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/stockx.CategoriesResponse" + "forums": { + "items": { + "$ref": "#/definitions/slickdeals.ForumRef" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "stockx.productResponseDoc": { + "slickdeals.FrontpageResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/stockx.ProductDetail" + "deals": { + "items": { + "$ref": "#/definitions/slickdeals.SearchAdvancedResult" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "stockx.releasesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/stockx.ReleaseCalendarResponse" + "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" }, - "msg": { - "example": "OK", + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "stockx.searchResponseDoc": { + "slickdeals.PrimaryCategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/slickdeals.CategoryRef" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/stockx.SearchResponse" + "count": { + "example": 13, + "type": "integer" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "straitstimes.AuthorResponse": { + "slickdeals.PrimaryCategoryResponse": { "properties": { - "articles": { + "count": { + "example": 40, + "type": "integer" + }, + "deals": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/slickdeals.CategoryDeal" }, "type": "array" }, - "email": { + "fetched_at": { "type": "string" }, - "name": { + "slug": { + "example": "laptop-deals", "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "strava.Challenge": { + "slickdeals.RelatedDeal": { "properties": { - "cover_image_url": { - "example": "https://dgalywyr863hv.cloudfront.net/challenges/6162/6162-cover.png", - "type": "string" + "comment_count": { + "type": "integer" }, - "dimension": { - "example": "avg_pace_min_distance", + "final_price": { + "example": "$22", "type": "string" }, - "duration": { - "example": "Aug 1, 2026 to Aug 31, 2026", + "found_by": { + "example": "iconian", "type": "string" }, - "goal": { - "example": 10000, - "type": "number" + "list_price": { + "example": "$37", + "type": "string" }, - "goal_description": { - "example": "Complete a 10 km (6.2 mi) run.", + "posted_at": { "type": "string" }, - "icon": { - "example": "run", + "source": { + "description": "Source names which sidebar this entry came from: \"popular\" or\n\"trending\".", + "example": "popular", "type": "string" }, - "id": { - "example": 6162, + "thread_id": { + "example": 20013396, "type": "integer" }, - "logo_image_url": { - "example": "https://dgalywyr863hv.cloudfront.net/challenges/6162/6162-logo.png", - "type": "string" - }, - "name": { - "example": "August 10K Challenge", + "title": { + "example": "20,000mAh BooKoo A9 2000A Car Battery Jumper w/ QC 3.0, PD 18W $22.20 + Free S/H", "type": "string" }, - "sponsored": { - "example": false, - "type": "boolean" - }, "url": { - "example": "https://www.strava.com/challenges/August-10K-challenge-2026", "type": "string" + }, + "vote_score": { + "example": 5, + "type": "integer" } }, "type": "object" }, - "strava.ChallengeSection": { + "slickdeals.SearchAdvancedResponse": { "properties": { - "category": { - "example": "run", - "type": "string" - }, - "challenges": { + "facets": { "items": { - "$ref": "#/definitions/strava.Challenge" + "$ref": "#/definitions/slickdeals.SearchFacetGroup" }, "type": "array" }, - "title": { - "example": "Run Challenges", - "type": "string" - } - }, - "type": "object" - }, - "strava.ChallengesResponse": { - "properties": { "fetched_at": { - "example": "2026-08-07T12:00:00Z", "type": "string" }, - "promoted_challenge": { - "$ref": "#/definitions/strava.Challenge" + "page": { + "example": 1, + "type": "integer" }, - "sections": { + "per_page": { + "example": 40, + "type": "integer" + }, + "query": { + "example": "laptop", + "type": "string" + }, + "result_count": { + "example": 915, + "type": "integer" + }, + "results": { "items": { - "$ref": "#/definitions/strava.ChallengeSection" + "$ref": "#/definitions/slickdeals.SearchAdvancedResult" }, "type": "array" }, "source_url": { - "example": "https://www.strava.com/challenges", "type": "string" + }, + "total_pages": { + "example": 23, + "type": "integer" } }, "type": "object" }, - "strava.ClubResponse": { + "slickdeals.SearchAdvancedResult": { "properties": { - "avatar_image_url": { - "example": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986503/2/large.jpg", - "type": "string" + "comment_count": { + "example": 4, + "type": "integer" }, - "country_code": { - "example": "us", - "type": "string" + "discount": { + "example": 26, + "type": "integer" }, - "cover_image_url": { - "example": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986498/3/large.jpg", + "final_price": { + "example": "$66", "type": "string" }, - "description": { - "example": "Founded in 2019 Women of OZ NWA is an inclusive, non-profit organization...", - "type": "string" + "forum_id": { + "example": 9, + "type": "integer" }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "found_by": { + "example": "htp182", "type": "string" }, - "id": { - "example": "521703", - "type": "string" + "has_rebate": { + "example": false, + "type": "boolean" }, - "location": { - "example": "Bentonville, Arkansas", + "image_url": { "type": "string" }, - "member_count": { - "example": 937, - "type": "integer" + "is_expired": { + "example": false, + "type": "boolean" }, - "name": { - "example": "Women of OZ NWA", - "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" }, - "private": { + "is_frontpage": { "example": true, "type": "boolean" }, - "source_url": { - "example": "https://www.strava.com/clubs/521703", - "type": "string" - }, - "url": { - "example": "https://www.strava.com/clubs/521703", - "type": "string" - }, - "verified": { + "is_new": { "example": false, "type": "boolean" - } - }, - "type": "object" - }, - "strava.RouteCard": { - "properties": { - "description": { - "example": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", - "type": "string" }, - "difficulty": { - "example": "Easy", - "type": "string" + "is_popular": { + "example": true, + "type": "boolean" }, - "distance_raw": { - "example": "1.46 mi", + "list_price": { + "example": "$90", "type": "string" }, - "elevation_gain_raw": { - "example": "345 ft", + "posted_at": { "type": "string" }, - "image_url": { - "example": "https://dgtzuqphqg23d.cloudfront.net/8UruePMrrrQMdHGsELroGsOsTMWqh030g7159PMSue4-768x576.jpg", + "store": { + "example": "Newegg", "type": "string" }, - "name": { - "example": "Mallory Cave via N.C.A.R. Trail", + "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" }, - "path": { - "example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "url": { "type": "string" }, - "rank": { - "example": 1, + "views_count": { + "example": 3274, "type": "integer" }, - "url": { - "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", - "type": "string" + "vote_score": { + "example": 20, + "type": "integer" } }, "type": "object" }, - "strava.RouteDetailResponse": { + "slickdeals.SearchFacetGroup": { "properties": { - "difficulty": { - "example": "Easy", + "label": { + "example": "Categories", "type": "string" }, - "distance_raw": { - "example": "1.46 mi", + "options": { + "items": { + "$ref": "#/definitions/slickdeals.SearchFacetOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "slickdeals.SearchFacetOption": { + "properties": { + "count": { + "example": 27, + "type": "integer" + }, + "label": { + "example": "Laptops", "type": "string" }, - "elevation_gain_raw": { - "example": "345 ft", + "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" }, - "estimated_time_raw": { - "example": "33:48", + "value": { + "example": "34", "type": "string" + } + }, + "type": "object" + }, + "slickdeals.SearchResponse": { + "properties": { + "count": { + "example": 25, + "type": "integer" }, "fetched_at": { - "example": "2026-08-07T12:00:00Z", "type": "string" }, - "name": { - "example": "Mallory Cave via N.C.A.R. Trail", + "query": { + "example": "laptop", "type": "string" }, - "path": { - "example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "results": { + "items": { + "$ref": "#/definitions/slickdeals.SearchResult" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "slickdeals.SearchResult": { + "properties": { + "found_by": { + "example": "BML6182", "type": "string" }, - "route_type": { - "example": "Hiking Trail", + "price": { + "example": "$358.53", "type": "string" }, - "source_url": { - "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "published_at": { + "example": "2026-09-15T02:13:22Z", "type": "string" }, - "summary": { - "example": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", + "store": { + "example": "ebay.com", + "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", "type": "string" }, "url": { - "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "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" }, - "strava.RoutesResponse": { + "slickdeals.UserProfile": { "properties": { - "country": { - "example": "usa", - "type": "string" - }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "avatar_url": { "type": "string" }, - "page": { - "example": 1, + "deals_posted": { + "example": 175, "type": "integer" }, - "region": { - "example": "colorado", + "join_date": { + "example": "Nov 2017", "type": "string" }, - "routes": { - "items": { - "$ref": "#/definitions/strava.RouteCard" - }, - "type": "array" + "reputation": { + "example": 685, + "type": "integer" }, - "source_url": { - "example": "https://www.strava.com/routes/hiking/usa/colorado?page=1", - "type": "string" + "total_comments": { + "example": 519, + "type": "integer" }, - "sport": { - "example": "hiking", - "type": "string" + "total_votes": { + "example": 728, + "type": "integer" }, - "title": { - "example": "The Best Hiking Trails in Colorado", + "user_id": { + "example": "13480663", "type": "string" - }, - "total_pages": { - "example": 16, + } + }, + "type": "object" + }, + "slickdeals.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" }, - "total_results": { - "example": 318, + "data": { + "$ref": "#/definitions/slickdeals.CategoriesResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "slickdeals.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/slickdeals.CategoryResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "strava.challengesResponseDoc": { + "slickdeals.commentsResponseDoc": { "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/strava.ChallengesResponse" + "$ref": "#/definitions/slickdeals.CommentsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "strava.clubResponseDoc": { + "slickdeals.dealResponseDoc": { "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/strava.ClubResponse" + "$ref": "#/definitions/slickdeals.Deal" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "strava.routeDetailResponseDoc": { + "slickdeals.dealTypesResponseDoc": { "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/strava.RouteDetailResponse" + "$ref": "#/definitions/slickdeals.DealTypesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "strava.routesResponseDoc": { + "slickdeals.forumsResponseDoc": { "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/strava.RoutesResponse" + "$ref": "#/definitions/slickdeals.ForumsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "stubhub.CarouselEvent": { + "slickdeals.frontpageResponseDoc": { "properties": { - "category_id": { - "example": 33253, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "day_of_week": { - "example": "Sat", - "type": "string" + "data": { + "$ref": "#/definitions/slickdeals.FrontpageResponse" }, - "event_id": { - "example": 161204289, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "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" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/slickdeals.PrimaryCategoriesResponse" }, - "is_date_confirmed": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "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" }, - "is_time_confirmed": { - "type": "boolean" + "data": { + "$ref": "#/definitions/slickdeals.PrimaryCategoryResponse" }, - "local_event_date": { - "example": "Mar 06 2027", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "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" }, - "local_event_time": { - "example": "7:30 PM", - "type": "string" + "data": { + "$ref": "#/definitions/slickdeals.SearchAdvancedResponse" }, - "location": { - "example": "Kai Tak, Kowloon City", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "slickdeals.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" }, - "min_price": { - "example": 99, - "type": "number" + "data": { + "$ref": "#/definitions/slickdeals.SearchResponse" }, - "name": { - "example": "BTS", + "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" }, "url": { "type": "string" - }, - "venue_name": { - "type": "string" } }, "type": "object" }, - "stubhub.CarouselPerson": { + "sloanreview.ArticleResponse": { "properties": { - "available_local_events": { - "example": 4, - "type": "integer" + "archive_timestamp": { + "type": "string" }, - "category_id": { - "example": 26202, - "type": "integer" + "archive_url": { + "type": "string" }, - "formatted_local_events_dates": { - "example": "Nov 27 - Dec 06", + "authors": { "type": "string" }, - "image_credit_name": { + "description": { "type": "string" }, - "image_url": { + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { "type": "string" }, - "name": { - "example": "The Weeknd", + "title": { "type": "string" }, "url": { "type": "string" + }, + "word_count": { + "type": "integer" } }, "type": "object" }, - "stubhub.CarouselResponse": { + "sloanreview.ArticlesResponse": { "properties": { - "alternative_performers": { - "items": { - "$ref": "#/definitions/stubhub.CarouselPerson" + "has_next": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/sloanreview.ArticleIndexItem" }, "type": "array" }, - "category_id": { + "page": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "lon": { - "type": "number" + "page_size": { + "type": "integer" }, - "max": { + "total": { "type": "integer" }, - "maybe_interested_in": { + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "sloanreview.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/stubhub.CarouselPerson" + "$ref": "#/definitions/sloanreview.Category" }, "type": "array" + } + }, + "type": "object" + }, + "sloanreview.Category": { + "properties": { + "name": { + "type": "string" }, - "performer_id": { - "type": "integer" - }, - "performer_slug": { + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "sloanreview.HeadlineItem": { + "properties": { + "authors": { "type": "string" }, - "recently_viewed": { - "items": { - "$ref": "#/definitions/stubhub.CarouselPerson" - }, - "type": "array" + "published_at": { + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "top_level_category_id": { - "type": "integer" + "topic": { + "type": "string" }, - "trending_events": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "sloanreview.HeadlinesResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/stubhub.CarouselEvent" + "$ref": "#/definitions/sloanreview.HeadlineItem" }, "type": "array" } }, "type": "object" }, - "stubhub.CategoriesResponse": { + "sloanreview.TopicResponse": { "properties": { - "categories": { + "items": { "items": { - "$ref": "#/definitions/stubhub.Category" + "$ref": "#/definitions/sloanreview.HeadlineItem" }, "type": "array" }, - "count": { - "example": 12, + "topic": { + "type": "string" + } + }, + "type": "object" + }, + "sloanreview.articleResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/sloanreview.ArticleResponse" }, - "from": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sloanreview.articlesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/sloanreview.ArticlesResponse" }, - "to": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "stubhub.Category": { + "sloanreview.categoriesResponseDoc": { "properties": { - "id": { - "example": 5084, + "code": { + "example": 200, "type": "integer" }, - "is_venue": { - "type": "boolean" - }, - "min_price": { - "example": 45, - "type": "number" + "data": { + "$ref": "#/definitions/sloanreview.CategoriesResponse" }, - "name": { - "example": "NFL", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sloanreview.headlinesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/sloanreview.HeadlinesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "stubhub.CategoryEvent": { + "sloanreview.topicResponseDoc": { "properties": { - "country": { - "example": "USA", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "date": { - "example": "Sep 15", - "type": "string" + "data": { + "$ref": "#/definitions/sloanreview.TopicResponse" }, - "day_of_week": { - "example": "Tue", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "smh.ArticleResponse": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "distance_miles": { - "example": "26 mi", + "description": { "type": "string" }, - "event_id": { - "example": 161280784, - "type": "integer" + "image_url": { + "type": "string" }, - "has_active_listings": { + "is_accessible_for_free": { "type": "boolean" }, - "is_date_confirmed": { + "is_truncated": { "type": "boolean" }, - "is_multiday_event": { - "type": "boolean" + "keywords": { + "items": { + "type": "string" + }, + "type": "array" }, - "is_parking_pass": { - "type": "boolean" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "is_time_confirmed": { + "paywalled": { "type": "boolean" }, - "name": { - "example": "ERRA", - "type": "string" - }, - "time": { - "example": "6:30 PM", + "published_at": { "type": "string" }, - "url": { + "section": { "type": "string" }, - "venue_city": { - "example": "Sayreville", + "title": { "type": "string" }, - "venue_name": { - "example": "Starland Ballroom", + "updated_at": { "type": "string" }, - "venue_state": { - "example": "NJ", + "url": { "type": "string" } }, "type": "object" }, - "stubhub.CategoryEventsResponse": { + "smh.AuthorResponse": { "properties": { - "category_id": { - "type": "integer" - }, - "count": { - "example": 20, - "type": "integer" - }, - "events": { + "articles": { "items": { - "$ref": "#/definitions/stubhub.CategoryEvent" + "$ref": "#/definitions/smh.HeadlineItem" }, "type": "array" }, - "fetched_at": { + "bio": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "email": { + "type": "string" }, - "page_size": { - "example": 20, - "type": "integer" + "image_url": { + "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "total_count": { - "example": 1588, - "type": "integer" + "social_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "stubhub.ExploreEvent": { + "smh.HeadlineItem": { "properties": { - "category_id": { - "example": 5084, - "type": "integer" + "author": { + "type": "string" }, - "date": { - "example": "Sep 15", + "image_url": { "type": "string" }, - "day_of_week": { - "example": "Tue", + "published_at": { "type": "string" }, - "event_id": { - "example": 161341819, - "type": "integer" + "summary": { + "type": "string" }, - "has_active_listings": { - "type": "boolean" + "title": { + "type": "string" }, - "image_url": { + "type": { "type": "string" }, - "is_date_confirmed": { - "type": "boolean" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventDetail": { + "properties": { + "attendance": { + "type": "integer" }, - "is_time_confirmed": { - "type": "boolean" + "away_score": { + "$ref": "#/definitions/sofascore.ScoreLine" }, - "location": { - "example": "Inglewood, CA, USA", - "type": "string" + "away_team": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "name": { - "example": "Taylor Swift", + "home_score": { + "$ref": "#/definitions/sofascore.ScoreLine" + }, + "home_team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "id": { + "example": 14025013, + "type": "integer" + }, + "referee": { + "$ref": "#/definitions/sofascore.Referee" + }, + "slug": { "type": "string" }, - "time": { - "example": "10:00 AM", + "start_time": { + "example": "2025-08-15T19:00:00Z", "type": "string" }, - "url": { + "start_timestamp": { + "type": "integer" + }, + "status": { + "$ref": "#/definitions/sofascore.EventStatus" + }, + "tournament": { + "$ref": "#/definitions/sofascore.TournamentRef" + }, + "venue": { + "$ref": "#/definitions/sofascore.Venue" + }, + "winner_code": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.EventH2HResponse": { + "properties": { + "event_id": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "venue_name": { - "example": "SoFi Stadium", + "manager_duel": { + "$ref": "#/definitions/sofascore.TeamDuel" + }, + "source_url": { "type": "string" + }, + "team_duel": { + "$ref": "#/definitions/sofascore.TeamDuel" } }, "type": "object" }, - "stubhub.ExploreResponse": { + "sofascore.EventIncidentsResponse": { "properties": { "count": { - "example": 20, "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/stubhub.ExploreEvent" - }, - "type": "array" + "event_id": { + "type": "integer" }, "fetched_at": { "type": "string" }, - "from": { + "incidents": { + "items": { + "$ref": "#/definitions/sofascore.Incident" + }, + "type": "array" + }, + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventLineupsResponse": { + "properties": { + "away": { + "$ref": "#/definitions/sofascore.TeamLineup" }, - "lat": { - "type": "number" + "confirmed": { + "type": "boolean" }, - "lon": { - "type": "number" + "event_id": { + "type": "integer" }, - "source_url": { + "fetched_at": { "type": "string" }, - "to": { + "home": { + "$ref": "#/definitions/sofascore.TeamLineup" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "stubhub.NavigationCategoriesResponse": { + "sofascore.EventOddsResponse": { "properties": { - "category_id": { - "example": 1, + "count": { "type": "integer" }, - "id": { - "example": 1, + "event_id": { "type": "integer" }, - "subcategories": { + "fetched_at": { + "type": "string" + }, + "markets": { "items": { - "$ref": "#/definitions/stubhub.NavigationCategory" + "$ref": "#/definitions/sofascore.OddsMarket" }, "type": "array" }, - "title": { - "example": "Theater", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventResponse": { + "properties": { + "event": { + "$ref": "#/definitions/sofascore.EventDetail" }, - "url": { - "example": "https://www.stubhub.com/theater-and-arts-tickets/category/174", + "fetched_at": { "type": "string" }, - "view_all_content": { - "example": "View More Theater", + "source_url": { "type": "string" } }, "type": "object" }, - "stubhub.NavigationCategory": { + "sofascore.EventStatisticsResponse": { "properties": { - "id": { - "example": 12585, + "event_id": { "type": "integer" }, - "subcategories": { + "fetched_at": { + "type": "string" + }, + "periods": { "items": { - "$ref": "#/definitions/stubhub.NavigationCategory" + "$ref": "#/definitions/sofascore.StatPeriod" }, "type": "array" }, - "title": { - "example": "Broadway Shows", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventStatus": { + "properties": { + "code": { + "type": "integer" }, - "url": { - "example": "https://www.stubhub.com/broadway-shows-tickets/category/138275421", + "description": { + "example": "Ended", "type": "string" }, - "view_all_content": { - "example": "View More Theater", + "type": { + "example": "finished", "type": "string" } }, "type": "object" }, - "stubhub.PerformerEvent": { + "sofascore.EventSummary": { "properties": { - "availability": { - "example": "http://schema.org/InStock", + "away_score": { + "$ref": "#/definitions/sofascore.ScoreLine" + }, + "away_team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "home_score": { + "$ref": "#/definitions/sofascore.ScoreLine" + }, + "home_team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "id": { + "example": 14025013, + "type": "integer" + }, + "slug": { "type": "string" }, - "low_price": { - "example": 71.87, - "type": "number" + "start_time": { + "example": "2025-08-15T19:00:00Z", + "type": "string" }, - "name": { - "example": "Indianapolis Colts at Kansas City Chiefs", + "start_timestamp": { + "type": "integer" + }, + "status": { + "$ref": "#/definitions/sofascore.EventStatus" + }, + "tournament": { + "$ref": "#/definitions/sofascore.TournamentRef" + }, + "winner_code": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.Incident": { + "properties": { + "added_time": { + "type": "integer" + }, + "away_score": { + "type": "integer" + }, + "card_color": { + "example": "yellow", "type": "string" }, - "price_currency": { - "example": "USD", + "home_score": { + "type": "integer" + }, + "is_home": { + "type": "boolean" + }, + "player": { "type": "string" }, - "start_date": { - "example": "2026-09-20T19:20:00", + "player_in": { "type": "string" }, - "url": { + "player_out": { "type": "string" }, - "venue_city": { - "example": "Kansas City", + "reason": { "type": "string" }, - "venue_country": { - "example": "USA", + "text": { + "example": "FT", "type": "string" }, - "venue_name": { - "example": "GEHA Field at Arrowhead Stadium", + "time": { + "type": "integer" + }, + "type": { + "example": "goal", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.LineupPlayer": { + "properties": { + "jersey_number": { "type": "string" }, - "venue_state": { - "example": "Missouri", + "player": { + "$ref": "#/definitions/sofascore.PlayerRef" + }, + "position": { "type": "string" + }, + "substitute": { + "type": "boolean" } }, "type": "object" }, - "stubhub.PerformerEventsResponse": { + "sofascore.LiveEventsResponse": { "properties": { "count": { "example": 10, @@ -156125,1120 +156631,1160 @@ }, "events": { "items": { - "$ref": "#/definitions/stubhub.PerformerEvent" + "$ref": "#/definitions/sofascore.EventSummary" }, "type": "array" }, "fetched_at": { "type": "string" }, - "performer_id": { - "type": "integer" - }, - "performer_slug": { + "source_url": { "type": "string" }, - "source_url": { + "sport": { + "example": "football", "type": "string" } }, "type": "object" }, - "stubhub.SearchGroup": { + "sofascore.OddsChoice": { "properties": { - "count": { - "example": 3, - "type": "integer" + "name": { + "example": "1", + "type": "string" }, - "entity": { - "example": 5, - "type": "integer" + "value": { + "example": "29/100", + "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/stubhub.SearchResult" - }, - "type": "array" + "winning": { + "type": "boolean" } }, "type": "object" }, - "stubhub.SearchResponse": { + "sofascore.OddsMarket": { "properties": { - "fetched_at": { - "type": "string" - }, - "groups": { + "choices": { "items": { - "$ref": "#/definitions/stubhub.SearchGroup" + "$ref": "#/definitions/sofascore.OddsChoice" }, "type": "array" }, - "more": { - "type": "boolean" + "group": { + "example": "1X2", + "type": "string" }, - "query": { - "example": "The Weeknd", + "name": { + "example": "Full time", "type": "string" }, - "source_url": { + "period": { + "example": "Full-time", "type": "string" }, - "special_char_only": { + "suspended": { "type": "boolean" } }, "type": "object" }, - "stubhub.SearchResult": { + "sofascore.PlayerDetail": { "properties": { - "category_image_url": { + "country": { "type": "string" }, - "entity_type": { - "example": 1, + "date_of_birth": { + "type": "string" + }, + "deceased": { + "type": "boolean" + }, + "height": { "type": "integer" }, - "icon_name": { - "example": "Concert", + "id": { + "type": "integer" + }, + "jersey_number": { "type": "string" }, - "id": { - "example": 26202, + "market_value": { "type": "integer" }, - "image_url": { + "market_value_currency": { "type": "string" }, - "subtitle": { - "example": "Concert Tickets", + "name": { "type": "string" }, - "title": { - "example": "The Weeknd", + "position": { "type": "string" }, - "url": { - "example": "https://www.stubhub.com/the-weeknd-tickets/performer/714235", + "preferred_foot": { "type": "string" + }, + "short_name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "stubhub.SuggestedSearch": { + "sofascore.PlayerRef": { "properties": { - "category_image_url": { + "country": { + "example": "Spain", "type": "string" }, "id": { - "example": 26202, + "example": 855833, "type": "integer" }, - "title": { - "example": "The Weeknd", + "name": { + "example": "Ferran Torres", "type": "string" }, - "top_level_category_id": { - "example": 3, - "type": "integer" + "position": { + "example": "F", + "type": "string" }, - "url": { - "example": "https://www.stubhub.com/the-weeknd-tickets/performer/714235", + "short_name": { + "example": "F. Torres", + "type": "string" + }, + "slug": { + "example": "ferran-torres", "type": "string" } }, "type": "object" }, - "stubhub.SuggestedSearchesResponse": { + "sofascore.PlayerResponse": { "properties": { - "count": { - "example": 10, - "type": "integer" - }, "fetched_at": { "type": "string" }, + "player": { + "$ref": "#/definitions/sofascore.PlayerDetail" + }, "source_url": { "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/stubhub.SuggestedSearch" - }, - "type": "array" } }, "type": "object" }, - "stubhub.TrendingEvent": { + "sofascore.Referee": { "properties": { - "category_id": { - "example": 4892, - "type": "integer" - }, - "date": { - "example": "Sep 19 2026", - "type": "string" - }, - "day_of_week": { - "example": "Sat", + "country": { + "example": "England", "type": "string" }, - "event_id": { - "example": 160790802, + "id": { "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": { - "type": "string" - }, - "venue_name": { + "example": "Anthony Taylor", "type": "string" } }, "type": "object" }, - "stubhub.TrendingEventsResponse": { + "sofascore.RoundEventsResponse": { "properties": { "count": { - "example": 20, "type": "integer" }, "events": { "items": { - "$ref": "#/definitions/stubhub.TrendingEvent" + "$ref": "#/definitions/sofascore.EventSummary" }, "type": "array" }, "fetched_at": { "type": "string" }, - "page": { - "example": 1, + "has_next_page": { + "type": "boolean" + }, + "round": { "type": "integer" }, - "page_size": { - "example": 20, + "season_id": { "type": "integer" }, "source_url": { "type": "string" }, - "top_level_category_id": { - "type": "integer" - }, - "total_count": { - "example": 200, + "tournament_id": { "type": "integer" } }, "type": "object" }, - "stubhub.TrendingPerformer": { + "sofascore.ScoreLine": { "properties": { - "event_dates_range": { - "example": "Sep 16 - May 29 2027", - "type": "string" - }, - "favorites_count": { - "example": 154655, + "current": { "type": "integer" }, - "id": { - "example": 20519, + "period1": { "type": "integer" }, - "image_url": { - "type": "string" - }, - "name": { - "example": "Bruno Mars", - "type": "string" - }, - "url": { - "type": "string" + "period2": { + "type": "integer" } }, "type": "object" }, - "stubhub.TrendingResponse": { + "sofascore.SearchResponse": { "properties": { "count": { - "example": 10, "type": "integer" }, "fetched_at": { "type": "string" }, - "performers": { + "query": { + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/stubhub.TrendingPerformer" + "$ref": "#/definitions/sofascore.SearchResult" }, "type": "array" }, "source_url": { "type": "string" - }, - "top_level_category_id": { - "type": "integer" } }, "type": "object" }, - "stubhub.VenueEvent": { + "sofascore.SearchResult": { "properties": { - "availability": { - "example": "http://schema.org/InStock", + "country": { "type": "string" }, - "low_price": { - "example": 71.87, - "type": "number" + "id": { + "type": "integer" }, "name": { - "example": "Indianapolis Colts at Kansas City Chiefs", "type": "string" }, - "price_currency": { - "example": "USD", + "slug": { "type": "string" }, - "start_date": { - "example": "2026-09-20T19:20:00", + "sport": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "stubhub.VenueEventsResponse": { - "properties": { - "count": { - "example": 11, + "team_id": { "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/stubhub.VenueEvent" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "team_name": { "type": "string" }, - "venue_id": { - "type": "integer" - }, - "venue_slug": { + "type": { + "example": "team", "type": "string" } }, "type": "object" }, - "stubhub.carouselResponseDoc": { + "sofascore.Season": { "properties": { - "code": { - "example": 200, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/stubhub.CarouselResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "year": { "type": "string" } }, "type": "object" }, - "stubhub.categoriesResponseDoc": { + "sofascore.SquadPlayer": { "properties": { - "code": { - "example": 200, + "country": { + "type": "string" + }, + "date_of_birth": { + "type": "string" + }, + "height": { "type": "integer" }, - "data": { - "$ref": "#/definitions/stubhub.CategoriesResponse" + "id": { + "type": "integer" }, - "msg": { - "example": "OK", + "jersey_number": { "type": "string" - } - }, - "type": "object" - }, - "stubhub.categoryEventsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "market_value": { "type": "integer" }, - "data": { - "$ref": "#/definitions/stubhub.CategoryEventsResponse" + "market_value_currency": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "position": { + "type": "string" + }, + "preferred_foot": { + "type": "string" + }, + "short_name": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "stubhub.exploreResponseDoc": { + "sofascore.StandingsGroup": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/stubhub.ExploreResponse" - }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "rows": { + "items": { + "$ref": "#/definitions/sofascore.StandingsRow" + }, + "type": "array" } }, "type": "object" }, - "stubhub.navigationCategoriesResponseDoc": { + "sofascore.StandingsResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "type": "string" + }, + "groups": { + "items": { + "$ref": "#/definitions/sofascore.StandingsGroup" + }, + "type": "array" + }, + "season_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/stubhub.NavigationCategoriesResponse" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "tournament_id": { + "type": "integer" + }, + "type": { + "example": "total", "type": "string" } }, "type": "object" }, - "stubhub.performerEventsResponseDoc": { + "sofascore.StandingsRow": { "properties": { - "code": { - "example": 200, + "draws": { "type": "integer" }, - "data": { - "$ref": "#/definitions/stubhub.PerformerEventsResponse" + "losses": { + "type": "integer" }, - "msg": { - "example": "OK", + "matches": { + "type": "integer" + }, + "points": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "promotion": { + "example": "Champions League", "type": "string" + }, + "scores_against": { + "type": "integer" + }, + "scores_for": { + "type": "integer" + }, + "team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "wins": { + "type": "integer" } }, "type": "object" }, - "stubhub.searchResponseDoc": { + "sofascore.StatGroup": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/stubhub.SearchResponse" + "items": { + "items": { + "$ref": "#/definitions/sofascore.StatItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "stubhub.suggestedSearchesResponseDoc": { + "sofascore.StatItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "away": { + "example": "39%", + "type": "string" }, - "data": { - "$ref": "#/definitions/stubhub.SuggestedSearchesResponse" + "home": { + "example": "61%", + "type": "string" }, - "msg": { - "example": "OK", + "key": { + "example": "ballPossession", + "type": "string" + }, + "name": { + "example": "Ball possession", "type": "string" } }, "type": "object" }, - "stubhub.trendingEventsResponseDoc": { + "sofascore.StatPeriod": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/stubhub.TrendingEventsResponse" + "groups": { + "items": { + "$ref": "#/definitions/sofascore.StatGroup" + }, + "type": "array" }, - "msg": { - "example": "OK", + "period": { + "example": "ALL", "type": "string" } }, "type": "object" }, - "stubhub.trendingResponseDoc": { + "sofascore.TeamDetail": { "properties": { - "code": { - "example": 200, + "country": { + "example": "Spain", + "type": "string" + }, + "id": { + "example": 2817, "type": "integer" }, - "data": { - "$ref": "#/definitions/stubhub.TrendingResponse" + "manager": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "FC Barcelona", "type": "string" - } - }, - "type": "object" - }, - "stubhub.venueEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/stubhub.VenueEventsResponse" + "national": { + "type": "boolean" }, - "msg": { - "example": "OK", + "primary_color": { "type": "string" - } - }, - "type": "object" - }, - "stuff.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/stuff.HeadlineItem" - }, - "type": "array" }, - "biography": { + "short_name": { + "example": "Barcelona", "type": "string" }, - "email": { + "slug": { + "example": "barcelona", "type": "string" }, - "image_url": { + "sport": { + "example": "Football", "type": "string" }, - "job_title": { - "type": "string" + "tournament_id": { + "type": "integer" }, - "location": { + "tournament_name": { "type": "string" }, - "name": { + "venue": { "type": "string" }, - "slug": { - "type": "string" + "venue_capacity": { + "type": "integer" }, - "url": { + "venue_city": { "type": "string" } }, "type": "object" }, - "stuff.HeadlineItem": { + "sofascore.TeamDuel": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" + "away_wins": { + "type": "integer" }, - "type": { - "type": "string" + "draws": { + "type": "integer" }, - "url": { - "type": "string" + "home_wins": { + "type": "integer" } }, "type": "object" }, - "substack.AppStorePlan": { + "sofascore.TeamEventsResponse": { "properties": { - "active": { - "type": "boolean" - }, - "amount_cents": { - "example": 1400, + "count": { "type": "integer" }, - "currency": { - "example": "usd", + "direction": { + "example": "next", "type": "string" }, - "display_name": { - "type": "string" + "events": { + "items": { + "$ref": "#/definitions/sofascore.EventSummary" + }, + "type": "array" }, - "display_price": { - "example": "$14", + "fetched_at": { "type": "string" }, - "is_founding": { + "has_next_page": { "type": "boolean" }, - "period": { - "example": "month", - "type": "string" + "page": { + "type": "integer" }, - "sku": { + "source_url": { "type": "string" + }, + "team_id": { + "type": "integer" } }, "type": "object" }, - "substack.CategoriesResult": { + "sofascore.TeamLineup": { "properties": { - "categories": { + "formation": { + "example": "4-3-3", + "type": "string" + }, + "players": { "items": { - "$ref": "#/definitions/substack.Category" + "$ref": "#/definitions/sofascore.LineupPlayer" }, "type": "array" } }, "type": "object" }, - "substack.Category": { + "sofascore.TeamPlayersResponse": { "properties": { - "emoji": { - "example": "🕹", - "type": "string" + "count": { + "type": "integer" }, - "id": { - "example": "4", + "fetched_at": { "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" + "players": { + "items": { + "$ref": "#/definitions/sofascore.SquadPlayer" + }, + "type": "array" }, - "name": { - "example": "Technology", + "source_url": { "type": "string" }, - "slug": { - "example": "technology", - "type": "string" + "team_id": { + "type": "integer" } }, "type": "object" }, - "substack.CategoryResult": { + "sofascore.TeamRef": { "properties": { - "category_id": { - "example": "4", + "country": { + "example": "Spain", "type": "string" }, - "has_more": { - "type": "boolean" - }, - "page": { + "id": { + "example": 2817, "type": "integer" }, - "publications": { - "items": { - "$ref": "#/definitions/substack.PublicationListItem" - }, - "type": "array" + "name": { + "example": "FC Barcelona", + "type": "string" }, - "type": { - "example": "paid", + "national": { + "type": "boolean" + }, + "short_name": { + "example": "Barcelona", + "type": "string" + }, + "slug": { + "example": "barcelona", "type": "string" } }, "type": "object" }, - "substack.Contributor": { + "sofascore.TeamResponse": { "properties": { - "bestseller_tier": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "bio": { + "source_url": { "type": "string" }, - "handle": { + "team": { + "$ref": "#/definitions/sofascore.TeamDetail" + } + }, + "type": "object" + }, + "sofascore.TournamentRef": { + "properties": { + "category": { + "example": "England", "type": "string" }, "id": { - "example": 29561926, "type": "integer" }, - "is_byline_only": { - "type": "boolean" - }, "name": { - "example": "Sergiu Klainerman", - "type": "string" - }, - "photo_url": { + "example": "Premier League", "type": "string" }, - "url": { + "slug": { + "example": "premier-league", "type": "string" - } - }, - "type": "object" - }, - "substack.ContributorsResult": { - "properties": { - "contributors": { - "items": { - "$ref": "#/definitions/substack.Contributor" - }, - "type": "array" }, - "page": { + "unique_tournament_id": { + "example": 17, "type": "integer" }, - "publication": { - "example": "www.thefp.com", + "unique_tournament_name": { + "example": "Premier League", "type": "string" } }, "type": "object" }, - "substack.ExploreModule": { + "sofascore.TournamentSeasonsResponse": { "properties": { - "category_id": { - "type": "string" + "count": { + "type": "integer" }, - "category_name": { + "fetched_at": { "type": "string" }, - "notes": { - "items": { - "$ref": "#/definitions/substack.Note" - }, - "type": "array" - }, - "posts": { - "items": { - "$ref": "#/definitions/substack.Post" - }, - "type": "array" - }, - "profiles": { - "items": { - "$ref": "#/definitions/substack.User" - }, - "type": "array" - }, - "publications": { + "seasons": { "items": { - "$ref": "#/definitions/substack.PublicationListItem" + "$ref": "#/definitions/sofascore.Season" }, "type": "array" }, - "title": { - "example": "Trending posts", + "source_url": { "type": "string" }, - "topics": { - "items": { - "$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" + "tournament_id": { + "type": "integer" } }, "type": "object" }, - "substack.ExploreResult": { + "sofascore.Venue": { "properties": { - "has_more": { - "type": "boolean" - }, - "modules": { - "items": { - "$ref": "#/definitions/substack.ExploreModule" - }, - "type": "array" + "capacity": { + "example": 61276, + "type": "integer" }, - "next_cursor": { + "city": { + "example": "Liverpool", "type": "string" }, - "tab": { - "example": "explore", + "country": { + "example": "England", "type": "string" }, - "type": { - "example": "base", + "name": { + "example": "Anfield", "type": "string" } }, "type": "object" }, - "substack.ExploreTopic": { + "sofascore.eventH2HResponseDoc": { "properties": { - "alternate_queries": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "category": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.EventH2HResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sofascore.eventIncidentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "featured": { - "type": "boolean" + "data": { + "$ref": "#/definitions/sofascore.EventIncidentsResponse" }, - "first_trending_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sofascore.eventLineupsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.EventLineupsResponse" }, - "query": { - "example": "Trump campaign rhetoric 2026", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sofascore.eventOddsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source": { - "example": "search_history", - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.EventOddsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.LeaderboardEntry": { + "sofascore.eventResponseDoc": { "properties": { - "author": { - "$ref": "#/definitions/substack.User" + "code": { + "example": 200, + "type": "integer" }, - "publication": { - "$ref": "#/definitions/substack.PublicationListItem" + "data": { + "$ref": "#/definitions/sofascore.EventResponse" }, - "rank": { - "example": 1, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "substack.LeaderboardResult": { + "sofascore.eventStatisticsResponseDoc": { "properties": { - "category_id": { - "example": "96", - "type": "string" - }, - "entries": { - "items": { - "$ref": "#/definitions/substack.LeaderboardEntry" - }, - "type": "array" - }, - "has_more": { - "type": "boolean" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "title": { - "example": "Culture Bestsellers", - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.EventStatisticsResponse" }, - "type": { - "example": "trending", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.Note": { + "sofascore.liveEventsResponseDoc": { "properties": { - "attached_post": { - "$ref": "#/definitions/substack.NotePost" - }, - "author_bestseller_tier": { + "code": { + "example": 200, "type": "integer" }, - "author_handle": { - "example": "jameelajamil", - "type": "string" - }, - "author_id": { - "example": 138271663, - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.LiveEventsResponse" }, - "author_name": { - "example": "Jameela Jamil", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sofascore.playerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "author_photo_url": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.PlayerResponse" }, - "author_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sofascore.roundEventsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "body": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.RoundEventsResponse" }, - "edited_at": { + "msg": { + "example": "OK", "type": "string" - }, - "id": { - "example": 316240438, + } + }, + "type": "object" + }, + "sofascore.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "is_ai_generated": { - "type": "boolean" - }, - "language": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.SearchResponse" }, - "published_at": { + "msg": { + "example": "OK", "type": "string" - }, - "reaction_count": { - "example": 12846, + } + }, + "type": "object" + }, + "sofascore.standingsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "reactions": { - "additionalProperties": { - "format": "int64", - "type": "integer" - }, - "type": "object" + "data": { + "$ref": "#/definitions/sofascore.StandingsResponse" }, - "reply_count": { - "example": 129, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.teamEventsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "restack_count": { - "example": 1139, - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.TeamEventsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.NotePost": { + "sofascore.teamPlayersResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.TeamPlayersResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.NoteRepliesResult": { + "sofascore.teamResponseDoc": { "properties": { - "has_more": { - "type": "boolean" - }, - "more_count": { - "description": "MoreCount is how many further reply branches the upstream reports.", + "code": { + "example": 200, "type": "integer" }, - "next_cursor": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.TeamResponse" }, - "note_id": { - "example": 316240438, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.tournamentSeasonsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "replies": { + "data": { + "$ref": "#/definitions/sofascore.TournamentSeasonsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "sonic.AvailabilityChannel": { + "properties": { + "days": { "items": { - "$ref": "#/definitions/substack.Note" + "$ref": "#/definitions/sonic.AvailabilityDay" }, "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", + "type": "string" } }, "type": "object" }, - "substack.NoteRestacksResult": { + "sonic.AvailabilityDay": { "properties": { - "has_more": { - "type": "boolean" + "count": { + "example": 96, + "type": "integer" }, - "next_cursor": { + "date": { + "example": "2026-09-05", "type": "string" }, - "note_id": { - "example": 316240438, - "type": "integer" - }, - "restacks": { + "slots": { "items": { - "$ref": "#/definitions/substack.Note" + "$ref": "#/definitions/sonic.AvailabilitySlot" }, "type": "array" } }, "type": "object" }, - "substack.NotesFeedResult": { + "sonic.AvailabilityResponse": { "properties": { - "has_more": { - "type": "boolean" + "channels": { + "items": { + "$ref": "#/definitions/sonic.AvailabilityChannel" + }, + "type": "array" }, - "next_cursor": { + "fetched_at": { "type": "string" }, - "notes": { + "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" + }, + "service_types": { + "description": "ServiceTypes is every channel the store supports, which is a\nsuperset of the channels that have slots in this response.", "items": { - "$ref": "#/definitions/substack.Note" + "type": "string" }, "type": "array" }, - "tab": { - "example": "for-you", + "slot_duration_minutes": { + "description": "SlotDurationMinutes is how long each window lasts.", + "example": 5, + "type": "integer" + }, + "source_url": { "type": "string" }, - "type": { - "example": "base", + "store_id": { + "example": "4521", + "type": "string" + }, + "timezone": { + "example": "America/Denver", "type": "string" + }, + "total_slots": { + "example": 288, + "type": "integer" } }, "type": "object" }, - "substack.NotesFeedTab": { + "sonic.AvailabilitySlot": { "properties": { - "id": { - "example": "for-you", - "type": "string" - }, - "name": { - "example": "For you", + "end_time": { + "example": "2026-09-05T16:50:00Z", "type": "string" }, - "type": { - "example": "base", + "start_time": { + "example": "2026-09-05T16:45:00Z", "type": "string" } }, "type": "object" }, - "substack.NotesFeedTabsResult": { + "sonic.CategoriesResponse": { "properties": { - "surface": { - "example": "feed", - "type": "string" - }, - "tabs": { + "categories": { "items": { - "$ref": "#/definitions/substack.NotesFeedTab" + "$ref": "#/definitions/sonic.Category" }, "type": "array" + }, + "count": { + "example": 20, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "substack.PlanCurrency": { + "sonic.Category": { "properties": { - "amount_cents": { - "example": 900, + "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" }, - "currency": { - "example": "eur", + "slug": { + "example": "tea-coffee", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "substack.Post": { + "sonic.Deal": { "properties": { - "audience": { - "example": "everyone", + "cta_text": { + "description": "CTAText is the call-to-action button label, e.g. \"Order Now\".", + "example": "Order Now", "type": "string" }, - "comment_count": { - "type": "integer" - }, - "cover_image_url": { + "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" }, "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" }, - "id": { - "example": 213613469, - "type": "integer" + "headline": { + "description": "Headline is the marketing headline shown on the card.", + "example": "BACON MAKES EVERYTHING BETTER", + "type": "string" }, - "paywalled": { - "type": "boolean" + "image_url": { + "description": "ImageURL is the promotion's full-resolution creative.", + "type": "string" }, - "published_at": { + "name": { + "description": "Name is the promotion's public name.", + "example": "$1.99 Jr Bacon Cheeseburger", "type": "string" }, - "reaction_count": { + "section": { + "description": "Section is the on-page grouping this deal appeared under, e.g.\n\"Featured Deals\".", + "example": "Featured Deals", + "type": "string" + }, + "terms": { + "description": "Terms is the promotion's legal/limitations text when published.", + "type": "string" + } + }, + "type": "object" + }, + "sonic.DealsResponse": { + "properties": { + "count": { + "example": 3, "type": "integer" }, - "slug": { + "deals": { + "items": { + "$ref": "#/definitions/sonic.Deal" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "subtitle": { + "heading": { + "example": "Featured Sonic Deals", "type": "string" }, - "title": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sonic.DeliveryProvider": { + "properties": { + "is_active": { + "type": "boolean" }, - "type": { - "example": "newsletter", + "name": { + "example": "DoorDash", "type": "string" }, "url": { @@ -157247,3938 +157793,3479 @@ }, "type": "object" }, - "substack.PostByline": { + "sonic.DirectoryCity": { "properties": { - "handle": { - "type": "string" - }, - "id": { - "example": 134996999, + "count": { + "example": 1, "type": "integer" }, "name": { - "example": "Max Kan", + "example": "Albertville", "type": "string" }, - "url": { + "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", "type": "string" } }, "type": "object" }, - "substack.PostDetail": { + "sonic.DirectoryCountry": { "properties": { - "audience": { - "example": "everyone", + "count": { + "example": 3364, + "type": "integer" + }, + "country_code": { + "example": "US", "type": "string" }, - "bylines": { + "country_name": { + "example": "United States", + "type": "string" + }, + "states": { "items": { - "$ref": "#/definitions/substack.PostByline" + "$ref": "#/definitions/sonic.DirectoryState" + }, + "type": "array" + } + }, + "type": "object" + }, + "sonic.DirectoryResponse": { + "properties": { + "countries": { + "items": { + "$ref": "#/definitions/sonic.DirectoryCountry" }, "type": "array" }, - "comment_count": { - "type": "integer" - }, - "cover_image_url": { + "fetched_at": { "type": "string" }, - "description": { + "source_url": { "type": "string" }, - "id": { - "example": 213613469, + "total_count": { + "example": 3364, "type": "integer" + } + }, + "type": "object" + }, + "sonic.DirectoryState": { + "properties": { + "cities": { + "items": { + "$ref": "#/definitions/sonic.DirectoryCity" + }, + "type": "array" }, - "paywalled": { - "type": "boolean" + "code": { + "example": "AL", + "type": "string" }, - "podcast_duration_seconds": { + "count": { + "example": 95, "type": "integer" }, - "podcast_url": { + "name": { + "example": "Alabama", "type": "string" - }, - "published_at": { + } + }, + "type": "object" + }, + "sonic.ItemResponse": { + "properties": { + "description": { + "example": "Local Favorite! Fluffy egg, melty cheese, and bacon between a toasted bagel.", "type": "string" }, - "reaction_count": { - "type": "integer" - }, - "slug": { + "fetched_at": { "type": "string" }, - "subtitle": { + "image_url": { "type": "string" }, - "title": { + "name": { + "example": "Bacon, Egg and Cheese Bagel", "type": "string" }, - "type": { - "example": "newsletter", + "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" }, - "url": { + "path": { "type": "string" }, - "wordcount": { - "example": 3953, - "type": "integer" + "source_url": { + "type": "string" } }, "type": "object" }, - "substack.PostsResult": { + "sonic.LocationEntry": { "properties": { - "limit": { - "type": "integer" + "address_slug": { + "example": "2540-dell-range-blvd", + "type": "string" }, - "offset": { - "type": "integer" + "city_slug": { + "example": "cheyenne", + "type": "string" }, - "posts": { - "items": { - "$ref": "#/definitions/substack.Post" - }, - "type": "array" + "country_code": { + "example": "US", + "type": "string" }, - "publication": { - "example": "semianalysis", + "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" }, - "search": { - "example": "nvidia", + "state_code": { + "example": "WY", "type": "string" }, - "sort": { - "example": "new", + "store_id": { + "example": "4521", "type": "string" } }, "type": "object" }, - "substack.Publication": { + "sonic.LocationSuggestResponse": { "properties": { - "author_id": { + "count": { + "example": 5, "type": "integer" }, - "copyright": { - "type": "string" - }, - "custom_domain": { + "country": { + "example": "US", "type": "string" }, - "explicit": { - "type": "boolean" - }, - "hero_text": { + "fetched_at": { "type": "string" }, - "id": { - "example": 6349492, + "limit": { + "example": 5, "type": "integer" }, - "invite_only": { - "type": "boolean" - }, - "language": { - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "name": { - "example": "SemiAnalysis", + "query": { + "example": "cheyenne wy", "type": "string" }, - "subdomain": { + "source_url": { "type": "string" }, - "subscribers": { - "$ref": "#/definitions/substack.SubscriberCounts" - }, - "subscription": { - "$ref": "#/definitions/substack.Subscription" - }, - "url": { - "example": "https://semianalysis.substack.com", - "type": "string" + "suggestions": { + "items": { + "$ref": "#/definitions/sonic.LocationSuggestion" + }, + "type": "array" } }, "type": "object" }, - "substack.PublicationListItem": { + "sonic.LocationSuggestion": { "properties": { - "author_handle": { + "city": { + "example": "Cheyenne", "type": "string" }, - "author_id": { - "type": "integer" - }, - "author_name": { - "example": "Dylan Patel", + "confidence": { + "description": "Confidence is the geocoder's own match confidence: \"exact\",\n\"interpolated\", or \"fallback\".", + "example": "exact", "type": "string" }, - "custom_domain": { + "country": { + "example": "United States", "type": "string" }, - "explicit": { - "type": "boolean" - }, - "hero_text": { + "country_code": { + "example": "US", "type": "string" }, - "id": { - "example": 6349492, - "type": "integer" - }, - "language": { + "county": { + "example": "Laramie", "type": "string" }, - "logo_url": { + "formatted_address": { + "example": "2540 Dell Range Blvd, Cheyenne, WY 82009 US", "type": "string" }, - "name": { - "example": "SemiAnalysis", + "label": { + "example": "2540 Dell Range Blvd", "type": "string" }, - "payments_enabled": { - "type": "boolean" + "latitude": { + "example": 41.160549, + "type": "number" }, - "subdomain": { - "example": "semianalysis", + "layer": { + "description": "Layer is the match's granularity: \"address\", \"locality\", \"state\",\n\"postalCode\", or \"place\".", + "example": "address", "type": "string" }, - "subscribers": { - "$ref": "#/definitions/substack.SubscriberCounts" + "longitude": { + "example": -104.777671, + "type": "number" }, - "subscription": { - "$ref": "#/definitions/substack.Subscription" + "number": { + "example": "2540", + "type": "string" }, - "url": { - "example": "https://semianalysis.substack.com", + "postal_code": { + "example": "82009", + "type": "string" + }, + "state": { + "example": "Wyoming", + "type": "string" + }, + "state_code": { + "example": "WY", + "type": "string" + }, + "street": { + "example": "Dell Range Blvd", "type": "string" } }, "type": "object" }, - "substack.RecommendationsResult": { + "sonic.LocationsResponse": { "properties": { - "publication_id": { - "example": 6349492, + "city": { + "example": "cheyenne", + "type": "string" + }, + "count": { + "example": 100, "type": "integer" }, - "recommendations": { + "fetched_at": { + "type": "string" + }, + "locations": { "items": { - "$ref": "#/definitions/substack.PublicationListItem" + "$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" }, - "substack.SearchResult": { + "sonic.MenuItem": { "properties": { - "focused_posts": { - "items": { - "$ref": "#/definitions/substack.Post" - }, - "type": "array" + "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" }, - "has_more": { - "type": "boolean" + "name": { + "example": "Bacon, Egg and Cheese Bagel", + "type": "string" + } + }, + "type": "object" + }, + "sonic.MenuResponse": { + "properties": { + "category": { + "example": "breakfast", + "type": "string" }, - "page": { + "count": { + "example": 24, "type": "integer" }, - "posts": { - "items": { - "$ref": "#/definitions/substack.Post" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "publications": { + "items": { "items": { - "$ref": "#/definitions/substack.PublicationListItem" + "$ref": "#/definitions/sonic.MenuItem" }, "type": "array" }, - "query": { - "example": "artificial intelligence", + "source_url": { "type": "string" } }, "type": "object" }, - "substack.SubscriberCounts": { + "sonic.NearbyResponse": { "properties": { - "follower_count": { - "example": 365727, + "fetched_at": { + "type": "string" + }, + "is_last_page": { + "type": "boolean" + }, + "latitude": { + "example": 35.4676, + "type": "number" + }, + "limit": { + "example": 10, "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" + "longitude": { + "example": -97.5164, + "type": "number" }, - "paid_rough_int": { - "example": 1000, + "page": { + "example": 0, "type": "integer" }, - "paid_tier": { - "example": 1000, + "radius_miles": { + "example": 25, "type": "integer" }, - "total": { - "example": 315000, + "returned_count": { + "example": 10, "type": "integer" }, - "total_display": { - "example": "315K+", + "source_url": { "type": "string" }, - "total_hidden": { - "type": "boolean" + "stores": { + "items": { + "$ref": "#/definitions/sonic.NearbyStore" + }, + "type": "array" }, - "total_rough": { - "example": "Hundreds of thousands of subscribers", - "type": "string" + "total_pages": { + "example": 2, + "type": "integer" + }, + "total_stores": { + "example": 17, + "type": "integer" } }, "type": "object" }, - "substack.Subscription": { + "sonic.NearbyStore": { "properties": { - "annual_disabled": { - "type": "boolean" + "address": { + "$ref": "#/definitions/sonic.StoreAddress" }, - "app_store_plans": { + "amenities": { "items": { - "$ref": "#/definitions/substack.AppStorePlan" + "type": "string" }, "type": "array" }, - "founding_benefits": { + "delivery_providers": { "items": { - "type": "string" + "$ref": "#/definitions/sonic.DeliveryProvider" }, "type": "array" }, - "founding_plan_name": { - "example": "Founding Member", + "display_name": { + "example": "2540 Dell Range Blvd, Cheyenne, WY", "type": "string" }, - "free_benefits": { + "distance_miles": { + "example": 3.45, + "type": "number" + }, + "has_drive_through": { + "type": "boolean" + }, + "hours": { "items": { - "type": "string" + "$ref": "#/definitions/sonic.StoreHours" }, "type": "array" }, - "free_trial_enabled": { + "is_delivery_enabled": { "type": "boolean" }, - "group_discount_percent": { - "example": 20, + "is_digitally_enabled": { + "type": "boolean" + }, + "latitude": { + "example": 41.160531, "type": "number" }, - "monthly_disabled": { - "type": "boolean" + "longitude": { + "example": -104.777659, + "type": "number" }, - "paid_benefits": { + "phone": { + "example": "307-632-9188", + "type": "string" + }, + "service_hours": { "items": { - "type": "string" + "$ref": "#/definitions/sonic.StoreServiceHours" }, "type": "array" }, - "payments_state": { - "example": "enabled", + "status": { + "example": "OPEN", "type": "string" }, - "plans": { - "items": { - "$ref": "#/definitions/substack.SubscriptionPlan" - }, - "type": "array" + "store_id": { + "example": "4521", + "type": "string" }, - "pledges_enabled": { - "type": "boolean" + "timezone": { + "example": "America/Denver", + "type": "string" } }, "type": "object" }, - "substack.SubscriptionPlan": { + "sonic.NutritionDocument": { "properties": { - "active": { - "type": "boolean" + "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" }, - "amount_cents": { - "example": 5000, + "content_type": { + "description": "ContentType is the document's MIME type, in practice\n\"application/pdf\".", + "example": "application/pdf", + "type": "string" + }, + "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" }, - "currencies": { + "title": { + "example": "61131-13 SUM26 NAT WOP-English FA cp WCAG", + "type": "string" + }, + "updated_at": { + "description": "UpdatedAt is when Sonic last republished the file.", + "example": "2026-06-30T16:45:09.549Z", + "type": "string" + }, + "url": { + "example": "https://downloads.ctfassets.net/.../nutrition-guide.pdf", + "type": "string" + } + }, + "type": "object" + }, + "sonic.NutritionDocumentsResponse": { + "properties": { + "count": { + "example": 5, + "type": "integer" + }, + "documents": { "items": { - "$ref": "#/definitions/substack.PlanCurrency" + "$ref": "#/definitions/sonic.NutritionDocument" }, "type": "array" }, - "currency": { - "example": "usd", + "fetched_at": { "type": "string" }, - "id": { - "example": "monthly50usd_982ddb86", + "heading": { + "example": "Sonic Nutrition & Allergen Information", "type": "string" }, - "interval": { - "example": "month", + "source_url": { "type": "string" - }, - "interval_count": { - "example": 1, - "type": "integer" - }, + } + }, + "type": "object" + }, + "sonic.SitemapEntry": { + "properties": { "kind": { - "example": "monthly", + "description": "Kind classifies the page -- see SitemapOption.Kind's enum per section.", + "example": "item", "type": "string" }, - "nickname": { - "example": "$50 a month", + "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" }, - "trial_period_days": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "substack.User": { + "sonic.SitemapResponse": { "properties": { - "bestseller_tier": { - "example": 10000, + "count": { + "example": 100, "type": "integer" }, - "bio": { - "type": "string" + "entries": { + "items": { + "$ref": "#/definitions/sonic.SitemapEntry" + }, + "type": "array" }, - "handle": { - "example": "pragmaticengineer", + "fetched_at": { "type": "string" }, - "id": { - "example": 2067309, + "page": { + "example": 1, "type": "integer" }, - "name": { - "example": "Gergely Orosz", + "section": { + "example": "menu", "type": "string" }, - "photo_url": { + "source_url": { "type": "string" }, - "profile_set_up_at": { + "total": { + "example": 298, + "type": "integer" + }, + "total_pages": { + "example": 3, + "type": "integer" + } + }, + "type": "object" + }, + "sonic.StoreAddress": { + "properties": { + "city": { + "example": "Cheyenne", "type": "string" }, - "publications": { - "items": { - "$ref": "#/definitions/substack.UserPublication" - }, - "type": "array" + "country": { + "example": "US", + "type": "string" }, - "slug": { + "line1": { + "example": "2540 Dell Range Blvd", "type": "string" }, - "subscribers": { - "$ref": "#/definitions/substack.SubscriberCounts" + "line2": { + "type": "string" }, - "subscriptions": { - "items": { - "$ref": "#/definitions/substack.UserSubscription" - }, - "type": "array" + "postal_code": { + "example": "82009", + "type": "string" }, - "url": { - "example": "https://substack.com/@pragmaticengineer", + "state": { + "example": "WY", "type": "string" } }, "type": "object" }, - "substack.UserActivityItem": { + "sonic.StoreHours": { "properties": { - "kind": { - "example": "comment_restack", + "closes": { + "example": "21:45", "type": "string" }, - "note": { - "$ref": "#/definitions/substack.Note" + "day_of_week": { + "example": "MONDAY", + "type": "string" }, - "post": { - "$ref": "#/definitions/substack.Post" + "is_24_hour": { + "type": "boolean" }, - "timestamp": { + "opens": { + "example": "07:00", "type": "string" } }, "type": "object" }, - "substack.UserActivityResult": { + "sonic.StoreResponse": { "properties": { - "has_more": { - "type": "boolean" + "address": { + "$ref": "#/definitions/sonic.StoreAddress" }, - "items": { + "amenities": { "items": { - "$ref": "#/definitions/substack.UserActivityItem" + "type": "string" }, "type": "array" }, - "next_cursor": { - "type": "string" - }, - "types": { + "delivery_providers": { "items": { - "type": "string" + "$ref": "#/definitions/sonic.DeliveryProvider" }, "type": "array" }, - "user_id": { - "example": 49731969, - "type": "integer" - } - }, - "type": "object" - }, - "substack.UserConnectionsResult": { - "properties": { - "list": { - "example": "followers", + "display_name": { + "example": "2540 Dell Range Blvd, Cheyenne, WY", "type": "string" }, - "name": { - "example": "Followers", + "fetched_at": { "type": "string" }, - "user_id": { - "example": 49731969, - "type": "integer" + "has_drive_through": { + "type": "boolean" }, - "users": { + "hours": { "items": { - "$ref": "#/definitions/substack.User" + "$ref": "#/definitions/sonic.StoreHours" }, "type": "array" - } - }, - "type": "object" - }, - "substack.UserPublication": { - "properties": { - "custom_domain": { - "type": "string" }, - "id": { - "example": 458709, - "type": "integer" + "is_delivery_enabled": { + "type": "boolean" }, - "is_primary": { + "is_digitally_enabled": { "type": "boolean" }, - "name": { - "example": "The Pragmatic Engineer", + "latitude": { + "example": 41.160531, + "type": "number" + }, + "longitude": { + "example": -104.777659, + "type": "number" + }, + "path": { "type": "string" }, - "role": { - "example": "admin", + "phone": { + "example": "307-632-9188", "type": "string" }, - "subdomain": { + "service_hours": { + "items": { + "$ref": "#/definitions/sonic.StoreServiceHours" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "url": { + "status": { + "example": "OPEN", + "type": "string" + }, + "store_id": { + "example": "4521", + "type": "string" + }, + "timezone": { + "example": "America/Denver", "type": "string" } }, "type": "object" }, - "substack.UserSearchResult": { + "sonic.StoreServiceHours": { "properties": { - "has_more": { + "hours": { + "items": { + "$ref": "#/definitions/sonic.StoreHours" + }, + "type": "array" + }, + "is_fulfillment": { "type": "boolean" }, - "page": { - "type": "integer" + "is_tipping_enabled": { + "type": "boolean" }, - "query": { - "example": "pragmatic engineer", + "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" - }, - "users": { - "items": { - "$ref": "#/definitions/substack.User" - }, - "type": "array" } }, "type": "object" }, - "substack.UserSubscription": { + "sonic.availabilityResponseDoc": { "properties": { - "is_founding": { - "type": "boolean" - }, - "membership_state": { - "example": "free_signup", - "type": "string" - }, - "publication_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" }, - "publication_name": { - "type": "string" + "data": { + "$ref": "#/definitions/sonic.AvailabilityResponse" }, - "subdomain": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.categoriesResponseDoc": { + "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/substack.CategoriesResult" + "$ref": "#/definitions/sonic.CategoriesResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.categoryResponseDoc": { + "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/substack.CategoryResult" + "$ref": "#/definitions/sonic.DealsResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.contributorsResponseDoc": { + "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/substack.ContributorsResult" + "$ref": "#/definitions/sonic.DirectoryResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.exploreResponseDoc": { + "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/substack.ExploreResult" + "$ref": "#/definitions/sonic.ItemResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.leaderboardResponseDoc": { + "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/substack.LeaderboardResult" + "$ref": "#/definitions/sonic.LocationSuggestResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.noteRepliesResponseDoc": { + "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/substack.NoteRepliesResult" + "$ref": "#/definitions/sonic.LocationsResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.noteResponseDoc": { + "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/substack.Note" + "$ref": "#/definitions/sonic.MenuResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.noteRestacksResponseDoc": { + "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/substack.NoteRestacksResult" + "$ref": "#/definitions/sonic.NearbyResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.notesFeedResponseDoc": { + "sonic.nutritionDocumentsResponseDoc": { "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/substack.NotesFeedResult" + "$ref": "#/definitions/sonic.NutritionDocumentsResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.notesFeedTabsResponseDoc": { + "sonic.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/substack.NotesFeedTabsResult" + "$ref": "#/definitions/sonic.SitemapResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.postResponseDoc": { + "sonic.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/substack.PostDetail" + "$ref": "#/definitions/sonic.StoreResponse" }, "msg": { - "example": "success", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "substack.postsResponseDoc": { + "soundcloud.Playlist": { "properties": { - "code": { - "example": 200, + "artwork_url": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "description": { + "type": "string" + }, + "genre": { + "type": "string" + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/substack.PostsResult" + "is_album": { + "type": "boolean" }, - "msg": { - "example": "success", + "likes_count": { + "example": 1024, + "type": "integer" + }, + "owner": { + "$ref": "#/definitions/soundcloud.Uploader" + }, + "permalink_url": { + "type": "string" + }, + "public": { + "example": true, + "type": "boolean" + }, + "reposts_count": { + "type": "integer" + }, + "tag_list": { + "type": "string" + }, + "title": { "type": "string" + }, + "track_count": { + "example": 416, + "type": "integer" + }, + "tracks": { + "items": { + "$ref": "#/definitions/soundcloud.Track" + }, + "type": "array" } }, "type": "object" }, - "substack.publicationResponseDoc": { + "soundcloud.Profile": { "properties": { - "code": { - "example": 200, + "avatar_url": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country_code": { + "example": "US", + "type": "string" + }, + "description": { + "type": "string" + }, + "followers_count": { + "example": 255531, "type": "integer" }, - "data": { - "$ref": "#/definitions/substack.Publication" + "followings_count": { + "example": 634, + "type": "integer" }, - "msg": { - "example": "success", + "full_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "likes_count": { + "example": 1032, + "type": "integer" + }, + "permalink": { + "type": "string" + }, + "permalink_url": { + "type": "string" + }, + "playlist_count": { + "example": 27, + "type": "integer" + }, + "track_count": { + "example": 712, + "type": "integer" + }, + "username": { "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "substack.recommendationsResponseDoc": { + "soundcloud.SearchResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/substack.RecommendationsResult" + "query": { + "type": "string" }, - "msg": { - "example": "success", + "tracks": { + "items": { + "$ref": "#/definitions/soundcloud.Track" + }, + "type": "array" + } + }, + "type": "object" + }, + "soundcloud.Track": { + "properties": { + "artwork_url": { + "type": "string" + }, + "comment_count": { + "example": 57, + "type": "integer" + }, + "created_at": { + "example": "2021-06-14T15:40:10Z", + "type": "string" + }, + "description": { + "type": "string" + }, + "duration_ms": { + "example": 165218, + "type": "integer" + }, + "genre": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "likes_count": { + "example": 10101, + "type": "integer" + }, + "permalink_url": { + "type": "string" + }, + "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" + }, + "title": { "type": "string" + }, + "uploader": { + "$ref": "#/definitions/soundcloud.Uploader" } }, "type": "object" }, - "substack.searchResponseDoc": { + "soundcloud.Uploader": { "properties": { - "code": { - "example": 200, + "avatar_url": { + "type": "string" + }, + "city": { + "type": "string" + }, + "followers_count": { + "example": 220, "type": "integer" }, - "data": { - "$ref": "#/definitions/substack.SearchResult" + "id": { + "type": "integer" }, - "msg": { - "example": "success", + "permalink": { + "type": "string" + }, + "permalink_url": { + "type": "string" + }, + "track_count": { + "example": 12, + "type": "integer" + }, + "username": { "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "substack.userActivityResponseDoc": { + "soundcloud.UserTracksResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "profile_url": { + "type": "string" + }, + "tracks": { + "items": { + "$ref": "#/definitions/soundcloud.Track" + }, + "type": "array" + } + }, + "type": "object" + }, + "soundcloud.playlistResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.UserActivityResult" + "$ref": "#/definitions/soundcloud.Playlist" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.userConnectionsResponseDoc": { + "soundcloud.profileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.UserConnectionsResult" + "$ref": "#/definitions/soundcloud.Profile" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.userResponseDoc": { + "soundcloud.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.User" + "$ref": "#/definitions/soundcloud.SearchResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.userSearchResponseDoc": { + "soundcloud.trackResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.UserSearchResult" + "$ref": "#/definitions/soundcloud.Track" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.Allergen": { + "soundcloud.userTracksResponseDoc": { "properties": { - "contains": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "may_contain": { - "type": "boolean" + "data": { + "$ref": "#/definitions/soundcloud.UserTracksResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.AvailableTimesResponse": { + "space.AuthorResponse": { "properties": { - "count": { - "example": 177, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "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", + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { "type": "string" }, - "fetched_at": { + "job_title": { "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": "integer" + "name": { + "type": "string" }, - "latest_slot": { - "example": "2026-09-06T03:55:00Z", + "slug": { "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.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "sparkfun.CategoriesResponse": { + "properties": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/sparkfun.Category" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "store_id": { - "example": "75376-0", - "type": "string" } }, "type": "object" }, - "subway.ComboItem": { + "sparkfun.Category": { "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" - }, "name": { - "example": "Sub Meal Deal", "type": "string" }, - "parent_id": { - "description": "ParentID is set for a category nested under another, empty for a\ntop-level one.", + "url_key": { "type": "string" }, - "sort_order": { - "example": 36, - "type": "integer" + "url_path": { + "type": "string" } }, "type": "object" }, - "subway.ComboResponse": { + "sparkfun.CategoryResponse": { "properties": { - "categories": { + "category": { + "$ref": "#/definitions/sparkfun.Category" + }, + "filters": { "items": { - "$ref": "#/definitions/subway.ComboItem" + "$ref": "#/definitions/sparkfun.Filter" }, "type": "array" }, - "count": { - "example": 6, + "page": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "per_page": { + "type": "integer" }, - "store_id": { - "example": "50916-0", - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/sparkfun.Product" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "subway.MenuCategory": { + "sparkfun.Filter": { "properties": { - "description": { - "example": "", + "attribute": { "type": "string" }, - "id": { + "label": { "type": "string" }, - "is_main_category": { - "type": "boolean" - }, - "items": { + "options": { "items": { - "$ref": "#/definitions/subway.MenuItem" + "$ref": "#/definitions/sparkfun.FilterOption" }, "type": "array" + } + }, + "type": "object" + }, + "sparkfun.FilterOption": { + "properties": { + "count": { + "type": "integer" }, - "name": { + "label": { "type": "string" }, - "slug": { + "value": { "type": "string" } }, "type": "object" }, - "subway.MenuItem": { + "sparkfun.Image": { "properties": { - "id": { - "type": "string" - }, - "name": { + "label": { "type": "string" }, - "slug": { + "url": { "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/subway.MenuVariant" - }, - "type": "array" } }, "type": "object" }, - "subway.MenuResponse": { + "sparkfun.Price": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/subway.MenuCategory" - }, - "type": "array" - }, - "category_count": { - "type": "integer" - }, "currency": { - "example": "USD", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "product_count": { - "type": "integer" - }, - "source_url": { "type": "string" }, - "store_id": { - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "subway.MenuVariant": { + "sparkfun.Product": { "properties": { - "allergens": { + "categories": { "items": { - "$ref": "#/definitions/subway.Allergen" + "$ref": "#/definitions/sparkfun.Category" }, "type": "array" }, - "available": { - "type": "boolean" - }, - "id": { + "description": { "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.", - "type": "string" + "image": { + "$ref": "#/definitions/sparkfun.Image" + }, + "media": { + "items": { + "$ref": "#/definitions/sparkfun.Image" + }, + "type": "array" }, "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": { + "price": { + "$ref": "#/definitions/sparkfun.Price" + }, + "recommendations": { "items": { - "$ref": "#/definitions/subway.NutritionFact" + "$ref": "#/definitions/sparkfun.ProductRecommendation" }, "type": "array" }, - "price": { - "type": "number" + "sku": { + "type": "string" }, - "size": { - "description": "Size is the build label (\"Footlong\", \"6''\", \"Kids\") distinguishing\nthis variant from siblings of the same MenuItem.", + "stock_status": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "subway.NearbyResponse": { + "sparkfun.ProductRecommendation": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "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" + "product": { + "$ref": "#/definitions/sparkfun.Product" }, - "source_url": { + "relation": { "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/subway.NearbyStore" - }, - "type": "array" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "subway.NearbyStore": { + "sparkfun.SearchResponse": { "properties": { - "address": { - "$ref": "#/definitions/subway.StoreAddress" - }, - "can_take_online_orders": { - "type": "boolean" - }, - "catering_url": { - "type": "string" - }, - "distance_miles": { - "description": "DistanceMiles is measured from the requested coordinate/query.", - "type": "number" - }, - "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": { + "filters": { "items": { - "$ref": "#/definitions/subway.StoreHours" + "$ref": "#/definitions/sparkfun.Filter" }, "type": "array" }, - "is_open_now": { - "type": "boolean" - }, - "latitude": { - "type": "number" + "page": { + "type": "integer" }, - "longitude": { - "type": "number" + "per_page": { + "type": "integer" }, - "payment_methods": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/sparkfun.Product" }, "type": "array" }, - "phone_number": { + "query": { "type": "string" }, - "store_id": { - "type": "string" + "total": { + "type": "integer" }, - "timezone": { - "type": "string" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "subway.NutritionFact": { + "sparkfun.categoriesResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "value": { - "type": "number" + "data": { + "$ref": "#/definitions/sparkfun.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "subway.SitemapEntry": { + "sparkfun.categoryResponseDoc": { "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, + "code": { + "example": 200, "type": "integer" }, - "path": { - "description": "Path is the locator path, the value /subway/store takes.", - "example": "united-states/ny/new-york/1-penn-plaza", - "type": "string" + "data": { + "$ref": "#/definitions/sparkfun.CategoryResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.SitemapResponse": { + "sparkfun.productResponseDoc": { "properties": { - "count": { - "example": 100, + "code": { + "example": 200, "type": "integer" }, - "entries": { - "items": { - "$ref": "#/definitions/subway.SitemapEntry" - }, - "type": "array" + "data": { + "$ref": "#/definitions/sparkfun.Product" }, - "fetched_at": { + "msg": { + "example": "OK", "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "shard": { - "example": 0, + } + }, + "type": "object" + }, + "sparkfun.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "shard_count": { - "example": 1, - "type": "integer" + "data": { + "$ref": "#/definitions/sparkfun.SearchResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "total_in_shard": { - "example": 22706, - "type": "integer" - }, - "total_pages": { - "example": 228, - "type": "integer" } }, "type": "object" }, - "subway.StoreAddress": { + "sportingnews.AuthorArticle": { "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", + "section": { "type": "string" }, - "street": { - "example": "1 Penn Plaza", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "subway.StoreHours": { + "sportingnews.AuthorResponse": { "properties": { - "closed": { - "example": false, - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/sportingnews.AuthorArticle" + }, + "type": "array" }, - "closes": { - "example": "23:00", + "bio": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "image_url": { "type": "string" }, - "opens": { - "example": "09:00", + "name": { "type": "string" }, - "segments": { + "slug": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/subway.TimeSegment" + "type": "string" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "subway.StoreResponse": { + "sportskeeda.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": { + "image_url": { "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", + "role": { "type": "string" }, - "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", + "slug": { "type": "string" }, - "has_catering": { - "type": "boolean" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.CalendarEvent": { + "properties": { + "branding_logo": { + "type": "string" }, - "has_drive_through": { - "type": "boolean" + "branding_text": { + "type": "string" }, - "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" + "branding_text_color": { + "type": "string" }, - "hours": { - "items": { - "$ref": "#/definitions/subway.StoreHours" - }, - "type": "array" + "card_background": { + "type": "string" }, - "latitude": { - "example": 40.7517026, - "type": "number" + "card_background_color": { + "type": "string" }, - "longitude": { - "example": -73.9925826, - "type": "number" + "description": { + "type": "string" }, - "meals_served": { - "items": { - "type": "string" - }, - "type": "array" + "duration_days": { + "type": "integer" }, - "menu_url": { - "description": "MenuURL and OrderURL point at the store's ordering pages.", - "example": "https://order.subway.com/en-us/restaurant/75376-0/menu/", + "end_date": { + "example": "2026-10-17", "type": "string" }, - "name": { - "example": "Subway", + "image_links": { "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": { + "invert_text_color": { "type": "string" }, - "path": { + "month": { + "example": "2026-09", "type": "string" }, - "phone_e164": { - "description": "PhoneE164 is the same number in dialable E.164 form.", - "example": "+12122440101", + "month_label": { + "example": "September 2026", "type": "string" }, - "phone_number": { - "example": "(212) 244-0101", + "name": { "type": "string" }, - "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" - }, - "price_range": { - "description": "PriceRange is the locator's own band, e.g. \"$\".", - "example": "$", + "open_link": { "type": "string" }, - "services": { - "description": "Services lists the amenities the locator publishes for this store,\ne.g. \"online ordering\", \"delivery\", \"catering\".", - "items": { - "type": "string" - }, - "type": "array" + "sport": { + "type": "string" }, - "source_url": { + "start_date": { + "example": "2026-09-27", "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", + "venue": { "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", + "videos": { "type": "string" } }, "type": "object" }, - "subway.TimeSegment": { + "sportskeeda.CollegeBasketballConference": { "properties": { - "closes": { - "example": "23:00", + "abbr": { "type": "string" }, - "opens": { - "example": "09:00", - "type": "string" - } - }, - "type": "object" - }, - "subway.availableTimesResponseDoc": { - "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/subway.AvailableTimesResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "slug": { + "type": "string" } }, "type": "object" }, - "subway.combosResponseDoc": { + "sportskeeda.CollegeBasketballDivision": { "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/subway.ComboResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "name": { + "type": "string" } }, "type": "object" }, - "subway.menuResponseDoc": { + "sportskeeda.CollegeBasketballLeader": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "player_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/subway.MenuResponse" + "player_name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "player_slug": { + "type": "string" + }, + "value": { + "type": "integer" } }, "type": "object" }, - "subway.nearbyResponseDoc": { + "sportskeeda.CollegeBasketballLocation": { "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/subway.NearbyResponse" + "abbreviation": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "name": { + "type": "string" } }, "type": "object" }, - "subway.sitemapResponseDoc": { + "sportskeeda.CollegeBasketballScheduleGame": { "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" + "away_team": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballTeam" }, - "data": { - "$ref": "#/definitions/subway.SitemapResponse" + "end_date": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "subway.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", + "event_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/subway.StoreResponse" + "event_type_id": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sun.AuthorArticle": { - "properties": { - "category": { - "type": "string" + "has_score": { + "type": "boolean" }, - "category_url": { - "type": "string" + "home_team": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballTeam" }, - "excerpt": { - "type": "string" + "is_tba": { + "type": "boolean" }, - "title": { + "loser_high": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballLeader" + }, + "start_date": { "type": "string" }, - "url": { + "status": { "type": "string" - } - }, - "type": "object" - }, - "sun.AuthorResponse": { - "properties": { - "articles": { + }, + "tv_stations": { "items": { - "$ref": "#/definitions/sun.AuthorArticle" + "type": "string" }, "type": "array" }, - "bio": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" + "venue": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballVenue" }, - "url": { - "type": "string" + "winner_high": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballLeader" } }, "type": "object" }, - "swiggy.Collection": { + "sportskeeda.CollegeBasketballScheduleOptionsResponse": { "properties": { - "id": { + "conference_filter_supported": { + "type": "boolean" + }, + "date": { "type": "string" }, - "image_url": { + "date_end": { "type": "string" }, - "title": { + "date_start": { "type": "string" - } - }, - "type": "object" - }, - "swiggy.CollectionsResponse": { - "properties": { - "collections": { + }, + "season": { + "type": "integer" + }, + "season_name": { + "type": "string" + }, + "seasons": { "items": { - "$ref": "#/definitions/swiggy.Collection" + "type": "integer" }, "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" + "slug": { + "type": "string" } }, "type": "object" }, - "swiggy.ExternalRating": { + "sportskeeda.CollegeBasketballScheduleResponse": { "properties": { - "count": { + "date": { "type": "string" }, - "rating": { - "type": "number" - }, - "source": { - "type": "string" - } - }, - "type": "object" - }, - "swiggy.MenuCategory": { - "properties": { - "items": { + "games": { "items": { - "$ref": "#/definitions/swiggy.MenuItem" + "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleGame" }, "type": "array" }, - "subcategory": { + "season": { + "type": "integer" + }, + "season_name": { "type": "string" }, - "title": { + "status": { + "enum": [ + "ok", + "no_games" + ], + "type": "string" + }, + "updated_at": { "type": "string" } }, "type": "object" }, - "swiggy.MenuItem": { + "sportskeeda.CollegeBasketballTeam": { "properties": { - "category": { - "type": "string" - }, - "description": { + "abbr": { "type": "string" }, - "discounted_price": { - "type": "number" - }, - "id": { - "type": "string" + "conference": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballConference" }, - "image_url": { - "type": "string" + "division": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballDivision" }, - "in_stock": { + "is_winner": { "type": "boolean" }, - "is_veg": { - "type": "boolean" + "location": { + "type": "string" }, - "name": { + "location_type": { "type": "string" }, - "price": { - "type": "number" + "nickname": { + "type": "string" }, - "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" + "score": { + "type": "integer" }, - "total_ratings": { + "team_id": { "type": "integer" - } - }, - "type": "object" - }, - "swiggy.MenuResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/swiggy.MenuCategory" - }, - "type": "array" }, - "offers": { - "items": { - "$ref": "#/definitions/swiggy.Offer" - }, - "type": "array" + "team_name": { + "type": "string" }, - "restaurant": { - "$ref": "#/definitions/swiggy.Restaurant" + "team_slug": { + "type": "string" } }, "type": "object" }, - "swiggy.Offer": { + "sportskeeda.CollegeBasketballVenue": { "properties": { - "coupon_code": { + "city": { "type": "string" }, - "description": { - "type": "string" + "country": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballLocation" }, - "tag": { + "name": { "type": "string" }, - "title": { - "type": "string" + "state": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballLocation" } }, "type": "object" }, - "swiggy.OpeningHours": { + "sportskeeda.CricketCommentaryResponse": { "properties": { - "day": { + "commentary": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "cursor": { "type": "string" }, - "hours": { + "language": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "swiggy.Restaurant": { + "sportskeeda.CricketMatchResponse": { "properties": { - "address": { - "type": "string" + "commentary": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" }, - "area": { - "type": "string" + "competition_id": {}, + "datetime": { + "type": "integer" }, - "city": { + "day": { "type": "string" }, - "cost_for_two": { + "game_format": { + "type": "integer" + }, + "game_type": { "type": "string" }, - "cuisines": { - "items": { - "type": "string" - }, - "type": "array" + "in_play": { + "type": "boolean" }, - "delivery_time_minutes": { - "type": "integer" + "info": { + "type": "string" }, - "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.", + "innings": { "items": { - "$ref": "#/definitions/swiggy.MenuItem" + "additionalProperties": true, + "type": "object" }, "type": "array" }, - "external_rating": { - "$ref": "#/definitions/swiggy.ExternalRating" - }, - "hours_message": { + "match_id": { "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.", + "match_number": {}, + "match_number_with_format": { "type": "string" }, - "id": { + "match_status": { "type": "string" }, - "image_url": { - "type": "string" + "now_batting": { + "additionalProperties": true, + "type": "object" }, - "is_open": { - "type": "boolean" + "now_bowling": { + "additionalProperties": true, + "type": "object" }, - "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" + "score_strip": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" }, - "latitude": { - "type": "number" + "series": { + "type": "string" }, - "locality": { + "series_keeda_slug": { "type": "string" }, - "longitude": { - "type": "number" + "session": { + "type": "string" }, - "name": { + "short_title": { "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" + "slug": { + "type": "string" }, - "opening_hours": { + "squad": { "items": { - "$ref": "#/definitions/swiggy.OpeningHours" + "additionalProperties": true, + "type": "object" }, "type": "array" }, - "phone": { + "title": { "type": "string" }, - "postal_code": { + "toss_decision": { "type": "string" }, - "rating": { - "type": "number" - }, - "rating_count": { + "toss_won_by": { "type": "string" }, - "total_ratings": { + "updated_at": { "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.", + "venue": { "type": "string" } }, "type": "object" }, - "swiggy.RestaurantResponse": { + "sportskeeda.DataTable": { "properties": { - "offers": { + "columns": { "items": { - "$ref": "#/definitions/swiggy.Offer" + "type": "string" }, "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": { + "name": { "type": "string" }, - "restaurants": { + "rows": { "items": { - "$ref": "#/definitions/swiggy.Restaurant" + "items": { + "$ref": "#/definitions/sportskeeda.TableCell" + }, + "type": "array" }, "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": { + "sportskeeda.DepthChartPosition": { "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" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "players": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" } }, "type": "object" }, - "tacobell.AppMenuBundleChoice": { + "sportskeeda.DepthChartResponse": { "properties": { - "code": { - "example": "22603_22902_1", + "slug": { "type": "string" }, - "default_product_codes": { - "example": [ - "22101" - ], + "teams": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.DepthChartTeam" }, "type": "array" }, - "max_selections": { - "example": 1, - "type": "integer" - }, - "min_selections": { - "example": 1, - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "tacobell.AppMenuCategory": { + "sportskeeda.DepthChartTeam": { "properties": { - "code": { - "example": "tacos", + "name": { "type": "string" }, - "items": { + "positions": { "items": { - "$ref": "#/definitions/tacobell.AppMenuItem" + "$ref": "#/definitions/sportskeeda.DepthChartPosition" }, "type": "array" }, - "name": { - "example": "Tacos", + "slug": { "type": "string" } }, "type": "object" }, - "tacobell.AppMenuDaypart": { + "sportskeeda.DraftPick": { "properties": { - "code": { - "example": "HappyHour", + "college": { "type": "string" }, "name": { - "example": "Happy Hour", "type": "string" + }, + "overall_pick": { + "type": "string" + }, + "position": { + "type": "string" + }, + "round": { + "type": "string" + }, + "round_pick": { + "type": "string" + }, + "team_code": { + "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "tacobell.AppMenuItem": { + "sportskeeda.DraftPicksOptionsResponse": { "properties": { - "calories": { - "example": 771, - "type": "integer" - }, - "choices": { - "description": "Choices is populated only when kind is \"bundle\".", + "positions": { "items": { - "$ref": "#/definitions/tacobell.AppMenuBundleChoice" + "type": "string" }, "type": "array" }, - "code": { - "example": "22603", - "type": "string" - }, - "daypart_codes": { - "example": [ - "BalanceOfDay" - ], + "rounds": { "items": { "type": "string" }, "type": "array" }, - "description": { - "type": "string" - }, - "image_url": { + "slug": { "type": "string" }, - "kind": { - "example": "bundle", + "team": { "type": "string" }, - "name": { - "example": "3 Crunchy Tacos Supreme Combo", - "type": "string" + "total": { + "type": "integer" }, - "price": { - "$ref": "#/definitions/tacobell.Money" + "years": { + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "tacobell.AppMenuResponse": { + "sportskeeda.DraftPicksResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/tacobell.AppMenuCategory" - }, - "type": "array" + "has_more": { + "type": "boolean" }, - "category_count": { - "example": 17, + "page": { "type": "integer" }, - "dayparts": { + "per_page": { + "type": "integer" + }, + "picks": { "items": { - "$ref": "#/definitions/tacobell.AppMenuDaypart" + "$ref": "#/definitions/sportskeeda.DraftPick" }, "type": "array" }, - "fetched_at": { + "position": { "type": "string" }, - "item_count": { - "example": 207, - "type": "integer" + "q": { + "type": "string" }, - "source_url": { + "round": { "type": "string" }, - "store_number": { - "example": "034922", + "slug": { + "type": "string" + }, + "team": { "type": "string" + }, + "total": { + "type": "integer" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "tacobell.CategoriesResponse": { + "sportskeeda.EventCalendarOptionsResponse": { "properties": { - "categories": { + "regions": { "items": { - "$ref": "#/definitions/tacobell.Category" + "$ref": "#/definitions/sportskeeda.EventCalendarRegionOptions" }, "type": "array" - }, - "count": { - "example": 17, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "tacobell.Category": { + "sportskeeda.EventCalendarRegionOptions": { "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" + "months": { + "example": [ + "2026-09", + "2026-10", + "2026-11", + "2026-12" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { - "example": "tacos", + "region": { + "enum": [ + "us", + "india" + ], "type": "string" }, - "url": { - "type": "string" + "sports": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "tacobell.CustomizationGroup": { + "sportskeeda.EventCalendarResponse": { "properties": { - "count": { - "example": 9, - "type": "integer" - }, - "group": { - "example": "sauce_options", + "end_date": { "type": "string" }, - "options": { + "events": { "items": { - "$ref": "#/definitions/tacobell.CustomizationOption" + "$ref": "#/definitions/sportskeeda.CalendarEvent" }, "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" + "months": { + "items": { + "type": "string" + }, + "type": "array" }, - "description": { + "region": { + "enum": [ + "us", + "india" + ], "type": "string" }, - "image_url": { + "sport": { "type": "string" }, - "name": { - "example": "Pico De Gallo", + "start_date": { "type": "string" }, - "price": { - "$ref": "#/definitions/tacobell.Money" + "total": { + "type": "integer" } }, "type": "object" }, - "tacobell.DayHours": { + "sportskeeda.FeedItem": { "properties": { - "closes": { - "example": "4:00 AM", + "age": { "type": "string" }, - "dayparts": { - "items": { - "$ref": "#/definitions/tacobell.Daypart" - }, - "type": "array" - }, - "opens": { - "example": "7:00 AM", + "category": { "type": "string" }, - "week_day": { - "example": "Monday", + "image": { "type": "string" - } - }, - "type": "object" - }, - "tacobell.Daypart": { - "properties": { - "all_day": { - "example": false, - "type": "boolean" }, - "closed": { - "example": false, - "type": "boolean" + "section": { + "type": "string" }, - "ends": { - "example": "4:00 AM", + "slug": { "type": "string" }, - "name": { - "example": "Balance Of Day", + "title": { "type": "string" }, - "starts": { - "example": "7:00 AM", + "url": { "type": "string" } }, "type": "object" }, - "tacobell.MenuItem": { + "sportskeeda.FeedResponse": { "properties": { - "available_in_store": { - "example": true, - "type": "boolean" + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.FeedItem" + }, + "type": "array" }, - "calories": { - "example": 430, + "next_page": { "type": "integer" }, - "calories_text": { - "example": "430 Cal", - "type": "string" + "page": { + "type": "integer" }, - "category": { - "example": "tacos", + "slug": { "type": "string" }, - "code": { - "example": "CB-1234", + "title": { "type": "string" - }, - "food_type": { + } + }, + "type": "object" + }, + "sportskeeda.FootballDataResponse": { + "properties": { + "event": { "type": "string" }, - "has_meatless": { - "description": "HasMeatless marks an item with a meatless variant available.", - "example": false, - "type": "boolean" - }, - "image_url": { + "event_name": { "type": "string" }, - "item_type": { + "matchday": { "type": "string" }, - "modifiable": { - "description": "Modifiable marks an item Taco Bell allows customizing.", - "example": true, - "type": "boolean" - }, - "name": { - "example": "Naked Chicken Chalupa", + "matchday_name": { "type": "string" }, - "price": { - "$ref": "#/definitions/tacobell.Money" + "matches": { + "items": { + "$ref": "#/definitions/sportskeeda.FootballFixture" + }, + "type": "array" }, - "product_type": { - "type": "string" - } - }, - "type": "object" - }, - "tacobell.MenuResponse": { - "properties": { - "category": { - "example": "tacos", + "next_matchday": { "type": "string" }, - "count": { - "example": 16, - "type": "integer" - }, - "fetched_at": { + "previous_matchday": { "type": "string" }, - "items": { + "standings": { "items": { - "$ref": "#/definitions/tacobell.MenuItem" + "$ref": "#/definitions/sportskeeda.FootballStanding" }, "type": "array" }, - "source_url": { + "status": { + "enum": [ + "ok", + "no_matches" + ], "type": "string" } }, "type": "object" }, - "tacobell.Money": { + "sportskeeda.FootballEvent": { "properties": { - "currency": { - "example": "USD", + "logo": { "type": "string" }, - "formatted": { - "description": "Formatted is Taco Bell's own rendering, kept because it carries the\nupstream's rounding/symbol conventions.", - "example": "$5.99", + "name": { "type": "string" }, - "value": { - "example": 5.99, - "type": "number" + "slug": { + "type": "string" } }, "type": "object" }, - "tacobell.NutritionFacts": { + "sportskeeda.FootballFixture": { "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" + "away": { + "type": "string" }, - "protein_g": { - "example": 15.6483, - "type": "number" + "away_score": { + "type": "string" }, - "saturated_fat_g": { - "example": 6.4715, - "type": "number" + "away_slug": { + "type": "string" }, - "sodium_mg": { - "example": 1163.993, - "type": "number" + "datetime": { + "type": "string" }, - "sugar_alcohol_g": { - "type": "number" + "home": { + "type": "string" }, - "sugars_g": { - "example": 4.0006, - "type": "number" + "home_score": { + "type": "string" }, - "total_carbohydrate_g": { - "example": 51.5623, - "type": "number" + "home_slug": { + "type": "string" }, - "total_fat_g": { - "example": 13.8961, - "type": "number" + "id": { + "type": "string" }, - "trans_fat_g": { - "example": 0.2417, - "type": "number" + "postponed": { + "type": "boolean" }, - "vitamin_a": { - "example": 11.4691, - "type": "number" + "result": { + "type": "string" }, - "vitamin_c": { - "example": 7.2259, - "type": "number" + "slug": { + "type": "string" }, - "vitamin_d_mcg": { - "example": 1.6074, - "type": "number" + "status": { + "type": "string" } }, "type": "object" }, - "tacobell.NutritionResponse": { + "sportskeeda.FootballMatchday": { "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" - }, - "ingredients": { - "description": "Ingredients is the full component-by-component statement, present\nonly when include_ingredients is set.", + "end": { "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" + "match_count": { + "type": "integer" }, - "label_url": { - "description": "LabelURL is the nutrition label this data came from. Taco Bell\npublishes its panel there rather than on tacobell.com.", + "name": { "type": "string" }, - "nutrition": { - "$ref": "#/definitions/tacobell.NutritionFacts" - }, - "product": { - "example": "burrito-supreme", - "type": "string" + "selected": { + "type": "boolean" }, - "serving_size_unit": { - "example": "Burrito", + "slug": { "type": "string" }, - "serving_weight_grams": { - "example": 232.4657, - "type": "number" - }, - "source_url": { + "start": { "type": "string" } }, "type": "object" }, - "tacobell.ProductImage": { + "sportskeeda.FootballOptionsResponse": { "properties": { - "format": { - "example": "640x650", + "event": { "type": "string" }, - "type": { - "example": "PRIMARY", - "type": "string" + "events": { + "items": { + "$ref": "#/definitions/sportskeeda.FootballEvent" + }, + "type": "array" }, - "url": { - "type": "string" + "matchdays": { + "items": { + "$ref": "#/definitions/sportskeeda.FootballMatchday" + }, + "type": "array" } }, "type": "object" }, - "tacobell.ProductResponse": { + "sportskeeda.FootballStanding": { "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, + "draws": { "type": "integer" }, - "category": { - "example": "burritos", + "goal_difference": { "type": "string" }, - "code": { - "example": "22201", + "goals_against": { "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" + "goals_for": { + "type": "string" }, - "description": { + "group": { "type": "string" }, - "fetched_at": { + "league": { "type": "string" }, - "has_meatless": { - "example": false, - "type": "boolean" + "losses": { + "type": "integer" }, - "images": { - "items": { - "$ref": "#/definitions/tacobell.ProductImage" - }, - "type": "array" + "played": { + "type": "integer" }, - "modifiable": { - "example": true, - "type": "boolean" + "points": { + "type": "integer" }, - "name": { - "example": "Burrito Supreme®", - "type": "string" + "position": { + "type": "integer" }, - "nutrition_label_url": { - "description": "NutritionLabelURL is the full nutrition-facts label Taco Bell links\nfor this item. /taco-bell/nutrition reads it.", + "qualification": { "type": "string" }, - "price": { - "$ref": "#/definitions/tacobell.Money" - }, - "related": { - "items": { - "$ref": "#/definitions/tacobell.RelatedProduct" - }, - "type": "array" + "team": { + "type": "string" }, - "source_url": { + "team_code": { "type": "string" }, - "url": { + "team_slug": { "type": "string" }, - "vegetarian_friendly": { - "example": false, - "type": "boolean" + "wins": { + "type": "integer" } }, "type": "object" }, - "tacobell.RelatedProduct": { + "sportskeeda.GuessingGameClue": { "properties": { - "calories": { - "example": 690, + "image": { + "type": "string" + }, + "order": { "type": "integer" }, - "code": { - "example": "22963", + "text": { "type": "string" - }, - "image_url": { + } + }, + "type": "object" + }, + "sportskeeda.GuessingGameDataResponse": { + "properties": { + "date": { "type": "string" }, - "name": { - "example": "Grilled Cheese Burrito", + "game_name": { "type": "string" }, - "price": { - "$ref": "#/definitions/tacobell.Money" - }, - "reference_type": { - "example": "CROSSELLING", + "game_slug": { "type": "string" }, - "url": { + "instances": { + "items": { + "$ref": "#/definitions/sportskeeda.GuessingGameInstance" + }, + "type": "array" + }, + "slug": { "type": "string" } }, "type": "object" }, - "tacobell.Store": { + "sportskeeda.GuessingGameEntitiesResponse": { "properties": { - "address": { - "$ref": "#/definitions/tacobell.StoreAddress" - }, - "capabilities": { - "$ref": "#/definitions/tacobell.StoreCapabilities" - }, - "delivery": { - "example": true, - "type": "boolean" + "entities": { + "items": { + "$ref": "#/definitions/sportskeeda.GuessingGameEntity" + }, + "type": "array" }, - "distance_text": { - "example": "0.90 Miles", + "game_slug": { "type": "string" }, - "name": { - "example": "040890", + "slug": { "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.GuessingGameEntity": { + "properties": { + "age_at_death": { + "type": "integer" }, - "online_available": { - "example": true, - "type": "boolean" - }, - "phone_number": { - "example": "+16268423006", + "alias1": { "type": "string" }, - "status": { - "example": "openNow", + "brand": { "type": "string" }, - "store_number": { - "example": "040890", + "conference": { "type": "string" }, - "timezone": { - "example": "America/Los_Angeles", + "date_of_birth": { "type": "string" }, - "timezone_offset": { - "example": "GMT-07:00", + "dead": { "type": "string" }, - "today_hours": { - "$ref": "#/definitions/tacobell.StoreHours" - } - }, - "type": "object" - }, - "tacobell.StoreAddress": { - "properties": { - "city": { - "example": "Los Angeles", + "division": { "type": "string" }, - "country": { - "example": "US", + "experience": { "type": "string" }, - "latitude": { - "example": 34.048934, - "type": "number" - }, - "line1": { - "example": "801 West 7th Street", + "gender": { "type": "string" }, - "line2": { + "hall_of_fame": { "type": "string" }, - "longitude": { - "example": -118.258867, - "type": "number" + "height_in_inches": { + "type": "integer" }, - "postal_code": { - "example": "90017", + "id": { "type": "string" }, - "region": { - "example": "US-CA", + "identifier": { "type": "string" - } - }, - "type": "object" - }, - "tacobell.StoreCapabilities": { - "properties": { - "breakfast": { - "example": true, - "type": "boolean" - }, - "delivery_enabled": { - "example": true, - "type": "boolean" }, - "drive_thru": { - "example": false, - "type": "boolean" + "name": { + "type": "string" }, - "live_mas_cafe": { - "example": false, - "type": "boolean" + "position": { + "type": "string" }, - "mobile_enabled": { - "example": true, - "type": "boolean" + "team": { + "type": "string" }, - "online": { - "example": true, - "type": "boolean" + "touchdowns": { + "type": "integer" }, - "open_late": { - "example": false, - "type": "boolean" + "uniform": { + "type": "integer" }, - "pickup_shelves": { - "example": true, - "type": "boolean" + "wrestlemania_appearances": { + "type": "integer" } }, "type": "object" }, - "tacobell.StoreDetailResponse": { + "sportskeeda.GuessingGameInstance": { "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" - }, - "fetched_at": { - "type": "string" - }, - "geofencing_radius": { - "example": 3, - "type": "integer" - }, - "hours": { - "description": "Hours is the full published week, Monday-first. /taco-bell/stores\ncarries only today's window.", + "clues": { "items": { - "$ref": "#/definitions/tacobell.DayHours" + "$ref": "#/definitions/sportskeeda.GuessingGameClue" }, "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", + "date": { "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", + "id": { "type": "string" }, - "timezone_offset": { - "example": "GMT-07:00", + "original_image": { "type": "string" - }, - "today_hours": { - "$ref": "#/definitions/tacobell.DayHours" } }, "type": "object" }, - "tacobell.StoreHours": { + "sportskeeda.GuessingGameOption": { "properties": { - "closes": { - "example": "4:00 AM", + "game_slug": { "type": "string" }, - "opens": { - "example": "5:30 AM", + "name": { "type": "string" }, - "week_day": { - "example": "Sunday", + "slug": { "type": "string" } }, "type": "object" }, - "tacobell.StoreMenuCategory": { + "sportskeeda.GuessingGamesResponse": { "properties": { - "code": { - "example": "breakfast", - "type": "string" - }, - "items": { + "games": { "items": { - "$ref": "#/definitions/tacobell.MenuItem" + "$ref": "#/definitions/sportskeeda.GuessingGameOption" }, "type": "array" - }, - "name": { - "example": "Breakfast", - "type": "string" } }, "type": "object" }, - "tacobell.StoreMenuResponse": { + "sportskeeda.NBAQueriesResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/tacobell.StoreMenuCategory" + "$ref": "#/definitions/sportskeeda.NBAQueryCategory" }, "type": "array" }, - "category_count": { - "example": 17, - "type": "integer" - }, - "fetched_at": { + "category": { + "enum": [ + "player-stat", + "player-vs-team" + ], "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." + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.NBAQueryItem" + }, + "type": "array" }, - "item_count": { - "example": 312, + "limit": { "type": "integer" }, - "source_url": { - "type": "string" + "offset": { + "type": "integer" }, - "store_number": { - "example": "040890", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "tacobell.StoresResponse": { + "sportskeeda.NBAQueryCategory": { "properties": { "count": { - "example": 10, "type": "integer" }, - "fetched_at": { + "id": { + "enum": [ + "player-stat", + "player-vs-team" + ], "type": "string" }, - "source_url": { + "name": { "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/tacobell.Store" - }, - "type": "array" } }, "type": "object" }, - "tacobell.TimeWindow": { + "sportskeeda.NBAQueryItem": { "properties": { - "ends_at": { - "example": "2026-09-02T00:00:00Z", + "category": { + "enum": [ + "player-stat", + "player-vs-team" + ], "type": "string" }, - "starts_at": { - "example": "2026-09-01T21:00:00Z", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "tacobell.appMenuResponseDoc": { - "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" + "subject": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "title": { + "type": "string" } }, "type": "object" }, - "tacobell.categoriesResponseDoc": { + "sportskeeda.NavigationGroup": { "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" + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.SectionLink" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "tacobell.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" + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/tacobell.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" }, - "tacobell.nutritionResponseDoc": { + "sportskeeda.PageFilter": { "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/tacobell.NutritionResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "values": { + "items": { + "$ref": "#/definitions/sportskeeda.PageFilterValue" + }, + "type": "array" } }, "type": "object" }, - "tacobell.productResponseDoc": { + "sportskeeda.PageFilterValue": { "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/tacobell.ProductResponse" + "selected": { + "type": "boolean" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "slug": { + "type": "string" + }, + "value": { + "type": "string" } }, "type": "object" }, - "tacobell.storeDetailResponseDoc": { + "sportskeeda.PageGroup": { "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" + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "name": { + "type": "string" } }, "type": "object" }, - "tacobell.storeMenuResponseDoc": { + "sportskeeda.PageMenu": { "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" + "groups": { + "items": { + "$ref": "#/definitions/sportskeeda.PageGroup" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "name": { + "type": "string" } }, "type": "object" }, - "tacobell.storesResponseDoc": { + "sportskeeda.PageOptionsResponse": { "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" + "filters": { + "items": { + "$ref": "#/definitions/sportskeeda.PageFilter" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/tacobell.StoresResponse" + "menus": { + "items": { + "$ref": "#/definitions/sportskeeda.PageMenu" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "target.Answer": { - "properties": { - "author": { + "slug": { "type": "string" }, - "helpful": { - "type": "integer" + "sports": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" }, - "id": { - "type": "string" + "tabs": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" }, - "submitted_at": { + "title": { "type": "string" }, - "text": { - "type": "string" + "views": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" } }, "type": "object" }, - "target.Availability": { + "sportskeeda.PageView": { "properties": { - "backup_store": { - "type": "boolean" - }, - "primary_store": { - "type": "boolean" - }, - "scheduled_delivery": { - "type": "boolean" - }, - "shipping": { - "type": "boolean" + "name": { + "type": "string" }, - "sold_out": { - "type": "boolean" + "slug": { + "type": "string" } }, "type": "object" }, - "target.Breadcrumb": { + "sportskeeda.PlayerSeasonStats": { "properties": { - "id": { - "example": "4yi5p", + "event_type": { "type": "string" }, + "games_played": { + "type": "integer" + }, + "games_started": { + "type": "integer" + }, + "metrics": { + "additionalProperties": {}, + "type": "object" + }, "name": { - "example": "Coffee", "type": "string" }, - "url": { - "type": "string" + "season": { + "type": "integer" + }, + "team": { + "$ref": "#/definitions/sportskeeda.PlayerStatsTeam" } }, "type": "object" }, - "target.CategoriesResponse": { + "sportskeeda.PlayerStatsResponse": { "properties": { - "categories": { + "event_types": { "items": { - "$ref": "#/definitions/target.Category" + "$ref": "#/definitions/sportskeeda.PageFilterValue" }, "type": "array" }, - "count": { - "example": 29, - "type": "integer" + "records": { + "items": { + "$ref": "#/definitions/sportskeeda.PlayerSeasonStats" + }, + "type": "array" }, - "fetched_at": { + "selected_event_type": { "type": "string" }, - "group_count": { - "example": 16, - "type": "integer" + "slug": { + "type": "string" }, - "groups": { + "sport": { + "type": "string" + }, + "stat_fields": { "items": { - "$ref": "#/definitions/target.CategoryGroup" + "type": "string" }, "type": "array" }, - "source_url": { + "title": { "type": "string" } }, "type": "object" }, - "target.Category": { + "sportskeeda.PlayerStatsTeam": { "properties": { - "id": { - "example": "5xt1a", + "abbreviation": { "type": "string" }, + "id": { + "type": "integer" + }, "image_url": { "type": "string" }, "name": { - "example": "Grocery", "type": "string" }, - "url": { - "example": "https://www.target.com/c/grocery/-/N-5xt1a", + "slug": { "type": "string" } }, "type": "object" }, - "target.CategoryGroup": { + "sportskeeda.ProfileFact": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/target.Category" - }, - "type": "array" - }, "name": { - "example": "Grocery", + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "target.CategoryProductsResponse": { + "sportskeeda.ProfileResponse": { "properties": { - "applied_filter_ids": { + "description": { + "type": "string" + }, + "facts": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.ProfileFact" }, "type": "array" }, - "category_id": { - "example": "5q0ga", + "kind": { "type": "string" }, - "count": { - "example": 24, - "type": "integer" - }, - "fetched_at": { + "name": { "type": "string" }, - "filter_groups": { - "items": { - "$ref": "#/definitions/target.FilterGroup" - }, - "type": "array" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 24, - "type": "integer" - }, - "products": { + "news": { "items": { - "$ref": "#/definitions/target.ProductSummary" + "$ref": "#/definitions/sportskeeda.FeedItem" }, "type": "array" }, - "sort": { - "example": "featured", - "type": "string" - }, - "source_url": { + "slug": { "type": "string" - }, - "store_id": { - "example": 2885, - "type": "integer" - }, - "total": { - "example": 4158, - "type": "integer" - }, - "total_pages": { - "example": 50, - "type": "integer" } }, "type": "object" }, - "target.FilterGroup": { + "sportskeeda.QuizCategoriesResponse": { "properties": { - "display_name": { - "example": "Deals", - "type": "string" - }, - "expanded": { - "type": "boolean" - }, - "id": { - "example": "d_deals", - "type": "string" - }, - "options": { + "categories": { "items": { - "$ref": "#/definitions/target.FilterOption" + "$ref": "#/definitions/sportskeeda.QuizCategory" }, "type": "array" - }, - "type": { - "example": "checkbox", - "type": "string" } }, "type": "object" }, - "target.FilterOption": { + "sportskeeda.QuizCategory": { "properties": { - "display_name": { - "example": "Clearance", - "type": "string" - }, - "id": { - "example": "5tdv1", + "name": { "type": "string" }, - "selected": { - "type": "boolean" - }, - "url": { - "example": "d_deals:clearance", + "slug": { "type": "string" - }, - "value": { - "example": "clearance", + } + }, + "type": "object" + }, + "sportskeeda.QuizChoice": { + "properties": { + "text": { "type": "string" } }, "type": "object" }, - "target.FilterOptionsResponse": { + "sportskeeda.QuizQuestion": { "properties": { - "applied_filter_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category_id": { - "example": "5q0ga", + "image": { "type": "string" }, - "count": { - "example": 7, + "number": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "filter_groups": { + "options": { "items": { - "$ref": "#/definitions/target.FilterGroup" + "$ref": "#/definitions/sportskeeda.QuizChoice" }, "type": "array" }, - "query": { - "example": "coffee", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "store_id": { - "example": 2885, - "type": "integer" - }, - "total": { - "example": 4158, - "type": "integer" - } - }, - "type": "object" - }, - "target.Price": { - "properties": { - "current": { - "example": 12.79, - "type": "number" - }, - "formatted": { - "example": "$12.79", + "text": { "type": "string" }, - "regular": { - "example": 12.79, - "type": "number" - }, - "store_id": { - "example": 2885, - "type": "integer" - }, - "unit_formatted": { - "example": "$1.07/ounce", + "type": { "type": "string" } }, "type": "object" }, - "target.Product": { + "sportskeeda.QuizResponse": { "properties": { - "availability": { - "$ref": "#/definitions/target.Availability" - }, - "brand": { - "example": "Starbucks", - "type": "string" - }, - "breadcrumbs": { - "items": { - "$ref": "#/definitions/target.Breadcrumb" - }, - "type": "array" - }, - "bullets": { - "items": { - "type": "string" - }, - "type": "array" - }, "category": { - "example": "Ground Coffee", - "type": "string" - }, - "category_id": { - "example": "x2hqv", "type": "string" }, - "description": { - "type": "string" - }, - "dpci": { - "example": "231-10-1932", - "type": "string" - }, - "images": { + "questions": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.QuizQuestion" }, "type": "array" }, - "item_type": { - "example": "Coffee", - "type": "string" - }, - "parent_category_id": { - "example": "4yi5p", - "type": "string" - }, - "parent_tcin": { - "example": "89169599", - "type": "string" - }, - "price": { - "$ref": "#/definitions/target.Price" - }, - "primary_image_url": { + "slug": { "type": "string" }, - "rating": { - "$ref": "#/definitions/target.Rating" - }, - "specifications": { - "items": { - "type": "string" - }, - "type": "array" - }, - "tcin": { - "example": "12954151", - "type": "string" + "time_limit_seconds": { + "type": "integer" }, "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": { + "version_id": { "type": "string" - }, - "store_id": { - "example": 2885, - "type": "integer" } }, "type": "object" }, - "target.ProductSummary": { + "sportskeeda.QuizSummary": { "properties": { - "brand": { - "example": "Starbucks", - "type": "string" - }, - "category_id": { - "example": "x2hqv", - "type": "string" - }, - "parent_category_id": { - "example": "4yi5p", - "type": "string" - }, - "parent_tcin": { - "example": "89169599", + "image": { "type": "string" }, - "price": { - "$ref": "#/definitions/target.Price" - }, - "primary_image_url": { + "slug": { "type": "string" }, - "rating": { - "$ref": "#/definitions/target.Rating" - }, - "tcin": { - "example": "12954151", + "time_limit": { "type": "string" }, "title": { - "example": "Starbucks Pike Place Roast Medium Ground Coffee - 12oz", - "type": "string" - }, - "url": { "type": "string" } }, "type": "object" }, - "target.Question": { + "sportskeeda.QuizzesResponse": { "properties": { - "answers": { + "items": { "items": { - "$ref": "#/definitions/target.Answer" + "$ref": "#/definitions/sportskeeda.QuizSummary" }, "type": "array" }, - "author": { - "type": "string" - }, - "helpful": { - "type": "integer" - }, - "id": { - "type": "string" - }, - "submitted_at": { + "slug": { "type": "string" }, - "text": { + "title": { "type": "string" } }, "type": "object" }, - "target.QuestionsResponse": { + "sportskeeda.SalaryBreakdown": { "properties": { - "count": { + "base_salary": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "page": { + "guaranteed": { "type": "integer" }, - "per_page": { + "option_bonus": { "type": "integer" }, - "questions": { - "items": { - "$ref": "#/definitions/target.Question" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "other_bonus": { + "type": "integer" }, - "tcin": { - "type": "string" + "per_game_bonus": { + "type": "integer" }, - "total_pages": { + "roster_bonus": { "type": "integer" - } - }, - "type": "object" - }, - "target.Rating": { - "properties": { - "average": { - "example": 4.51, - "type": "number" }, - "rating_count": { - "example": 1586, + "signing_bonus": { "type": "integer" }, - "review_count": { - "example": 1076, + "workout_bonus": { "type": "integer" } }, "type": "object" }, - "target.Review": { + "sportskeeda.SalaryCapPlayer": { "properties": { - "author": { - "type": "string" + "breakdown": { + "$ref": "#/definitions/sportskeeda.SalaryBreakdown" }, - "helpful": { + "cap_number": { "type": "integer" }, - "id": { - "type": "string" + "cut_post_june_1_cap_saving": { + "type": "integer" }, - "rating": { + "cut_post_june_1_dead_money": { "type": "integer" }, - "submitted_at": { - "type": "string" + "cut_pre_june_1_cap_saving": { + "type": "integer" }, - "syndicated": { - "type": "boolean" + "cut_pre_june_1_dead_money": { + "type": "integer" }, - "text": { - "type": "string" + "extension_cap_saving": { + "type": "integer" }, - "title": { + "name": { "type": "string" }, - "verified": { - "type": "boolean" - } - }, - "type": "object" - }, - "target.ReviewsResponse": { - "properties": { - "count": { + "restructure_cap_saving": { "type": "integer" }, - "fetched_at": { + "slug": { "type": "string" }, - "page": { + "trade_post_june_1_cap_saving": { "type": "integer" }, - "per_page": { + "trade_post_june_1_dead_money": { "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/target.Review" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "tcin": { - "type": "string" - }, - "total": { + "trade_pre_june_1_cap_saving": { "type": "integer" }, - "total_pages": { + "trade_pre_june_1_dead_money": { "type": "integer" } }, "type": "object" }, - "target.SearchResponse": { + "sportskeeda.SalaryCapResponse": { "properties": { - "applied_filter_ids": { - "items": { - "type": "string" - }, - "type": "array" + "active_cap_spend": { + "type": "integer" }, - "count": { - "example": 24, + "cap_space": { "type": "integer" }, - "fetched_at": { + "dead_money": { + "type": "integer" + }, + "order": { "type": "string" }, - "filter_groups": { + "players": { "items": { - "$ref": "#/definitions/target.FilterGroup" + "$ref": "#/definitions/sportskeeda.SalaryCapPlayer" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" + "q": { + "type": "string" }, - "page_size": { - "example": 24, + "salary_cap": { "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/target.ProductSummary" - }, - "type": "array" + "season": { + "type": "integer" }, - "query": { - "example": "coffee", + "slug": { "type": "string" }, - "sort": { - "example": "relevance", + "sort_by": { "type": "string" }, - "source_url": { + "status": { + "enum": [ + "ok", + "no_data" + ], "type": "string" }, - "store_id": { - "example": 2885, - "type": "integer" + "team": { + "type": "string" }, "total": { - "example": 20939, - "type": "integer" - }, - "total_pages": { - "example": 50, "type": "integer" } }, "type": "object" }, - "target.Store": { + "sportskeeda.ScheduleMatch": { "properties": { - "address_line1": { - "example": "20745 Stevens Creek Blvd", + "competition": { "type": "string" }, - "city": { - "example": "Cupertino", + "date_time": { "type": "string" }, - "country": { - "example": "US", + "result": { "type": "string" }, - "distance_miles": { - "example": 2.62, - "type": "number" - }, - "hours": { - "items": { - "$ref": "#/definitions/target.StoreHoursDay" - }, - "type": "array" - }, - "name": { - "example": "Cupertino De Anza Blvd", + "score_1": { "type": "string" }, - "phone": { - "example": "408-725-2651", + "score_2": { "type": "string" }, - "postal_code": { - "example": "95014-2123", + "slug": { "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.", - "items": { - "type": "string" - }, - "type": "array" - }, - "state": { - "example": "CA", + "status": { "type": "string" }, - "status": { - "example": "Open", + "team_1": { "type": "string" }, - "store_id": { - "example": "323", + "team_2": { "type": "string" }, - "time_zone": { - "example": "PST", + "venue": { "type": "string" } }, "type": "object" }, - "target.StoreHoursDay": { + "sportskeeda.SectionLink": { "properties": { - "close_time": { - "example": "23:00:00", - "type": "string" + "external": { + "type": "boolean" }, - "date": { - "example": "2026-09-15", + "name": { "type": "string" }, - "day_name": { - "example": "Tuesday", + "slug": { "type": "string" }, - "is_open": { - "type": "boolean" - }, - "open_time": { - "example": "07:00:00", + "url": { "type": "string" } }, "type": "object" }, - "target.StoresResponse": { + "sportskeeda.SectionsResponse": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "place": { - "example": "95014", - "type": "string" - }, - "source_url": { - "type": "string" + "navigation": { + "items": { + "$ref": "#/definitions/sportskeeda.NavigationGroup" + }, + "type": "array" }, - "stores": { + "sections": { "items": { - "$ref": "#/definitions/target.Store" + "$ref": "#/definitions/sportskeeda.SportSection" }, "type": "array" } }, "type": "object" }, - "target.categoriesResponseDoc": { + "sportskeeda.SitemapItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "last_modified": { + "type": "string" }, - "data": { - "$ref": "#/definitions/target.CategoriesResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "target.categoryProductsResponseDoc": { + "sportskeeda.SitemapItemsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "has_more": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/target.CategoryProductsResponse" + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.SitemapItem" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "target.filterOptionsResponseDoc": { - "properties": { - "code": { - "example": 200, + "limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/target.FilterOptionsResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "target.productResponseDoc": { - "properties": { - "code": { - "example": 200, + "offset": { "type": "integer" }, - "data": { - "$ref": "#/definitions/target.ProductResponse" + "sitemap_url": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "target.questionsResponseDoc": { + "sportskeeda.SitemapSource": { "properties": { - "code": { - "type": "integer" + "last_modified": { + "type": "string" }, - "data": { - "$ref": "#/definitions/target.QuestionsResponse" + "name": { + "type": "string" }, - "msg": { + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "target.reviewsResponseDoc": { + "sportskeeda.SitemapsResponse": { "properties": { - "code": { - "type": "integer" - }, - "data": { - "$ref": "#/definitions/target.ReviewsResponse" - }, - "msg": { - "type": "string" + "sources": { + "items": { + "$ref": "#/definitions/sportskeeda.SitemapSource" + }, + "type": "array" } }, "type": "object" }, - "target.searchResponseDoc": { + "sportskeeda.SportSection": { "properties": { - "code": { - "example": 200, - "type": "integer" + "last_modified": { + "type": "string" }, - "data": { - "$ref": "#/definitions/target.SearchResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "target.storesResponseDoc": { + "sportskeeda.StandingsOptionsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "conferences": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/target.StoresResponse" + "seasons": { + "items": { + "type": "integer" + }, + "type": "array" }, - "msg": { - "example": "OK", + "slug": { "type": "string" } }, "type": "object" }, - "techcrunch.AuthorArticle": { + "sportskeeda.TableCell": { "properties": { - "category": { - "type": "string" - }, - "title": { + "slug": { "type": "string" }, - "url": { + "text": { "type": "string" } }, "type": "object" }, - "techcrunch.AuthorResponse": { + "sportskeeda.TablesResponse": { "properties": { - "articles": { + "matches": { "items": { - "$ref": "#/definitions/techcrunch.AuthorArticle" + "$ref": "#/definitions/sportskeeda.ScheduleMatch" }, "type": "array" }, - "biography": { + "slug": { + "type": "string" + }, + "status": { + "type": "string" + }, + "tables": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.DataTable" }, "type": "array" }, - "headshot_url": { + "title": { "type": "string" }, - "job_title": { + "views": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" + } + }, + "type": "object" + }, + "sportskeeda.TaxonomyResult": { + "properties": { + "id": { "type": "string" }, - "name": { + "image": { "type": "string" }, - "page": { + "path_slug": { + "type": "string" + }, + "post_count": { "type": "integer" }, - "social_links": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "slug": { + "type": "string" + }, + "taxonomy": { + "type": "string" + }, + "title": { + "type": "string" }, "url": { "type": "string" @@ -161186,50 +161273,98 @@ }, "type": "object" }, - "techradar.AuthorResponse": { + "sportskeeda.TaxonomySearchResponse": { "properties": { - "articles": { + "query": { + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/sportskeeda.TaxonomyResult" }, "type": "array" }, - "biography": { + "taxonomies": { "items": { + "enum": [ + "category", + "event", + "team", + "player", + "wiki", + "wiki_tag" + ], "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "sportskeeda.TopicBlock": { + "properties": { + "alt": { + "type": "string" }, - "has_next_page": { - "type": "boolean" + "caption": { + "type": "string" }, - "job_title": { + "embed_url": { "type": "string" }, - "name": { + "image": { "type": "string" }, - "page": { + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.TopicListItem" + }, + "type": "array" + }, + "level": { "type": "integer" }, - "slug": { - "type": "string" + "links": { + "items": { + "$ref": "#/definitions/sportskeeda.TopicLink" + }, + "type": "array" }, - "social_links": { + "ordered": { + "type": "boolean" + }, + "rows": { "items": { - "$ref": "#/definitions/techradar.AuthorSocialLink" + "items": { + "$ref": "#/definitions/sportskeeda.TopicTableCell" + }, + "type": "array" }, "type": "array" }, - "url": { + "text": { + "type": "string" + }, + "type": { + "enum": [ + "paragraph", + "heading", + "list", + "table", + "image", + "embed" + ], "type": "string" } }, "type": "object" }, - "techradar.AuthorSocialLink": { + "sportskeeda.TopicLink": { "properties": { - "platform": { + "slug": { + "type": "string" + }, + "text": { "type": "string" }, "url": { @@ -161238,51 +161373,44 @@ }, "type": "object" }, - "techstack.Technology": { + "sportskeeda.TopicListItem": { "properties": { - "categories": { + "links": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.TopicLink" }, "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" - }, - "name": { - "type": "string" - }, - "version": { + "text": { "type": "string" } }, "type": "object" }, - "techstack.UnmatchedEvidence": { + "sportskeeda.TopicResponse": { "properties": { - "domains": { + "author": { + "type": "string" + }, + "author_slug": { + "type": "string" + }, + "blocks": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.TopicBlock" }, "type": "array" }, - "generator": { - "type": "string" - } - }, - "type": "object" - }, - "telegraph.AuthorArticle": { - "properties": { - "excerpt": { + "last_modified": { "type": "string" }, - "published_at": { + "related": { + "items": { + "$ref": "#/definitions/sportskeeda.FeedItem" + }, + "type": "array" + }, + "slug": { "type": "string" }, "title": { @@ -161294,975 +161422,1045 @@ }, "type": "object" }, - "telegraph.AuthorResponse": { + "sportskeeda.TopicTableCell": { "properties": { - "articles": { + "colspan": { + "type": "integer" + }, + "header": { + "type": "boolean" + }, + "links": { "items": { - "$ref": "#/definitions/telegraph.AuthorArticle" + "$ref": "#/definitions/sportskeeda.TopicLink" }, "type": "array" }, - "bio": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" + "rowspan": { + "type": "integer" }, - "url": { + "text": { "type": "string" } }, "type": "object" }, - "tes.EmployerDetail": { + "sportskeeda.TradeValuePlayer": { "properties": { - "address": { + "name": { "type": "string" }, - "age_range": { + "position": { "type": "string" }, - "description": { - "type": "string" + "rank": { + "type": "integer" }, - "funding_status": { + "slug": { "type": "string" }, - "gender": { + "team": { "type": "string" }, - "id": { + "value": { "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.TradeValuesResponse": { + "properties": { + "limit": { + "type": "integer" }, - "location": { + "mode": { "type": "string" }, - "name": { - "type": "string" + "next_offset": { + "type": "integer" }, - "phase": { - "type": "string" + "offset": { + "type": "integer" }, - "positions": { + "players": { "items": { - "$ref": "#/definitions/tes.EmployerPosition" + "$ref": "#/definitions/sportskeeda.TradeValuePlayer" }, "type": "array" }, - "type": { + "position": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "tes.EmployerPosition": { - "properties": { - "id": { + "scoring": { "type": "string" }, - "title": { + "slug": { "type": "string" }, - "url": { + "superflex": { + "type": "boolean" + }, + "total": { + "type": "integer" + }, + "updated_at": { "type": "string" } }, "type": "object" }, - "tes.JobDetail": { + "sportskeeda.Transaction": { "properties": { - "application_email": { + "date": { "type": "string" }, - "application_url": { + "description": { "type": "string" }, - "closing_date": { - "type": "string" + "from_team": { + "$ref": "#/definitions/sportskeeda.TransactionParty" }, - "contract_terms": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "type": "integer" }, - "contract_types": { + "player": { + "$ref": "#/definitions/sportskeeda.TransactionPerson" + }, + "positions": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.TransactionPosition" }, "type": "array" }, - "description_excerpt": { - "type": "string" - }, - "employer": { - "type": "string" + "team": { + "$ref": "#/definitions/sportskeeda.TransactionParty" }, - "employer_header_url": { + "type": { "type": "string" - }, - "employer_logo_url": { + } + }, + "type": "object" + }, + "sportskeeda.TransactionMonth": { + "properties": { + "code": { "type": "string" }, - "employer_url": { + "label": { "type": "string" - }, - "employer_website": { + } + }, + "type": "object" + }, + "sportskeeda.TransactionParty": { + "properties": { + "abbr": { "type": "string" }, - "id": { + "name": { "type": "string" }, - "location": { + "slug": { "type": "string" - }, - "posted_date": { + } + }, + "type": "object" + }, + "sportskeeda.TransactionPerson": { + "properties": { + "name": { "type": "string" }, - "quick_apply": { - "type": "boolean" - }, - "salary": { + "slug": { "type": "string" - }, - "title": { + } + }, + "type": "object" + }, + "sportskeeda.TransactionPosition": { + "properties": { + "abbr": { "type": "string" }, - "url": { + "name": { "type": "string" } }, "type": "object" }, - "tes.JobFacet": { + "sportskeeda.TransactionTeam": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/tes.JobFacet" - }, - "type": "array" - }, - "count": { - "type": "integer" + "name": { + "type": "string" }, - "value": { + "slug": { "type": "string" } }, "type": "object" }, - "tes.JobFacets": { + "sportskeeda.TransactionsOptionsResponse": { "properties": { - "contract_terms": { - "items": { - "$ref": "#/definitions/tes.JobFacet" - }, - "type": "array" - }, - "contract_types": { + "months": { "items": { - "$ref": "#/definitions/tes.JobFacet" + "$ref": "#/definitions/sportskeeda.TransactionMonth" }, "type": "array" }, - "positions": { - "items": { - "$ref": "#/definitions/tes.JobFacet" - }, - "type": "array" + "season": { + "type": "integer" }, - "subjects": { + "seasons": { "items": { - "$ref": "#/definitions/tes.JobFacet" + "type": "integer" }, "type": "array" }, - "workplaces": { + "teams": { "items": { - "$ref": "#/definitions/tes.JobFacet" + "$ref": "#/definitions/sportskeeda.TransactionTeam" }, "type": "array" } }, "type": "object" }, - "tes.JobSearchResponse": { + "sportskeeda.TransactionsResponse": { "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." + "has_more": { + "type": "boolean" }, - "jobs": { + "items": { "items": { - "$ref": "#/definitions/tes.JobSummary" + "$ref": "#/definitions/sportskeeda.Transaction" }, "type": "array" }, - "keywords": { - "type": "string" - }, - "location": { + "month": { "type": "string" }, "page": { "type": "integer" }, - "page_size": { + "per_page": { + "type": "integer" + }, + "season": { "type": "integer" }, + "slug": { + "type": "string" + }, "total": { "type": "integer" } }, "type": "object" }, - "tes.JobSummary": { + "sportskeeda.VideoItem": { "properties": { - "closing_date": { + "channel": { "type": "string" }, - "contract_terms": { - "items": { - "type": "string" - }, - "type": "array" + "duration": { + "type": "string" }, - "contract_types": { - "items": { - "type": "string" - }, - "type": "array" + "image": { + "type": "string" }, - "employer": { + "slug": { "type": "string" }, - "employer_logo_url": { + "title": { "type": "string" }, - "id": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.VideoResponse": { + "properties": { + "description": { "type": "string" }, - "location": { + "id": { "type": "string" }, - "salary": { + "poster": { "type": "string" }, - "short_description": { + "slug": { "type": "string" }, - "title": { + "stream_url": { "type": "string" }, - "url": { + "title": { "type": "string" } }, "type": "object" }, - "tes.ResourceAttachment": { + "sportskeeda.VideosResponse": { "properties": { - "file_type": { - "type": "string" + "channels": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" }, - "preview_image_url": { + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.VideoItem" + }, + "type": "array" + }, + "slug": { "type": "string" }, - "size": { + "title": { "type": "string" } }, "type": "object" }, - "tes.ResourceDetail": { + "sportskeeda.WikiActivityResponse": { "properties": { - "age_range": { - "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).", + "activities": { "items": { - "$ref": "#/definitions/tes.ResourceAttachment" + "$ref": "#/definitions/sportskeeda.WikiContribution" }, "type": "array" }, - "author": { - "type": "string" - }, - "author_url": { - "type": "string" + "limit": { + "type": "integer" }, - "currency": { - "type": "string" + "page": { + "type": "integer" }, - "description": { + "slug": { "type": "string" }, - "free": { - "type": "boolean" - }, - "id": { + "sort": { "type": "string" }, - "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.", + "sort_by": { "type": "string" }, - "price": { - "type": "number" - }, - "rating": { - "type": "number" + "total_items": { + "type": "integer" }, - "rating_count": { + "total_pages": { "type": "integer" }, - "resource_type": { + "wiki": { "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).", + } + }, + "type": "object" + }, + "sportskeeda.WikiArticleResponse": { + "properties": { + "authors": { "items": { - "$ref": "#/definitions/tes.ResourceReview" + "type": "string" }, "type": "array" }, - "subject": { + "description": { "type": "string" }, - "thumbnail_url": { + "image_url": { "type": "string" }, - "title": { - "type": "string" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "tes.ResourceReview": { - "properties": { - "author": { + "published_at": { "type": "string" }, - "author_url": { + "section": { "type": "string" }, - "comment": { + "slug": { "type": "string" }, - "id": { + "title": { "type": "string" }, - "posted": { + "updated_at": { "type": "string" }, - "rating": { - "type": "number" + "wiki": { + "type": "string" } }, "type": "object" }, - "tes.ResourceSearchResponse": { + "sportskeeda.WikiCategoriesResponse": { "properties": { - "country": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "query": { - "type": "string" - }, - "resources": { + "categories": { "items": { - "$ref": "#/definitions/tes.ResourceSummary" + "$ref": "#/definitions/sportskeeda.WikiCategory" }, "type": "array" }, - "total": { - "type": "integer" + "wiki": { + "type": "string" } }, "type": "object" }, - "tes.ResourceShop": { + "sportskeeda.WikiCategory": { "properties": { - "avatar_url": { - "type": "string" + "children": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiCategory" + }, + "type": "array" }, - "bio": { + "path_slug": { "type": "string" }, - "downloads": { + "sequence": { "type": "integer" }, - "name": { + "slug": { "type": "string" }, - "page": { - "type": "integer" - }, - "rating": { - "type": "number" - }, - "rating_count": { - "type": "integer" - }, - "resources": { - "items": { - "$ref": "#/definitions/tes.ShopResourceSummary" - }, - "type": "array" - }, - "uploads": { + "taxonomy_id": { "type": "integer" }, - "url": { - "type": "string" - }, - "username": { + "title": { "type": "string" - }, - "views": { - "type": "integer" } }, "type": "object" }, - "tes.ResourceSummary": { + "sportskeeda.WikiContribution": { "properties": { - "author": { + "author_name": { "type": "string" }, - "bundle_original_price": { - "type": "number" - }, - "bundle_resource_count": { - "type": "integer" - }, - "currency": { + "author_slug": { "type": "string" }, - "downloads": { - "type": "integer" - }, - "file_types": { - "items": { - "type": "string" - }, - "type": "array" + "bytes_added": { + "type": "string" }, - "first_published": { + "bytes_removed": { "type": "string" }, - "free": { - "type": "boolean" + "created_at": { + "type": "string" }, "id": { - "type": "string" + "type": "integer" }, - "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" + "parent_wiki_name": { + "type": "string" }, - "last_published": { + "parent_wiki_slug": { "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).", + "path_slug": { "type": "string" }, - "on_sale": { - "type": "boolean" + "status": { + "type": "string" }, - "price": { - "type": "number" + "taxonomy_name": { + "type": "string" }, - "rating": { - "type": "number" + "updated_at": { + "type": "string" }, - "rating_count": { + "version_number": { "type": "integer" }, - "resource_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "thumbnail_url": { - "type": "string" - }, - "title": { + "words_added": { "type": "string" }, - "url": { + "words_removed": { "type": "string" } }, "type": "object" }, - "tes.SchoolSearchResponse": { + "sportskeeda.WikiContributorsResponse": { "properties": { - "page": { + "contributors": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiContribution" + }, + "type": "array" + }, + "limit": { "type": "integer" }, - "page_size": { + "page": { "type": "integer" }, - "query": { + "slug": { "type": "string" }, - "schools": { - "items": { - "$ref": "#/definitions/tes.SchoolSummary" - }, - "type": "array" + "sort": { + "type": "string" }, - "total": { + "sort_by": { + "type": "string" + }, + "total_items": { "type": "integer" }, "total_pages": { "type": "integer" + }, + "wiki": { + "type": "string" } }, "type": "object" }, - "tes.SchoolSummary": { + "sportskeeda.WikiIssue": { "properties": { - "address": { + "created_at": { "type": "string" }, - "country": { + "creator_name": { "type": "string" }, - "description": { + "creator_slug": { "type": "string" }, - "id": { + "description": { "type": "string" }, - "logo_url": { - "type": "string" + "id": { + "type": "integer" }, - "name": { + "last_opened_at": { "type": "string" }, - "post_code": { + "status": { "type": "string" }, - "url": { + "title": { "type": "string" } }, "type": "object" }, - "tes.ShopResourceSummary": { + "sportskeeda.WikiIssuesResponse": { "properties": { - "currency": { - "type": "string" + "closed_issues_count": { + "type": "integer" }, - "free": { - "type": "boolean" + "issues": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiIssue" + }, + "type": "array" }, - "id": { - "type": "string" + "limit": { + "type": "integer" }, - "price": { - "type": "number" + "opened_issues_count": { + "type": "integer" }, - "thumbnail_url": { + "page": { + "type": "integer" + }, + "slug": { "type": "string" }, - "title": { + "status": { "type": "string" }, - "url": { + "total_pages": { + "type": "integer" + }, + "wiki": { "type": "string" } }, "type": "object" }, - "tes.employerDetailResponseDoc": { + "sportskeeda.WikiOption": { "properties": { - "code": { - "example": 200, - "type": "integer" + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/tes.EmployerDetail" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "taxonomy_id": { + "type": "string" + }, + "taxonomy_slug": { "type": "string" } }, "type": "object" }, - "tes.jobDetailResponseDoc": { + "sportskeeda.WikiOptionsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tes.JobDetail" - }, - "msg": { - "example": "OK", - "type": "string" + "wikis": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiOption" + }, + "type": "array" } }, "type": "object" }, - "tes.jobSearchResponseDoc": { + "sportskeeda.WikiPageItem": { "properties": { - "code": { - "example": 200, + "id": { + "type": "string" + }, + "image": { + "type": "string" + }, + "meta": { + "$ref": "#/definitions/sportskeeda.WikiPageMeta" + }, + "path_slug": { + "type": "string" + }, + "post_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.JobSearchResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "taxonomy": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "tes.resourceDetailResponseDoc": { + "sportskeeda.WikiPageMeta": { "properties": { - "code": { - "example": 200, + "issues_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.ResourceDetail" + "last_updated": { + "type": "string" }, - "msg": { - "example": "OK", + "page_size": { + "type": "integer" + }, + "ratings": { "type": "string" } }, "type": "object" }, - "tes.resourceSearchResponseDoc": { + "sportskeeda.WikiPagesResponse": { "properties": { - "code": { - "example": 200, + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiPageItem" + }, + "type": "array" + }, + "limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.ResourceSearchResponse" + "page": { + "type": "integer" }, - "msg": { - "example": "OK", + "search": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "sort_by": { + "type": "string" + }, + "total_items": { + "type": "integer" + }, + "wiki": { "type": "string" } }, "type": "object" }, - "tes.resourceShopResponseDoc": { + "sportskeeda.WikiSummaryResponse": { "properties": { - "code": { - "example": 200, + "open_issues_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.ResourceShop" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "total_activity_count": { + "type": "integer" + }, + "total_contributor_count": { + "type": "integer" + }, + "wiki": { "type": "string" } }, "type": "object" }, - "tes.schoolSearchResponseDoc": { + "spotify.AlbumMeta": { "properties": { - "code": { - "example": 200, - "type": "integer" + "appVersion": { + "type": "string" }, - "data": { - "$ref": "#/definitions/tes.SchoolSearchResponse" + "fetchedAt": { + "type": "string" }, - "msg": { - "example": "OK", + "operationName": { "type": "string" + }, + "trackCount": { + "type": "integer" } }, "type": "object" }, - "teslajobs.ListResponse": { + "spotify.AlbumResponse": { "properties": { - "jobs": { + "albumType": { + "type": "string" + }, + "artists": { "items": { - "$ref": "#/definitions/teslajobs.TeslaJobListing" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "location": { - "example": "Palo Alto", + "copyrights": { + "items": { + "type": "string" + }, + "type": "array" + }, + "durationMs": { + "type": "integer" + }, + "externalUrl": { "type": "string" }, - "page": { - "example": 1, + "id": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "images": { + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" + }, + "isExplicit": { + "type": "boolean" + }, + "isPlayable": { + "type": "boolean" + }, + "limit": { "type": "integer" }, - "page_size": { - "example": 20, + "meta": { + "$ref": "#/definitions/spotify.AlbumMeta" + }, + "name": { + "type": "string" + }, + "offset": { "type": "integer" }, - "query": { - "example": "software engineer", + "releaseDate": { "type": "string" }, - "total": { - "example": 302, + "shareUrl": { + "type": "string" + }, + "totalTracks": { "type": "integer" + }, + "tracks": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "uri": { + "type": "string" } }, "type": "object" }, - "teslajobs.TeslaJob": { + "spotify.ArtistAlbumsMeta": { "properties": { - "apply_url": { - "type": "string" - }, - "compensation_text": { - "type": "string" - }, - "country": { - "example": "US", + "appVersion": { "type": "string" }, - "department": { - "example": "Tesla AI", - "type": "string" + "count": { + "type": "integer" }, - "description": { + "fetchedAt": { "type": "string" }, - "employment_type": { - "example": "fulltime", + "operationName": { "type": "string" - }, + } + }, + "type": "object" + }, + "spotify.ArtistAlbumsResponse": { + "properties": { "id": { - "example": "224501", "type": "string" }, - "job_family": { - "example": "AI", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "location": { - "example": "Palo Alto, California", - "type": "string" + "limit": { + "type": "integer" }, - "requirements": { - "type": "string" + "meta": { + "$ref": "#/definitions/spotify.ArtistAlbumsMeta" }, - "responsibilities": { - "type": "string" + "offset": { + "type": "integer" }, - "state": { - "example": "CA", + "order": { "type": "string" }, - "title": { - "example": "AI Engineer, Manipulation, Optimus", + "total": { + "type": "integer" + }, + "type": { "type": "string" }, - "url": { - "example": "https://www.tesla.com/careers/search/job/ai-engineer-manipulation-optimus-224501", + "uri": { "type": "string" } }, "type": "object" }, - "teslajobs.TeslaJobListing": { + "spotify.ArtistCollectionMeta": { "properties": { - "department": { - "example": "Tesla AI", + "appVersion": { "type": "string" }, - "id": { - "example": "224501", - "type": "string" + "count": { + "type": "integer" }, - "location": { - "example": "Palo Alto, California", + "fetchedAt": { "type": "string" }, - "title": { - "example": "AI Engineer, Manipulation, Optimus", + "operationName": { "type": "string" } }, "type": "object" }, - "teslajobs.jobResponseDoc": { + "spotify.ArtistCollectionResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/teslajobs.TeslaJob" + "items": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "meta": { + "$ref": "#/definitions/spotify.ArtistCollectionMeta" + }, + "uri": { "type": "string" } }, "type": "object" }, - "teslajobs.listResponseDoc": { + "spotify.ArtistMeta": { "properties": { - "code": { - "example": 200, + "appVersion": { + "type": "string" + }, + "discographyCount": { "type": "integer" }, - "data": { - "$ref": "#/definitions/teslajobs.ListResponse" + "fetchedAt": { + "type": "string" }, - "msg": { - "example": "OK", + "operationName": { "type": "string" + }, + "playlistCount": { + "type": "integer" + }, + "relatedCount": { + "type": "integer" + }, + "topTrackCount": { + "type": "integer" } }, "type": "object" }, - "theage.ArticleResponse": { + "spotify.ArtistResponse": { "properties": { - "authors": { + "biography": { + "type": "string" + }, + "discography": { "items": { - "type": "string" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "description": { + "externalUrl": { "type": "string" }, - "image_url": { + "followers": { + "type": "integer" + }, + "id": { "type": "string" }, - "is_accessible_for_free": { - "type": "boolean" + "imageUrl": { + "type": "string" }, - "is_truncated": { - "type": "boolean" + "images": { + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" }, - "keywords": { + "meta": { + "$ref": "#/definitions/spotify.ArtistMeta" + }, + "monthlyUsers": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "playlists": { "items": { - "type": "string" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "paragraphs": { + "related": { "items": { - "type": "string" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "paywalled": { - "type": "boolean" + "shareUrl": { + "type": "string" }, - "published_at": { + "topTracks": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + }, + "type": { "type": "string" }, - "section": { + "uri": { "type": "string" }, - "title": { + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "spotify.AudiobookChaptersMeta": { + "properties": { + "appVersion": { "type": "string" }, - "updated_at": { + "count": { + "type": "integer" + }, + "fetchedAt": { "type": "string" }, - "url": { + "operationName": { "type": "string" } }, "type": "object" }, - "theage.AuthorResponse": { + "spotify.AudiobookChaptersResponse": { "properties": { - "articles": { + "chapters": { "items": { - "$ref": "#/definitions/theage.HeadlineItem" + "$ref": "#/definitions/spotify.PodcastEpisodeSummary" }, "type": "array" }, - "bio": { + "id": { "type": "string" }, - "email": { - "type": "string" + "limit": { + "type": "integer" }, - "image_url": { - "type": "string" + "meta": { + "$ref": "#/definitions/spotify.AudiobookChaptersMeta" }, - "name": { - "type": "string" + "offset": { + "type": "integer" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" + "total": { + "type": "integer" }, - "url": { + "uri": { "type": "string" } }, "type": "object" }, - "theage.HeadlineItem": { + "spotify.AudiobookMeta": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { + "appVersion": { "type": "string" }, - "type": { + "fetchedAt": { "type": "string" }, - "url": { + "operationName": { "type": "string" } }, "type": "object" }, - "theatlantic.ArticleResponse": { + "spotify.AudiobookResponse": { "properties": { "authors": { "items": { @@ -162273,4195 +162471,4209 @@ "description": { "type": "string" }, - "image_url": { + "externalUrl": { "type": "string" }, - "metered": { - "type": "boolean" + "id": { + "type": "string" }, - "paragraphs": { + "imageUrl": { + "type": "string" + }, + "images": { "items": { - "type": "string" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "published_at": { + "isExplicit": { + "type": "boolean" + }, + "mediaType": { "type": "string" }, - "section": { + "meta": { + "$ref": "#/definitions/spotify.AudiobookMeta" + }, + "name": { "type": "string" }, - "tags": { + "narrators": { "items": { "type": "string" }, "type": "array" }, - "title": { + "publisher": { "type": "string" }, - "updated_at": { + "totalChapters": { + "type": "integer" + }, + "type": { "type": "string" }, - "url": { + "uri": { "type": "string" } }, "type": "object" }, - "theatlantic.AuthorResponse": { + "spotify.BrowsePageItem": { "properties": { - "articles": { + "description": { + "example": "The official podcast of comedian Joe Rogan.", + "type": "string" + }, + "externalUrl": { + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" + }, + "imageUrl": { + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/theatlantic.HeadlineItem" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "biography": { + "publisher": { + "example": "Joe Rogan", "type": "string" }, - "headshot_url": { + "subtitle": { + "example": "Joe Rogan", "type": "string" }, - "name": { + "title": { + "example": "The Joe Rogan Experience", "type": "string" }, - "url": { + "type": { + "example": "Podcast", + "type": "string" + }, + "uri": { + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", "type": "string" } }, "type": "object" }, - "theatlantic.HeadlineItem": { + "spotify.BrowsePageMeta": { "properties": { - "author": { - "type": "string" - }, - "description": { - "type": "string" - }, - "image_url": { + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "published_at": { + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "title": { + "operationName": { + "example": "browsePage", "type": "string" }, - "url": { - "type": "string" + "sectionCount": { + "example": 8, + "type": "integer" } }, "type": "object" }, - "theatlantic.HeadlinesResponse": { + "spotify.BrowsePageResponse": { "properties": { - "items": { + "meta": { + "$ref": "#/definitions/spotify.BrowsePageMeta" + }, + "sections": { "items": { - "$ref": "#/definitions/theatlantic.HeadlineItem" + "$ref": "#/definitions/spotify.BrowsePageSection" }, "type": "array" }, - "section": { + "subtitle": { + "example": "New shows and episodes", "type": "string" - } - }, - "type": "object" - }, - "theatlantic.Section": { - "properties": { - "name": { + }, + "title": { + "example": "Podcasts", "type": "string" }, - "slug": { + "type": { + "example": "BrowseSectionContainer", "type": "string" }, - "url": { + "uri": { + "example": "spotify:genre:podcasts-web", "type": "string" } }, "type": "object" }, - "theatlantic.SectionsResponse": { + "spotify.BrowsePageSection": { "properties": { - "sections": { + "items": { "items": { - "$ref": "#/definitions/theatlantic.Section" + "$ref": "#/definitions/spotify.BrowsePageItem" }, "type": "array" - } - }, - "type": "object" - }, - "theatlantic.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/theatlantic.ArticleResponse" }, - "msg": { - "example": "OK", + "subtitle": { + "example": "Recommended shows", "type": "string" - } - }, - "type": "object" - }, - "theatlantic.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/theatlantic.AuthorResponse" }, - "msg": { - "example": "OK", + "title": { + "example": "Popular podcasts", "type": "string" - } - }, - "type": "object" - }, - "theatlantic.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "totalCount": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/theatlantic.HeadlinesResponse" + "type": { + "example": "BrowseGenericSectionData", + "type": "string" }, - "msg": { - "example": "OK", + "uri": { + "example": "spotify:section:0JQ5IMCbQBLqNPkcmYxQPQ", "type": "string" } }, "type": "object" }, - "theatlantic.sectionsResponseDoc": { + "spotify.BrowseSectionMeta": { "properties": { - "code": { - "example": 200, - "type": "integer" + "appVersion": { + "example": "1.2.90.403.gf901f20f", + "type": "string" }, - "data": { - "$ref": "#/definitions/theatlantic.SectionsResponse" + "count": { + "example": 20, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "thedailybeast.AuthorArticle": { - "properties": { - "title": { + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "url": { + "operationName": { + "example": "browseSection", "type": "string" } }, "type": "object" }, - "thedailybeast.AuthorResponse": { + "spotify.BrowseSectionResponse": { "properties": { - "articles": { + "items": { "items": { - "$ref": "#/definitions/thedailybeast.AuthorArticle" + "$ref": "#/definitions/spotify.BrowsePageItem" }, "type": "array" }, - "bio": { - "items": { - "type": "string" - }, - "type": "array" + "limit": { + "example": 20, + "type": "integer" }, - "image_url": { - "type": "string" + "meta": { + "$ref": "#/definitions/spotify.BrowseSectionMeta" }, - "job_title": { + "offset": { + "example": 0, + "type": "integer" + }, + "subtitle": { + "example": "Recommended shows", "type": "string" }, - "name": { + "title": { + "example": "Popular podcasts", "type": "string" }, - "twitter": { + "totalCount": { + "example": 50, + "type": "integer" + }, + "type": { + "example": "BrowseGenericSectionData", "type": "string" }, - "url": { + "uri": { + "example": "spotify:section:0JQ5IMCbQBLqNPkcmYxQPQ", "type": "string" } }, "type": "object" }, - "thehill.AuthorArticle": { + "spotify.ChartItem": { "properties": { - "category": { + "description": { + "example": "The official podcast of comedian Joe Rogan.", "type": "string" }, - "category_url": { + "episodeDescription": { + "example": "A representative chart episode.", "type": "string" }, - "published_at": { + "episodeExternalUrl": { + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" }, - "title": { + "episodeImageUrl": { + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "thehill.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thehill.AuthorArticle" - }, - "type": "array" + "episodeName": { + "example": "Example episode", + "type": "string" }, - "bio": { + "episodeUri": { + "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", "type": "string" }, - "image_url": { + "externalUrl": { + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", "type": "string" }, - "job_title": { + "imageUrl": { + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" }, "name": { + "example": "The Joe Rogan Experience", "type": "string" }, - "url": { + "publisher": { + "example": "Joe Rogan", "type": "string" - } - }, - "type": "object" - }, - "thehindu.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thehindu.HeadlineItem" - }, - "type": "array" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "rank": { + "example": 1, + "type": "integer" }, - "designation": { + "rankMove": { + "example": "UNCHANGED", "type": "string" }, - "email": { + "showDescription": { + "example": "The official podcast of comedian Joe Rogan.", "type": "string" }, - "facebook_url": { + "showExternalUrl": { + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", "type": "string" }, - "image_url": { + "showImageUrl": { + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" }, - "linkedin_url": { + "showName": { + "example": "The Joe Rogan Experience", "type": "string" }, - "name": { + "showPublisher": { + "example": "Joe Rogan", "type": "string" }, - "twitter_url": { + "showUri": { + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", "type": "string" }, - "url": { + "uri": { + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", "type": "string" } }, "type": "object" }, - "thehindu.HeadlineItem": { + "spotify.ChartMeta": { "properties": { - "author": { - "type": "string" + "count": { + "example": 100, + "type": "integer" }, - "image_url": { + "fetchedAt": { + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "published_at": { + "sourceUrl": { + "example": "https://podcastcharts.byspotify.com/api/charts/top-podcasts?region=us", + "type": "string" + } + }, + "type": "object" + }, + "spotify.ChartResponse": { + "properties": { + "chart": { + "example": "top-podcasts", "type": "string" }, - "summary": { + "chartName": { + "example": "Top Podcasts", "type": "string" }, - "title": { + "chartType": { + "example": "chart", "type": "string" }, - "type": { + "items": { + "items": { + "$ref": "#/definitions/spotify.ChartItem" + }, + "type": "array" + }, + "limit": { + "example": 100, + "type": "integer" + }, + "meta": { + "$ref": "#/definitions/spotify.ChartMeta" + }, + "region": { + "example": "us", "type": "string" }, - "url": { + "regionName": { + "example": "United States", "type": "string" } }, "type": "object" }, - "thejournal.AuthorArticle": { + "spotify.CountryHubContentID": { "properties": { - "image_url": { - "type": "string" - }, - "section": { - "type": "string" - }, - "summary": { + "id": { + "example": "CHARTS", "type": "string" }, "title": { - "type": "string" - }, - "url": { + "example": "Featured Charts", "type": "string" } }, "type": "object" }, - "thejournal.AuthorResponse": { + "spotify.CountryHubContentMeta": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thejournal.AuthorArticle" - }, - "type": "array" - }, - "has_more": { - "type": "boolean" - }, - "id": { + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "name": { + "fetchedAt": { + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "slug": { - "type": "string" + "itemCount": { + "example": 20, + "type": "integer" }, - "url": { + "operationName": { + "example": "countryHubContent", "type": "string" + }, + "partialErrors": { + "description": "PartialErrors counts upstream GraphQL field errors tolerated alongside\nusable items. Zero on a fully clean response.", + "example": 1, + "type": "integer" } }, "type": "object" }, - "therealreal.AutocompleteResponse": { + "spotify.CountryHubContentResponse": { "properties": { - "source_url": { + "contentId": { + "example": "CHARTS", "type": "string" }, - "suggestions": { + "countryCode": { + "example": "US", + "type": "string" + }, + "countryName": { + "example": "United States", + "type": "string" + }, + "hexColor": { + "example": "#1DB954", + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/therealreal.Suggestion" + "$ref": "#/definitions/spotify.CountryHubItem" + }, + "type": "array" + }, + "meta": { + "$ref": "#/definitions/spotify.CountryHubContentMeta" + }, + "supportedContentIds": { + "items": { + "$ref": "#/definitions/spotify.CountryHubContentID" }, "type": "array" + }, + "supportedCountries": { + "items": { + "$ref": "#/definitions/spotify.PopularCountry" + }, + "type": "array" + }, + "title": { + "example": "Featured Charts", + "type": "string" } }, "type": "object" }, - "therealreal.CategoriesResponse": { + "spotify.CountryHubItem": { "properties": { - "categories": { + "album": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "artists": { "items": { - "$ref": "#/definitions/therealreal.Category" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "source_url": { + "attributes": { + "additionalProperties": { + "type": "string" + }, + "example": { + "{\"chart\"": "\"top-50\"}" + }, + "type": "object" + }, + "description": { + "example": "Your daily update of the most played tracks right now.", + "type": "string" + }, + "externalUrl": { + "example": "https://open.spotify.com/playlist/37i9dQZEVXbLRQDuF5jeBpM", + "type": "string" + }, + "imageUrl": { + "example": "https://charts-images.scdn.co/assets/locale_en/regional/daily/region_us_default.jpg", + "type": "string" + }, + "images": { + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" + }, + "owner": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "subtitle": { + "example": "Spotify", + "type": "string" + }, + "title": { + "example": "Top 50 - USA", + "type": "string" + }, + "type": { + "example": "Playlist", + "type": "string" + }, + "uri": { + "example": "spotify:playlist:37i9dQZEVXbLRQDuF5jeBpM", "type": "string" } }, "type": "object" }, - "therealreal.Category": { + "spotify.CountryHubMeta": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/therealreal.Category" - }, - "type": "array" + "appVersion": { + "example": "1.2.90.403.gf901f20f", + "type": "string" }, - "count": { - "example": 225361, + "fetchedAt": { + "example": "2026-05-13T20:41:13Z", + "type": "string" + }, + "itemCount": { + "example": 20, "type": "integer" }, - "id": { - "example": "493", + "operationName": { + "example": "countryHubsPage", "type": "string" }, - "name": { - "example": "Handbags", - "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" }, - "permalink": { - "example": "women/handbags", - "type": "string" + "sectionCount": { + "example": 5, + "type": "integer" } }, "type": "object" }, - "therealreal.CollectionSlug": { + "spotify.CountryHubResponse": { "properties": { - "slug": { - "example": "on-sale-now", + "countryCode": { + "example": "US", "type": "string" }, - "url": { - "example": "https://www.therealreal.com/sales/on-sale-now", + "countryName": { + "example": "United States", + "type": "string" + }, + "hexColor": { + "example": "#1DB954", "type": "string" + }, + "meta": { + "$ref": "#/definitions/spotify.CountryHubMeta" + }, + "sections": { + "items": { + "$ref": "#/definitions/spotify.CountryHubSection" + }, + "type": "array" + }, + "supportedCountries": { + "items": { + "$ref": "#/definitions/spotify.PopularCountry" + }, + "type": "array" } }, "type": "object" }, - "therealreal.CollectionsResponse": { + "spotify.CountryHubSection": { "properties": { - "collections": { + "contentId": { + "example": "CHARTS", + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/therealreal.CollectionSlug" + "$ref": "#/definitions/spotify.CountryHubItem" }, "type": "array" }, - "source_url": { + "title": { + "example": "Featured Charts", "type": "string" }, - "total": { - "example": 535, + "totalCount": { + "example": 20, "type": "integer" } }, "type": "object" }, - "therealreal.Condition": { + "spotify.HomeMeta": { "properties": { - "count": { - "example": 162975, - "type": "integer" + "appVersion": { + "example": "1.2.90.403.gf901f20f", + "type": "string" }, - "id": { - "example": "20", + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "name": { - "example": "Very Good", + "operationName": { + "example": "home", "type": "string" + }, + "sectionCount": { + "example": 8, + "type": "integer" } }, "type": "object" }, - "therealreal.ConditionsResponse": { + "spotify.HomeResponse": { "properties": { - "conditions": { + "facet": { + "example": "music", + "type": "string" + }, + "greeting": { + "example": "Good afternoon", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/spotify.HomeMeta" + }, + "sections": { "items": { - "$ref": "#/definitions/therealreal.Condition" + "$ref": "#/definitions/spotify.BrowsePageSection" }, "type": "array" }, - "source_url": { + "timeZone": { + "example": "UTC", "type": "string" } }, "type": "object" }, - "therealreal.Designer": { + "spotify.ImageAsset": { "properties": { - "id": { - "example": "267", - "type": "string" + "height": { + "example": 640, + "type": "integer" }, - "name": { - "example": "Chanel", + "url": { + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" }, - "slug": { - "example": "chanel", - "type": "string" + "width": { + "example": 640, + "type": "integer" } }, "type": "object" }, - "therealreal.DesignerDirectoryCategory": { + "spotify.PlaylistMeta": { "properties": { - "name": { - "example": "Women", + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "slug": { - "example": "women", - "type": "string" - } - }, - "type": "object" - }, - "therealreal.DesignersResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/therealreal.DesignerDirectoryCategory" - }, - "type": "array" + "episodeCount": { + "example": 0, + "type": "integer" }, - "category": { - "example": "women", + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "designers": { - "items": { - "$ref": "#/definitions/therealreal.Designer" - }, - "type": "array" + "itemCount": { + "example": 20, + "type": "integer" }, - "source_url": { + "operationName": { + "example": "fetchPlaylist", "type": "string" }, - "total": { - "example": 5413, + "trackCount": { + "example": 20, "type": "integer" } }, "type": "object" }, - "therealreal.Listing": { + "spotify.PlaylistResponse": { "properties": { - "available": { - "example": true, + "collaborative": { + "example": false, "type": "boolean" }, - "color": { - "example": "Blue", - "type": "string" - }, - "condition": { - "example": "Very Good", + "description": { + "example": "Your daily update of the most played tracks right now.", "type": "string" }, - "designer": { - "example": "Chanel", - "type": "string" + "episodes": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "designer_slug": { - "example": "chanel", + "externalUrl": { + "example": "https://open.spotify.com/playlist/37i9dQZEVXbLwpL8TjsxOG", "type": "string" }, - "gender": { - "example": "Women", - "type": "string" + "followers": { + "example": 17500000, + "type": "integer" }, "id": { - "example": "54388578", + "example": "37i9dQZEVXbLwpL8TjsxOG", "type": "string" }, - "image_url": { - "example": "https://product-images.therealreal.com/CHA1494621_1_enlarged.jpg", + "imageUrl": { + "example": "https://charts-images.scdn.co/assets/locale_en/regional/daily/region_global_default.jpg", "type": "string" }, "images": { "items": { - "type": "string" + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" + }, + "items": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, + "limit": { + "example": 20, + "type": "integer" + }, + "meta": { + "$ref": "#/definitions/spotify.PlaylistMeta" + }, "name": { - "example": "Denim Pearl Crush Wallet On Chain", + "example": "Top 50 - Global", "type": "string" }, - "original_price_usd": { - "example": 3800, - "type": "number" + "offset": { + "example": 0, + "type": "integer" }, - "price_usd": { - "example": 3800, - "type": "number" + "owner": { + "$ref": "#/definitions/spotify.SearchResultSummary" }, - "sku": { - "example": "CHA1494621", + "shareUrl": { + "example": "https://open.spotify.com/playlist/37i9dQZEVXbLwpL8TjsxOG", "type": "string" }, - "url": { - "example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu", + "total": { + "example": 50, + "type": "integer" + }, + "tracks": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + }, + "type": { + "example": "Playlist", "type": "string" }, - "waitlisted": { - "example": false, - "type": "boolean" + "uri": { + "example": "spotify:playlist:37i9dQZEVXbLwpL8TjsxOG", + "type": "string" } }, "type": "object" }, - "therealreal.ListingDetail": { + "spotify.PodcastEpisodeMeta": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "category_label": { - "example": "Women's Fashion & Accessories", - "type": "string" - }, - "category_name": { - "example": "Women", + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "color": { - "example": "Blue", + "fetchedAt": { + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "condition": { - "example": "Very Good", + "operationName": { + "example": "getEpisodeOrChapter", "type": "string" }, - "condition_detail": { - "example": "Minor discoloration throughout; minor discoloration at hardware; minor scuff at corner.", + "sourceUrl": { + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" - }, + } + }, + "type": "object" + }, + "spotify.PodcastEpisodeResponse": { + "properties": { "description": { + "example": "A new adventure from the Stinky Dragon crew.", "type": "string" }, - "designer": { - "example": "Chanel", - "type": "string" + "durationMs": { + "example": 3600000, + "type": "integer" }, - "designer_slug": { - "example": "chanel", + "externalUrl": { + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" }, - "gender": { - "example": "Women", + "htmlDescription": { + "example": "A new adventure from the Stinky Dragon crew.", "type": "string" }, "id": { - "example": "54388578", + "example": "2C2Y5kNq7qCVOVhbA0G3os", "type": "string" }, - "image_url": { - "example": "https://product-images.therealreal.com/CHA1494621_1_enlarged.jpg", + "imageUrl": { + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" }, "images": { "items": { - "type": "string" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "measurements": { - "additionalProperties": { - "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" - }, - "sku": { - "example": "CHA1494621", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "url": { - "example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu", - "type": "string" + "isExplicit": { + "example": false, + "type": "boolean" }, - "waitlisted": { + "isPaywallContent": { "example": false, "type": "boolean" - } - }, - "type": "object" - }, - "therealreal.ProductsResponse": { - "properties": { - "has_more": { + }, + "isPlayable": { "example": true, "type": "boolean" }, - "listings": { + "mediaTypes": { + "example": [ + "AUDIO" + ], "items": { - "$ref": "#/definitions/therealreal.Listing" + "type": "string" }, "type": "array" }, - "next_after": { - "example": "YXJyYXljb25uZWN0aW9uOjExOQ==", + "meta": { + "$ref": "#/definitions/spotify.PodcastEpisodeMeta" + }, + "name": { + "example": "Tales from the Stinky Dragon", "type": "string" }, - "source_url": { + "playabilityReason": { + "example": "PLAYABLE", "type": "string" }, - "total": { - "example": 404167, - "type": "integer" - } - }, - "type": "object" - }, - "therealreal.SimilarResponse": { - "properties": { - "listings": { + "previewAudioUrl": { + "example": "https://p.scdn.co/mp3-preview/example", + "type": "string" + }, + "previewAudioUrls": { + "example": [ + "https://p.scdn.co/mp3-preview/example" + ], "items": { - "$ref": "#/definitions/therealreal.Listing" + "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "therealreal.Suggestion": { - "properties": { - "text": { - "example": "gucci handbags", + "previewVideoUrl": { + "example": "https://p.scdn.co/video-preview/example", "type": "string" - } - }, - "type": "object" - }, - "therealreal.autocompleteResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/therealreal.AutocompleteResponse" }, - "msg": { - "example": "OK", + "releaseDate": { + "example": "2026-05-13", "type": "string" - } - }, - "type": "object" - }, - "therealreal.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/therealreal.CategoriesResponse" }, - "msg": { - "example": "OK", + "releaseDatePrecision": { + "example": "DAY", "type": "string" - } - }, - "type": "object" - }, - "therealreal.collectionsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/therealreal.CollectionsResponse" }, - "msg": { - "example": "OK", + "shareUrl": { + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" - } - }, - "type": "object" - }, - "therealreal.conditionsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/therealreal.ConditionsResponse" + "show": { + "$ref": "#/definitions/spotify.PodcastEpisodeShowSummary" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "therealreal.designersResponseDoc": { - "properties": { - "code": { - "example": 200, + "transcriptCount": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/therealreal.DesignersResponse" - }, - "msg": { - "example": "OK", + "type": { + "example": "Episode", "type": "string" - } - }, - "type": "object" - }, - "therealreal.listingResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/therealreal.ListingDetail" + "unplayabilityReasons": { + "example": [ + "not_available_in_region" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "uri": { + "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", "type": "string" - } - }, - "type": "object" - }, - "therealreal.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/therealreal.ProductsResponse" }, - "msg": { - "example": "OK", + "videoThumbnailUrl": { + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" - } - }, - "type": "object" - }, - "therealreal.similarResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/therealreal.SimilarResponse" }, - "msg": { - "example": "OK", - "type": "string" + "videoThumbnails": { + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" } }, "type": "object" }, - "thestarmy.AuthorArticle": { + "spotify.PodcastEpisodeShowSummary": { "properties": { - "image_url": { - "type": "string" - }, - "published_at": { + "description": { + "example": "Tales from the Stinky Dragon is an actual-play comedy podcast.", "type": "string" }, - "section": { + "externalUrl": { + "example": "https://open.spotify.com/show/1QQJ7FElLE0K6CIfZNCxU4", "type": "string" }, - "summary": { + "id": { + "example": "1QQJ7FElLE0K6CIfZNCxU4", "type": "string" }, - "title": { + "imageUrl": { + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "thestarmy.AuthorResponse": { - "properties": { - "articles": { + "images": { "items": { - "$ref": "#/definitions/thestarmy.AuthorArticle" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "email": { + "mediaType": { + "example": "MIXED", "type": "string" }, "name": { + "example": "Tales from the Stinky Dragon", "type": "string" }, - "url": { + "publisher": { + "example": "Stinky Dragon", + "type": "string" + }, + "showTypes": { + "example": [ + "PODCAST" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "example": "Podcast", + "type": "string" + }, + "uri": { + "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", "type": "string" } }, "type": "object" }, - "theverge.AuthorArticle": { + "spotify.PodcastEpisodeSummary": { "properties": { - "category": { + "description": { + "example": "A new adventure from the Stinky Dragon crew.", "type": "string" }, - "excerpt": { - "type": "string" + "durationMs": { + "example": 3600000, + "type": "integer" }, - "published_at": { + "externalUrl": { + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" }, - "title": { + "imageUrl": { + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "theverge.AuthorResponse": { - "properties": { - "articles": { + "images": { "items": { - "$ref": "#/definitions/theverge.AuthorArticle" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "bio": { + "isExplicit": { + "example": false, + "type": "boolean" + }, + "isPlayable": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Tales from the Stinky Dragon", "type": "string" }, - "job_title": { + "releaseDate": { + "example": "2026-05-13", "type": "string" }, - "name": { + "type": { + "example": "Episode", "type": "string" }, - "url": { + "uri": { + "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", "type": "string" } }, "type": "object" }, - "thisismoney.AuthorArticle": { + "spotify.PodcastEpisodesMeta": { "properties": { - "excerpt": { - "type": "string" - }, - "published_at": { + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "title": { + "fetchedAt": { + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "url": { + "operationName": { + "example": "queryPodcastEpisodes", "type": "string" } }, "type": "object" }, - "thisismoney.AuthorResponse": { + "spotify.PodcastEpisodesResponse": { "properties": { - "articles": { + "episodes": { "items": { - "$ref": "#/definitions/thisismoney.AuthorArticle" + "$ref": "#/definitions/spotify.PodcastEpisodeSummary" }, "type": "array" }, - "bio": { - "type": "string" + "limit": { + "example": 20, + "type": "integer" }, - "coverage": { - "items": { - "type": "string" - }, - "type": "array" + "meta": { + "$ref": "#/definitions/spotify.PodcastEpisodesMeta" }, - "job_title": { - "type": "string" + "offset": { + "example": 0, + "type": "integer" }, - "name": { - "type": "string" + "total": { + "example": 202, + "type": "integer" }, - "url": { + "uri": { + "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", "type": "string" } }, "type": "object" }, - "threads.Author": { + "spotify.PopularCountry": { "properties": { - "id": { + "code": { + "example": "us", "type": "string" }, "name": { - "type": "string" - }, - "username": { + "example": "United States", "type": "string" } }, "type": "object" }, - "threads.Post": { + "spotify.RecommendationSummary": { "properties": { - "author": { - "$ref": "#/definitions/threads.Author" - }, - "code": { + "description": { + "example": "The official podcast of comedian Joe Rogan.", "type": "string" }, - "image_url": { + "externalUrl": { + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", "type": "string" }, - "text": { + "imageUrl": { + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "threads.Profile": { - "properties": { - "avatar_url": { - "type": "string" + "images": { + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" }, - "biography": { + "publisher": { + "example": "Joe Rogan", "type": "string" }, - "followers_count": { - "type": "integer" - }, - "name": { + "subtitle": { + "example": "Joe Rogan", "type": "string" }, - "threads_count": { - "type": "integer" + "title": { + "example": "The Joe Rogan Experience", + "type": "string" }, - "url": { + "type": { + "example": "Podcast", "type": "string" }, - "username": { + "uri": { + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", "type": "string" } }, "type": "object" }, - "threads.ProfilePostsResult": { + "spotify.SearchMeta": { "properties": { - "has_more": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/threads.Thread" - }, - "type": "array" + "albumCount": { + "example": 3, + "type": "integer" }, - "next_cursor": { + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "username": { + "artistCount": { + "example": 5, + "type": "integer" + }, + "audiobookCount": { + "example": 2, + "type": "integer" + }, + "episodeCount": { + "example": 2, + "type": "integer" + }, + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", + "type": "string" + }, + "operationName": { + "example": "searchDesktop", "type": "string" + }, + "playlistCount": { + "example": 2, + "type": "integer" + }, + "resultCount": { + "example": 22, + "type": "integer" + }, + "showCount": { + "example": 4, + "type": "integer" + }, + "topCount": { + "example": 3, + "type": "integer" + }, + "trackCount": { + "example": 2, + "type": "integer" + }, + "userCount": { + "example": 2, + "type": "integer" } }, "type": "object" }, - "threads.RepliesResult": { + "spotify.SearchPodcastsMeta": { "properties": { - "code": { + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "has_more": { - "type": "boolean" + "episodeCount": { + "example": 2, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/threads.Thread" - }, - "type": "array" + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", + "type": "string" }, - "next_cursor": { + "operationName": { + "example": "searchPodcasts", "type": "string" }, - "pagination_limited": { - "type": "boolean" + "showCount": { + "example": 4, + "type": "integer" }, - "username": { - "type": "string" + "topCount": { + "example": 3, + "type": "integer" } }, "type": "object" }, - "threads.SearchResult": { + "spotify.SearchPodcastsResponse": { "properties": { - "has_more": { - "type": "boolean" - }, - "items": { + "episodes": { "items": { - "$ref": "#/definitions/threads.Thread" + "$ref": "#/definitions/spotify.PodcastEpisodeSummary" }, "type": "array" }, - "next_cursor": { - "type": "string" + "limit": { + "example": 20, + "type": "integer" }, - "query": { + "meta": { + "$ref": "#/definitions/spotify.SearchPodcastsMeta" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "searchTerm": { + "example": "hello", "type": "string" + }, + "shows": { + "items": { + "$ref": "#/definitions/spotify.RecommendationSummary" + }, + "type": "array" + }, + "topResults": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" } }, "type": "object" }, - "threads.Thread": { + "spotify.SearchResponse": { "properties": { - "author": { - "$ref": "#/definitions/threads.Author" - }, - "code": { - "type": "string" - }, - "created_at": { - "type": "string" + "albums": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "id": { - "type": "string" + "artists": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "image_urls": { + "audiobooks": { "items": { - "type": "string" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "is_reply": { - "type": "boolean" + "episodes": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "like_count": { + "limit": { + "example": 20, "type": "integer" }, - "quote_count": { - "type": "integer" + "meta": { + "$ref": "#/definitions/spotify.SearchMeta" }, - "reply_count": { + "offset": { + "example": 0, "type": "integer" }, - "reply_to": { - "type": "string" + "playlists": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "repost_count": { - "type": "integer" + "results": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "text": { + "searchTerm": { + "example": "hello", "type": "string" }, - "url": { - "type": "string" + "shows": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "video_urls": { + "topResults": { "items": { - "type": "string" + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + }, + "tracks": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + }, + "users": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" } }, "type": "object" }, - "threads.postResponseDoc": { + "spotify.SearchResultSummary": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "example": "The official podcast of comedian Joe Rogan.", + "type": "string" }, - "data": { - "$ref": "#/definitions/threads.Post" + "externalUrl": { + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" }, - "msg": { - "example": "OK", + "imageUrl": { + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" - } - }, - "type": "object" - }, - "threads.profilePostsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.ProfilePostsResult" + "images": { + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" }, - "msg": { - "example": "OK", + "publisher": { + "example": "Joe Rogan", "type": "string" - } - }, - "type": "object" - }, - "threads.profileResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.Profile" + "subtitle": { + "example": "Joe Rogan", + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "The Joe Rogan Experience", "type": "string" - } - }, - "type": "object" - }, - "threads.repliesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.RepliesResult" + "type": { + "example": "Podcast", + "type": "string" }, - "msg": { - "example": "OK", + "uri": { + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", "type": "string" } }, "type": "object" }, - "threads.searchResponseDoc": { + "spotify.ShowMetadataMeta": { "properties": { - "code": { - "example": 200, - "type": "integer" + "appVersion": { + "example": "1.2.90.403.gf901f20f", + "type": "string" }, - "data": { - "$ref": "#/definitions/threads.SearchResult" + "fetchedAt": { + "example": "2026-05-13T20:41:13Z", + "type": "string" }, - "msg": { - "example": "OK", + "operationName": { + "example": "queryShowMetadataV2", "type": "string" } }, "type": "object" }, - "ticketmaster.Attraction": { + "spotify.ShowMetadataResponse": { "properties": { - "classification": { - "$ref": "#/definitions/ticketmaster.Classification" + "description": { + "example": "Tales from the Stinky Dragon is an actual-play comedy podcast.", + "type": "string" }, - "discovery_id": { - "example": "K8vZ9172Qo7", + "externalUrl": { + "example": "https://open.spotify.com/show/1QQJ7FElLE0K6CIfZNCxU4", "type": "string" }, - "has_artist_video": { + "imageUrl": { + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "type": "string" + }, + "images": { + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" + }, + "isExplicit": { + "example": false, "type": "boolean" }, - "id": { - "example": "1688071", + "mediaType": { + "example": "MIXED", "type": "string" }, - "image_url": { - "type": "string" + "meta": { + "$ref": "#/definitions/spotify.ShowMetadataMeta" }, "name": { - "example": "Ariana Grande", + "example": "Tales from the Stinky Dragon", "type": "string" }, - "setlist_source_url": { + "publisher": { + "example": "Stinky Dragon", "type": "string" }, - "setlists": { - "items": { - "$ref": "#/definitions/ticketmaster.Setlist" - }, - "type": "array" + "totalEpisodes": { + "example": 202, + "type": "integer" }, - "synopsis": { + "type": { + "example": "Podcast", "type": "string" }, - "url": { + "uri": { + "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", "type": "string" } }, "type": "object" }, - "ticketmaster.AttractionRef": { + "spotify.ShowRecommendationsMeta": { "properties": { - "discovery_id": { - "example": "K8vZ9172Qo7", - "type": "string" - }, - "id": { - "example": "1688071", + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "image_url": { - "type": "string" + "count": { + "example": 10, + "type": "integer" }, - "name": { - "example": "Ariana Grande", + "fetchedAt": { + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "url": { + "operationName": { + "example": "internalLinkRecommenderShow", "type": "string" } }, "type": "object" }, - "ticketmaster.AttractionRelatedResponse": { + "spotify.ShowRecommendationsResponse": { "properties": { - "attraction_id": { - "example": "1688071", - "type": "string" + "meta": { + "$ref": "#/definitions/spotify.ShowRecommendationsMeta" }, - "attractions": { + "recommendations": { "items": { - "$ref": "#/definitions/ticketmaster.AttractionRef" + "$ref": "#/definitions/spotify.RecommendationSummary" }, "type": "array" }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "uri": { + "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", "type": "string" } }, "type": "object" }, - "ticketmaster.AttractionResponse": { + "spotify.TrackMeta": { "properties": { - "attraction": { - "$ref": "#/definitions/ticketmaster.Attraction" + "appVersion": { + "example": "1.2.90.403.gf901f20f", + "type": "string" }, - "fetched_at": { + "fetchedAt": { + "example": "2026-05-13T20:41:10Z", "type": "string" }, - "source_url": { + "operationName": { + "example": "getTrack", "type": "string" } }, "type": "object" }, - "ticketmaster.AttractionReviewsResponse": { + "spotify.TrackRecommendedMeta": { "properties": { - "ai_review_summary": { - "type": "string" - }, - "attraction_id": { - "example": "1688071", + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "average_rating": { - "example": 4.6, - "type": "number" - }, - "best_rating": { - "example": 5, - "type": "number" + "count": { + "example": 10, + "type": "integer" }, - "fetched_at": { + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", "type": "string" }, + "operationName": { + "example": "internalLinkRecommenderTrack", + "type": "string" + } + }, + "type": "object" + }, + "spotify.TrackRecommendedResponse": { + "properties": { "limit": { "example": 10, "type": "integer" }, - "offset": { - "example": 0, - "type": "integer" + "meta": { + "$ref": "#/definitions/spotify.TrackRecommendedMeta" }, - "reviews": { + "recommendations": { "items": { - "$ref": "#/definitions/ticketmaster.Review" + "$ref": "#/definitions/spotify.RecommendationSummary" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "time_zone": { - "example": "America/New_York", + "uri": { + "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", "type": "string" - }, - "total": { - "example": 2024, - "type": "integer" } }, "type": "object" }, - "ticketmaster.Classification": { + "spotify.TrackResponse": { "properties": { - "genre": { - "example": "Pop", - "type": "string" + "album": { + "$ref": "#/definitions/spotify.SearchResultSummary" }, - "segment": { - "example": "Music", - "type": "string" + "artists": { + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "sub_genre": { - "example": "Electro Pop", + "discNumber": { + "example": 1, + "type": "integer" + }, + "durationMs": { + "example": 234083, + "type": "integer" + }, + "externalUrl": { + "example": "https://open.spotify.com/track/4vGg44GdCw3X8i8r01XJH0", "type": "string" }, - "sub_type": { - "example": "Musician", + "id": { + "example": "4vGg44GdCw3X8i8r01XJH0", "type": "string" }, - "type": { - "example": "Individual", + "imageUrl": { + "example": "https://i.scdn.co/image/ab67616d0000b273f377730d2a9c2e432139ac79", "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.DiscoverCategoriesResponse": { - "properties": { - "categories": { + }, + "images": { "items": { - "$ref": "#/definitions/ticketmaster.DiscoverCategory" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "count": { - "type": "integer" + "isExplicit": { + "example": false, + "type": "boolean" }, - "fetched_at": { + "isPlayable": { + "example": true, + "type": "boolean" + }, + "meta": { + "$ref": "#/definitions/spotify.TrackMeta" + }, + "name": { + "example": "Example Track", "type": "string" }, - "page": { - "type": "integer" + "playabilityReason": { + "example": "PLAYABLE", + "type": "string" }, - "per_page": { - "type": "integer" + "playcount": { + "example": "13129249", + "type": "string" }, - "section": { + "previewAudioUrl": { + "example": "https://p.scdn.co/mp3-preview/example", "type": "string" }, - "source_urls": { + "previewAudioUrls": { + "example": [ + "https://p.scdn.co/mp3-preview/example" + ], "items": { "type": "string" }, "type": "array" }, - "total": { + "shareUrl": { + "example": "https://open.spotify.com/track/4vGg44GdCw3X8i8r01XJH0", + "type": "string" + }, + "trackNumber": { + "example": 7, "type": "integer" + }, + "type": { + "example": "Track", + "type": "string" + }, + "unplayabilityReasons": { + "example": [ + "not_available_in_region" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "uri": { + "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", + "type": "string" } }, "type": "object" }, - "ticketmaster.DiscoverCategory": { + "spotify.TrackSimilarAlbumsMeta": { "properties": { - "id": { + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "major": { - "type": "boolean" - }, - "name": { - "type": "string" + "count": { + "example": 10, + "type": "integer" }, - "section": { + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "url": { + "operationName": { + "example": "similarAlbumsBasedOnThisTrack", "type": "string" } }, "type": "object" }, - "ticketmaster.DiscoverCitiesResponse": { + "spotify.TrackSimilarAlbumsResponse": { "properties": { - "cities": { + "albums": { "items": { - "$ref": "#/definitions/ticketmaster.DiscoverCity" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "count": { - "type": "integer" - }, - "country": { - "type": "string" - }, - "fetched_at": { - "type": "string" + "albumsOnly": { + "example": true, + "type": "boolean" }, - "page": { + "limit": { + "example": 10, "type": "integer" }, - "per_page": { - "type": "integer" + "meta": { + "$ref": "#/definitions/spotify.TrackSimilarAlbumsMeta" }, - "source_url": { + "uri": { + "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "ticketmaster.DiscoverCity": { + "spotify.UserProfileFollowersResponse": { "properties": { - "country": { - "type": "string" + "limit": { + "example": 50, + "type": "integer" }, - "image_url": { - "type": "string" + "meta": { + "$ref": "#/definitions/spotify.UserProfileMeta" }, - "locale": { - "type": "string" + "offset": { + "example": 0, + "type": "integer" }, - "name": { - "type": "string" + "profiles": { + "items": { + "$ref": "#/definitions/spotify.UserProfileSummary" + }, + "type": "array" }, - "slug": { + "total": { + "example": 998, + "type": "integer" + }, + "uri": { + "example": "spotify:user:spotify", "type": "string" }, - "url": { + "username": { + "example": "spotify", "type": "string" } }, "type": "object" }, - "ticketmaster.EventDetail": { + "spotify.UserProfileMeta": { "properties": { - "attractions": { - "items": { - "$ref": "#/definitions/ticketmaster.AttractionRef" - }, - "type": "array" - }, - "cancelled": { - "type": "boolean" - }, - "classification": { - "$ref": "#/definitions/ticketmaster.Classification" - }, - "currency": { - "example": "USD", - "type": "string" - }, - "description": { + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "discovery_id": { - "example": "vv1A7ZkG_GkdqBxS4", - "type": "string" + "artistCount": { + "example": 0, + "type": "integer" }, - "event_change_status": { - "example": "none", + "fetchedAt": { + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "event_type": { - "example": "STANDARD", + "operationName": { + "example": "userProfileView", "type": "string" }, - "id": { - "example": "04006319DDEA2CD5", - "type": "string" + "playlistCount": { + "example": 10, + "type": "integer" }, - "image_url": { + "profileCount": { + "example": 50, + "type": "integer" + } + }, + "type": "object" + }, + "spotify.UserProfilePlaylist": { + "properties": { + "externalUrl": { + "example": "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M", "type": "string" }, - "limited_availability": { - "type": "boolean" + "followersCount": { + "example": 34324513, + "type": "integer" }, - "onsale_time": { - "example": "2025-09-10T15:00:00Z", + "id": { + "example": "37i9dQZF1DXcBWIGoYBM5M", "type": "string" }, - "postponed": { - "type": "boolean" - }, - "presales": { - "items": { - "$ref": "#/definitions/ticketmaster.Presale" - }, - "type": "array" - }, - "product_type": { - "example": "General", + "imageUrl": { + "example": "https://i.scdn.co/image/ab67706f0000000273f7bb6e77ec5e23d7840ae5", "type": "string" }, - "rescheduled": { + "isFollowing": { + "example": false, "type": "boolean" }, - "seatmap_url": { + "name": { + "example": "Today’s Top Hits", "type": "string" }, - "sold_out": { - "type": "boolean" - }, - "start_time": { - "example": "2026-08-04T02:00:00Z", + "ownerName": { + "example": "Spotify", "type": "string" }, - "tba": { - "type": "boolean" - }, - "ticketing_status": { - "example": "UNKNOWN", + "ownerUri": { + "example": "spotify:user:spotify", "type": "string" }, - "time_zone": { - "example": "America/Chicago", + "ownerUrl": { + "example": "https://open.spotify.com/user/spotify", "type": "string" }, - "title": { - "example": "Ariana Grande - The Eternal Sunshine Tour", + "ownerUsername": { + "example": "spotify", "type": "string" }, - "url": { + "uri": { + "example": "spotify:playlist:37i9dQZF1DXcBWIGoYBM5M", "type": "string" - }, - "venue": { - "$ref": "#/definitions/ticketmaster.VenueRef" - }, - "virtual": { - "type": "boolean" } }, "type": "object" }, - "ticketmaster.EventResponse": { + "spotify.UserProfilePlaylistsResponse": { "properties": { - "event": { - "$ref": "#/definitions/ticketmaster.EventDetail" + "limit": { + "example": 20, + "type": "integer" }, - "fetched_at": { + "meta": { + "$ref": "#/definitions/spotify.UserProfileMeta" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "publicPlaylists": { + "items": { + "$ref": "#/definitions/spotify.UserProfilePlaylist" + }, + "type": "array" + }, + "totalPublicPlaylistsCount": { + "example": 1519, + "type": "integer" + }, + "uri": { + "example": "spotify:user:spotify", "type": "string" }, - "source_url": { + "username": { + "example": "spotify", "type": "string" } }, "type": "object" }, - "ticketmaster.EventSummary": { + "spotify.UserProfileResponse": { "properties": { - "attractions": { - "items": { - "$ref": "#/definitions/ticketmaster.AttractionRef" - }, - "type": "array" - }, - "cancelled": { + "allowFollows": { + "example": true, "type": "boolean" }, - "discovery_id": { - "example": "vv1A7ZkG_GkdqBxS4", - "type": "string" + "color": { + "example": 16085920, + "type": "integer" }, - "event_change_status": { - "example": "none", + "externalUrl": { + "example": "https://open.spotify.com/user/spotify", "type": "string" }, - "id": { - "example": "04006319DDEA2CD5", - "type": "string" + "followersCount": { + "example": 12162371, + "type": "integer" }, - "image_url": { - "type": "string" + "followingCount": { + "example": 327, + "type": "integer" }, - "limited_availability": { + "hasSpotifyImage": { + "example": true, "type": "boolean" }, - "onsale_time": { - "example": "2025-09-10T15:00:00Z", + "hasSpotifyName": { + "example": true, + "type": "boolean" + }, + "imageUrl": { + "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", "type": "string" }, - "postponed": { + "isCurrentUser": { + "example": false, "type": "boolean" }, - "presales": { - "items": { - "$ref": "#/definitions/ticketmaster.Presale" - }, - "type": "array" - }, - "rescheduled": { + "isVerified": { + "example": true, "type": "boolean" }, - "seatmap_url": { + "meta": { + "$ref": "#/definitions/spotify.UserProfileMeta" + }, + "name": { + "example": "Spotify", "type": "string" }, - "sold_out": { - "type": "boolean" + "publicPlaylists": { + "items": { + "$ref": "#/definitions/spotify.UserProfilePlaylist" + }, + "type": "array" }, - "start_time": { - "example": "2026-08-04T02:00:00Z", - "type": "string" + "recentlyPlayedArtists": { + "items": { + "$ref": "#/definitions/spotify.UserProfileSummary" + }, + "type": "array" }, - "tba": { + "showFollows": { + "example": true, "type": "boolean" }, - "ticketing_status": { - "example": "UNKNOWN", - "type": "string" + "topArtists": { + "$ref": "#/definitions/spotify.UserProfileTopArtists" }, - "time_zone": { - "example": "America/Chicago", - "type": "string" + "totalPublicPlaylistsCount": { + "example": 1519, + "type": "integer" }, - "title": { - "example": "Ariana Grande - The Eternal Sunshine Tour", + "uri": { + "example": "spotify:user:spotify", "type": "string" }, - "url": { + "username": { + "example": "spotify", "type": "string" - }, - "venue": { - "$ref": "#/definitions/ticketmaster.VenueRef" - }, - "virtual": { - "type": "boolean" } }, "type": "object" }, - "ticketmaster.EventsResponse": { + "spotify.UserProfileSummary": { "properties": { - "count": { - "example": 20, + "color": { + "example": 16085920, "type": "integer" }, - "entity_id": { + "externalUrl": { + "example": "https://open.spotify.com/user/example", "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/ticketmaster.EventSummary" - }, - "type": "array" + "followersCount": { + "example": 1000, + "type": "integer" }, - "fetched_at": { + "imageUrl": { + "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", "type": "string" }, - "page": { - "type": "integer" + "isFollowing": { + "example": false, + "type": "boolean" }, - "query": { + "name": { + "example": "Example", "type": "string" }, - "sort": { - "example": "date", + "uri": { + "example": "spotify:user:example", "type": "string" }, - "source_url": { + "username": { + "example": "example", "type": "string" - }, - "total": { - "example": 28, - "type": "integer" } }, "type": "object" }, - "ticketmaster.Presale": { + "spotify.UserProfileTopArtists": { "properties": { - "end_time": { - "example": "2025-09-10T03:00:00Z", + "imageUrl": { + "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", "type": "string" }, - "name": { - "example": "Artist Presale", + "subtitle": { + "example": "Only visible to the user", "type": "string" }, - "start_time": { - "example": "2025-09-09T15:00:00Z", + "title": { + "example": "Top artists this month", + "type": "string" + }, + "topArtistsPageUri": { + "example": "spotify:user:spotify:top:artists", "type": "string" } }, "type": "object" }, - "ticketmaster.Review": { + "spotify.albumResponseDoc": { "properties": { - "city": { - "example": "Chicago", - "type": "string" - }, - "date_created": { - "example": "2026-08-14T16:14:29Z", - "type": "string" - }, - "nick_name": { - "example": "Lynn", - "type": "string" - }, - "rating": { - "example": 5, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "review": { - "type": "string" - }, - "title": { - "example": "Best concert of my life", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.AlbumResponse" }, - "venue": { - "example": "United Center", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.Setlist": { + "spotify.artistAlbumsResponseDoc": { "properties": { - "city_name": { - "example": "London", - "type": "string" - }, - "country_name": { - "example": "United Kingdom", - "type": "string" - }, - "event_date": { - "example": "2026-08-20", - "type": "string" - }, - "sets": { - "items": { - "$ref": "#/definitions/ticketmaster.SetlistSet" - }, - "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" }, - "tour_name": { - "example": "Eternal Sunshine", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.ArtistAlbumsResponse" }, - "venue_name": { - "example": "The O2 Arena", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.SetlistSet": { + "spotify.artistCollectionResponseDoc": { "properties": { - "name": { - "example": "Act I", - "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" }, - "songs": { - "items": { - "$ref": "#/definitions/ticketmaster.SetlistSong" - }, - "type": "array" + "data": { + "$ref": "#/definitions/spotify.ArtistCollectionResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.SetlistSong": { + "spotify.artistResponseDoc": { "properties": { - "name": { - "example": "thank u, next", - "type": "string" - }, - "original_artist": { - "example": "Lady Gaga", - "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" }, - "performance_notes": { - "example": "extended outro", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.ArtistResponse" }, - "pre_recorded": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.Suggestion": { + "spotify.audiobookChaptersResponseDoc": { "properties": { - "category": { - "type": "string" - }, - "event_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" }, - "image_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.AudiobookChaptersResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.SuggestionsResponse": { + "spotify.audiobookResponseDoc": { "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" - }, - "query": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.AudiobookResponse" }, - "suggestions": { - "items": { - "$ref": "#/definitions/ticketmaster.Suggestion" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.TrendingAttraction": { + "spotify.browsePageResponseDoc": { "properties": { - "discovery_id": { - "example": "K8vZ9172Qo7", - "type": "string" - }, - "genre": { - "example": "Pop", - "type": "string" - }, - "genre_id": { - "example": "KnvZfZ7vAev", - "type": "string" - }, - "id": { - "example": "1688071", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "images": { - "items": { - "$ref": "#/definitions/ticketmaster.TrendingAttractionImage" - }, - "type": "array" - }, - "name": { - "example": "Ariana Grande", - "type": "string" - }, - "rank": { - "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" }, - "segment": { - "example": "Music", - "type": "string" - }, - "segment_id": { - "example": "KZFzniwnSyZfZ7v7nJ", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.TrendingAttractionImage": { - "properties": { - "ratio": { - "example": "16_9", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.BrowsePageResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.TrendingAttractionsResponse": { + "spotify.browseSectionResponseDoc": { "properties": { - "attractions": { - "items": { - "$ref": "#/definitions/ticketmaster.TrendingAttraction" - }, - "type": "array" - }, - "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" + "data": { + "$ref": "#/definitions/spotify.BrowseSectionResponse" }, - "source_url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.Venue": { + "spotify.chartsResponseDoc": { "properties": { - "address": { - "example": "1901 W Madison", - "type": "string" - }, - "city": { - "example": "Chicago", - "type": "string" - }, - "city_categories": { - "items": { - "$ref": "#/definitions/ticketmaster.VenueCityCategory" - }, - "type": "array" - }, - "country": { - "example": "US", - "type": "string" - }, - "discovery_id": { - "example": "KovZpa2M7e", - "type": "string" - }, - "id": { - "example": "32882", - "type": "string" - }, - "image_url": { - "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", - "type": "string" - }, - "seat_maps": { - "items": { - "$ref": "#/definitions/ticketmaster.VenueSeatMap" - }, - "type": "array" - }, - "state": { - "example": "IL", - "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" }, - "time_zone": { - "example": "America/Chicago", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.ChartResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.VenueCityCategory": { + "spotify.countryHubContentResponseDoc": { "properties": { - "id": { - "example": "KZFzniwnSyZfZ7v7nJ", - "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": "Concerts", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.CountryHubContentResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.VenueEnhancedDetailsResponse": { + "spotify.countryHubResponseDoc": { "properties": { - "fetched_at": { - "type": "string" - }, - "header_image_url": { - "type": "string" - }, - "related_links": { - "items": { - "$ref": "#/definitions/ticketmaster.VenueRelatedLink" - }, - "type": "array" - }, - "source_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" }, - "venue_id": { - "example": "32882", - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.VenueInfoBlock": { - "properties": { - "name": { - "example": "Parking", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.CountryHubResponse" }, - "text": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.VenueRef": { + "spotify.episodeResponseDoc": { "properties": { - "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" - }, - "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" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "state": { - "example": "IL", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.PodcastEpisodeResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.VenueRelatedLink": { + "spotify.homeResponseDoc": { "properties": { - "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" }, - "title": { - "example": "Chicago Bulls", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.HomeResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.VenueResponse": { + "spotify.playlistResponseDoc": { "properties": { - "fetched_at": { - "type": "string" - }, - "source_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" }, - "venue": { - "$ref": "#/definitions/ticketmaster.Venue" - } - }, - "type": "object" - }, - "ticketmaster.VenueSeatMap": { - "properties": { - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.PlaylistResponse" }, - "name": { - "example": "Chicago Bulls", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.attractionRelatedResponseDoc": { + "spotify.searchCatalogResponseDoc": { "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/ticketmaster.AttractionRelatedResponse" + "$ref": "#/definitions/spotify.SearchResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.attractionResponseDoc": { + "spotify.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/ticketmaster.AttractionResponse" + "$ref": "#/definitions/spotify.SearchPodcastsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.attractionReviewsResponseDoc": { + "spotify.showEpisodesResponseDoc": { "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/ticketmaster.AttractionReviewsResponse" + "$ref": "#/definitions/spotify.PodcastEpisodesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.categoriesResponseDoc": { + "spotify.showRecommendationsResponseDoc": { "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/ticketmaster.DiscoverCategoriesResponse" + "$ref": "#/definitions/spotify.ShowRecommendationsResponse" }, "msg": { - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.citiesResponseDoc": { + "spotify.showResponseDoc": { "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/ticketmaster.DiscoverCitiesResponse" + "$ref": "#/definitions/spotify.ShowMetadataResponse" }, "msg": { - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.eventResponseDoc": { + "spotify.trackRecommendedResponseDoc": { "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/ticketmaster.EventResponse" + "$ref": "#/definitions/spotify.TrackRecommendedResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.eventsResponseDoc": { + "spotify.trackResponseDoc": { "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/ticketmaster.EventsResponse" + "$ref": "#/definitions/spotify.TrackResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.suggestionsResponseDoc": { + "spotify.trackSimilarAlbumsResponseDoc": { "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/ticketmaster.SuggestionsResponse" + "$ref": "#/definitions/spotify.TrackSimilarAlbumsResponse" }, "msg": { - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketmaster.trendingAttractionsResponseDoc": { + "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/ticketmaster.TrendingAttractionsResponse" + "$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" }, - "ticketmaster.venueEnhancedDetailsResponseDoc": { + "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/ticketmaster.VenueEnhancedDetailsResponse" + "$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" }, - "ticketmaster.venueResponseDoc": { + "spotify.userProfileResponseDoc": { "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/ticketmaster.VenueResponse" + "$ref": "#/definitions/spotify.UserProfileResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ticketweb.Attraction": { + "standard.AuthorArticle": { "properties": { - "category": { - "example": "Arts & Theater", - "type": "string" - }, - "genre": { - "example": "Comedy", - "type": "string" - }, - "id": { - "type": "string" - }, - "image_url": { + "section": { "type": "string" }, - "name": { - "example": "Comedy Beast", - "type": "string" - } - }, - "type": "object" - }, - "ticketweb.DeliveryMethod": { - "properties": { - "description": { + "section_url": { "type": "string" }, - "fee": { - "example": "Free", + "title": { "type": "string" }, - "name": { - "example": "eTickets", + "url": { "type": "string" } }, "type": "object" }, - "ticketweb.EventDetail": { + "standard.AuthorResponse": { "properties": { - "age_restriction": { - "example": 18, - "type": "integer" - }, - "age_restriction_message": { - "example": "Ages 18+", - "type": "string" - }, - "announce_time": { - "type": "string" - }, - "attractions": { - "items": { - "$ref": "#/definitions/ticketweb.Attraction" - }, - "type": "array" - }, - "currency": { - "example": "USD", - "type": "string" - }, - "delivery_methods": { + "articles": { "items": { - "$ref": "#/definitions/ticketweb.DeliveryMethod" + "$ref": "#/definitions/standard.AuthorArticle" }, "type": "array" }, - "description": { - "type": "string" - }, - "end_time": { - "type": "string" - }, - "has_tickets": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "14241184", + "bio": { "type": "string" }, - "image_url": { + "job_title": { "type": "string" }, "name": { - "example": "Comedy Beast", - "type": "string" - }, - "on_sale_time": { - "example": "2026-07-01T12:05:00.000-05:00", "type": "string" }, - "price_range": { - "$ref": "#/definitions/ticketweb.PriceRange" - }, - "sections": { - "items": { - "$ref": "#/definitions/ticketweb.TicketSection" - }, - "type": "array" - }, - "start_time": { - "example": "2026-08-25T19:30:00.000-05:00", + "slug": { "type": "string" }, - "terms_and_conditions": { + "twitter": { "type": "string" }, "url": { "type": "string" - }, - "venue": { - "$ref": "#/definitions/ticketweb.EventVenue" } }, "type": "object" }, - "ticketweb.EventResponse": { + "starbucks.Amenity": { "properties": { - "event": { - "$ref": "#/definitions/ticketweb.EventDetail" - }, - "fetched_at": { + "code": { "type": "string" }, - "source_url": { + "name": { "type": "string" } }, "type": "object" }, - "ticketweb.EventSummary": { + "starbucks.MenuCategory": { "properties": { - "availability": { - "enum": [ - "in_stock", - "sold_out", - "unknown" - ], - "example": "in_stock", - "type": "string" + "children": { + "items": { + "$ref": "#/definitions/starbucks.MenuCategory" + }, + "type": "array" }, - "id": { - "example": "14241184", + "display_order": { + "type": "integer" + }, + "hero_image_url": { "type": "string" }, "image_url": { "type": "string" }, "name": { - "example": "Comedy Beast", - "type": "string" - }, - "start_time": { - "example": "2026-08-25T19:30", - "type": "string" - }, - "url": { "type": "string" }, - "venue": { - "$ref": "#/definitions/ticketweb.VenueRef" + "products": { + "items": { + "$ref": "#/definitions/starbucks.MenuProduct" + }, + "type": "array" } }, "type": "object" }, - "ticketweb.EventVenue": { + "starbucks.MenuProduct": { "properties": { - "address": { - "example": "907 South Peters", + "availability": { + "description": "Availability is \"Available\" on the unscoped menu; a store-scoped\nmenu also returns \"NotAvailableHere\" for items that store lacks.", "type": "string" }, - "city": { - "example": "New Orleans", + "default_size": { "type": "string" }, - "country": { - "example": "US", + "default_size_sku": { "type": "string" }, - "id": { - "example": "15005", + "display_order": { + "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.", "type": "string" }, - "map_image": { + "image_url": { + "type": "string" + }, + "menu_uri": { "type": "string" }, "name": { - "example": "Howlin' Wolf", "type": "string" }, - "postal_code": { - "example": "70130", + "product_detail_url": { "type": "string" }, - "state": { - "example": "LA", + "product_number": { "type": "string" }, - "time_zone": { - "example": "US/Central", + "product_type": { + "description": "ProductType is Starbucks' own coarse classification: \"Beverage\",\n\"Food\", or \"Coffee\".", "type": "string" - } - }, - "type": "object" - }, - "ticketweb.PriceRange": { - "properties": { - "max": { - "example": 8.16, - "type": "number" }, - "min": { - "example": 8.16, - "type": "number" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "ticketweb.SearchResponse": { + "starbucks.MenuResponse": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "events": { + "categories": { "items": { - "$ref": "#/definitions/ticketweb.EventSummary" + "$ref": "#/definitions/starbucks.MenuCategory" }, "type": "array" }, + "category_count": { + "description": "CategoryCount counts top-level categories; ProductCount counts\ndistinct products anywhere in the tree.", + "type": "integer" + }, "fetched_at": { "type": "string" }, - "page": { - "example": 1, + "market": { + "type": "string" + }, + "product_count": { "type": "integer" }, - "query": { + "source_url": { "type": "string" }, - "source_url": { + "store_number": { "type": "string" } }, "type": "object" }, - "ticketweb.TicketFees": { + "starbucks.NearestStoreResponse": { "properties": { - "credit_card": { - "example": 0.16, + "distance_miles": { "type": "number" }, - "facility": { + "fetched_at": { + "type": "string" + }, + "found": { + "description": "Found is false when Starbucks reports no nearest store for the\npoint at all.", + "type": "boolean" + }, + "lat": { "type": "number" }, - "per_ticket": { - "example": 1.5, + "lng": { "type": "number" }, - "rebate": { - "example": 1.5, + "market": { + "type": "string" + }, + "nearest_latitude": { "type": "number" }, - "taxes": { + "nearest_longitude": { "type": "number" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "ticketweb.TicketPrice": { + "starbucks.Nutrition": { "properties": { - "base": { - "example": 5, - "type": "number" - }, - "fees": { - "$ref": "#/definitions/ticketweb.TicketFees" - }, - "max_purchase_limit": { - "example": 10, - "type": "integer" - }, - "min_purchase_limit": { - "type": "integer" + "calories": { + "type": "string" }, - "name": { - "example": "GA Seating", + "calories_from_fat": { "type": "string" }, - "sold_out": { - "type": "boolean" + "facts": { + "items": { + "$ref": "#/definitions/starbucks.NutritionFact" + }, + "type": "array" }, - "total": { - "example": 8.16, - "type": "number" + "serving_size": { + "type": "string" } }, "type": "object" }, - "ticketweb.TicketSection": { + "starbucks.NutritionFact": { "properties": { + "daily_percent_value": { + "type": "string" + }, "name": { - "example": "GA Seating", "type": "string" }, - "prices": { + "subfacts": { "items": { - "$ref": "#/definitions/ticketweb.TicketPrice" + "$ref": "#/definitions/starbucks.NutritionFact" }, "type": "array" }, - "purchase_limit": { - "example": 10, - "type": "integer" + "unit_of_measure": { + "type": "string" }, - "sold_out": { - "type": "boolean" + "value": { + "type": "string" } }, "type": "object" }, - "ticketweb.VenueDetail": { + "starbucks.NutritionModifier": { "properties": { - "address": { - "example": "907 South Peters, New Orleans, LA 70130", - "type": "string" - }, - "id": { - "example": "15005", - "type": "string" + "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" }, - "name": { - "example": "Howlin' Wolf", + "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" }, - "url": { + "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" }, - "ticketweb.VenueRef": { + "starbucks.NutritionOption": { "properties": { - "address": { - "example": "New Orleans, LA", + "form": { + "example": "hot", "type": "string" }, - "name": { - "example": "Howlin' Wolf", + "market": { + "description": "Market selects which country site answers. Defaults to us.", + "example": "us", "type": "string" }, - "url": { + "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" + }, + "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" }, - "ticketweb.VenueResponse": { + "starbucks.NutritionResponse": { "properties": { - "count": { - "example": 20, - "type": "integer" + "fetched_at": { + "type": "string" }, - "events": { + "form": { + "type": "string" + }, + "market": { + "type": "string" + }, + "modifiers": { "items": { - "$ref": "#/definitions/ticketweb.EventSummary" + "$ref": "#/definitions/starbucks.NutritionModifier" }, "type": "array" }, - "fetched_at": { + "product_number": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "size_sku": { + "type": "string" }, "source_url": { "type": "string" }, - "venue": { - "$ref": "#/definitions/ticketweb.VenueDetail" + "values": { + "items": { + "$ref": "#/definitions/starbucks.NutritionValue" + }, + "type": "array" } }, "type": "object" }, - "ticketweb.eventResponseDoc": { + "starbucks.NutritionValue": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/ticketweb.EventResponse" + "key": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "ticketweb.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketweb.SearchResponse" + "unit_of_measure": { + "type": "string" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "ticketweb.venueResponseDoc": { + "starbucks.PickUpOption": { "properties": { - "code": { - "example": 200, - "type": "integer" + "available": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/ticketweb.VenueResponse" + "code": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "tiffany.CategoriesResponse": { + "starbucks.ProductOptionGroup": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/tiffany.CategoryFacet" - }, - "type": "array" - }, - "count": { - "type": "integer" - }, - "fetched_at": { + "name": { "type": "string" }, - "source_url": { + "type": { "type": "string" } }, "type": "object" }, - "tiffany.CategoryFacet": { + "starbucks.ProductResponse": { "properties": { - "id": { - "description": "ID is the exact value to pass as tiffany-category's own \"category\"\nquery parameter.", + "description": { "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.", + "fetched_at": { "type": "string" }, - "label": { - "description": "Label is a human-readable label derived from ID.", + "form": { "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": { + "image_url": { "type": "string" }, - "count": { - "type": "integer" + "in_catalog": { + "type": "boolean" }, - "fetched_at": { + "market": { "type": "string" }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" + "name": { + "type": "string" }, - "products": { + "options": { + "description": "Options are the customization choices Starbucks offers for this\nproduct, e.g. milk, syrups, espresso shots.", "items": { - "$ref": "#/definitions/tiffany.ProductSummary" + "$ref": "#/definitions/starbucks.ProductOptionGroup" }, "type": "array" }, - "sort": { + "product_number": { + "type": "string" + }, + "product_type": { "type": "string" }, + "sizes": { + "items": { + "$ref": "#/definitions/starbucks.ProductSize" + }, + "type": "array" + }, "source_url": { "type": "string" }, - "total_pages": { + "star_cost": { "type": "integer" }, - "total_products": { - "type": "integer" + "store_number": { + "type": "string" } }, "type": "object" }, - "tiffany.ContentResult": { + "starbucks.ProductSize": { "properties": { - "description": { - "type": "string" + "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" }, - "image_url": { + "display_name": { "type": "string" }, - "title": { + "nutrition": { + "$ref": "#/definitions/starbucks.Nutrition" + }, + "size_code": { "type": "string" }, - "url": { + "sku": { "type": "string" } }, "type": "object" }, - "tiffany.ContentSearchResponse": { + "starbucks.RecipeModifier": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "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" }, - "keyword": { + "name": { "type": "string" }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "results": { - "items": { - "$ref": "#/definitions/tiffany.ContentResult" - }, - "type": "array" - }, - "source_url": { + "option_product_number": { + "description": "OptionProductNumber identifies the option in the product's own\noptions tree.", "type": "string" }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" - } - }, - "type": "object" - }, - "tiffany.FilterValue": { - "properties": { - "product_count": { - "type": "integer" - }, - "value": { + "sku": { + "description": "SKU is the value to send as a nutrition-calculate modifier sku.", "type": "string" } }, "type": "object" }, - "tiffany.FiltersResponse": { + "starbucks.Store": { "properties": { - "color": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" + "address": { + "type": "string" }, - "designer": { + "amenities": { + "description": "Amenities are the store's features, each with Starbucks' own code\nand its human-readable name.", "items": { - "$ref": "#/definitions/tiffany.FilterValue" + "$ref": "#/definitions/starbucks.Amenity" }, "type": "array" }, - "fetched_at": { + "city": { "type": "string" }, - "gemstone": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" - }, - "gender": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" + "country": { + "type": "string" }, - "material": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" + "distance_miles": { + "type": "number" }, - "product_type": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" + "guest_ordering": { + "type": "boolean" }, - "source_url": { + "hours_status": { "type": "string" - } - }, - "type": "object" - }, - "tiffany.ProductDetailResponse": { - "properties": { - "available_quantity": { - "type": "integer" }, - "brand": { + "id": { "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "is_open_24_hours": { + "type": "boolean" }, - "collection": { - "type": "string" + "latitude": { + "type": "number" }, - "color": { - "type": "string" + "longitude": { + "type": "number" }, - "currency": { + "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" }, - "description": { + "name": { "type": "string" }, - "designer": { + "open": { + "type": "boolean" + }, + "open_status": { "type": "string" }, - "fetched_at": { + "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" }, - "gemstone": { + "phone": { "type": "string" }, - "images": { + "pick_up_options": { + "description": "PickUpOptions are the fulfillment modes the store supports, each\nwith its own live availability flag.", "items": { - "type": "string" + "$ref": "#/definitions/starbucks.PickUpOption" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "low_inventory": { - "type": "boolean" - }, - "material": { - "type": "string" - }, - "name": { + "postal_code": { "type": "string" }, - "price": { - "type": "number" + "schedule": { + "description": "Schedule is the store's weekly opening hours, Sunday-first as the\nupstream returns them.", + "items": { + "$ref": "#/definitions/starbucks.StoreDay" + }, + "type": "array" }, - "product_id": { + "state": { "type": "string" }, - "product_type": { + "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" }, - "size": { + "time_zone": { "type": "string" - }, - "source_url": { + } + }, + "type": "object" + }, + "starbucks.StoreDay": { + "properties": { + "day_of_week": { "type": "string" }, - "style_id": { + "holiday": { "type": "string" }, - "url": { + "hours": { "type": "string" }, - "variations": { - "items": { - "$ref": "#/definitions/tiffany.ProductVariation" - }, - "type": "array" + "open": { + "type": "boolean" } }, "type": "object" }, - "tiffany.ProductSummary": { + "starbucks.StoreResponse": { "properties": { - "collection": { - "type": "string" - }, - "color": { - "type": "string" + "count": { + "type": "integer" }, - "currency": { + "fetched_at": { "type": "string" }, - "designer": { - "type": "string" + "lat": { + "type": "number" }, - "gemstone": { - "type": "string" + "lng": { + "type": "number" }, - "id": { + "market": { "type": "string" }, - "image_url": { + "place": { "type": "string" }, - "in_stock": { + "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" }, - "low_inventory": { + "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" }, - "material": { + "source_url": { "type": "string" }, - "name": { - "type": "string" + "stores": { + "items": { + "$ref": "#/definitions/starbucks.Store" + }, + "type": "array" + } + }, + "type": "object" + }, + "starbucks.menuResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "price": { - "type": "number" + "data": { + "$ref": "#/definitions/starbucks.MenuResponse" }, - "product_type": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "starbucks.nearestStoreResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "style_id": { - "type": "string" + "data": { + "$ref": "#/definitions/starbucks.NearestStoreResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiffany.ProductVariation": { + "starbucks.nutritionResponseDoc": { "properties": { - "color": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/starbucks.NutritionResponse" }, - "online": { - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "tiffany.SearchResponse": { + "starbucks.productResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/starbucks.ProductResponse" }, - "keyword": { + "msg": { + "example": "OK", "type": "string" - }, - "page": { + } + }, + "type": "object" + }, + "starbucks.storesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "per_page": { - "type": "integer" + "data": { + "$ref": "#/definitions/starbucks.StoreResponse" }, - "products": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "steam.AchievementsResponse": { + "properties": { + "achievements": { "items": { - "$ref": "#/definitions/tiffany.ProductSummary" + "$ref": "#/definitions/steam.GlobalAchievement" }, "type": "array" }, - "sort": { - "type": "string" - }, - "source_url": { + "appid": { "type": "string" }, - "total_pages": { + "count": { "type": "integer" }, - "total_products": { - "type": "integer" + "source_url": { + "type": "string" } }, "type": "object" }, - "tiffany.SearchSuggestion": { + "steam.AppDetails": { "properties": { - "popularity": { + "achievements_total": { "type": "integer" }, - "query": { - "type": "string" - }, - "result_count": { + "appid": { "type": "integer" - } - }, - "type": "object" - }, - "tiffany.Store": { - "properties": { - "address1": { - "type": "string" }, - "city": { + "background": { "type": "string" }, - "closed": { - "type": "boolean" - }, - "country_code": { + "capsule_image": { "type": "string" }, - "distance_miles": { - "type": "number" - }, - "faqs": { + "categories": { "items": { - "$ref": "#/definitions/tiffany.StoreFAQ" + "$ref": "#/definitions/steam.IDName" }, "type": "array" }, - "hours": { + "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": { - "$ref": "#/definitions/tiffany.StoreDayHours" + "type": "integer" }, "type": "array" }, - "internal_store_id": { + "controller_support": { "type": "string" }, - "latitude": { - "type": "number" + "developers": { + "items": { + "type": "string" + }, + "type": "array" }, - "longitude": { - "type": "number" + "dlc": { + "items": { + "type": "integer" + }, + "type": "array" }, - "name": { - "type": "string" + "genres": { + "items": { + "$ref": "#/definitions/steam.IDName" + }, + "type": "array" }, - "phone": { + "header_image": { "type": "string" }, - "postal_code": { - "type": "string" + "is_free": { + "type": "boolean" }, - "region": { - "type": "string" + "metacritic": { + "$ref": "#/definitions/steam.Metacritic" }, - "reservation_url": { + "movies": { + "type": "integer" + }, + "name": { "type": "string" }, - "services": { + "packages": { "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "specialities": { + "platforms": { + "$ref": "#/definitions/steam.Platforms" + }, + "price_overview": { + "$ref": "#/definitions/steam.Price" + }, + "publishers": { "items": { "type": "string" }, "type": "array" }, - "store_id": { + "recommendations": { + "type": "integer" + }, + "release_date": { + "$ref": "#/definitions/steam.AppRelease" + }, + "required_age": { + "type": "integer" + }, + "screenshots": { + "type": "integer" + }, + "short_description": { "type": "string" }, - "store_type": { - "example": "Flagship", + "source_url": { "type": "string" }, - "timezone": { + "supported_languages": { "type": "string" }, - "url": { + "type": { + "type": "string" + }, + "website": { "type": "string" } }, "type": "object" }, - "tiffany.StoreDayHours": { + "steam.AppRelease": { "properties": { - "closed": { + "coming_soon": { "type": "boolean" }, - "day": { + "date": { "type": "string" - }, - "intervals": { - "items": { - "$ref": "#/definitions/tiffany.StoreHoursInterval" - }, - "type": "array" } }, "type": "object" }, - "tiffany.StoreFAQ": { + "steam.CategoryBrowseResponse": { "properties": { - "answer": { - "type": "string" + "count": { + "type": "integer" }, - "question": { + "items": { + "items": { + "$ref": "#/definitions/steam.CategoryItem" + }, + "type": "array" + }, + "slug": { "type": "string" - } - }, - "type": "object" - }, - "tiffany.StoreHoursInterval": { - "properties": { - "end": { + }, + "source_url": { "type": "string" }, "start": { + "type": "integer" + }, + "tag_id": { + "type": "integer" + }, + "tag_name": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "tiffany.StoresResponse": { + "steam.CategoryItem": { "properties": { - "count": { + "appid": { "type": "integer" }, - "fetched_at": { + "developers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { "type": "string" }, - "latitude": { - "type": "number" + "platforms": { + "$ref": "#/definitions/steam.Platforms" }, - "longitude": { - "type": "number" + "price_overview": { + "$ref": "#/definitions/steam.Price" }, - "radius": { - "type": "number" + "publishers": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "release_date_unix": { + "type": "integer" + }, + "review_count": { + "type": "integer" + }, + "review_percent_positive": { + "type": "integer" + }, + "review_summary": { "type": "string" }, - "stores": { + "short_description": { + "type": "string" + }, + "tags": { "items": { - "$ref": "#/definitions/tiffany.Store" + "$ref": "#/definitions/steam.WeightedTag" }, "type": "array" + }, + "type": { + "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "tiffany.SuggestResponse": { + "steam.ChartRank": { "properties": { - "count": { + "appid": { "type": "integer" }, - "fetched_at": { - "type": "string" + "concurrent_in_game": { + "type": "integer" }, - "query": { + "last_week_rank": { + "type": "integer" + }, + "name": { "type": "string" }, - "source_url": { + "peak_in_game": { + "type": "integer" + }, + "rank": { + "type": "integer" + }, + "review_summary": { + "type": "string" + } + }, + "type": "object" + }, + "steam.ChartResponse": { + "properties": { + "chart": { "type": "string" }, - "suggestions": { + "count": { + "type": "integer" + }, + "enriched": { + "type": "boolean" + }, + "ranks": { "items": { - "$ref": "#/definitions/tiffany.SearchSuggestion" + "$ref": "#/definitions/steam.ChartRank" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "updated_unix": { + "type": "integer" } }, "type": "object" }, - "tiffany.categoriesResponseDoc": { + "steam.CommunityRecommendationsResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.CategoriesResponse" + "review_filter": { + "type": "string" }, - "msg": { - "example": "OK", + "reviews": { + "items": { + "$ref": "#/definitions/steam.CommunityReview" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "tiffany.categoryResponseDoc": { + "steam.CommunityReview": { "properties": { - "code": { - "example": 200, - "type": "integer" + "appid": { + "type": "string" }, - "data": { - "$ref": "#/definitions/tiffany.CategoryResponse" + "author_name": { + "type": "string" }, - "msg": { - "example": "OK", + "author_profile_url": { + "type": "string" + }, + "helpful": { + "type": "string" + }, + "playtime": { + "type": "string" + }, + "recommendation_id": { + "type": "string" + }, + "review_excerpt": { + "type": "string" + }, + "review_url": { "type": "string" } }, "type": "object" }, - "tiffany.contentSearchResponseDoc": { + "steam.FeaturedBucket": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.ContentSearchResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "items": { + "items": { + "$ref": "#/definitions/steam.FeaturedItem" + }, + "type": "array" + }, + "name": { "type": "string" } }, "type": "object" }, - "tiffany.filtersResponseDoc": { + "steam.FeaturedCategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "coming_soon": { + "$ref": "#/definitions/steam.FeaturedBucket" }, - "data": { - "$ref": "#/definitions/tiffany.FiltersResponse" + "new_releases": { + "$ref": "#/definitions/steam.FeaturedBucket" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "specials": { + "$ref": "#/definitions/steam.FeaturedBucket" + }, + "top_sellers": { + "$ref": "#/definitions/steam.FeaturedBucket" } }, "type": "object" }, - "tiffany.productResponseDoc": { + "steam.FeaturedItem": { "properties": { - "code": { - "example": 200, + "currency": { + "type": "string" + }, + "discount_percent": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.ProductDetailResponse" + "discounted": { + "type": "boolean" }, - "msg": { - "example": "OK", + "final_price": { + "type": "integer" + }, + "header_image": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "linux_available": { + "type": "boolean" + }, + "mac_available": { + "type": "boolean" + }, + "name": { "type": "string" + }, + "original_price": { + "type": "integer" + }, + "type": { + "type": "integer" + }, + "windows_available": { + "type": "boolean" } }, "type": "object" }, - "tiffany.searchResponseDoc": { + "steam.FeaturedResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "featured_linux": { + "items": { + "$ref": "#/definitions/steam.FeaturedItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/tiffany.SearchResponse" + "featured_mac": { + "items": { + "$ref": "#/definitions/steam.FeaturedItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "featured_win": { + "items": { + "$ref": "#/definitions/steam.FeaturedItem" + }, + "type": "array" + }, + "large_capsules": { + "items": { + "$ref": "#/definitions/steam.FeaturedItem" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "tiffany.storesResponseDoc": { + "steam.GlobalAchievement": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tiffany.StoresResponse" - }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "percent": { + "type": "number" } }, "type": "object" }, - "tiffany.suggestResponseDoc": { + "steam.HistogramBucket": { "properties": { - "code": { - "example": 200, + "date": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.SuggestResponse" + "recommendations_down": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "recommendations_up": { + "type": "integer" } }, "type": "object" }, - "tiktok.Category": { + "steam.IDName": { "properties": { - "name": { + "description": { "type": "string" }, - "type": { + "id": { "type": "string" } }, "type": "object" }, - "tiktok.ChallengeDetailResp": { + "steam.ItemsResponse": { "properties": { - "challengeInfo": {}, - "extra": { - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } - }, - "type": "object" - }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "count": { + "type": "integer" }, - "shareMeta": { - "properties": { - "desc": { - "type": "string" - }, - "title": { - "type": "string" - } + "items": { + "items": { + "$ref": "#/definitions/steam.CategoryItem" }, - "type": "object" - }, - "statusCode": { - "type": "integer" + "type": "array" }, - "status_code": { + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "steam.Metacritic": { + "properties": { + "score": { "type": "integer" }, - "status_msg": { + "url": { "type": "string" } }, "type": "object" }, - "tiktok.ChallengeListResp": { + "steam.NewsItem": { "properties": { - "cursor": { + "author": { "type": "string" }, - "extra": { - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } - }, - "type": "object" + "contents": { + "type": "string" }, - "hasMore": { + "date": { + "type": "integer" + }, + "feedlabel": { + "type": "string" + }, + "feedname": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "is_external_url": { "type": "boolean" }, - "itemList": { - "items": {}, + "tags": { + "items": { + "type": "string" + }, "type": "array" }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "title": { + "type": "string" }, - "statusCode": { - "type": "integer" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "steam.NewsResponse": { + "properties": { + "appid": { + "type": "string" }, - "status_code": { + "count": { "type": "integer" }, - "status_msg": { + "items": { + "items": { + "$ref": "#/definitions/steam.NewsItem" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "tiktok.CommentResp": { + "steam.PackageDetails": { "properties": { - "alias_comment_deleted": { - "type": "boolean" - }, - "comments": { - "items": {}, + "apps": { + "items": { + "$ref": "#/definitions/steam.IDName" + }, "type": "array" }, - "cursor": { - "type": "integer" - }, - "extra": { - "properties": { - "api_debug_info": {}, - "fatal_item_ids": {}, - "now": { - "type": "integer" - } - }, - "type": "object" + "header_image": { + "type": "string" }, - "has_filtered_comments": { - "type": "integer" + "name": { + "type": "string" }, - "has_more": { + "packageid": { "type": "integer" }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "platforms": { + "$ref": "#/definitions/steam.Platforms" }, - "reply_style": { - "type": "integer" + "price": { + "$ref": "#/definitions/steam.PackagePrice" }, - "status_code": { - "type": "integer" + "release_date": { + "$ref": "#/definitions/steam.AppRelease" }, - "status_msg": { + "source_url": { "type": "string" - }, - "top_gifts": {}, - "total": { - "type": "integer" } }, "type": "object" }, - "tiktok.ExploreResp": { + "steam.PackagePrice": { "properties": { - "cursor": { + "currency": { "type": "string" }, - "extra": { - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } - }, - "type": "object" - }, - "hasMore": { - "type": "boolean" - }, - "itemList": { - "items": {}, - "type": "array" - }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "discount_percent": { + "type": "integer" }, - "statusCode": { + "final": { "type": "integer" }, - "status_code": { + "individual": { "type": "integer" }, - "status_msg": { - "type": "string" + "initial": { + "type": "integer" } }, "type": "object" }, - "tiktok.Profile": { + "steam.Platforms": { "properties": { - "stats": { - "$ref": "#/definitions/tiktok.ProfileStats" + "linux": { + "type": "boolean" }, - "user": { - "$ref": "#/definitions/tiktok.User" + "mac": { + "type": "boolean" + }, + "windows": { + "type": "boolean" } }, "type": "object" }, - "tiktok.ProfileStats": { + "steam.PlayersResponse": { "properties": { - "diggCount": { - "example": 0, - "type": "integer" + "appid": { + "type": "string" }, - "followerCount": { - "example": 458800, + "player_count": { "type": "integer" }, - "followingCount": { - "example": 1, - "type": "integer" + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "steam.Price": { + "properties": { + "currency": { + "type": "string" }, - "friendCount": { - "example": 1, + "discount_percent": { "type": "integer" }, - "heart": { - "example": 800300, + "final": { "type": "integer" }, - "heartCount": { - "example": 800300, - "type": "integer" + "final_formatted": { + "type": "string" }, - "videoCount": { - "example": 59, + "initial": { "type": "integer" + }, + "initial_formatted": { + "type": "string" } }, "type": "object" }, - "tiktok.SearchHashtagResp": { + "steam.Review": { "properties": { - "challenge_list": { - "items": {}, - "type": "array" - }, - "cursor": { - "type": "integer" + "author": { + "$ref": "#/definitions/steam.ReviewAuthor" }, - "extra": {}, - "has_more": { + "comment_count": { "type": "integer" }, - "input_keyword": { + "language": { "type": "string" }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "received_for_free": { + "type": "boolean" }, - "music_list": {}, - "qc": { + "recommendation_id": { "type": "string" }, - "rid": { + "review": { "type": "string" }, - "status_code": { + "steam_purchase": { + "type": "boolean" + }, + "timestamp_created": { "type": "integer" }, - "status_msg": { - "type": "string" + "timestamp_updated": { + "type": "integer" }, - "type": { + "voted_up": { + "type": "boolean" + }, + "votes_funny": { "type": "integer" }, - "user_list": {} + "votes_up": { + "type": "integer" + }, + "weighted_vote_score": { + "type": "string" + }, + "written_during_early_access": { + "type": "boolean" + } }, "type": "object" }, - "tiktok.SearchResp": { + "steam.ReviewAuthor": { "properties": { - "cursor": { + "last_played": { "type": "integer" }, - "data": { - "items": {}, - "type": "array" + "num_games_owned": { + "type": "integer" }, - "extra": {}, - "feedback_type": { + "num_reviews": { + "type": "integer" + }, + "playtime_at_review": { + "type": "integer" + }, + "playtime_forever": { + "type": "integer" + }, + "playtime_last_two_weeks": { + "type": "integer" + }, + "steamid": { "type": "string" + } + }, + "type": "object" + }, + "steam.ReviewSummary": { + "properties": { + "num_reviews": { + "type": "integer" }, - "has_more": { + "review_score": { "type": "integer" }, - "input_keyword": { + "review_score_desc": { "type": "string" }, - "itemList": { - "items": {}, - "type": "array" + "total_negative": { + "type": "integer" }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "total_positive": { + "type": "integer" }, - "qc": { + "total_reviews": { + "type": "integer" + } + }, + "type": "object" + }, + "steam.ReviewsHistogramResponse": { + "properties": { + "appid": { "type": "string" }, - "rid": { - "type": "string" + "count_all_reviews": { + "type": "integer" }, - "status_code": { + "end_date": { "type": "integer" }, - "status_msg": { + "recent": { + "items": { + "$ref": "#/definitions/steam.HistogramBucket" + }, + "type": "array" + }, + "rollup_type": { "type": "string" }, - "type": { + "rollups": { + "items": { + "$ref": "#/definitions/steam.HistogramBucket" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "start_date": { "type": "integer" } }, "type": "object" }, - "tiktok.SearchUserResp": { + "steam.ReviewsResponse": { "properties": { - "challenge_list": {}, - "cursor": { - "type": "integer" - }, - "extra": {}, - "feedback_type": { + "appid": { "type": "string" }, - "global_doodle_config": {}, - "has_more": { + "count": { "type": "integer" }, - "input_keyword": { + "cursor": { "type": "string" }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } + "query_summary": { + "$ref": "#/definitions/steam.ReviewSummary" + }, + "reviews": { + "items": { + "$ref": "#/definitions/steam.Review" }, - "type": "object" + "type": "array" }, - "music_list": {}, - "qc": { + "source_url": { "type": "string" - }, - "rid": { + } + }, + "type": "object" + }, + "steam.SearchItem": { + "properties": { + "controller_support": { "type": "string" }, - "status_code": { + "id": { "type": "integer" }, - "status_msg": { + "metascore": { + "type": "string" + }, + "name": { + "type": "string" + }, + "platforms": { + "$ref": "#/definitions/steam.Platforms" + }, + "price": { + "$ref": "#/definitions/steam.Price" + }, + "streamingvideo": { + "type": "boolean" + }, + "tiny_image": { "type": "string" }, "type": { + "type": "string" + } + }, + "type": "object" + }, + "steam.SearchResponse": { + "properties": { + "count": { "type": "integer" }, - "user_list": { - "items": {}, + "items": { + "items": { + "$ref": "#/definitions/steam.SearchItem" + }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "term": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "tiktok.TrendingResp": { + "steam.SearchResultRow": { "properties": { - "cursor": { + "appid": { "type": "string" }, - "extra": { - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } - }, - "type": "object" + "bundleid": { + "type": "string" }, - "hasMore": { - "type": "boolean" + "discount_pct": { + "type": "string" }, - "itemList": { - "items": {}, - "type": "array" + "name": { + "type": "string" }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "packageid": { + "type": "string" }, - "statusCode": { - "type": "integer" + "platforms": { + "$ref": "#/definitions/steam.Platforms" }, - "statusMsg": { + "price": { "type": "string" }, - "status_code": { - "type": "integer" + "release_date": { + "type": "string" }, - "status_msg": { + "review_summary": { "type": "string" }, - "trendingTopics": { - "items": {}, + "tag_ids": { + "items": { + "type": "integer" + }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "tiktok.User": { + "steam.SearchResultsResponse": { "properties": { - "avatarLarger": { - "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" + "count": { + "type": "integer" }, - "bioLink": { - "properties": { - "link": { - "example": "www.openai.com/chatgpt", - "type": "string" - } + "results": { + "items": { + "$ref": "#/definitions/steam.SearchResultRow" }, - "type": "object" + "type": "array" }, - "commerceUserInfo": { - "properties": { - "category": { - "example": "Software & Apps", - "type": "string" - }, - "commerceUser": { - "example": true, - "type": "boolean" - } - }, - "type": "object" + "source_url": { + "type": "string" }, - "createTime": { - "example": 1689461786, + "start": { "type": "integer" }, - "id": { - "example": "7256182609359995947", + "term": { "type": "string" }, - "isOrganization": { - "example": 1, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "steam.SteamSpyResponse": { + "properties": { + "appid": { "type": "integer" }, - "language": { - "example": "en", + "average_2weeks": { + "type": "integer" + }, + "average_forever": { + "type": "integer" + }, + "ccu": { + "type": "integer" + }, + "developer": { "type": "string" }, - "nickname": { - "example": "chatgpt", + "discount": { "type": "string" }, - "privateAccount": { - "example": false, - "type": "boolean" + "genre": { + "type": "string" }, - "region": { - "example": "US", + "initialprice": { "type": "string" }, - "secUid": { - "example": "MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB", + "languages": { "type": "string" }, - "secret": { - "example": false, - "type": "boolean" + "median_2weeks": { + "type": "integer" }, - "signature": { - "example": "What can I help with?", + "median_forever": { + "type": "integer" + }, + "name": { "type": "string" }, - "ttSeller": { - "example": false, - "type": "boolean" + "negative": { + "type": "integer" }, - "uniqueId": { - "example": "uniqueId", + "owners": { "type": "string" }, - "verified": { - "example": true, - "type": "boolean" + "positive": { + "type": "integer" + }, + "price": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "source": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "userscore": { + "type": "integer" } }, "type": "object" }, - "tiktok.UserPostLinkResp": { + "steam.TagEntry": { "properties": { - "cursor": { + "name": { "type": "string" }, - "extra": { - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } - }, - "type": "object" + "tagid": { + "type": "integer" + } + }, + "type": "object" + }, + "steam.TagsListResponse": { + "properties": { + "count": { + "type": "integer" }, - "hasMore": { - "type": "boolean" + "language": { + "type": "string" }, - "itemList": { - "items": {}, - "type": "array" + "source_url": { + "type": "string" }, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } + "tags": { + "items": { + "$ref": "#/definitions/steam.TagEntry" }, - "type": "object" + "type": "array" + } + }, + "type": "object" + }, + "steam.TopReleasePage": { + "properties": { + "appids": { + "items": { + "type": "integer" + }, + "type": "array" }, - "status_code": { + "name": { + "type": "string" + }, + "start_of_month_unix": { "type": "integer" }, - "status_msg": { + "url_path": { "type": "string" } }, "type": "object" }, - "tiktok.VideoDetailResp": { + "steam.TopReleasesResponse": { "properties": { - "extra": { - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } - }, - "type": "object" + "count": { + "type": "integer" }, - "itemInfo": {}, - "log_pb": { - "properties": { - "impr_id": { - "type": "string" - } + "pages": { + "items": { + "$ref": "#/definitions/steam.TopReleasePage" }, - "type": "object" + "type": "array" }, - "shareMeta": { - "properties": { - "desc": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "steam.TopSellerRank": { + "properties": { + "appid": { + "type": "integer" }, - "status_code": { + "item": { + "$ref": "#/definitions/steam.CategoryItem" + }, + "rank": { + "type": "integer" + } + }, + "type": "object" + }, + "steam.TopSellersResponse": { + "properties": { + "count": { "type": "integer" }, - "status_msg": { + "country_code": { + "type": "string" + }, + "ranks": { + "items": { + "$ref": "#/definitions/steam.TopSellerRank" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "start_date_unix": { + "type": "integer" } }, "type": "object" }, - "tiktok.categoryResponseDoc": { + "steam.WeightedTag": { + "properties": { + "tagid": { + "type": "integer" + }, + "weight": { + "type": "integer" + } + }, + "type": "object" + }, + "steam.achievementsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/tiktok.Category" - }, - "type": "array" + "$ref": "#/definitions/steam.AchievementsResponse" }, "msg": { "example": "OK", @@ -166470,14 +166682,14 @@ }, "type": "object" }, - "tiktok.challengeListResponseDoc": { + "steam.appResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.ChallengeListResp" + "$ref": "#/definitions/steam.AppDetails" }, "msg": { "example": "OK", @@ -166486,14 +166698,14 @@ }, "type": "object" }, - "tiktok.challengeResponseDoc": { + "steam.categoryBrowseResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.ChallengeDetailResp" + "$ref": "#/definitions/steam.CategoryBrowseResponse" }, "msg": { "example": "OK", @@ -166502,14 +166714,14 @@ }, "type": "object" }, - "tiktok.commentsResponseDoc": { + "steam.chartResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.CommentResp" + "$ref": "#/definitions/steam.ChartResponse" }, "msg": { "example": "OK", @@ -166518,14 +166730,14 @@ }, "type": "object" }, - "tiktok.exploreResponseDoc": { + "steam.communityRecommendationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.ExploreResp" + "$ref": "#/definitions/steam.CommunityRecommendationsResponse" }, "msg": { "example": "OK", @@ -166534,14 +166746,14 @@ }, "type": "object" }, - "tiktok.postResponseDoc": { + "steam.featuredCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.VideoDetailResp" + "$ref": "#/definitions/steam.FeaturedCategoriesResponse" }, "msg": { "example": "OK", @@ -166550,14 +166762,14 @@ }, "type": "object" }, - "tiktok.profilePostResponseDoc": { + "steam.featuredResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.UserPostLinkResp" + "$ref": "#/definitions/steam.FeaturedResponse" }, "msg": { "example": "OK", @@ -166566,14 +166778,14 @@ }, "type": "object" }, - "tiktok.profileResponseDoc": { + "steam.histogramResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.Profile" + "$ref": "#/definitions/steam.ReviewsHistogramResponse" }, "msg": { "example": "OK", @@ -166582,14 +166794,14 @@ }, "type": "object" }, - "tiktok.searchHashtagResponseDoc": { + "steam.itemsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.SearchHashtagResp" + "$ref": "#/definitions/steam.ItemsResponse" }, "msg": { "example": "OK", @@ -166598,14 +166810,14 @@ }, "type": "object" }, - "tiktok.searchResponseDoc": { + "steam.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.SearchResp" + "$ref": "#/definitions/steam.NewsResponse" }, "msg": { "example": "OK", @@ -166614,14 +166826,14 @@ }, "type": "object" }, - "tiktok.searchUserResponseDoc": { + "steam.packageResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.SearchUserResp" + "$ref": "#/definitions/steam.PackageDetails" }, "msg": { "example": "OK", @@ -166630,14 +166842,14 @@ }, "type": "object" }, - "tiktok.trendingResponseDoc": { + "steam.playersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.TrendingResp" + "$ref": "#/definitions/steam.PlayersResponse" }, "msg": { "example": "OK", @@ -166646,674 +166858,547 @@ }, "type": "object" }, - "time.AuthorArticle": { + "steam.reviewsResponseDoc": { "properties": { - "excerpt": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "section_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/steam.ReviewsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "time.AuthorResponse": { + "steam.searchResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/time.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "social_accounts": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/steam.SearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "timesofindia.AuthorArticle": { + "steam.searchResultsResponseDoc": { "properties": { - "title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/steam.SearchResultsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "timesofindia.AuthorResponse": { + "steam.steamspyResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/timesofindia.AuthorArticle" - }, - "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" + "code": { + "example": 200, + "type": "integer" }, - "organization": { - "type": "string" + "data": { + "$ref": "#/definitions/steam.SteamSpyResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "timesofisrael.AuthorResponse": { + "steam.tagsListResponseDoc": { "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/steam.TagsListResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "steam.topReleasesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "social_links": { - "items": { - "$ref": "#/definitions/timesofisrael.AuthorSocialLink" - }, - "type": "array" + "data": { + "$ref": "#/definitions/steam.TopReleasesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "timesofisrael.AuthorSocialLink": { + "steam.topSellersResponseDoc": { "properties": { - "type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/steam.TopSellersResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tmdb.CastCredit": { + "stockx.AskServiceLevel": { "properties": { - "character": { - "type": "string" + "count": { + "example": 1341, + "type": "integer" }, - "name": { + "inventory_type": { + "example": "CUSTODIAL", "type": "string" }, - "slug": { - "type": "string" + "lowest_ask": { + "example": 260, + "type": "integer" } }, "type": "object" }, - "tmdb.CollectionResponse": { + "stockx.Badge": { "properties": { "id": { + "example": "SELLING_FAST", "type": "string" }, - "movies": { - "items": { - "$ref": "#/definitions/tmdb.MediaRef" - }, - "type": "array" - }, - "overview": { - "type": "string" - }, - "source_url": { + "subtitle": { + "example": "This item sells fast.", "type": "string" }, "title": { - "type": "string" - }, - "uri": { + "example": "713 Sold in Last 3 Days!", "type": "string" } }, "type": "object" }, - "tmdb.CrewCredit": { + "stockx.Brand": { "properties": { - "jobs": { - "items": { - "type": "string" - }, - "type": "array" + "group": { + "example": "M-O", + "type": "string" }, "name": { + "example": "Nike", "type": "string" }, "slug": { + "example": "nike", "type": "string" } }, "type": "object" }, - "tmdb.FilmographyCredit": { + "stockx.BrandsResponse": { "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "example": "movie", - "type": "string" + "brands": { + "items": { + "$ref": "#/definitions/stockx.Brand" + }, + "type": "array" }, - "uri": { - "type": "string" + "total_count": { + "example": 396, + "type": "integer" } }, "type": "object" }, - "tmdb.Genre": { + "stockx.CategoriesResponse": { "properties": { - "id": { - "example": "18", - "type": "string" - }, - "name": { - "example": "Drama", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/stockx.Category" + }, + "type": "array" } }, "type": "object" }, - "tmdb.GenresResponse": { + "stockx.Category": { "properties": { - "movie": { - "items": { - "$ref": "#/definitions/tmdb.Genre" - }, - "type": "array" + "name": { + "example": "Shoes", + "type": "string" }, - "source_url": { + "slug": { + "example": "shoes", "type": "string" }, - "tv": { + "subcategories": { "items": { - "$ref": "#/definitions/tmdb.Genre" + "$ref": "#/definitions/stockx.Subcategory" }, "type": "array" } }, "type": "object" }, - "tmdb.MediaRef": { + "stockx.Listing": { "properties": { - "id": { + "condition": { + "example": "New - Other", "type": "string" }, - "overview": { + "condition_alias": { + "example": "new-other", "type": "string" }, - "poster_url": { + "condition_description": { + "example": "Replacement box", "type": "string" }, - "release_date": { + "image_url": { "type": "string" }, - "title": { + "price": { + "example": 250, + "type": "integer" + }, + "size": { + "example": "12", "type": "string" }, - "uri": { + "size_descriptor": { + "example": "Size", "type": "string" } }, "type": "object" }, - "tmdb.MovieListResponse": { + "stockx.MarketData": { "properties": { - "category": { - "type": "string" + "annual_average_price": { + "example": 253, + "type": "integer" }, - "has_next_page": { - "type": "boolean" + "annual_sales_count": { + "example": 12394, + "type": "integer" }, - "movies": { - "items": { - "$ref": "#/definitions/tmdb.MediaRef" + "ask_service_levels": { + "additionalProperties": { + "$ref": "#/definitions/stockx.AskServiceLevel" }, - "type": "array" + "type": "object" }, - "page": { + "highest_bid": { + "example": 315, "type": "integer" }, - "source_url": { - "type": "string" + "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" }, - "tmdb.MovieResponse": { + "stockx.ProductDetail": { "properties": { - "budget": { - "type": "number" - }, - "cast": { - "items": { - "$ref": "#/definitions/tmdb.CastCredit" - }, - "type": "array" - }, - "countries": { - "items": { - "type": "string" - }, - "type": "array" - }, - "genres": { + "badges": { "items": { - "type": "string" + "$ref": "#/definitions/stockx.Badge" }, "type": "array" }, - "homepage": { + "brand": { + "example": "Jordan", "type": "string" }, - "id": { - "example": "27205", + "colorway": { + "example": "Black/University Blue/White", "type": "string" }, - "original_language": { - "example": "English", + "description": { "type": "string" }, - "overview": { + "gender": { + "example": "men", "type": "string" }, - "poster_url": { + "id": { + "example": "019ac251-3a0d-7243-bb16-5128353be8bf", "type": "string" }, - "rating": { - "$ref": "#/definitions/tmdb.Rating" - }, - "release_date": { - "example": "2010-07-15", + "image_url": { "type": "string" }, - "revenue": { - "type": "number" + "listings": { + "items": { + "$ref": "#/definitions/stockx.Listing" + }, + "type": "array" }, - "runtime_minutes": { - "example": 148, - "type": "integer" + "market": { + "$ref": "#/definitions/stockx.MarketData" }, - "source_url": { + "model": { + "example": "Jordan 5 Retro", "type": "string" }, - "status": { - "example": "Released", + "primary_category": { + "example": "Air Jordan", "type": "string" }, - "tagline": { + "primary_title": { + "example": "Jordan 5 Retro", "type": "string" }, - "title": { - "example": "Inception", + "product_category": { + "example": "sneakers", "type": "string" }, - "top_crew": { + "related_products": { "items": { - "$ref": "#/definitions/tmdb.CrewCredit" + "$ref": "#/definitions/stockx.ProductSummary" }, "type": "array" }, - "uri": { + "release_date": { + "example": "2026-06-20", "type": "string" }, - "year": { - "example": 2010, - "type": "integer" - } - }, - "type": "object" - }, - "tmdb.PersonListResponse": { - "properties": { - "has_next_page": { - "type": "boolean" + "retail_price": { + "example": "220", + "type": "string" }, - "page": { - "type": "integer" + "secondary_title": { + "example": "Black University Blue (2026)", + "type": "string" }, - "people": { + "source_url": { + "example": "https://stockx.com/air-jordan-5-retro-black-university-blue-2026", + "type": "string" + }, + "style_id": { + "example": "DD0587-008", + "type": "string" + }, + "title": { + "example": "Jordan 5 Retro Black University Blue (2026)", + "type": "string" + }, + "traits": { "items": { - "$ref": "#/definitions/tmdb.PersonRef" + "$ref": "#/definitions/stockx.ProductTrait" }, "type": "array" }, - "source_url": { + "url_key": { + "example": "air-jordan-5-retro-black-university-blue-2026", "type": "string" } }, "type": "object" }, - "tmdb.PersonRef": { + "stockx.ProductSummary": { "properties": { - "id": { + "brand": { + "example": "Jordan", "type": "string" }, - "known_for": { + "gender": { + "example": "men", "type": "string" }, - "name": { - "type": "string" + "highest_bid": { + "example": 267, + "type": "integer" }, - "profile_url": { + "id": { + "example": "9acafeb5-bc4a-4d66-bc3a-4899d2e64775", "type": "string" }, - "uri": { - "type": "string" - } - }, - "type": "object" - }, - "tmdb.PersonResponse": { - "properties": { - "biography": { + "image_url": { "type": "string" }, - "birth_date": { - "example": "1956-07-09", - "type": "string" - }, - "filmography": { - "items": { - "$ref": "#/definitions/tmdb.FilmographyCredit" - }, - "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": { - "properties": { - "average": { - "example": 8.372, - "type": "number" - }, - "count": { - "example": 39524, + "last_sale": { + "example": 176, "type": "integer" }, - "review_count": { - "example": 8, + "lowest_ask": { + "example": 173, "type": "integer" - } - }, - "type": "object" - }, - "tmdb.SearchResponse": { - "properties": { - "has_next_page": { - "type": "boolean" }, - "page": { - "type": "integer" + "model": { + "example": "Jordan 4 Retro", + "type": "string" }, - "query": { + "product_category": { + "example": "sneakers", "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/tmdb.SearchResult" - }, - "type": "array" + "release_date": { + "example": "2026-08-05", + "type": "string" }, - "source_url": { + "title": { + "example": "Jordan 4 Retro Toro Bravo (2026)", "type": "string" }, - "type": { + "url_key": { + "example": "air-jordan-4-retro-toro-bravo-2026", "type": "string" } }, "type": "object" }, - "tmdb.SearchResult": { + "stockx.ProductTrait": { "properties": { - "id": { - "type": "string" - }, - "overview": { - "type": "string" - }, - "release_date": { - "type": "string" - }, - "title": { + "format": { + "example": "currency", "type": "string" }, - "type": { - "example": "movie", + "name": { + "example": "Style", "type": "string" }, - "uri": { + "value": { + "example": "DD0587-008", "type": "string" } }, "type": "object" }, - "tmdb.TVListResponse": { + "stockx.ReleaseCalendarResponse": { "properties": { - "category": { + "from": { + "example": "2026-08-04", "type": "string" }, - "has_next_page": { - "type": "boolean" + "limit": { + "example": 20, + "type": "integer" }, "page": { + "example": 1, "type": "integer" }, - "shows": { + "releases": { "items": { - "$ref": "#/definitions/tmdb.MediaRef" + "$ref": "#/definitions/stockx.ProductSummary" }, "type": "array" }, - "source_url": { - "type": "string" + "total_count": { + "example": 469, + "type": "integer" } }, "type": "object" }, - "tmdb.TVResponse": { + "stockx.SearchResponse": { "properties": { - "cast": { - "items": { - "$ref": "#/definitions/tmdb.CastCredit" - }, - "type": "array" + "category": { + "example": "sneakers", + "type": "string" }, - "countries": { - "items": { - "type": "string" - }, - "type": "array" + "limit": { + "example": 20, + "type": "integer" }, - "first_air_year": { - "example": 2008, + "page": { + "example": 1, "type": "integer" }, - "genres": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/stockx.ProductSummary" }, "type": "array" }, - "homepage": { + "query": { + "example": "jordan 5", "type": "string" }, - "id": { - "example": "1396", + "sort": { + "example": "featured", "type": "string" }, - "last_air_year": { - "example": 2013, - "type": "integer" - }, - "number_of_episodes": { - "example": 62, + "total_count": { + "example": 1000, "type": "integer" - }, - "original_language": { - "example": "English", - "type": "string" - }, - "overview": { - "type": "string" - }, - "poster_url": { - "type": "string" - }, - "rating": { - "$ref": "#/definitions/tmdb.Rating" - }, - "source_url": { - "type": "string" - }, - "status": { - "example": "Ended", - "type": "string" - }, - "tagline": { - "type": "string" - }, - "title": { - "example": "Breaking Bad", - "type": "string" - }, - "top_crew": { - "items": { - "$ref": "#/definitions/tmdb.CrewCredit" - }, - "type": "array" - }, - "uri": { - "type": "string" } }, "type": "object" }, - "tmdb.collectionResponseDoc": { + "stockx.Subcategory": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tmdb.CollectionResponse" - }, - "msg": { - "example": "OK", + "name": { + "example": "Boots", "type": "string" - } - }, - "type": "object" - }, - "tmdb.genresResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tmdb.GenresResponse" - }, - "msg": { - "example": "OK", + "slug": { + "example": "boots", "type": "string" } }, "type": "object" }, - "tmdb.movieListResponseDoc": { + "stockx.brandsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.MovieListResponse" + "$ref": "#/definitions/stockx.BrandsResponse" }, "msg": { "example": "OK", @@ -167322,14 +167407,14 @@ }, "type": "object" }, - "tmdb.movieResponseDoc": { + "stockx.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.MovieResponse" + "$ref": "#/definitions/stockx.CategoriesResponse" }, "msg": { "example": "OK", @@ -167338,14 +167423,14 @@ }, "type": "object" }, - "tmdb.personListResponseDoc": { + "stockx.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.PersonListResponse" + "$ref": "#/definitions/stockx.ProductDetail" }, "msg": { "example": "OK", @@ -167354,14 +167439,14 @@ }, "type": "object" }, - "tmdb.personResponseDoc": { + "stockx.releasesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.PersonResponse" + "$ref": "#/definitions/stockx.ReleaseCalendarResponse" }, "msg": { "example": "OK", @@ -167370,14 +167455,14 @@ }, "type": "object" }, - "tmdb.searchResponseDoc": { + "stockx.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.SearchResponse" + "$ref": "#/definitions/stockx.SearchResponse" }, "msg": { "example": "OK", @@ -167386,468 +167471,318 @@ }, "type": "object" }, - "tmdb.tvListResponseDoc": { + "straitstimes.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tmdb.TVListResponse" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "email": { "type": "string" - } - }, - "type": "object" - }, - "tmdb.tvResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tmdb.TVResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "tmz.AuthorArticle": { + "strava.Challenge": { "properties": { - "image_url": { + "cover_image_url": { + "example": "https://dgalywyr863hv.cloudfront.net/challenges/6162/6162-cover.png", "type": "string" }, - "published_at": { + "dimension": { + "example": "avg_pace_min_distance", "type": "string" }, - "summary": { + "duration": { + "example": "Aug 1, 2026 to Aug 31, 2026", "type": "string" }, - "title": { - "type": "string" + "goal": { + "example": 10000, + "type": "number" }, - "url": { + "goal_description": { + "example": "Complete a 10 km (6.2 mi) run.", "type": "string" - } - }, - "type": "object" - }, - "tmz.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/tmz.AuthorArticle" - }, - "type": "array" }, - "name": { + "icon": { + "example": "run", "type": "string" }, - "page": { + "id": { + "example": 6162, "type": "integer" }, - "slug": { + "logo_image_url": { + "example": "https://dgalywyr863hv.cloudfront.net/challenges/6162/6162-logo.png", "type": "string" }, - "url": { + "name": { + "example": "August 10K Challenge", "type": "string" - } - }, - "type": "object" - }, - "tokopedia.AutocompleteResponse": { - "properties": { - "browser_rendered": { - "type": "boolean" }, - "fetched_at": { - "type": "string" + "sponsored": { + "example": false, + "type": "boolean" }, - "query": { + "url": { + "example": "https://www.strava.com/challenges/August-10K-challenge-2026", "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/tokopedia.Suggestion" - }, - "type": "array" } }, "type": "object" }, - "tokopedia.CategoryResponse": { + "strava.ChallengeSection": { "properties": { - "category_path": { - "type": "string" - }, - "fetched_at": { + "category": { + "example": "run", "type": "string" }, - "products": { + "challenges": { "items": { - "$ref": "#/definitions/tokopedia.Product" + "$ref": "#/definitions/strava.Challenge" }, "type": "array" }, - "source_url": { + "title": { + "example": "Run Challenges", "type": "string" } }, "type": "object" }, - "tokopedia.HomeResponse": { + "strava.ChallengesResponse": { "properties": { - "browser_rendered": { - "type": "boolean" - }, "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "has_next_page": { - "type": "boolean" - }, - "page": { - "type": "integer" + "promoted_challenge": { + "$ref": "#/definitions/strava.Challenge" }, - "products": { + "sections": { "items": { - "$ref": "#/definitions/tokopedia.Product" + "$ref": "#/definitions/strava.ChallengeSection" }, "type": "array" }, - "tab": { - "$ref": "#/definitions/tokopedia.HomeTab" - } - }, - "type": "object" - }, - "tokopedia.HomeTab": { - "properties": { - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "tokopedia.HomeTabsResponse": { - "properties": { - "fetched_at": { + "source_url": { + "example": "https://www.strava.com/challenges", "type": "string" - }, - "tabs": { - "items": { - "$ref": "#/definitions/tokopedia.HomeTab" - }, - "type": "array" } }, "type": "object" }, - "tokopedia.Product": { + "strava.ClubResponse": { "properties": { - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { - "type": "integer" - }, - "price_text": { - "type": "string" - }, - "rating": { - "type": "string" - }, - "shop_city": { + "avatar_image_url": { + "example": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986503/2/large.jpg", "type": "string" }, - "shop_name": { + "country_code": { + "example": "us", "type": "string" }, - "url": { + "cover_image_url": { + "example": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986498/3/large.jpg", "type": "string" - } - }, - "type": "object" - }, - "tokopedia.ProductDetail": { - "properties": { - "browser_rendered": { - "type": "boolean" }, "description": { - "type": "string" - }, - "discount_percent": { + "example": "Founded in 2019 Women of OZ NWA is an inclusive, non-profit organization...", "type": "string" }, "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { + "id": { + "example": "521703", "type": "string" }, - "original_price": { + "location": { + "example": "Bentonville, Arkansas", "type": "string" }, - "price": { + "member_count": { + "example": 937, "type": "integer" }, - "price_text": { + "name": { + "example": "Women of OZ NWA", "type": "string" }, - "product_id": { - "type": "string" + "private": { + "example": true, + "type": "boolean" }, - "product_key": { + "source_url": { + "example": "https://www.strava.com/clubs/521703", "type": "string" }, - "shop_domain": { + "url": { + "example": "https://www.strava.com/clubs/521703", "type": "string" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "tokopedia.ReviewFilterAvailability": { - "properties": { - "available": { + "verified": { + "example": false, "type": "boolean" - }, - "key": { - "type": "string" } }, "type": "object" }, - "tokopedia.ReviewFiltersResponse": { + "strava.RouteCard": { "properties": { - "browser_rendered": { - "type": "boolean" - }, - "fetched_at": { + "description": { + "example": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", "type": "string" }, - "media": { - "items": { - "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" - }, - "type": "array" - }, - "product_id": { + "difficulty": { + "example": "Easy", "type": "string" }, - "ratings": { - "items": { - "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" - }, - "type": "array" + "distance_raw": { + "example": "1.46 mi", + "type": "string" }, - "topics": { - "items": { - "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" - }, - "type": "array" - } - }, - "type": "object" - }, - "tokopedia.SearchFilter": { - "properties": { - "options": { - "items": { - "$ref": "#/definitions/tokopedia.SearchFilterOption" - }, - "type": "array" + "elevation_gain_raw": { + "example": "345 ft", + "type": "string" }, - "placeholder": { + "image_url": { + "example": "https://dgtzuqphqg23d.cloudfront.net/8UruePMrrrQMdHGsELroGsOsTMWqh030g7159PMSue4-768x576.jpg", "type": "string" }, - "searchable": { - "type": "boolean" + "name": { + "example": "Mallory Cave via N.C.A.R. Trail", + "type": "string" }, - "template": { + "path": { + "example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" }, - "title": { + "rank": { + "example": 1, + "type": "integer" + }, + "url": { + "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" } }, "type": "object" }, - "tokopedia.SearchFilterOption": { + "strava.RouteDetailResponse": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/tokopedia.SearchFilterOption" - }, - "type": "array" - }, - "description": { + "difficulty": { + "example": "Easy", "type": "string" }, - "hex_color": { + "distance_raw": { + "example": "1.46 mi", "type": "string" }, - "icon": { + "elevation_gain_raw": { + "example": "345 ft", "type": "string" }, - "input_type": { + "estimated_time_raw": { + "example": "33:48", "type": "string" }, - "key": { + "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "max": { + "name": { + "example": "Mallory Cave via N.C.A.R. Trail", "type": "string" }, - "min": { + "path": { + "example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" }, - "name": { + "route_type": { + "example": "Hiking Trail", "type": "string" }, - "total_data": { + "source_url": { + "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "tokopedia.SearchFiltersResponse": { - "properties": { - "fetched_at": { + "summary": { + "example": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", "type": "string" }, - "filters": { - "items": { - "$ref": "#/definitions/tokopedia.SearchFilter" - }, - "type": "array" - }, - "query": { + "url": { + "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" - }, - "sorts": { - "items": { - "$ref": "#/definitions/tokopedia.SearchSort" - }, - "type": "array" } }, "type": "object" }, - "tokopedia.SearchResponse": { + "strava.RoutesResponse": { "properties": { - "browser_rendered": { - "type": "boolean" + "country": { + "example": "usa", + "type": "string" }, "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, "page": { + "example": 1, "type": "integer" }, - "products": { + "region": { + "example": "colorado", + "type": "string" + }, + "routes": { "items": { - "$ref": "#/definitions/tokopedia.Product" + "$ref": "#/definitions/strava.RouteCard" }, "type": "array" }, - "query": { - "type": "string" - }, - "sort": { - "type": "integer" - }, "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "tokopedia.SearchSort": { - "properties": { - "apply_filter": { - "type": "string" - }, - "input_type": { - "type": "string" - }, - "key": { - "type": "string" - }, - "name": { + "example": "https://www.strava.com/routes/hiking/usa/colorado?page=1", "type": "string" }, - "value": { + "sport": { + "example": "hiking", "type": "string" - } - }, - "type": "object" - }, - "tokopedia.Suggestion": { - "properties": { - "is_ad": { - "type": "boolean" }, - "text": { + "title": { + "example": "The Best Hiking Trails in Colorado", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "tokopedia.autocompleteResponseDoc": { - "properties": { - "code": { - "example": 200, + "total_pages": { + "example": 16, "type": "integer" }, - "data": { - "$ref": "#/definitions/tokopedia.AutocompleteResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "total_results": { + "example": 318, + "type": "integer" } }, "type": "object" }, - "tokopedia.categoryResponseDoc": { + "strava.challengesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.CategoryResponse" + "$ref": "#/definitions/strava.ChallengesResponse" }, "msg": { "example": "OK", @@ -167856,14 +167791,14 @@ }, "type": "object" }, - "tokopedia.homeResponseDoc": { + "strava.clubResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.HomeResponse" + "$ref": "#/definitions/strava.ClubResponse" }, "msg": { "example": "OK", @@ -167872,14 +167807,14 @@ }, "type": "object" }, - "tokopedia.homeTabsResponseDoc": { + "strava.routeDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.HomeTabsResponse" + "$ref": "#/definitions/strava.RouteDetailResponse" }, "msg": { "example": "OK", @@ -167888,14 +167823,14 @@ }, "type": "object" }, - "tokopedia.productResponseDoc": { + "strava.routesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.ProductDetail" + "$ref": "#/definitions/strava.RoutesResponse" }, "msg": { "example": "OK", @@ -167904,1456 +167839,1500 @@ }, "type": "object" }, - "tokopedia.reviewFiltersResponseDoc": { + "streeteasy.Area": { "properties": { - "code": { - "example": 200, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tokopedia.ReviewFiltersResponse" + "level": { + "type": "integer" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "tokopedia.searchFiltersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tokopedia.SearchFiltersResponse" + "parentId": { + "type": "integer" }, - "msg": { - "example": "OK", + "short": { "type": "string" } }, "type": "object" }, - "tokopedia.searchResponseDoc": { + "streeteasy.BuildingAmenityGroup": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tokopedia.SearchResponse" + "items": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "tomsguide.AuthorResponse": { + "streeteasy.BuildingDetails": { "properties": { - "articles": { + "address": { + "type": "string" + }, + "amenities": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/streeteasy.BuildingAmenityGroup" }, "type": "array" }, - "biography": { + "available_rental_count": { + "type": "integer" + }, + "available_rental_listings": { "items": { - "type": "string" + "$ref": "#/definitions/streeteasy.BuildingListing" }, "type": "array" }, - "has_next_page": { - "type": "boolean" + "available_sale_count": { + "type": "integer" }, - "job_title": { + "available_sale_listings": { + "items": { + "$ref": "#/definitions/streeteasy.BuildingListing" + }, + "type": "array" + }, + "building_type": { "type": "string" }, - "name": { + "description": { "type": "string" }, - "page": { + "facts": { + "items": { + "$ref": "#/definitions/streeteasy.BuildingFact" + }, + "type": "array" + }, + "floor_count": { "type": "integer" }, - "slug": { + "name": { "type": "string" }, - "social_links": { + "neighborhoods": { "items": { - "$ref": "#/definitions/tomsguide.AuthorSocialLink" + "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" }, - "tomsguide.AuthorSocialLink": { + "streeteasy.BuildingFact": { "properties": { - "platform": { + "label": { "type": "string" }, - "url": { + "value": { "type": "string" } }, "type": "object" }, - "tomshardware.AuthorResponse": { + "streeteasy.BuildingListing": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "bathrooms": { + "type": "string" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "bedrooms": { + "type": "string" }, - "has_next_page": { - "type": "boolean" + "listed_by": { + "type": "string" }, - "job_title": { + "listing_type": { "type": "string" }, - "name": { + "photo_url": { "type": "string" }, - "page": { - "type": "integer" + "price": { + "type": "string" }, - "slug": { + "square_footage": { "type": "string" }, - "social_links": { + "unit": { + "type": "string" + }, + "url_path": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.GeoPoint": { + "properties": { + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + } + }, + "type": "object" + }, + "streeteasy.LeadMedia": { + "properties": { + "photo": { + "$ref": "#/definitions/streeteasy.Photo" + } + }, + "type": "object" + }, + "streeteasy.MarketDataCatalog": { + "properties": { + "metrics": { "items": { - "$ref": "#/definitions/tomshardware.AuthorSocialLink" + "$ref": "#/definitions/streeteasy.MarketDataMetric" }, "type": "array" }, - "url": { + "source": { "type": "string" } }, "type": "object" }, - "tomshardware.AuthorSocialLink": { + "streeteasy.MarketDataMetric": { "properties": { - "platform": { + "bedrooms": { "type": "string" }, - "url": { + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "property_type": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "torontostar.AuthorArticle": { + "streeteasy.MarketDataSeries": { "properties": { - "published_at": { + "area_count": { + "type": "integer" + }, + "areas": { + "items": { + "$ref": "#/definitions/streeteasy.MarketDataSeriesArea" + }, + "type": "array" + }, + "data_through": { "type": "string" }, - "summary": { + "dataset": { + "$ref": "#/definitions/streeteasy.MarketDataMetric" + }, + "end_month": { "type": "string" }, - "title": { + "source": { "type": "string" }, - "url": { + "start_month": { "type": "string" } }, "type": "object" }, - "torontostar.AuthorResponse": { + "streeteasy.MarketDataSeriesArea": { "properties": { - "articles": { + "borough": { + "type": "string" + }, + "months": { "items": { - "$ref": "#/definitions/torontostar.AuthorArticle" + "$ref": "#/definitions/streeteasy.MarketDataSeriesMonth" }, "type": "array" }, - "bio": { + "name": { "type": "string" }, - "image_url": { + "type": { "type": "string" - }, - "job_title": { + } + }, + "type": "object" + }, + "streeteasy.MarketDataSeriesMonth": { + "properties": { + "month": { "type": "string" }, - "location": { - "type": "string" + "value": { + "type": "number" + } + }, + "type": "object" + }, + "streeteasy.MarketIndices": { + "properties": { + "area_count": { + "type": "integer" }, - "name": { + "areas": { + "items": { + "$ref": "#/definitions/streeteasy.MarketIndicesArea" + }, + "type": "array" + }, + "data_through": { "type": "string" }, - "slug": { + "end_month": { "type": "string" }, - "topics": { + "source": { "type": "string" }, - "url": { + "start_month": { "type": "string" } }, "type": "object" }, - "townhall.AuthorArticle": { + "streeteasy.MarketIndicesArea": { "properties": { - "image_url": { + "borough": { "type": "string" }, - "published_at": { - "type": "string" + "months": { + "items": { + "$ref": "#/definitions/streeteasy.MarketIndicesMonth" + }, + "type": "array" }, - "section": { + "name": { "type": "string" }, - "title": { + "type": { "type": "string" - }, - "url": { + } + }, + "type": "object" + }, + "streeteasy.MarketIndicesMonth": { + "properties": { + "month": { "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" + "rent_index": { + "type": "number" + }, + "sales_price_index": { + "type": "number" } }, "type": "object" }, - "townhall.AuthorResponse": { + "streeteasy.MarketInventory": { "properties": { - "articles": { + "area_count": { + "type": "integer" + }, + "areas": { "items": { - "$ref": "#/definitions/townhall.AuthorArticle" + "$ref": "#/definitions/streeteasy.MarketInventoryArea" }, "type": "array" }, - "bio": { + "data_through": { "type": "string" }, - "image_url": { + "end_month": { "type": "string" }, - "name": { + "source": { "type": "string" }, - "slug": { + "start_month": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.MarketInventoryArea": { + "properties": { + "borough": { "type": "string" }, - "url": { + "months": { + "items": { + "$ref": "#/definitions/streeteasy.MarketInventoryMonth" + }, + "type": "array" + }, + "name": { "type": "string" }, - "x_url": { + "type": { "type": "string" } }, "type": "object" }, - "trends.ExploreQueriesResponse": { + "streeteasy.MarketInventoryMonth": { "properties": { - "category": { - "example": 0, + "month": { + "type": "string" + }, + "rental_inventory": { "type": "integer" }, - "geo": { - "example": "US", + "sales_inventory": { + "type": "integer" + } + }, + "type": "object" + }, + "streeteasy.OpenHouse": { + "properties": { + "end_date": { "type": "string" }, - "hl": { - "example": "en-US", + "name": { "type": "string" }, - "keywords": { + "start_date": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.Photo": { + "properties": { + "key": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.QuickSearchEntry": { + "properties": { + "details": { "items": { "type": "string" }, "type": "array" }, - "property": { + "name": { "type": "string" }, - "queries": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.QuickSearchGroup": { + "properties": { + "entries": { "items": { - "$ref": "#/definitions/trends.RelatedGroup" + "$ref": "#/definitions/streeteasy.QuickSearchEntry" }, "type": "array" }, - "query_type": { - "example": "top", + "id": { "type": "string" }, - "time_range": { - "example": "today 12-m", - "type": "string" + "is_preview": { + "type": "boolean" }, - "type": { - "example": "web", + "title": { "type": "string" }, - "tz": { - "example": 0, + "total_count": { "type": "integer" } }, "type": "object" }, - "trends.ExploreRequest": { + "streeteasy.QuickSearchResult": { "properties": { - "category": { - "example": 0, + "groups": { + "items": { + "$ref": "#/definitions/streeteasy.QuickSearchGroup" + }, + "type": "array" + }, + "query": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.RentalEdge": { + "properties": { + "node": { + "$ref": "#/definitions/streeteasy.RentalListing" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.RentalListing": { + "properties": { + "advertisedOnSe": { + "type": "boolean" + }, + "areaName": { + "type": "string" + }, + "bedroomCount": { "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", + "buildingType": { "type": "string" }, - "hl": { - "example": "en-US", + "fullBathroomCount": { + "type": "integer" + }, + "furnished": { + "type": "boolean" + }, + "geoPoint": { + "$ref": "#/definitions/streeteasy.GeoPoint" + }, + "halfBathroomCount": { + "type": "integer" + }, + "id": { "type": "string" }, - "keywords": { - "example": [ - "chatgpt", - "openai" - ], + "isPremiumHdpEnabled": { + "type": "boolean" + }, + "leadMedia": { + "$ref": "#/definitions/streeteasy.LeadMedia" + }, + "offMarketAt": { + "type": "string" + }, + "price": { + "type": "number" + }, + "saleType": { + "type": "string" + }, + "sourceGroupLabel": { + "type": "string" + }, + "status": { + "type": "string" + }, + "street": { + "type": "string" + }, + "tier": { + "type": "string" + }, + "totalMonthlyPrice": { + "type": "number" + }, + "unit": { + "type": "string" + }, + "urlPath": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.RentalSearch": { + "properties": { + "edges": { + "items": { + "$ref": "#/definitions/streeteasy.RentalEdge" + }, + "type": "array" + }, + "search": { + "properties": { + "criteria": { + "type": "string" + } + }, + "type": "object" + }, + "totalCount": { + "type": "integer" + } + }, + "type": "object" + }, + "streeteasy.SchoolDetails": { + "properties": { + "address": { + "type": "string" + }, + "district": { + "type": "integer" + }, + "fax": { + "type": "string" + }, + "grades": { "items": { "type": "string" }, "type": "array" }, - "property": { - "example": "", + "name": { "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", + "neighborhood": { "type": "string" }, - "type": { - "enum": [ - "web", - "image", - "news", - "youtube", - "shopping" - ], - "example": "web", + "phone": { "type": "string" }, - "tz": { - "example": 0, - "type": "integer" + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "trends.ExploreResponse": { + "streeteasy.UnitAddress": { "properties": { - "category": { - "example": 0, - "type": "integer" + "country": { + "type": "string" }, - "geo": { - "example": "US", + "neighborhood": { "type": "string" }, - "hl": { - "example": "en-US", + "postal_code": { "type": "string" }, - "interest_by_region": { - "items": { - "$ref": "#/definitions/trends.RegionInterest" - }, - "type": "array" + "region": { + "type": "string" }, - "interest_over_time": { - "items": { - "$ref": "#/definitions/trends.InterestPoint" - }, - "type": "array" + "street": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.UnitDetails": { + "properties": { + "address": { + "$ref": "#/definitions/streeteasy.UnitAddress" }, - "keywords": { + "amenities": { "items": { "type": "string" }, "type": "array" }, - "property": { + "availability": { "type": "string" }, - "related_queries": { - "items": { - "$ref": "#/definitions/trends.RelatedGroup" - }, - "type": "array" + "building_slug": { + "type": "string" }, - "related_topics": { - "items": { - "$ref": "#/definitions/trends.RelatedGroup" - }, - "type": "array" + "currency": { + "type": "string" }, - "rising_queries": { - "items": { - "$ref": "#/definitions/trends.RelatedGroup" - }, - "type": "array" + "description": { + "type": "string" }, - "time_range": { - "example": "today 12-m", + "listed_date": { "type": "string" }, - "top_queries": { + "name": { + "type": "string" + }, + "open_houses": { "items": { - "$ref": "#/definitions/trends.RelatedGroup" + "$ref": "#/definitions/streeteasy.OpenHouse" }, "type": "array" }, - "type": { - "example": "web", + "photo_url": { "type": "string" }, - "tz": { - "example": 0, - "type": "integer" + "price": { + "type": "number" + }, + "unit": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "trends.InterestByRegionResponse": { + "stubhub.CarouselEvent": { "properties": { - "category": { - "example": 0, + "category_id": { + "example": 33253, "type": "integer" }, - "geo": { - "example": "US", + "day_of_week": { + "example": "Sat", "type": "string" }, - "hl": { - "example": "en-US", + "event_id": { + "example": 161204289, + "type": "integer" + }, + "image_url": { "type": "string" }, - "interest_by_region": { - "items": { - "$ref": "#/definitions/trends.RegionInterest" - }, - "type": "array" + "is_date_confirmed": { + "type": "boolean" }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "is_time_confirmed": { + "type": "boolean" }, - "property": { + "local_event_date": { + "example": "Mar 06 2027", "type": "string" }, - "time_range": { - "example": "today 12-m", + "local_event_time": { + "example": "7:30 PM", "type": "string" }, - "type": { - "example": "web", + "location": { + "example": "Kai Tak, Kowloon City", "type": "string" }, - "tz": { - "example": 0, - "type": "integer" + "min_price": { + "example": 99, + "type": "number" + }, + "name": { + "example": "BTS", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue_name": { + "type": "string" } }, "type": "object" }, - "trends.InterestOverTimeResponse": { + "stubhub.CarouselPerson": { "properties": { - "category": { - "example": 0, + "available_local_events": { + "example": 4, "type": "integer" }, - "geo": { - "example": "US", + "category_id": { + "example": 26202, + "type": "integer" + }, + "formatted_local_events_dates": { + "example": "Nov 27 - Dec 06", "type": "string" }, - "hl": { - "example": "en-US", + "image_credit_name": { "type": "string" }, - "interest_over_time": { + "image_url": { + "type": "string" + }, + "name": { + "example": "The Weeknd", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "stubhub.CarouselResponse": { + "properties": { + "alternative_performers": { "items": { - "$ref": "#/definitions/trends.InterestPoint" + "$ref": "#/definitions/stubhub.CarouselPerson" }, "type": "array" }, - "keywords": { + "category_id": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + }, + "max": { + "type": "integer" + }, + "maybe_interested_in": { "items": { - "type": "string" + "$ref": "#/definitions/stubhub.CarouselPerson" }, "type": "array" }, - "property": { - "type": "string" + "performer_id": { + "type": "integer" }, - "time_range": { - "example": "today 12-m", + "performer_slug": { "type": "string" }, - "type": { - "example": "web", + "recently_viewed": { + "items": { + "$ref": "#/definitions/stubhub.CarouselPerson" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "tz": { - "example": 0, + "top_level_category_id": { "type": "integer" + }, + "trending_events": { + "items": { + "$ref": "#/definitions/stubhub.CarouselEvent" + }, + "type": "array" } }, "type": "object" }, - "trends.InterestPoint": { + "stubhub.CategoriesResponse": { "properties": { - "formatted_axis_time": { - "example": "Apr 2026", + "categories": { + "items": { + "$ref": "#/definitions/stubhub.Category" + }, + "type": "array" + }, + "count": { + "example": 12, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "formatted_time": { - "example": "Apr 2026", + "from": { "type": "string" }, - "time": { - "example": "1777075200", + "source_url": { "type": "string" }, - "values": { - "items": { - "$ref": "#/definitions/trends.TrendValue" - }, - "type": "array" + "to": { + "type": "string" } }, "type": "object" }, - "trends.RegionInterest": { + "stubhub.Category": { "properties": { - "geo_code": { - "example": "US-CA", + "id": { + "example": 5084, + "type": "integer" + }, + "is_venue": { + "type": "boolean" + }, + "min_price": { + "example": 45, + "type": "number" + }, + "name": { + "example": "NFL", "type": "string" }, - "geo_name": { - "example": "California", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "stubhub.CategoryEvent": { + "properties": { + "country": { + "example": "USA", "type": "string" }, - "values": { - "items": { - "$ref": "#/definitions/trends.TrendValue" - }, - "type": "array" + "date": { + "example": "Sep 15", + "type": "string" + }, + "day_of_week": { + "example": "Tue", + "type": "string" + }, + "distance_miles": { + "example": "26 mi", + "type": "string" + }, + "event_id": { + "example": 161280784, + "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": { + "type": "string" + }, + "venue_city": { + "example": "Sayreville", + "type": "string" + }, + "venue_name": { + "example": "Starland Ballroom", + "type": "string" + }, + "venue_state": { + "example": "NJ", + "type": "string" } }, "type": "object" }, - "trends.RelatedGroup": { + "stubhub.CategoryEventsResponse": { "properties": { - "items": { + "category_id": { + "type": "integer" + }, + "count": { + "example": 20, + "type": "integer" + }, + "events": { "items": { - "$ref": "#/definitions/trends.RelatedItem" + "$ref": "#/definitions/stubhub.CategoryEvent" }, "type": "array" }, - "keyword": { - "example": "chatgpt", + "fetched_at": { + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 20, + "type": "integer" + }, + "source_url": { "type": "string" + }, + "total_count": { + "example": 1588, + "type": "integer" } }, "type": "object" }, - "trends.RelatedItem": { + "stubhub.ExploreEvent": { "properties": { - "formatted_value": { - "example": "100", + "category_id": { + "example": 5084, + "type": "integer" + }, + "date": { + "example": "Sep 15", "type": "string" }, - "link": { - "example": "/trends/explore?q=chatgpt", + "day_of_week": { + "example": "Tue", "type": "string" }, - "query": { - "example": "chatgpt login", + "event_id": { + "example": 161341819, + "type": "integer" + }, + "has_active_listings": { + "type": "boolean" + }, + "image_url": { "type": "string" }, - "topic_mid": { - "example": "/g/11khcfz0y2", + "is_date_confirmed": { + "type": "boolean" + }, + "is_time_confirmed": { + "type": "boolean" + }, + "location": { + "example": "Inglewood, CA, USA", "type": "string" }, - "topic_title": { - "example": "ChatGPT", + "name": { + "example": "Taylor Swift", "type": "string" }, - "topic_type": { - "example": "Topic", + "time": { + "example": "10:00 AM", "type": "string" }, - "value": { - "example": 100, - "type": "integer" + "url": { + "type": "string" + }, + "venue_name": { + "example": "SoFi Stadium", + "type": "string" } }, "type": "object" }, - "trends.RelatedTopicsResponse": { + "stubhub.ExploreResponse": { "properties": { - "category": { - "example": 0, + "count": { + "example": 20, "type": "integer" }, - "geo": { - "example": "US", + "events": { + "items": { + "$ref": "#/definitions/stubhub.ExploreEvent" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "hl": { - "example": "en-US", + "from": { "type": "string" }, - "keywords": { + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + }, + "source_url": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "type": "object" + }, + "stubhub.NavigationCategoriesResponse": { + "properties": { + "category_id": { + "example": 1, + "type": "integer" + }, + "id": { + "example": 1, + "type": "integer" + }, + "subcategories": { "items": { - "type": "string" + "$ref": "#/definitions/stubhub.NavigationCategory" }, "type": "array" }, - "property": { + "title": { + "example": "Theater", "type": "string" }, - "related_topics": { + "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" + }, + "stubhub.NavigationCategory": { + "properties": { + "id": { + "example": 12585, + "type": "integer" + }, + "subcategories": { "items": { - "$ref": "#/definitions/trends.RelatedGroup" + "$ref": "#/definitions/stubhub.NavigationCategory" }, "type": "array" }, - "time_range": { - "example": "today 12-m", + "title": { + "example": "Broadway Shows", "type": "string" }, - "type": { - "example": "web", + "url": { + "example": "https://www.stubhub.com/broadway-shows-tickets/category/138275421", "type": "string" }, - "tz": { - "example": 0, - "type": "integer" + "view_all_content": { + "example": "View More Theater", + "type": "string" } }, "type": "object" }, - "trends.TrendCategory": { + "stubhub.PerformerEvent": { "properties": { - "id": { - "example": 0, - "type": "integer" + "availability": { + "example": "http://schema.org/InStock", + "type": "string" + }, + "low_price": { + "example": 71.87, + "type": "number" }, "name": { - "example": "All", + "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": { + "type": "string" + }, + "venue_city": { + "example": "Kansas City", + "type": "string" + }, + "venue_country": { + "example": "USA", + "type": "string" + }, + "venue_name": { + "example": "GEHA Field at Arrowhead Stadium", + "type": "string" + }, + "venue_state": { + "example": "Missouri", "type": "string" } }, "type": "object" }, - "trends.TrendValue": { + "stubhub.PerformerEventsResponse": { "properties": { - "formatted_value": { - "example": "87", + "count": { + "example": 10, + "type": "integer" + }, + "events": { + "items": { + "$ref": "#/definitions/stubhub.PerformerEvent" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "has_data": { - "example": true, - "type": "boolean" + "performer_id": { + "type": "integer" }, - "keyword": { - "example": "chatgpt", + "performer_slug": { "type": "string" }, - "value": { - "example": 87, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "stubhub.SearchGroup": { + "properties": { + "count": { + "example": 3, + "type": "integer" + }, + "entity": { + "example": 5, "type": "integer" + }, + "results": { + "items": { + "$ref": "#/definitions/stubhub.SearchResult" + }, + "type": "array" } }, "type": "object" }, - "trends.TrendingArticle": { + "stubhub.SearchResponse": { "properties": { - "source": { - "example": "Example News", + "fetched_at": { "type": "string" }, - "time": { - "example": "2 hours ago", - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/stubhub.SearchGroup" + }, + "type": "array" }, - "title": { - "example": "Why chatgpt is trending", + "more": { + "type": "boolean" + }, + "query": { + "example": "The Weeknd", "type": "string" }, - "url": { - "example": "https://example.com/news", + "source_url": { "type": "string" + }, + "special_char_only": { + "type": "boolean" } }, "type": "object" }, - "trends.TrendingDetailRequest": { + "stubhub.SearchResult": { "properties": { - "category": { - "example": 0, + "category_image_url": { + "type": "string" + }, + "entity_type": { + "example": 1, "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", + "icon_name": { + "example": "Concert", "type": "string" }, - "hl": { - "example": "en-US", + "id": { + "example": 26202, + "type": "integer" + }, + "image_url": { "type": "string" }, - "property": { - "example": "", + "subtitle": { + "example": "Concert Tickets", "type": "string" }, - "query": { - "example": "chatgpt", + "title": { + "example": "The Weeknd", "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", + "url": { + "example": "https://www.stubhub.com/the-weeknd-tickets/performer/714235", + "type": "string" + } + }, + "type": "object" + }, + "stubhub.SuggestedSearch": { + "properties": { + "category_image_url": { "type": "string" }, - "type": { - "enum": [ - "web", - "image", - "news", - "youtube", - "shopping" - ], - "example": "web", + "id": { + "example": 26202, + "type": "integer" + }, + "title": { + "example": "The Weeknd", "type": "string" }, - "tz": { - "example": 0, + "top_level_category_id": { + "example": 3, "type": "integer" + }, + "url": { + "example": "https://www.stubhub.com/the-weeknd-tickets/performer/714235", + "type": "string" } }, "type": "object" }, - "trends.TrendingItem": { + "stubhub.SuggestedSearchesResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/trends.TrendingArticle" - }, - "type": "array" + "count": { + "example": 10, + "type": "integer" }, - "explore_url": { - "example": "https://trends.google.com/trends/explore?q=chatgpt&geo=US", + "fetched_at": { "type": "string" }, - "query": { - "example": "chatgpt", + "source_url": { "type": "string" }, - "rank": { - "example": 1, - "type": "integer" - }, - "related_terms": { + "suggestions": { "items": { - "type": "string" + "$ref": "#/definitions/stubhub.SuggestedSearch" }, "type": "array" + } + }, + "type": "object" + }, + "stubhub.TrendingEvent": { + "properties": { + "category_id": { + "example": 4892, + "type": "integer" }, - "share_url": { + "date": { + "example": "Sep 19 2026", "type": "string" }, - "started_unix": { - "example": 1777075200, + "day_of_week": { + "example": "Sat", + "type": "string" + }, + "event_id": { + "example": 160790802, "type": "integer" }, - "status": { - "example": "active", + "image_url": { "type": "string" }, - "title": { - "example": "chatgpt", + "is_date_confirmed": { + "type": "boolean" + }, + "is_time_confirmed": { + "type": "boolean" + }, + "location": { + "example": "Nanterre, Ile-de-France", "type": "string" }, - "traffic": { - "example": "200K+", + "name": { + "example": "Celine Dion", "type": "string" }, - "updated_unix": { - "example": 1777078800, - "type": "integer" + "time": { + "example": "7:30 PM", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue_name": { + "type": "string" } }, "type": "object" }, - "trends.TrendingResponse": { + "stubhub.TrendingEventsResponse": { "properties": { - "category": { - "example": 0, + "count": { + "example": 20, "type": "integer" }, - "geo": { - "example": "US", - "type": "string" - }, - "hl": { - "example": "en-US", - "type": "string" - }, - "items": { + "events": { "items": { - "$ref": "#/definitions/trends.TrendingItem" + "$ref": "#/definitions/stubhub.TrendingEvent" }, "type": "array" }, - "sort_by": { - "example": "relevance", + "fetched_at": { "type": "string" }, - "status": { - "example": "all", + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 20, + "type": "integer" + }, + "source_url": { "type": "string" }, - "time_range": { - "example": "24h", + "top_level_category_id": { + "type": "integer" + }, + "total_count": { + "example": 200, + "type": "integer" + } + }, + "type": "object" + }, + "stubhub.TrendingPerformer": { + "properties": { + "event_dates_range": { + "example": "Sep 16 - May 29 2027", "type": "string" }, - "tz": { - "example": 0, + "favorites_count": { + "example": 154655, "type": "integer" }, - "window": { - "example": "24h", + "id": { + "example": 20519, + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "Bruno Mars", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "trends.TrendsCategoriesResponse": { + "stubhub.TrendingResponse": { "properties": { - "categories": { + "count": { + "example": 10, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "performers": { "items": { - "$ref": "#/definitions/trends.TrendCategory" + "$ref": "#/definitions/stubhub.TrendingPerformer" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "top_level_category_id": { + "type": "integer" } }, "type": "object" }, - "trends.TrendsEnumsResponse": { + "stubhub.VenueEvent": { "properties": { - "explore_time_ranges": { - "items": { - "type": "string" - }, - "type": "array" - }, - "locations": { - "items": { - "type": "string" - }, - "type": "array" + "availability": { + "example": "http://schema.org/InStock", + "type": "string" }, - "search_types": { - "items": { - "type": "string" - }, - "type": "array" + "low_price": { + "example": 71.87, + "type": "number" }, - "trend_statuses": { - "items": { - "type": "string" - }, - "type": "array" + "name": { + "example": "Indianapolis Colts at Kansas City Chiefs", + "type": "string" }, - "trending_categories": { - "items": { - "$ref": "#/definitions/trends.TrendCategory" - }, - "type": "array" + "price_currency": { + "example": "USD", + "type": "string" }, - "trending_sort_bys": { - "items": { - "type": "string" - }, - "type": "array" + "start_date": { + "example": "2026-09-20T19:20:00", + "type": "string" }, - "trending_time_ranges": { - "items": { - "type": "string" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "trends.TrendsLocationsResponse": { + "stubhub.VenueEventsResponse": { "properties": { - "locations": { + "count": { + "example": 11, + "type": "integer" + }, + "events": { "items": { - "type": "string" + "$ref": "#/definitions/stubhub.VenueEvent" }, "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "venue_id": { + "type": "integer" + }, + "venue_slug": { + "type": "string" } }, "type": "object" }, - "trends.exploreQueriesResponseDoc": { + "stubhub.carouselResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.ExploreQueriesResponse" + "$ref": "#/definitions/stubhub.CarouselResponse" }, "msg": { "example": "OK", @@ -169362,14 +169341,14 @@ }, "type": "object" }, - "trends.exploreResponseDoc": { + "stubhub.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.ExploreResponse" + "$ref": "#/definitions/stubhub.CategoriesResponse" }, "msg": { "example": "OK", @@ -169378,14 +169357,14 @@ }, "type": "object" }, - "trends.interestByRegionResponseDoc": { + "stubhub.categoryEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.InterestByRegionResponse" + "$ref": "#/definitions/stubhub.CategoryEventsResponse" }, "msg": { "example": "OK", @@ -169394,14 +169373,14 @@ }, "type": "object" }, - "trends.interestOverTimeResponseDoc": { + "stubhub.exploreResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.InterestOverTimeResponse" + "$ref": "#/definitions/stubhub.ExploreResponse" }, "msg": { "example": "OK", @@ -169410,14 +169389,14 @@ }, "type": "object" }, - "trends.relatedTopicsResponseDoc": { + "stubhub.navigationCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.RelatedTopicsResponse" + "$ref": "#/definitions/stubhub.NavigationCategoriesResponse" }, "msg": { "example": "OK", @@ -169426,14 +169405,14 @@ }, "type": "object" }, - "trends.trendingResponseDoc": { + "stubhub.performerEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.TrendingResponse" + "$ref": "#/definitions/stubhub.PerformerEventsResponse" }, "msg": { "example": "OK", @@ -169442,14 +169421,14 @@ }, "type": "object" }, - "trends.trendsCategoriesResponseDoc": { + "stubhub.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.TrendsCategoriesResponse" + "$ref": "#/definitions/stubhub.SearchResponse" }, "msg": { "example": "OK", @@ -169458,14 +169437,14 @@ }, "type": "object" }, - "trends.trendsEnumsResponseDoc": { + "stubhub.suggestedSearchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.TrendsEnumsResponse" + "$ref": "#/definitions/stubhub.SuggestedSearchesResponse" }, "msg": { "example": "OK", @@ -169474,14 +169453,14 @@ }, "type": "object" }, - "trends.trendsLocationsResponseDoc": { + "stubhub.trendingEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.TrendsLocationsResponse" + "$ref": "#/definitions/stubhub.TrendingEventsResponse" }, "msg": { "example": "OK", @@ -169490,481 +169469,478 @@ }, "type": "object" }, - "tripadvisor.AutocompleteResponse": { + "stubhub.trendingResponseDoc": { "properties": { - "locale": { - "example": "en-HK", - "type": "string" - }, - "query": { - "example": "hong kong", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "results": { - "items": { - "$ref": "#/definitions/tripadvisor.SearchItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/stubhub.TrendingResponse" }, - "scope_geo_id": { - "example": 60763, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "tripadvisor.EnumsResponse": { + "stubhub.venueEventsResponseDoc": { "properties": { - "attraction_categories": { - "example": [ - "attraction", - "tour", - "day_trip" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "attraction_category_ids": { - "additionalProperties": { - "type": "string" - }, - "example": { - "day_trip": "c63", - "tour": "c42" - }, - "type": "object" - }, - "currencies": { - "example": [ - "HKD", - "USD", - "EUR" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "filter_ids": { - "example": [ - "class", - "ufe" - ], - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "hotel_amenities": { - "example": [ - 9176, - 9179 - ], - "items": { - "type": "integer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/stubhub.VenueEventsResponse" }, - "hotel_classes": { - "example": [ - 1, - 2, - 3, - 4, - 5 - ], + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "stuff.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "integer" + "$ref": "#/definitions/stuff.HeadlineItem" }, "type": "array" }, - "languages": { - "example": [ - "en", - "fr", - "zh-CN" - ], - "items": { - "type": "string" - }, - "type": "array" + "biography": { + "type": "string" }, - "listing_types": { - "example": [ - "hotel", - "restaurant", - "attraction" - ], - "items": { - "type": "string" - }, - "type": "array" + "email": { + "type": "string" }, - "locales": { - "example": [ - "en-HK", - "en-US", - "en-GB" - ], - "items": { - "type": "string" - }, - "type": "array" + "image_url": { + "type": "string" }, - "pricing_modes": { - "example": [ - "ALL_IN_RATE" - ], - "items": { - "type": "string" - }, - "type": "array" + "job_title": { + "type": "string" }, - "restaurant_options": { - "example": [ - 20693 - ], - "items": { - "type": "integer" - }, - "type": "array" + "location": { + "type": "string" }, - "restaurant_types": { - "example": [ - 10591 - ], - "items": { - "type": "integer" - }, - "type": "array" + "name": { + "type": "string" }, - "sorts": { - "example": [ - "BEST_VALUE", - "POPULARITY" - ], - "items": { - "type": "string" - }, - "type": "array" + "slug": { + "type": "string" }, - "unsupported_entity_types": { - "example": [ - "airline", - "airport" - ], - "items": { - "type": "string" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "tripadvisor.HotelItem": { + "stuff.HeadlineItem": { "properties": { - "address": { - "type": "string" - }, - "currency": { - "example": "HKD", + "author": { "type": "string" }, - "id": { - "example": "113311", + "image_url": { "type": "string" }, - "image": { + "published_at": { "type": "string" }, - "latitude": { - "example": 40.76174, - "type": "number" - }, - "longitude": { - "example": -73.975365, - "type": "number" - }, - "parent": { - "example": "New York City", + "summary": { "type": "string" }, - "phone": { + "title": { "type": "string" }, - "price": { - "example": "HK$7,793", + "type": { "type": "string" }, - "provider": { - "example": "Agoda", + "url": { "type": "string" + } + }, + "type": "object" + }, + "substack.AppStorePlan": { + "properties": { + "active": { + "type": "boolean" }, - "rank": { - "example": 146, + "amount_cents": { + "example": 1400, "type": "integer" }, - "rank_label": { - "example": "#141 of 519 hotels in New York City", + "currency": { + "example": "usd", "type": "string" }, - "rating": { - "example": 4.5, - "type": "number" + "display_name": { + "type": "string" }, - "review_count": { - "example": 1517, - "type": "integer" + "display_price": { + "example": "$14", + "type": "string" }, - "review_rating": { - "type": "number" + "is_founding": { + "type": "boolean" }, - "review_snippet": { + "period": { + "example": "month", "type": "string" }, - "review_title": { + "sku": { "type": "string" - }, - "star_rating": { - "example": 5, - "type": "number" - }, - "tags": { + } + }, + "type": "object" + }, + "substack.CategoriesResult": { + "properties": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/substack.Category" }, "type": "array" + } + }, + "type": "object" + }, + "substack.Category": { + "properties": { + "emoji": { + "example": "🕹", + "type": "string" }, - "title": { - "example": "The Peninsula New York", + "id": { + "example": "4", "type": "string" }, - "type": { - "example": "hotel", + "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" }, - "url": { + "slug": { + "example": "technology", "type": "string" } }, "type": "object" }, - "tripadvisor.HotelListResponse": { + "substack.CategoryResult": { "properties": { - "currency": { - "example": "HKD", + "category_id": { + "example": "4", "type": "string" }, - "full_matches": { - "example": 519, - "type": "integer" - }, - "geo_id": { - "example": 294217, - "type": "integer" - }, - "limit": { - "example": 30, - "type": "integer" + "has_more": { + "type": "boolean" }, - "offset": { - "example": 0, + "page": { "type": "integer" }, - "results": { + "publications": { "items": { - "$ref": "#/definitions/tripadvisor.HotelItem" + "$ref": "#/definitions/substack.PublicationListItem" }, "type": "array" }, - "sort": { - "example": "BEST_VALUE", + "type": { + "example": "paid", "type": "string" - }, - "total": { - "example": 519, - "type": "integer" } }, "type": "object" }, - "tripadvisor.NestedSearchItem": { + "substack.Contributor": { "properties": { - "query": { - "example": "hong kong hotels", - "type": "string" + "bestseller_tier": { + "type": "integer" }, - "title": { - "example": "Hotels", + "bio": { "type": "string" }, - "type": { - "example": "hotel_search", + "handle": { "type": "string" }, - "url": { - "example": "https://en.tripadvisor.com.hk/Hotels-g294217-Hong_Kong-Hotels.html", - "type": "string" - } - }, - "type": "object" - }, - "tripadvisor.PlaceAddressParts": { - "properties": { - "country": { - "type": "string" + "id": { + "example": 29561926, + "type": "integer" }, - "locality": { - "type": "string" + "is_byline_only": { + "type": "boolean" }, - "postal_code": { + "name": { + "example": "Sergiu Klainerman", "type": "string" }, - "region": { + "photo_url": { "type": "string" }, - "street": { + "url": { "type": "string" } }, "type": "object" }, - "tripadvisor.PlaceImage": { + "substack.ContributorsResult": { "properties": { - "caption": { - "type": "string" + "contributors": { + "items": { + "$ref": "#/definitions/substack.Contributor" + }, + "type": "array" }, - "height": { - "example": 768, + "page": { "type": "integer" }, - "url": { + "publication": { + "example": "www.thefp.com", "type": "string" - }, - "width": { - "example": 1024, - "type": "integer" } }, "type": "object" }, - "tripadvisor.PlaceItem": { + "substack.ExploreModule": { "properties": { - "address": { + "category_id": { "type": "string" }, - "booking_url": { + "category_name": { "type": "string" }, - "categories": { + "notes": { "items": { - "type": "string" + "$ref": "#/definitions/substack.Note" }, "type": "array" }, - "cuisines": { + "posts": { "items": { - "type": "string" + "$ref": "#/definitions/substack.Post" }, "type": "array" }, - "currency": { - "example": "HKD", - "type": "string" + "profiles": { + "items": { + "$ref": "#/definitions/substack.User" + }, + "type": "array" }, - "id": { - "example": "5493196", - "type": "string" + "publications": { + "items": { + "$ref": "#/definitions/substack.PublicationListItem" + }, + "type": "array" }, - "image": { + "title": { + "example": "Trending posts", "type": "string" }, - "latitude": { - "example": 22.28331, - "type": "number" - }, - "longitude": { - "example": 114.15874, - "type": "number" - }, - "parent": { - "example": "Hong Kong", - "type": "string" + "topics": { + "items": { + "$ref": "#/definitions/substack.ExploreTopic" + }, + "type": "array" }, - "phone": { + "type": { + "description": "Type is the upstream module kind. Known values:\ntrendingTopicsExplore, trendingPostsExplore, newBestsellersExplore,\nvideoSuggestionsExplore, categoryLeaderboard, comment, post.", + "example": "trendingPostsExplore", "type": "string" - }, - "price": { - "example": "HK$7,793", + } + }, + "type": "object" + }, + "substack.ExploreResult": { + "properties": { + "has_more": { + "type": "boolean" + }, + "modules": { + "items": { + "$ref": "#/definitions/substack.ExploreModule" + }, + "type": "array" + }, + "next_cursor": { "type": "string" }, - "price_level": { - "example": "$$ - $$$", + "tab": { + "example": "explore", "type": "string" }, - "provider": { - "example": "Agoda", + "type": { + "example": "base", "type": "string" + } + }, + "type": "object" + }, + "substack.ExploreTopic": { + "properties": { + "alternate_queries": { + "items": { + "type": "string" + }, + "type": "array" }, - "rank": { - "example": 12, - "type": "integer" + "category": { + "type": "string" }, - "rank_label": { - "example": "#12 of 12000 restaurants in Hong Kong", + "description": { "type": "string" }, - "rating": { - "example": 4.5, - "type": "number" + "featured": { + "type": "boolean" }, - "review_count": { - "example": 1217, - "type": "integer" + "first_trending_at": { + "type": "string" }, - "review_rating": { - "type": "number" + "id": { + "type": "string" }, - "review_snippet": { + "query": { + "example": "Trump campaign rhetoric 2026", "type": "string" }, - "review_title": { + "source": { + "example": "search_history", "type": "string" }, - "star_rating": { - "example": 5, - "type": "number" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "substack.LeaderboardEntry": { + "properties": { + "author": { + "$ref": "#/definitions/substack.User" }, - "tags": { + "publication": { + "$ref": "#/definitions/substack.PublicationListItem" + }, + "rank": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "substack.LeaderboardResult": { + "properties": { + "category_id": { + "example": "96", + "type": "string" + }, + "entries": { "items": { - "type": "string" + "$ref": "#/definitions/substack.LeaderboardEntry" }, "type": "array" }, + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, "title": { - "example": "Hong Kong Asian Cuisine", + "example": "Culture Bestsellers", "type": "string" }, "type": { - "example": "restaurant", + "example": "trending", + "type": "string" + } + }, + "type": "object" + }, + "substack.Note": { + "properties": { + "attached_post": { + "$ref": "#/definitions/substack.NotePost" + }, + "author_bestseller_tier": { + "type": "integer" + }, + "author_handle": { + "example": "jameelajamil", + "type": "string" + }, + "author_id": { + "example": 138271663, + "type": "integer" + }, + "author_name": { + "example": "Jameela Jamil", + "type": "string" + }, + "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" + }, + "language": { "type": "string" }, + "published_at": { + "type": "string" + }, + "reaction_count": { + "example": 12846, + "type": "integer" + }, + "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" }, - "tripadvisor.PlaceLink": { + "substack.NotePost": { "properties": { - "label": { - "example": "Official website", - "type": "string" + "id": { + "type": "integer" }, - "type": { - "example": "website", + "title": { "type": "string" }, "url": { @@ -169973,3514 +169949,3940 @@ }, "type": "object" }, - "tripadvisor.PlaceResponse": { + "substack.NoteRepliesResult": { "properties": { - "address": { - "type": "string" + "has_more": { + "type": "boolean" }, - "address_parts": { - "$ref": "#/definitions/tripadvisor.PlaceAddressParts" + "more_count": { + "description": "MoreCount is how many further reply branches the upstream reports.", + "type": "integer" }, - "amenities": { - "items": { - "type": "string" - }, - "type": "array" + "next_cursor": { + "type": "string" }, - "awards": { - "items": { - "type": "string" - }, - "type": "array" + "note_id": { + "example": 316240438, + "type": "integer" }, - "breadcrumbs": { + "replies": { "items": { - "type": "string" + "$ref": "#/definitions/substack.Note" }, "type": "array" + } + }, + "type": "object" + }, + "substack.NoteRestacksResult": { + "properties": { + "has_more": { + "type": "boolean" }, - "canonical_url": { + "next_cursor": { "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "note_id": { + "example": 316240438, + "type": "integer" }, - "cuisines": { + "restacks": { "items": { - "type": "string" + "$ref": "#/definitions/substack.Note" }, "type": "array" + } + }, + "type": "object" + }, + "substack.NotesFeedResult": { + "properties": { + "has_more": { + "type": "boolean" }, - "description": { + "next_cursor": { "type": "string" }, - "features": { + "notes": { "items": { - "type": "string" + "$ref": "#/definitions/substack.Note" }, "type": "array" }, - "geo_id": { - "example": "60763", + "tab": { + "example": "for-you", "type": "string" }, + "type": { + "example": "base", + "type": "string" + } + }, + "type": "object" + }, + "substack.NotesFeedTab": { + "properties": { "id": { - "example": "5493196", + "example": "for-you", "type": "string" }, - "image": { + "name": { + "example": "For you", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/tripadvisor.PlaceImage" - }, - "type": "array" - }, - "latitude": { - "example": 22.28331, - "type": "number" - }, - "links": { - "items": { - "$ref": "#/definitions/tripadvisor.PlaceLink" - }, - "type": "array" - }, - "longitude": { - "example": 114.15874, - "type": "number" + "type": { + "example": "base", + "type": "string" + } + }, + "type": "object" + }, + "substack.NotesFeedTabsResult": { + "properties": { + "surface": { + "example": "feed", + "type": "string" }, - "opening_hours": { + "tabs": { "items": { - "type": "string" + "$ref": "#/definitions/substack.NotesFeedTab" }, "type": "array" + } + }, + "type": "object" + }, + "substack.PlanCurrency": { + "properties": { + "amount_cents": { + "example": 900, + "type": "integer" }, - "phone": { + "currency": { + "example": "eur", + "type": "string" + } + }, + "type": "object" + }, + "substack.Post": { + "properties": { + "audience": { + "example": "everyone", "type": "string" }, - "price_level": { - "example": "$$ - $$$", + "comment_count": { + "type": "integer" + }, + "cover_image_url": { "type": "string" }, - "price_range": { - "example": "$$ - $$$", + "description": { "type": "string" }, - "rank": { - "example": 1, + "id": { + "example": 213613469, "type": "integer" }, - "rank_label": { - "example": "#1 of 1,531 things to do in Hong Kong", - "type": "string" + "paywalled": { + "type": "boolean" }, - "rating": { - "type": "number" + "published_at": { + "type": "string" }, - "reviews": { + "reaction_count": { "type": "integer" }, - "summary": { + "slug": { "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "subtitle": { + "type": "string" }, "title": { "type": "string" }, "type": { + "example": "newsletter", "type": "string" }, "url": { "type": "string" - }, - "website_url": { - "type": "string" } }, "type": "object" }, - "tripadvisor.ReviewItem": { + "substack.PostByline": { "properties": { - "author": { + "handle": { "type": "string" }, - "author_avatar": { - "type": "string" + "id": { + "example": 134996999, + "type": "integer" }, - "author_hometown": { + "name": { + "example": "Max Kan", "type": "string" }, - "author_id": { + "url": { "type": "string" - }, - "author_url": { + } + }, + "type": "object" + }, + "substack.PostDetail": { + "properties": { + "audience": { + "example": "everyone", "type": "string" }, - "created_date": { + "bylines": { + "items": { + "$ref": "#/definitions/substack.PostByline" + }, + "type": "array" + }, + "comment_count": { + "type": "integer" + }, + "cover_image_url": { "type": "string" }, - "date": { + "description": { "type": "string" }, - "helpful": { + "id": { + "example": 213613469, "type": "integer" }, - "id": { - "type": "string" + "paywalled": { + "type": "boolean" }, - "language": { - "type": "string" + "podcast_duration_seconds": { + "type": "integer" }, - "original_language": { + "podcast_url": { "type": "string" }, - "photos": { - "items": { - "type": "string" - }, - "type": "array" + "published_at": { + "type": "string" }, - "rating": { - "type": "number" + "reaction_count": { + "type": "integer" }, - "stay_date": { + "slug": { "type": "string" }, - "text": { + "subtitle": { "type": "string" }, "title": { "type": "string" }, - "trip_type": { + "type": { + "example": "newsletter", "type": "string" }, "url": { "type": "string" + }, + "wordcount": { + "example": 3953, + "type": "integer" } }, "type": "object" }, - "tripadvisor.ReviewsResponse": { + "substack.PostsResult": { "properties": { - "id": { - "example": "5493196", - "type": "string" - }, - "language": { - "example": "en", - "type": "string" - }, "limit": { - "example": 20, "type": "integer" }, - "page": { - "example": 1, + "offset": { "type": "integer" }, - "reviews": { + "posts": { "items": { - "$ref": "#/definitions/tripadvisor.ReviewItem" + "$ref": "#/definitions/substack.Post" }, "type": "array" }, - "total": { - "example": 25770, - "type": "integer" + "publication": { + "example": "semianalysis", + "type": "string" }, - "url": { + "search": { + "example": "nvidia", + "type": "string" + }, + "sort": { + "example": "new", "type": "string" } }, "type": "object" }, - "tripadvisor.SearchItem": { + "substack.Publication": { "properties": { - "document_id": { - "example": "loc;294217;g294217", + "author_id": { + "type": "integer" + }, + "copyright": { "type": "string" }, - "id": { - "example": "294217", + "custom_domain": { "type": "string" }, - "image": { + "explicit": { + "type": "boolean" + }, + "hero_text": { "type": "string" }, - "latitude": { - "example": 22.28331, - "type": "number" + "id": { + "example": 6349492, + "type": "integer" }, - "longitude": { - "example": 114.15874, - "type": "number" + "invite_only": { + "type": "boolean" }, - "nested_results": { - "items": { - "$ref": "#/definitions/tripadvisor.NestedSearchItem" - }, - "type": "array" + "language": { + "type": "string" }, - "parent": { - "example": "China, Asia", + "logo_url": { "type": "string" }, - "title": { - "example": "Hong Kong", + "name": { + "example": "SemiAnalysis", "type": "string" }, - "type": { - "example": "geo", + "subdomain": { "type": "string" }, + "subscribers": { + "$ref": "#/definitions/substack.SubscriberCounts" + }, + "subscription": { + "$ref": "#/definitions/substack.Subscription" + }, "url": { - "example": "https://en.tripadvisor.com.hk/Tourism-g294217-Hong_Kong-Vacations.html", + "example": "https://semianalysis.substack.com", "type": "string" } }, "type": "object" }, - "tripadvisor.SearchResponse": { + "substack.PublicationListItem": { "properties": { - "currency": { - "example": "HKD", + "author_handle": { "type": "string" }, - "geo_id": { - "example": 294217, + "author_id": { "type": "integer" }, - "limit": { - "example": 30, - "type": "integer" + "author_name": { + "example": "Dylan Patel", + "type": "string" }, - "locale": { - "example": "en-HK", + "custom_domain": { "type": "string" }, - "offset": { - "example": 0, + "explicit": { + "type": "boolean" + }, + "hero_text": { + "type": "string" + }, + "id": { + "example": 6349492, "type": "integer" }, - "results": { - "items": { - "$ref": "#/definitions/tripadvisor.PlaceItem" - }, - "type": "array" + "language": { + "type": "string" }, - "sort": { - "example": "POPULARITY", + "logo_url": { "type": "string" }, - "source": { - "example": "html_listing", + "name": { + "example": "SemiAnalysis", "type": "string" }, - "type": { - "example": "restaurant", + "payments_enabled": { + "type": "boolean" + }, + "subdomain": { + "example": "semianalysis", "type": "string" }, - "unsupported_types": { - "example": [ - "vacation_rental", - "tour", - "airline" - ], - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "tripadvisor.tripadvisorAutocompleteResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "subscribers": { + "$ref": "#/definitions/substack.SubscriberCounts" }, - "data": { - "$ref": "#/definitions/tripadvisor.AutocompleteResponse" + "subscription": { + "$ref": "#/definitions/substack.Subscription" }, - "msg": { - "example": "OK", + "url": { + "example": "https://semianalysis.substack.com", "type": "string" } }, "type": "object" }, - "tripadvisor.tripadvisorEnumsResponseDoc": { + "substack.RecommendationsResult": { "properties": { - "code": { - "example": 200, + "publication_id": { + "example": 6349492, "type": "integer" }, - "data": { - "$ref": "#/definitions/tripadvisor.EnumsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "recommendations": { + "items": { + "$ref": "#/definitions/substack.PublicationListItem" + }, + "type": "array" } }, "type": "object" }, - "tripadvisor.tripadvisorHotelsResponseDoc": { + "substack.SearchResult": { "properties": { - "code": { - "example": 200, + "focused_posts": { + "items": { + "$ref": "#/definitions/substack.Post" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tripadvisor.HotelListResponse" + "posts": { + "items": { + "$ref": "#/definitions/substack.Post" + }, + "type": "array" }, - "msg": { - "example": "OK", + "publications": { + "items": { + "$ref": "#/definitions/substack.PublicationListItem" + }, + "type": "array" + }, + "query": { + "example": "artificial intelligence", "type": "string" } }, "type": "object" }, - "tripadvisor.tripadvisorReviewsResponseDoc": { + "substack.SubscriberCounts": { "properties": { - "code": { - "example": 200, + "follower_count": { + "example": 365727, "type": "integer" }, - "data": { - "$ref": "#/definitions/tripadvisor.ReviewsResponse" - }, - "msg": { - "example": "OK", + "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" - } - }, - "type": "object" - }, - "tripadvisor.tripadvisorSearchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "paid_rough_int": { + "example": 1000, "type": "integer" }, - "data": { - "$ref": "#/definitions/tripadvisor.SearchResponse" + "paid_tier": { + "example": 1000, + "type": "integer" }, - "msg": { - "example": "OK", + "total": { + "example": 315000, + "type": "integer" + }, + "total_display": { + "example": "315K+", + "type": "string" + }, + "total_hidden": { + "type": "boolean" + }, + "total_rough": { + "example": "Hundreds of thousands of subscribers", "type": "string" } }, "type": "object" }, - "tripcom.DetailResponse": { + "substack.Subscription": { "properties": { - "city_name": { - "example": "Bang Sao Thong", - "type": "string" + "annual_disabled": { + "type": "boolean" }, - "country_name": { - "example": "Thailand", - "type": "string" + "app_store_plans": { + "items": { + "$ref": "#/definitions/substack.AppStorePlan" + }, + "type": "array" }, - "description": { + "founding_benefits": { + "items": { + "type": "string" + }, + "type": "array" + }, + "founding_plan_name": { + "example": "Founding Member", "type": "string" }, - "highlights": { - "example": [ - "Free airport transfers", - "Great views" - ], + "free_benefits": { "items": { "type": "string" }, "type": "array" }, - "hotel_id": { - "example": 39371462, - "type": "integer" + "free_trial_enabled": { + "type": "boolean" }, - "image_count": { - "example": 10, - "type": "integer" + "group_discount_percent": { + "example": 20, + "type": "number" }, - "images": { + "monthly_disabled": { + "type": "boolean" + }, + "paid_benefits": { "items": { "type": "string" }, "type": "array" }, - "local_name": { + "payments_state": { + "example": "enabled", "type": "string" }, - "location": { - "$ref": "#/definitions/tripcom.Location" - }, - "name": { - "example": "Divalux Resort and Spa Bangkok, Suvarnabhumi Airport-Free Shuttle", - "type": "string" + "plans": { + "items": { + "$ref": "#/definitions/substack.SubscriptionPlan" + }, + "type": "array" }, - "open_year": { - "example": "2019", - "type": "string" + "pledges_enabled": { + "type": "boolean" + } + }, + "type": "object" + }, + "substack.SubscriptionPlan": { + "properties": { + "active": { + "type": "boolean" }, - "policy": { - "$ref": "#/definitions/tripcom.Policy" + "amount_cents": { + "example": 5000, + "type": "integer" }, - "popular_facilities": { - "example": [ - "Outdoor swimming pool", - "Spa", - "Massage room" - ], + "currencies": { "items": { - "type": "string" + "$ref": "#/definitions/substack.PlanCurrency" }, "type": "array" }, - "province_name": { - "example": "Samut Prakan Province", + "currency": { + "example": "usd", "type": "string" }, - "rating": { - "$ref": "#/definitions/tripcom.Rating" + "id": { + "example": "monthly50usd_982ddb86", + "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/", + "interval": { + "example": "month", "type": "string" }, - "star_rating": { - "example": 5, + "interval_count": { + "example": 1, + "type": "integer" + }, + "kind": { + "example": "monthly", + "type": "string" + }, + "nickname": { + "example": "$50 a month", + "type": "string" + }, + "trial_period_days": { "type": "integer" } }, "type": "object" }, - "tripcom.HotelSummary": { + "substack.User": { "properties": { - "description": { - "example": "The hotel has a relaxing wellness atmosphere...", + "bestseller_tier": { + "example": 10000, + "type": "integer" + }, + "bio": { "type": "string" }, - "hotel_id": { - "example": 39371462, + "handle": { + "example": "pragmaticengineer", + "type": "string" + }, + "id": { + "example": 2067309, "type": "integer" }, - "image_url": { - "example": "https://ak-d.tripcdn.com/images/0585b12000sq6ih4c6345.jpg", + "name": { + "example": "Gergely Orosz", "type": "string" }, - "location": { - "example": "88 Moo3, Sriwaree Road, Sisa Chokhe Noi, Bang Sao Thong District, Srisa Chorakhe Noi, Bang Sao Thong", + "photo_url": { "type": "string" }, - "name": { - "example": "Divalux Resort and Spa Bangkok, Suvarnabhumi Airport-Free Shuttle", + "profile_set_up_at": { "type": "string" }, - "price": { - "$ref": "#/definitions/tripcom.Price" + "publications": { + "items": { + "$ref": "#/definitions/substack.UserPublication" + }, + "type": "array" }, - "rating_score": { - "example": 8.7, - "type": "number" + "slug": { + "type": "string" }, - "review_count": { - "example": 872, - "type": "integer" + "subscribers": { + "$ref": "#/definitions/substack.SubscriberCounts" }, - "star_rating": { - "example": 5, - "type": "integer" + "subscriptions": { + "items": { + "$ref": "#/definitions/substack.UserSubscription" + }, + "type": "array" }, "url": { - "example": "https://www.trip.com/hotels/bang-sao-thong-district-hotel-detail-39371462/divalux-resort-and-spa-bangkok-suvarnabhumi-airport-free-shuttle/", + "example": "https://substack.com/@pragmaticengineer", "type": "string" } }, "type": "object" }, - "tripcom.Location": { + "substack.UserActivityItem": { "properties": { - "address": { - "example": "88 Moo3, Sriwaree Road, Sisa Chokhe Noi, Bang Sao Thong District, Samut Prakan Province, 10570, Thailand", + "kind": { + "example": "comment_restack", "type": "string" }, - "latitude": { - "example": 13.69316, - "type": "number" - }, - "longitude": { - "example": 100.793475, - "type": "number" + "note": { + "$ref": "#/definitions/substack.Note" }, - "traffic_description": { - "example": "15 km from Pra Chom Klao, approx. 27 mins by car", - "type": "string" + "post": { + "$ref": "#/definitions/substack.Post" }, - "zone_name": { - "example": "Suvarnabhumi Airport", + "timestamp": { "type": "string" } }, "type": "object" }, - "tripcom.Policy": { + "substack.UserActivityResult": { "properties": { - "check_in_out": { - "example": [ - "Check-in: After 14:00", - "Check-out: Before 12:00", - "Front desk hours: 24/7" - ], + "has_more": { + "type": "boolean" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/substack.UserActivityItem" }, "type": "array" }, - "child": { - "example": [ - "Children of all ages are welcome at this property." - ], + "next_cursor": { + "type": "string" + }, + "types": { "items": { "type": "string" }, "type": "array" + }, + "user_id": { + "example": 49731969, + "type": "integer" } }, "type": "object" }, - "tripcom.Price": { + "substack.UserConnectionsResult": { "properties": { - "amount": { - "example": 38, - "type": "number" - }, - "currency": { - "example": "US$", + "list": { + "example": "followers", "type": "string" }, - "raw": { - "example": "US$38", + "name": { + "example": "Followers", "type": "string" }, - "unit": { - "example": "1 night", - "type": "string" + "user_id": { + "example": 49731969, + "type": "integer" + }, + "users": { + "items": { + "$ref": "#/definitions/substack.User" + }, + "type": "array" } }, "type": "object" }, - "tripcom.Rating": { + "substack.UserPublication": { "properties": { - "amenities_score": { - "example": 8.8, - "type": "number" + "custom_domain": { + "type": "string" }, - "cleanliness_score": { - "example": 8.7, - "type": "number" + "id": { + "example": 458709, + "type": "integer" }, - "location_score": { - "example": 8.3, - "type": "number" + "is_primary": { + "type": "boolean" }, - "recommend": { - "example": "79% Recommended", + "name": { + "example": "The Pragmatic Engineer", "type": "string" }, - "score": { - "example": 8.6, - "type": "number" - }, - "score_description": { - "example": "Very good", + "role": { + "example": "admin", "type": "string" }, - "score_max": { - "example": 10, - "type": "number" + "subdomain": { + "type": "string" }, - "service_score": { - "example": 8.7, - "type": "number" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "substack.UserSearchResult": { + "properties": { + "has_more": { + "type": "boolean" }, - "total_comment": { - "example": 875, + "page": { "type": "integer" + }, + "query": { + "example": "pragmatic engineer", + "type": "string" + }, + "users": { + "items": { + "$ref": "#/definitions/substack.User" + }, + "type": "array" } }, "type": "object" }, - "tripcom.SearchResponse": { + "substack.UserSubscription": { "properties": { - "city_id": { - "example": "359", - "type": "string" + "is_founding": { + "type": "boolean" }, - "city_slug": { - "example": "bangkok", + "membership_state": { + "example": "free_signup", "type": "string" }, - "count": { - "example": 9, + "publication_id": { "type": "integer" }, - "hotels": { - "items": { - "$ref": "#/definitions/tripcom.HotelSummary" - }, - "type": "array" + "publication_name": { + "type": "string" }, - "source_url": { - "example": "https://www.trip.com/hotels/bangkok-hotels-list-359/", + "subdomain": { "type": "string" } }, "type": "object" }, - "tripcom.searchResponseDoc": { + "substack.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tripcom.SearchResponse" + "$ref": "#/definitions/substack.CategoriesResult" }, "msg": { - "example": "OK", + "example": "success", "type": "string" } }, "type": "object" }, - "trustmrr.AcquireListing": { + "substack.categoryResponseDoc": { "properties": { - "asking_price": { - "type": "number" - }, - "category": { - "example": "SaaS", - "type": "string" - }, - "description": { - "type": "string" - }, - "first_listed_for_sale_at": { - "type": "string" - }, - "founded_date": { - "type": "string" - }, - "growth_30d": { - "type": "number" - }, - "icon": { - "type": "string" - }, - "listing_tier": { - "type": "string" - }, - "multiple": { - "type": "number" - }, - "name": { - "example": "Ploxto", - "type": "string" - }, - "offer_count": { + "code": { + "example": 200, "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" + "data": { + "$ref": "#/definitions/substack.CategoryResult" }, - "url": { - "example": "https://trustmrr.com/startup/ploxto", + "msg": { + "example": "success", "type": "string" } }, "type": "object" }, - "trustmrr.AcquireResponse": { + "substack.contributorsResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "startups": { - "items": { - "$ref": "#/definitions/trustmrr.AcquireListing" - }, - "type": "array" + "data": { + "$ref": "#/definitions/substack.ContributorsResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "trustmrr.AskingPricePoint": { + "substack.exploreResponseDoc": { "properties": { - "created_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "price": { - "type": "number" + "data": { + "$ref": "#/definitions/substack.ExploreResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "trustmrr.CategoriesResponse": { + "substack.leaderboardResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/trustmrr.Category" - }, - "type": "array" - }, - "count": { - "example": 31, + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/substack.LeaderboardResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "trustmrr.Category": { + "substack.noteRepliesResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "icon": { - "example": "Sparkles", - "type": "string" - }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "label": { - "example": "Artificial Intelligence", - "type": "string" + "data": { + "$ref": "#/definitions/substack.NoteRepliesResult" }, - "label_short": { - "example": "AI", + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.noteResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "ai", - "type": "string" + "data": { + "$ref": "#/definitions/substack.Note" }, - "url": { - "example": "https://trustmrr.com/category/ai", + "msg": { + "example": "success", "type": "string" } }, "type": "object" }, - "trustmrr.CategoryResponse": { + "substack.noteRestacksResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "slug": { - "example": "saas", - "type": "string" - }, - "startups": { - "items": { - "$ref": "#/definitions/trustmrr.CategoryStartup" - }, - "type": "array" + "data": { + "$ref": "#/definitions/substack.NoteRestacksResult" }, - "url": { - "example": "https://trustmrr.com/category/saas", + "msg": { + "example": "success", "type": "string" } }, "type": "object" }, - "trustmrr.CategoryStartup": { + "substack.notesFeedResponseDoc": { "properties": { - "current_last_30_days_revenue": { - "type": "number" - }, - "current_mrr": { - "type": "number" - }, - "current_total_revenue": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "description": { - "type": "string" + "data": { + "$ref": "#/definitions/substack.NotesFeedResult" }, - "icon": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.notesFeedTabsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_merchant_of_record": { - "type": "boolean" + "data": { + "$ref": "#/definitions/substack.NotesFeedTabsResult" }, - "name": { - "example": "Hidden Business", + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.postResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "on_sale": { - "type": "boolean" - }, - "slug": { - "example": "hidden-business-3", - "type": "string" + "data": { + "$ref": "#/definitions/substack.PostDetail" }, - "url": { - "example": "https://trustmrr.com/startup/hidden-business-3", + "msg": { + "example": "success", "type": "string" } }, "type": "object" }, - "trustmrr.LeaderboardEntry": { + "substack.postsResponseDoc": { "properties": { - "current_last_30_days_revenue": { - "type": "number" - }, - "current_mrr": { - "example": 3569654.22, - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "current_total_revenue": { - "example": 76627685.07, - "type": "number" + "data": { + "$ref": "#/definitions/substack.PostsResult" }, - "description": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.publicationResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "growth_30d": { - "type": "number" - }, - "growth_mrr_30d": { - "type": "number" + "data": { + "$ref": "#/definitions/substack.Publication" }, - "icon": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.recommendationsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_merchant_of_record": { - "type": "boolean" + "data": { + "$ref": "#/definitions/substack.RecommendationsResult" }, - "name": { - "example": "Stan", + "msg": { + "example": "success", "type": "string" - }, - "on_sale": { - "type": "boolean" - }, - "rank": { - "example": 1, + } + }, + "type": "object" + }, + "substack.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "revenue_per_visitor_last_30_days": { - "type": "number" + "data": { + "$ref": "#/definitions/substack.SearchResult" }, - "slug": { - "example": "stan", + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.userActivityResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "stealth_mode": { - "type": "boolean" - }, - "traffic_last_30_days": { - "type": "number" - }, - "url": { - "example": "https://trustmrr.com/startup/stan", - "type": "string" + "data": { + "$ref": "#/definitions/substack.UserActivityResult" }, - "x_founder_name": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.userConnectionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "x_handle": { - "type": "string" + "data": { + "$ref": "#/definitions/substack.UserConnectionsResult" }, - "x_profile_picture": { + "msg": { + "example": "success", "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": { + "substack.userResponseDoc": { "properties": { - "count": { - "example": 100, + "code": { + "example": 200, "type": "integer" }, - "entries": { - "items": { - "$ref": "#/definitions/trustmrr.LeaderboardEntry" - }, - "type": "array" + "data": { + "$ref": "#/definitions/substack.User" }, - "metric": { - "allOf": [ - { - "$ref": "#/definitions/trustmrr.LeaderboardMetric" - } - ], - "example": "mrr" + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "trustmrr.MarketplaceResponse": { + "substack.userSearchResponseDoc": { "properties": { - "best_deals": { - "items": { - "$ref": "#/definitions/trustmrr.MarketplaceStartup" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "recently_listed": { - "items": { - "$ref": "#/definitions/trustmrr.MarketplaceStartup" - }, - "type": "array" + "data": { + "$ref": "#/definitions/substack.UserSearchResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "trustmrr.MarketplaceRevenue": { + "subway.Allergen": { "properties": { - "last_30_days": { - "example": 23589.38, - "type": "number" + "contains": { + "type": "boolean" }, - "mrr": { - "example": 20361.89, - "type": "number" + "may_contain": { + "type": "boolean" }, - "total": { - "example": 23589.38, - "type": "number" + "name": { + "type": "string" } }, "type": "object" }, - "trustmrr.MarketplaceStartup": { + "subway.AvailableTimesResponse": { "properties": { - "active_subscriptions": { - "example": 4790, + "count": { + "example": 177, "type": "integer" }, - "asking_price": { - "example": 600000, - "type": "number" - }, - "category": { - "example": "Mobile Apps", + "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" }, - "country": { - "example": "PL", + "fetched_at": { "type": "string" }, - "customers": { - "example": 0, + "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" }, - "description": { + "latest_slot": { + "example": "2026-09-06T03:55:00Z", "type": "string" }, - "first_listed_for_sale_at": { - "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" }, - "founded_date": { - "example": "2025-06-01T00:00:00.000Z", + "source_url": { "type": "string" }, - "google_search_impressions_last_30_days": { - "type": "integer" - }, - "growth_30d": { + "store_id": { + "example": "75376-0", + "type": "string" + } + }, + "type": "object" + }, + "subway.ComboItem": { + "properties": { + "a_la_carte_price": { + "example": 12.97, "type": "number" }, - "growth_mrr_30d": { - "type": "number" + "description": { + "description": "Description comes from the matching translation when the upstream\ncarries one; it is frequently empty.", + "type": "string" }, - "icon": { + "id": { + "example": "6", "type": "string" }, - "multiple": { - "example": 2.1, + "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": "TrackAI", + "example": "Sub Meal Deal", "type": "string" }, - "on_sale": { - "example": true, - "type": "boolean" - }, - "payment_provider": { - "example": "revenuecat", + "parent_id": { + "description": "ParentID is set for a category nested under another, empty for a\ntop-level one.", "type": "string" }, - "profit_margin_last_30_days": { - "example": 10, - "type": "number" - }, - "rank": { - "example": 858, + "sort_order": { + "example": 36, "type": "integer" + } + }, + "type": "object" + }, + "subway.ComboResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/subway.ComboItem" + }, + "type": "array" }, - "revenue": { - "$ref": "#/definitions/trustmrr.MarketplaceRevenue" + "count": { + "example": 6, + "type": "integer" }, - "revenue_per_visitor": { - "type": "number" + "fetched_at": { + "type": "string" }, - "slug": { - "example": "trackai", + "source_url": { "type": "string" }, - "target_audience": { - "example": "B2C", + "store_id": { + "example": "50916-0", + "type": "string" + } + }, + "type": "object" + }, + "subway.MenuCategory": { + "properties": { + "description": { + "example": "", "type": "string" }, - "url": { - "example": "https://trustmrr.com/startup/trackai", + "id": { "type": "string" }, - "visitors_last_30_days": { - "type": "integer" + "is_main_category": { + "type": "boolean" }, - "website": { - "example": "https://trackai.app", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/subway.MenuItem" + }, + "type": "array" }, - "x_handle": { + "name": { "type": "string" }, - "x_profile_picture": { + "slug": { "type": "string" } }, "type": "object" }, - "trustmrr.Startup": { + "subway.MenuItem": { "properties": { - "ahrefs_domain": { + "id": { "type": "string" }, - "ahrefs_domain_rating": { - "type": "integer" + "name": { + "type": "string" }, - "asking_price": { - "example": 600000, - "type": "number" + "slug": { + "type": "string" }, - "asking_price_history": { + "variants": { "items": { - "$ref": "#/definitions/trustmrr.AskingPricePoint" + "$ref": "#/definitions/subway.MenuVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "subway.MenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/subway.MenuCategory" }, "type": "array" }, - "branding_primary_color": { - "example": "#ffffff", - "type": "string" + "category_count": { + "type": "integer" }, - "branding_secondary_color": { - "example": "#000000", + "currency": { + "example": "USD", "type": "string" }, - "category": { - "example": "Mobile App", + "fetched_at": { "type": "string" }, - "category_slug": { - "example": "mobile-app", - "type": "string" + "product_count": { + "type": "integer" }, - "country": { - "example": "PL", + "source_url": { "type": "string" }, - "created_at": { + "store_id": { "type": "string" + } + }, + "type": "object" + }, + "subway.MenuVariant": { + "properties": { + "allergens": { + "items": { + "$ref": "#/definitions/subway.Allergen" + }, + "type": "array" }, - "deal_score": { - "type": "number" + "available": { + "type": "boolean" }, - "description": { + "id": { "type": "string" }, - "enrichment": { - "$ref": "#/definitions/trustmrr.StartupEnrichment" - }, - "first_listed_for_sale_at": { + "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" }, - "founded_date": { + "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" }, - "growth_30d": { - "type": "number" + "nutrition": { + "items": { + "$ref": "#/definitions/subway.NutritionFact" + }, + "type": "array" }, - "growth_mrr_30d": { + "price": { "type": "number" }, - "has_dofollow_backlink": { - "type": "boolean" - }, - "has_google_analytics": { - "type": "boolean" - }, - "has_search_console": { - "type": "boolean" - }, - "icon": { + "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" }, - "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": { - "type": "boolean" - }, - "is_sponsored": { - "type": "boolean" - }, - "listing_tier": { - "example": "pro", + "fetched_at": { "type": "string" }, - "looking_for_cofounder": { - "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" }, - "looking_for_cofounder_message": { + "source_url": { "type": "string" }, - "marketing_channels": { + "stores": { "items": { - "$ref": "#/definitions/trustmrr.StartupChannel" + "$ref": "#/definitions/subway.NearbyStore" }, "type": "array" }, - "merchant_category_code": { - "example": "7372", - "type": "string" + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "subway.NearbyStore": { + "properties": { + "address": { + "$ref": "#/definitions/subway.StoreAddress" }, - "mrr_last_synced_at": { + "can_take_online_orders": { + "type": "boolean" + }, + "catering_url": { "type": "string" }, - "multiple": { - "example": 2.12, + "distance_miles": { + "description": "DistanceMiles is measured from the requested coordinate/query.", "type": "number" }, - "name": { - "example": "TrackAI", - "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.", + "items": { + "type": "string" + }, + "type": "array" }, - "offer_count": { - "type": "integer" + "hours": { + "items": { + "$ref": "#/definitions/subway.StoreHours" + }, + "type": "array" }, - "on_sale": { + "is_open_now": { "type": "boolean" }, - "payment_provider": { - "example": "revenuecat", - "type": "string" - }, - "profit_margin_last_30_days": { - "example": 10, + "latitude": { "type": "number" }, - "rank": { - "example": 858, - "type": "integer" + "longitude": { + "type": "number" }, - "revenue": { - "$ref": "#/definitions/trustmrr.StartupRevenue" + "payment_methods": { + "items": { + "type": "string" + }, + "type": "array" }, - "revenue_last_synced_at": { + "phone_number": { "type": "string" }, - "revenue_per_visitor_last_30_days": { - "type": "number" - }, - "secondary_payment_provider": { + "store_id": { "type": "string" }, - "seller_message": { + "timezone": { "type": "string" - }, - "slug": { - "example": "trackai", + } + }, + "type": "object" + }, + "subway.NutritionFact": { + "properties": { + "name": { "type": "string" }, - "status": { - "example": "active", - "type": "string" + "value": { + "type": "number" + } + }, + "type": "object" + }, + "subway.SitemapEntry": { + "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" }, - "stealth_mode": { - "type": "boolean" + "path": { + "description": "Path is the locator path, the value /subway/store takes.", + "example": "united-states/ny/new-york/1-penn-plaza", + "type": "string" }, - "target_audience": { - "example": "B2C", + "url": { "type": "string" + } + }, + "type": "object" + }, + "subway.SitemapResponse": { + "properties": { + "count": { + "example": 100, + "type": "integer" }, - "tech_stack": { + "entries": { "items": { - "$ref": "#/definitions/trustmrr.StartupTech" + "$ref": "#/definitions/subway.SitemapEntry" }, "type": "array" }, - "traffic_last_12_months": { - "type": "number" - }, - "traffic_last_24_hours": { - "type": "number" + "fetched_at": { + "type": "string" }, - "traffic_last_30_days": { - "type": "number" + "page": { + "example": 1, + "type": "integer" }, - "traffic_last_7_days": { - "type": "number" + "shard": { + "example": 0, + "type": "integer" }, - "updated_at": { - "type": "string" + "shard_count": { + "example": 1, + "type": "integer" }, - "url": { - "example": "https://trustmrr.com/startup/trackai", + "source_url": { "type": "string" }, - "user_category": { - "example": "Mobile Apps", - "type": "string" + "total_in_shard": { + "example": 22706, + "type": "integer" }, - "user_category_slug": { - "example": "mobile-apps", + "total_pages": { + "example": 228, + "type": "integer" + } + }, + "type": "object" + }, + "subway.StoreAddress": { + "properties": { + "city": { + "example": "New York", "type": "string" }, - "website": { - "example": "https://trackai.app", + "country": { + "example": "US", "type": "string" }, - "x_follower_count": { - "type": "integer" - }, - "x_founder_name": { + "postal_code": { + "example": "10119", "type": "string" }, - "x_handle": { + "region": { + "example": "NY", "type": "string" }, - "x_profile_picture": { + "street": { + "example": "1 Penn Plaza", "type": "string" } }, "type": "object" }, - "trustmrr.StartupChannel": { + "subway.StoreHours": { "properties": { - "category": { - "example": "paid", + "closed": { + "example": false, + "type": "boolean" + }, + "closes": { + "example": "23:00", "type": "string" }, - "slug": { - "example": "meta-ads", + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "09:00", "type": "string" + }, + "segments": { + "items": { + "$ref": "#/definitions/subway.TimeSegment" + }, + "type": "array" } }, "type": "object" }, - "trustmrr.StartupEnrichment": { + "subway.StoreResponse": { "properties": { - "business_type": { - "example": "B2C", - "type": "string" + "address": { + "$ref": "#/definitions/subway.StoreAddress" }, - "estimated_user_count": { - "type": "integer" + "description": { + "description": "Description is the store's marketing blurb.", + "type": "string" }, - "funding_status": { + "fetched_at": { "type": "string" }, - "last_enriched_at": { + "franchise_number": { + "description": "FranchiseNumber is the store's franchise identifier, distinct from\nStoreID (which carries a \"-0\" ordering suffix).", + "example": "75376", "type": "string" }, - "pricing_model": { + "google_cid": { + "example": "7950893118019215099", "type": "string" }, - "problem_solved": { + "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" }, - "screenshots": { + "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": { "items": { - "$ref": "#/definitions/trustmrr.StartupScreenshot" + "$ref": "#/definitions/subway.StoreHours" }, "type": "array" }, - "tags": { + "latitude": { + "example": 40.7517026, + "type": "number" + }, + "longitude": { + "example": -73.9925826, + "type": "number" + }, + "meals_served": { "items": { "type": "string" }, "type": "array" }, - "target_persona": { + "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" }, - "value_proposition": { + "name": { + "example": "Subway", "type": "string" - } - }, - "type": "object" - }, - "trustmrr.StartupInsight": { - "properties": { - "business_type": { - "example": "B2C", + }, + "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" }, - "estimated_user_count": { - "type": "integer" + "path": { + "type": "string" }, - "pricing_model": { + "phone_e164": { + "description": "PhoneE164 is the same number in dialable E.164 form.", + "example": "+12122440101", "type": "string" }, - "problem_solved": { + "phone_number": { + "example": "(212) 244-0101", "type": "string" }, - "target_persona": { + "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" + }, + "price_range": { + "description": "PriceRange is the locator's own band, e.g. \"$\".", + "example": "$", "type": "string" }, - "updated_at": { + "services": { + "description": "Services lists the amenities the locator publishes for this store,\ne.g. \"online ordering\", \"delivery\", \"catering\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "value_proposition": { + "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" + }, + "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" }, - "trustmrr.StartupRef": { + "subway.TimeSegment": { "properties": { - "last_modified": { - "example": "2026-07-08T05:09:42.880Z", - "type": "string" - }, - "slug": { - "example": "gumroad", + "closes": { + "example": "23:00", "type": "string" }, - "url": { - "example": "https://trustmrr.com/startup/gumroad", + "opens": { + "example": "09:00", "type": "string" } }, "type": "object" }, - "trustmrr.StartupRevenue": { + "subway.availableTimesResponseDoc": { "properties": { - "active_subscriptions": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "customers": { - "type": "integer" - }, - "last_30_days": { - "type": "number" - }, - "mrr": { - "type": "number" - }, - "total": { - "type": "number" - } - }, - "type": "object" - }, - "trustmrr.StartupScreenshot": { - "properties": { - "captured_at": { - "type": "string" - }, - "label": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "trustmrr.StartupTech": { - "properties": { - "category": { - "example": "frontend", - "type": "string" - }, - "slug": { - "example": "reactnative", - "type": "string" - } - }, - "type": "object" - }, - "trustmrr.StartupsResponse": { - "properties": { - "has_next": { - "example": true, - "type": "boolean" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 100, - "type": "integer" - }, - "startups": { - "items": { - "$ref": "#/definitions/trustmrr.StartupRef" - }, - "type": "array" + "data": { + "$ref": "#/definitions/subway.AvailableTimesResponse" }, - "total": { - "example": 8196, - "type": "integer" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "trustmrr.acquireResponseDoc": { + "subway.combosResponseDoc": { "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/trustmrr.AcquireResponse" + "$ref": "#/definitions/subway.ComboResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "trustmrr.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/trustmrr.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" }, - "trustmrr.categoryResponseDoc": { + "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/trustmrr.CategoryResponse" + "$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" }, - "trustmrr.leaderboardResponseDoc": { + "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/trustmrr.LeaderboardResponse" + "$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" }, - "trustmrr.marketplaceResponseDoc": { + "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/trustmrr.MarketplaceResponse" + "$ref": "#/definitions/subway.StoreResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "trustmrr.startupResponseDoc": { + "sun.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "type": "string" }, - "data": { - "$ref": "#/definitions/trustmrr.Startup" + "category_url": { + "type": "string" }, - "msg": { - "example": "OK", + "excerpt": { "type": "string" - } - }, - "type": "object" - }, - "trustmrr.startupsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/trustmrr.StartupsResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessAbout": { + "sun.AuthorResponse": { "properties": { - "business_country_code": { - "example": "DK", - "type": "string" - }, - "contact": { - "$ref": "#/definitions/trustpilot.BusinessContact" - }, - "description_html": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/sun.AuthorArticle" + }, + "type": "array" }, - "description_text": { + "bio": { "type": "string" }, - "facebook_url": { - "example": "https://www.facebook.com/Trustpilot", + "job_title": { "type": "string" }, - "has_company_elements": { - "example": true, - "type": "boolean" - }, - "information_source": { - "example": "customer", + "name": { "type": "string" }, - "promotion_points": { - "items": { - "type": "string" - }, - "type": "array" - }, - "promotion_title": { + "url": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessActivity": { + "swiggy.Collection": { "properties": { - "claimed_date": { + "id": { "type": "string" }, - "has_business_unit_merge_history": { - "example": false, - "type": "boolean" - }, - "has_subscription": { - "example": false, - "type": "boolean" - }, - "is_asking_for_reviews": { - "example": false, - "type": "boolean" - }, - "is_claimed": { - "example": false, - "type": "boolean" - }, - "is_using_ai_responses": { - "example": false, - "type": "boolean" - }, - "is_using_paid_features": { - "example": false, - "type": "boolean" - }, - "previously_claimed": { - "example": false, - "type": "boolean" + "image_url": { + "type": "string" }, - "verification": { - "$ref": "#/definitions/trustpilot.BusinessVerification" + "title": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessBreadcrumb": { + "swiggy.CollectionsResponse": { "properties": { - "id": { - "example": "electronics_technology", - "type": "string" - }, - "level": { - "example": "top", - "type": "string" + "collections": { + "items": { + "$ref": "#/definitions/swiggy.Collection" + }, + "type": "array" }, - "name": { - "example": "Electronics & Technology", - "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 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" }, - "trustpilot.BusinessCategory": { + "swiggy.ExternalRating": { "properties": { - "cardinality": { - "example": 2, - "type": "integer" - }, - "id": { - "example": "software_company", + "count": { "type": "string" }, - "is_primary": { - "example": true, - "type": "boolean" + "rating": { + "type": "number" }, - "name": { - "example": "Software Company", + "source": { "type": "string" - }, - "rank": { - "example": 1, - "type": "integer" } }, "type": "object" }, - "trustpilot.BusinessCompanyReply": { + "swiggy.MenuCategory": { "properties": { - "message": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/swiggy.MenuItem" + }, + "type": "array" }, - "published_at_text": { + "subcategory": { "type": "string" }, - "updated_at_text": { + "title": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessContact": { + "swiggy.MenuItem": { "properties": { - "address": { + "category": { "type": "string" }, - "city": { + "description": { "type": "string" }, - "country": { - "type": "string" + "discounted_price": { + "type": "number" }, - "email": { + "id": { "type": "string" }, - "phone": { + "image_url": { "type": "string" }, - "zip_code": { - "type": "string" - } - }, - "type": "object" - }, - "trustpilot.BusinessPageLanguage": { - "properties": { - "iso_language": { - "example": "en-US", - "type": "string" + "in_stock": { + "type": "boolean" }, - "language_code": { - "example": "en", - "type": "string" + "is_veg": { + "type": "boolean" }, - "locale": { - "example": "en-US", + "name": { "type": "string" }, - "uri": { - "example": "https://www.trustpilot.com", - "type": "string" + "price": { + "type": "number" + }, + "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_ratings": { + "type": "integer" } }, "type": "object" }, - "trustpilot.BusinessPageMeta": { + "swiggy.MenuResponse": { "properties": { - "canonical_url": { - "example": "https://www.trustpilot.com/review/openai.com", - "type": "string" - }, - "domain": { - "example": "https://www.trustpilot.com", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/swiggy.MenuCategory" + }, + "type": "array" }, - "languages": { + "offers": { "items": { - "$ref": "#/definitions/trustpilot.BusinessPageLanguage" + "$ref": "#/definitions/swiggy.Offer" }, "type": "array" }, - "locale": { - "example": "en-US", - "type": "string" + "restaurant": { + "$ref": "#/definitions/swiggy.Restaurant" } }, "type": "object" }, - "trustpilot.BusinessRatingHistogram": { + "swiggy.Offer": { "properties": { - "five": { - "example": 80, - "type": "integer" - }, - "four": { - "example": 20, - "type": "integer" - }, - "one": { - "example": 817, - "type": "integer" + "coupon_code": { + "type": "string" }, - "three": { - "example": 22, - "type": "integer" + "description": { + "type": "string" }, - "total": { - "example": 984, - "type": "integer" + "tag": { + "type": "string" }, - "two": { - "example": 45, - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessRelatedResponse": { + "swiggy.OpeningHours": { "properties": { - "business": { - "$ref": "#/definitions/trustpilot.businessHeader" + "day": { + "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/trustpilot.RelatedBusiness" - }, - "type": "array" + "hours": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessReplyMetrics": { + "swiggy.Restaurant": { "properties": { - "average_days_to_reply": { - "example": 10.59, - "type": "number" - }, - "last_reply_to_negative_review": { + "address": { "type": "string" }, - "negative_reviews_with_replies": { - "example": 7964, - "type": "integer" + "area": { + "type": "string" }, - "reply_percentage": { - "example": 47.88, - "type": "number" + "city": { + "type": "string" }, - "total_negative_reviews": { - "example": 16630, - "type": "integer" - } - }, - "type": "object" - }, - "trustpilot.BusinessResponse": { - "properties": { - "about": { - "$ref": "#/definitions/trustpilot.BusinessAbout" + "cost_for_two": { + "type": "string" }, - "breadcrumbs": { + "cuisines": { "items": { - "$ref": "#/definitions/trustpilot.BusinessBreadcrumb" + "type": "string" }, "type": "array" }, - "categories": { + "delivery_time_minutes": { + "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/trustpilot.BusinessCategory" + "$ref": "#/definitions/swiggy.MenuItem" }, "type": "array" }, - "claimed": { - "example": false, - "type": "boolean" + "external_rating": { + "$ref": "#/definitions/swiggy.ExternalRating" }, - "company_activity": { - "$ref": "#/definitions/trustpilot.BusinessActivity" + "hours_message": { + "type": "string" }, - "name": { - "example": "OpenAI", + "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" }, - "page_meta": { - "$ref": "#/definitions/trustpilot.BusinessPageMeta" + "id": { + "type": "string" }, - "paid_subscription": { - "example": false, + "image_url": { + "type": "string" + }, + "is_open": { "type": "boolean" }, - "rating": { - "example": 1.5, + "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" + }, + "latitude": { "type": "number" }, - "rating_histogram": { - "$ref": "#/definitions/trustpilot.BusinessRatingHistogram" + "locality": { + "type": "string" }, - "reply_metrics": { - "$ref": "#/definitions/trustpilot.BusinessReplyMetrics" + "longitude": { + "type": "number" }, - "review_count": { - "example": 984, - "type": "integer" + "name": { + "type": "string" }, - "review_summary": { - "$ref": "#/definitions/trustpilot.BusinessReviewSummary" + "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" }, - "review_topics": { + "opening_hours": { "items": { - "$ref": "#/definitions/trustpilot.BusinessReviewTopic" + "$ref": "#/definitions/swiggy.OpeningHours" }, "type": "array" }, - "slug": { - "example": "openai.com", + "phone": { "type": "string" }, - "trust_score": { - "example": 1.3, + "postal_code": { + "type": "string" + }, + "rating": { "type": "number" }, - "trustpilot_url": { - "example": "https://www.trustpilot.com/review/openai.com", + "rating_count": { "type": "string" }, - "website_url": { - "example": "https://openai.com", + "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" }, - "trustpilot.BusinessReviewItem": { + "swiggy.RestaurantResponse": { "properties": { - "author_country": { - "example": "GB", - "type": "string" - }, - "author_name": { - "example": "Summit", - "type": "string" - }, - "author_review_count": { - "example": 1, - "type": "integer" - }, - "body": { - "type": "string" - }, - "company_reply": { - "$ref": "#/definitions/trustpilot.BusinessCompanyReply" - }, - "experienced_at_text": { - "type": "string" - }, - "id": { - "example": "69b2e2443283f179ac73d3ce", - "type": "string" - }, - "invited": { - "example": false, - "type": "boolean" - }, - "labels": { - "$ref": "#/definitions/trustpilot.BusinessReviewLabels" - }, - "published_at_text": { - "type": "string" - }, - "rating": { - "example": 1, - "type": "integer" - }, - "title": { - "type": "string" - }, - "updated_at_text": { - "type": "string" + "offers": { + "items": { + "$ref": "#/definitions/swiggy.Offer" + }, + "type": "array" }, - "verified": { - "example": false, - "type": "boolean" + "restaurant": { + "$ref": "#/definitions/swiggy.Restaurant" } }, "type": "object" }, - "trustpilot.BusinessReviewLabels": { + "swiggy.SearchResponse": { "properties": { - "filtered": { - "example": false, - "type": "boolean" - }, - "merged": { - "type": "string" - }, - "pending": { - "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 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" }, - "review_source": { - "example": "Organic", - "type": "string" - }, - "verification_level": { - "example": "not-verified", + "next_offset": { "type": "string" }, - "verification_source": { - "example": "invitation", - "type": "string" + "restaurants": { + "items": { + "$ref": "#/definitions/swiggy.Restaurant" + }, + "type": "array" } }, "type": "object" }, - "trustpilot.BusinessReviewSummary": { + "swiggy.collectionsResponseDoc": { "properties": { - "model_version": { - "type": "string" - }, - "status": { - "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/swiggy.CollectionsResponse" }, - "updated_at": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "trustpilot.BusinessReviewTopic": { + "swiggy.menuResponseDoc": { "properties": { - "model_version": { - "type": "string" - }, - "order": { - "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" }, - "summary": { - "type": "string" - }, - "topic": { - "example": "user_experience", - "type": "string" + "data": { + "$ref": "#/definitions/swiggy.MenuResponse" }, - "updated_at": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "trustpilot.BusinessReviewsAppliedFilters": { + "swiggy.restaurantResponseDoc": { "properties": { - "language": { - "example": "en", - "type": "string" - }, - "query": { - "example": "refund", - "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" }, - "replied": { - "type": "boolean" + "data": { + "$ref": "#/definitions/swiggy.RestaurantResponse" }, - "stars": { - "example": 1, + "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" }, - "verified": { - "type": "boolean" + "data": { + "$ref": "#/definitions/swiggy.SearchResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "trustpilot.BusinessReviewsPagination": { + "tacobell.AppMenuBundleChoice": { "properties": { - "has_next_page": { - "example": true, - "type": "boolean" + "code": { + "example": "22603_22902_1", + "type": "string" }, - "next_page": { - "example": 2, - "type": "integer" + "default_product_codes": { + "example": [ + "22101" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "page": { + "max_selections": { "example": 1, "type": "integer" }, - "per_page": { - "example": 20, - "type": "integer" - }, - "total_pages": { - "example": 50, - "type": "integer" - }, - "total_reviews": { - "example": 984, + "min_selections": { + "example": 1, "type": "integer" } }, "type": "object" }, - "trustpilot.BusinessReviewsResponse": { + "tacobell.AppMenuCategory": { "properties": { - "applied_filters": { - "$ref": "#/definitions/trustpilot.BusinessReviewsAppliedFilters" - }, - "business": { - "$ref": "#/definitions/trustpilot.businessHeader" + "code": { + "example": "tacos", + "type": "string" }, "items": { "items": { - "$ref": "#/definitions/trustpilot.BusinessReviewItem" + "$ref": "#/definitions/tacobell.AppMenuItem" }, "type": "array" }, - "pagination": { - "$ref": "#/definitions/trustpilot.BusinessReviewsPagination" + "name": { + "example": "Tacos", + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessVerification": { + "tacobell.AppMenuDaypart": { "properties": { - "verified_by_google": { - "example": false, - "type": "boolean" - }, - "verified_payment_method": { - "example": false, - "type": "boolean" + "code": { + "example": "HappyHour", + "type": "string" }, - "verified_user_identity": { - "example": false, - "type": "boolean" + "name": { + "example": "Happy Hour", + "type": "string" } }, "type": "object" }, - "trustpilot.CategoriesResponse": { + "tacobell.AppMenuItem": { "properties": { - "groups": { + "calories": { + "example": 771, + "type": "integer" + }, + "choices": { + "description": "Choices is populated only when kind is \"bundle\".", "items": { - "$ref": "#/definitions/trustpilot.CategoryGroup" + "$ref": "#/definitions/tacobell.AppMenuBundleChoice" }, "type": "array" - } - }, - "type": "object" - }, - "trustpilot.CategoryBusiness": { - "properties": { - "business_unit_id": { - "example": "5e18c99abe863e0001b6ff0c", + }, + "code": { + "example": "22603", "type": "string" }, - "categories": { + "daypart_codes": { + "example": [ + "BalanceOfDay" + ], "items": { - "$ref": "#/definitions/trustpilot.CategoryBusinessTag" + "type": "string" }, "type": "array" }, - "display_name": { - "example": "Houzeo", - "type": "string" - }, - "email": { - "example": "support@houzeo.com", + "description": { "type": "string" }, - "identifying_name": { - "example": "www.houzeo.com", + "image_url": { "type": "string" }, - "location": { - "$ref": "#/definitions/trustpilot.CategoryBusinessLocation" - }, - "logo_url": { - "example": "https://s3-eu-west-1.amazonaws.com/tpd/screenshotlogo-domain/example/198x149.png", + "kind": { + "example": "bundle", "type": "string" }, - "phone": { - "example": "(844) 448-0110", + "name": { + "example": "3 Crunchy Tacos Supreme Combo", "type": "string" }, - "recommended": { - "example": true, - "type": "boolean" + "price": { + "$ref": "#/definitions/tacobell.Money" + } + }, + "type": "object" + }, + "tacobell.AppMenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/tacobell.AppMenuCategory" + }, + "type": "array" }, - "review_count": { - "example": 3473, + "category_count": { + "example": 17, "type": "integer" }, - "stars": { - "example": 5, - "type": "number" + "dayparts": { + "items": { + "$ref": "#/definitions/tacobell.AppMenuDaypart" + }, + "type": "array" }, - "trust_score": { - "example": 4.8, - "type": "number" + "fetched_at": { + "type": "string" }, - "trustpilot_url": { - "example": "https://www.trustpilot.com/review/www.houzeo.com", + "item_count": { + "example": 207, + "type": "integer" + }, + "source_url": { "type": "string" }, - "website_url": { - "example": "https://www.houzeo.com", + "store_number": { + "example": "034922", "type": "string" } }, "type": "object" }, - "trustpilot.CategoryBusinessLocation": { + "tacobell.CategoriesResponse": { "properties": { - "address": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/tacobell.Category" + }, + "type": "array" }, - "city": { - "type": "string" + "count": { + "example": 17, + "type": "integer" }, - "country": { + "fetched_at": { "type": "string" }, - "zip_code": { + "source_url": { "type": "string" } }, "type": "object" }, - "trustpilot.CategoryBusinessTag": { + "tacobell.Category": { "properties": { - "category_id": { - "example": "software_company", - "type": "string" - }, - "display_name": { - "example": "Software Company", - "type": "string" - }, - "is_predicted": { + "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" }, - "is_primary": { - "example": true, - "type": "boolean" - } - }, - "type": "object" - }, - "trustpilot.CategoryGroup": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/trustpilot.CategoryLink" - }, - "type": "array" - }, "name": { - "example": "Electronics & Technology", + "example": "Tacos", "type": "string" }, "slug": { - "example": "electronics_technology", + "example": "tacos", "type": "string" }, "url": { - "example": "https://www.trustpilot.com/categories/electronics_technology", "type": "string" } }, "type": "object" }, - "trustpilot.CategoryLink": { + "tacobell.CustomizationGroup": { "properties": { - "name": { - "example": "Software Company", - "type": "string" + "count": { + "example": 9, + "type": "integer" }, - "slug": { - "example": "software_company", + "group": { + "example": "sauce_options", "type": "string" }, - "url": { - "example": "https://www.trustpilot.com/categories/software_company", - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/tacobell.CustomizationOption" + }, + "type": "array" } }, "type": "object" }, - "trustpilot.CategoryPagination": { + "tacobell.CustomizationOption": { "properties": { - "has_next_page": { + "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" }, - "next_page": { - "example": 3, + "calories": { + "example": 0, "type": "integer" }, - "page": { - "example": 2, - "type": "integer" + "code": { + "example": "2111", + "type": "string" }, - "per_page": { - "example": 20, - "type": "integer" + "description": { + "type": "string" }, - "total_hits": { - "example": 7963, - "type": "integer" + "image_url": { + "type": "string" }, - "total_pages": { - "example": 399, - "type": "integer" + "name": { + "example": "Pico De Gallo", + "type": "string" + }, + "price": { + "$ref": "#/definitions/tacobell.Money" } }, "type": "object" }, - "trustpilot.CategoryResponse": { + "tacobell.DayHours": { "properties": { - "breadcrumbs": { - "items": { - "$ref": "#/definitions/trustpilot.CategoryLink" - }, - "type": "array" - }, - "country": { - "example": "US", + "closes": { + "example": "4:00 AM", "type": "string" }, - "items": { + "dayparts": { "items": { - "$ref": "#/definitions/trustpilot.CategoryBusiness" + "$ref": "#/definitions/tacobell.Daypart" }, "type": "array" }, - "name": { - "example": "Software Company", + "opens": { + "example": "7:00 AM", "type": "string" }, - "newest_companies": { - "items": { - "$ref": "#/definitions/trustpilot.CategoryBusiness" - }, - "type": "array" - }, - "page": { - "example": 2, - "type": "integer" - }, - "pagination": { - "$ref": "#/definitions/trustpilot.CategoryPagination" - }, - "recently_reviewed_companies": { - "items": { - "$ref": "#/definitions/trustpilot.CategoryBusiness" - }, - "type": "array" + "week_day": { + "example": "Monday", + "type": "string" + } + }, + "type": "object" + }, + "tacobell.Daypart": { + "properties": { + "all_day": { + "example": false, + "type": "boolean" }, - "related_categories": { - "items": { - "$ref": "#/definitions/trustpilot.CategoryLink" - }, - "type": "array" + "closed": { + "example": false, + "type": "boolean" }, - "slug": { - "example": "software_company", + "ends": { + "example": "4:00 AM", "type": "string" }, - "sort": { - "example": "recommended", + "name": { + "example": "Balance Of Day", "type": "string" }, - "trustpilot_url": { - "example": "https://www.trustpilot.com/categories/software_company", + "starts": { + "example": "7:00 AM", "type": "string" } }, "type": "object" }, - "trustpilot.CategorySearchResponse": { + "tacobell.MenuItem": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/trustpilot.CategorySearchResult" - }, - "type": "array" + "available_in_store": { + "example": true, + "type": "boolean" }, - "country": { - "example": "US", + "calories": { + "example": 430, + "type": "integer" + }, + "calories_text": { + "example": "430 Cal", "type": "string" }, - "locale": { - "example": "en-US", + "category": { + "example": "tacos", "type": "string" }, - "query": { - "example": "openai", + "code": { + "example": "CB-1234", "type": "string" }, - "size": { - "example": 3, - "type": "integer" + "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": { + "type": "string" } }, "type": "object" }, - "trustpilot.CategorySearchResult": { + "tacobell.MenuResponse": { "properties": { - "category_id": { - "example": "software_company", + "category": { + "example": "tacos", "type": "string" }, - "display_name": { - "example": "Software Company", + "count": { + "example": 16, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "top_level_category_id": { - "example": "electronics_technology", + "items": { + "items": { + "$ref": "#/definitions/tacobell.MenuItem" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "trustpilot.RelatedBusiness": { + "tacobell.Money": { "properties": { - "business_unit_id": { - "example": "63e1530f2ba9106ee583e099", + "currency": { + "example": "USD", "type": "string" }, - "display_name": { - "example": "Chatgpt", + "formatted": { + "description": "Formatted is Taco Bell's own rendering, kept because it carries the\nupstream's rounding/symbol conventions.", + "example": "$5.99", "type": "string" }, - "identifying_name": { - "example": "chatgpt.com", + "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" + } + }, + "type": "object" + }, + "tacobell.NutritionResponse": { + "properties": { + "allergens": { + "description": "Allergens is the label's \"Contains:\" statement, split into items.", + "items": { + "type": "string" + }, + "type": "array" + }, + "category": { + "example": "burritos", "type": "string" }, - "logo_url": { - "example": "https://s3-eu-west-1.amazonaws.com/tpd/screenshots/example/198x149.png", + "fetched_at": { "type": "string" }, - "review_count": { - "example": 2720, - "type": "integer" + "ingredients": { + "description": "Ingredients is the full component-by-component statement, present\nonly when include_ingredients is set.", + "type": "string" }, - "source": { - "example": "suggested_companies", + "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" }, - "stars": { - "example": 1.5, - "type": "number" + "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" }, - "trust_score": { - "example": 1.6, + "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" }, - "trustpilot_url": { - "example": "https://www.trustpilot.com/review/chatgpt.com", + "source_url": { "type": "string" } }, "type": "object" }, - "trustpilot.SearchAddress": { + "tacobell.ProductImage": { "properties": { - "approximate_area": { - "$ref": "#/definitions/trustpilot.SearchAreaBounds" + "format": { + "example": "640x650", + "type": "string" }, - "city": { - "example": "San Francisco", + "type": { + "example": "PRIMARY", "type": "string" }, - "coordinates": { - "$ref": "#/definitions/trustpilot.SearchCoordinates" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "tacobell.ProductResponse": { + "properties": { + "accurate_calories": { + "description": "AccurateCalories is the unrounded figure behind `calories`.", + "example": 392.9079, + "type": "number" }, - "country": { - "example": "United States", + "available_in_store": { + "example": true, + "type": "boolean" + }, + "calories": { + "example": 390, + "type": "integer" + }, + "category": { + "example": "burritos", "type": "string" }, - "country_code": { - "example": "US", + "code": { + "example": "22201", "type": "string" }, - "postcode": { - "example": "94105", + "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" }, - "street": { - "example": "1 Market St", + "fetched_at": { + "type": "string" + }, + "has_meatless": { + "example": false, + "type": "boolean" + }, + "images": { + "items": { + "$ref": "#/definitions/tacobell.ProductImage" + }, + "type": "array" + }, + "modifiable": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Burrito Supreme®", + "type": "string" + }, + "nutrition_label_url": { + "description": "NutritionLabelURL is the full nutrition-facts label Taco Bell links\nfor this item. /taco-bell/nutrition reads it.", + "type": "string" + }, + "price": { + "$ref": "#/definitions/tacobell.Money" + }, + "related": { + "items": { + "$ref": "#/definitions/tacobell.RelatedProduct" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "url": { "type": "string" + }, + "vegetarian_friendly": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "trustpilot.SearchAreaBounds": { + "tacobell.RelatedProduct": { "properties": { - "north_west": { - "$ref": "#/definitions/trustpilot.SearchCoordinates" + "calories": { + "example": 690, + "type": "integer" }, - "south_east": { - "$ref": "#/definitions/trustpilot.SearchCoordinates" + "code": { + "example": "22963", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "Grilled Cheese Burrito", + "type": "string" + }, + "price": { + "$ref": "#/definitions/tacobell.Money" + }, + "reference_type": { + "example": "CROSSELLING", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "trustpilot.SearchCategory": { + "tacobell.Store": { "properties": { - "id": { - "example": "software_company", + "address": { + "$ref": "#/definitions/tacobell.StoreAddress" + }, + "capabilities": { + "$ref": "#/definitions/tacobell.StoreCapabilities" + }, + "delivery": { + "example": true, + "type": "boolean" + }, + "distance_text": { + "example": "0.90 Miles", "type": "string" }, "name": { - "example": "Software Company", + "example": "040890", "type": "string" }, - "primary": { + "online_available": { "example": true, "type": "boolean" + }, + "phone_number": { + "example": "+16268423006", + "type": "string" + }, + "status": { + "example": "openNow", + "type": "string" + }, + "store_number": { + "example": "040890", + "type": "string" + }, + "timezone": { + "example": "America/Los_Angeles", + "type": "string" + }, + "timezone_offset": { + "example": "GMT-07:00", + "type": "string" + }, + "today_hours": { + "$ref": "#/definitions/tacobell.StoreHours" } }, "type": "object" }, - "trustpilot.SearchCoordinates": { + "tacobell.StoreAddress": { "properties": { - "lat": { - "example": 39.7837304, + "city": { + "example": "Los Angeles", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "latitude": { + "example": 34.048934, "type": "number" }, - "lon": { - "example": -100.445882, + "line1": { + "example": "801 West 7th Street", + "type": "string" + }, + "line2": { + "type": "string" + }, + "longitude": { + "example": -118.258867, "type": "number" + }, + "postal_code": { + "example": "90017", + "type": "string" + }, + "region": { + "example": "US-CA", + "type": "string" } }, "type": "object" }, - "trustpilot.SearchResponse": { + "tacobell.StoreCapabilities": { "properties": { - "country": { - "example": "US", - "type": "string" + "breakfast": { + "example": true, + "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/trustpilot.SearchResult" - }, - "type": "array" + "delivery_enabled": { + "example": true, + "type": "boolean" }, - "page": { - "example": 1, - "type": "integer" + "drive_thru": { + "example": false, + "type": "boolean" }, - "page_size": { - "example": 5, - "type": "integer" + "live_mas_cafe": { + "example": false, + "type": "boolean" }, - "query": { - "example": "openai", - "type": "string" + "mobile_enabled": { + "example": true, + "type": "boolean" }, - "search_mode": { - "example": "keyword", - "type": "string" + "online": { + "example": true, + "type": "boolean" }, - "total_hits": { - "example": 147, - "type": "integer" + "open_late": { + "example": false, + "type": "boolean" }, - "total_pages": { - "example": 30, - "type": "integer" + "pickup_shelves": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "trustpilot.SearchResult": { + "tacobell.StoreDetailResponse": { "properties": { "address": { - "$ref": "#/definitions/trustpilot.SearchAddress" + "$ref": "#/definitions/tacobell.StoreAddress" }, - "business_unit_id": { - "example": "630f21bc9f08b0302a52590d", + "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" + }, + "fetched_at": { "type": "string" }, - "categories": { + "geofencing_radius": { + "example": 3, + "type": "integer" + }, + "hours": { + "description": "Hours is the full published week, Monday-first. /taco-bell/stores\ncarries only today's window.", "items": { - "$ref": "#/definitions/trustpilot.SearchCategory" + "$ref": "#/definitions/tacobell.DayHours" }, "type": "array" }, - "country_code": { - "example": "FR", + "name": { + "example": "040890", "type": "string" }, - "display_name": { - "example": "OpenAI", + "online_available": { + "example": true, + "type": "boolean" + }, + "phone_number": { + "example": "+16268423006", "type": "string" }, - "email": { - "example": "hello@example.com", + "pickup_status": { + "description": "PickupStatus is whether mobile pickup ordering is switched on for\nthis restaurant.", + "example": "Activated", "type": "string" }, - "identifying_name": { - "example": "openai.com", + "source_url": { "type": "string" }, - "logo_url": { - "example": "https://s3-eu-west-1.amazonaws.com/tpd/logos/example/0x0.png", + "status": { + "example": "openNow", "type": "string" }, - "phone": { - "example": "+1-555-555-5555", + "store_number": { + "example": "040890", "type": "string" }, - "predicted_top_category": { - "$ref": "#/definitions/trustpilot.SearchCategory" + "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" }, - "review_count": { - "example": 984, - "type": "integer" + "timezone_offset": { + "example": "GMT-07:00", + "type": "string" }, - "stars": { - "example": 1.5, - "type": "number" + "today_hours": { + "$ref": "#/definitions/tacobell.DayHours" + } + }, + "type": "object" + }, + "tacobell.StoreHours": { + "properties": { + "closes": { + "example": "4:00 AM", + "type": "string" }, - "trust_score": { - "example": 1.3, - "type": "number" + "opens": { + "example": "5:30 AM", + "type": "string" }, - "trustpilot_url": { - "example": "https://www.trustpilot.com/review/openai.com", + "week_day": { + "example": "Sunday", + "type": "string" + } + }, + "type": "object" + }, + "tacobell.StoreMenuCategory": { + "properties": { + "code": { + "example": "breakfast", "type": "string" }, - "verified": { - "example": false, - "type": "boolean" + "items": { + "items": { + "$ref": "#/definitions/tacobell.MenuItem" + }, + "type": "array" }, - "website_url": { - "example": "https://openai.com", + "name": { + "example": "Breakfast", "type": "string" } }, "type": "object" }, - "trustpilot.businessHeader": { + "tacobell.StoreMenuResponse": { "properties": { - "claimed": { - "example": false, - "type": "boolean" + "categories": { + "items": { + "$ref": "#/definitions/tacobell.StoreMenuCategory" + }, + "type": "array" }, - "name": { - "example": "OpenAI", + "category_count": { + "example": 17, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "rating": { - "example": 1.5, - "type": "number" + "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." }, - "review_count": { - "example": 984, + "item_count": { + "example": 312, "type": "integer" }, - "slug": { - "example": "openai.com", + "source_url": { "type": "string" }, - "trust_score": { - "example": 1.3, - "type": "number" + "store_number": { + "example": "040890", + "type": "string" + } + }, + "type": "object" + }, + "tacobell.StoresResponse": { + "properties": { + "count": { + "example": 10, + "type": "integer" }, - "trustpilot_url": { - "example": "https://www.trustpilot.com/review/openai.com", + "fetched_at": { "type": "string" }, - "website_url": { - "example": "https://openai.com", + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/tacobell.Store" + }, + "type": "array" } }, "type": "object" }, - "trustpilot.businessProfileResponseDoc": { + "tacobell.TimeWindow": { + "properties": { + "ends_at": { + "example": "2026-09-02T00:00:00Z", + "type": "string" + }, + "starts_at": { + "example": "2026-09-01T21:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "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/trustpilot.BusinessResponse" + "$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" }, - "trustpilot.businessRelatedResponseDoc": { + "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/trustpilot.BusinessRelatedResponse" + "$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" }, - "trustpilot.businessReviewsResponseDoc": { + "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/trustpilot.BusinessReviewsResponse" + "$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" }, - "trustpilot.businessSearchResponseDoc": { + "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/trustpilot.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" }, - "trustpilot.categoriesResponseDoc": { + "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/trustpilot.CategoriesResponse" + "$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" }, - "trustpilot.categoryResponseDoc": { + "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/trustpilot.CategoryResponse" + "$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" }, - "trustpilot.categorySearchResponseDoc": { + "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/trustpilot.CategorySearchResponse" + "$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" }, - "twitch.ChannelGame": { + "tacobell.storesResponseDoc": { "properties": { - "id": { - "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": "League of Legends", - "type": "string" + "data": { + "$ref": "#/definitions/tacobell.StoresResponse" }, - "slug": { - "example": "league-of-legends", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "twitch.ChannelResponse": { + "target.Answer": { "properties": { - "id": { + "author": { "type": "string" }, - "is_live": { - "example": true, - "type": "boolean" - }, - "is_partner": { - "example": true, - "type": "boolean" - }, - "last_broadcast_title": { - "type": "string" + "helpful": { + "type": "integer" }, - "login": { + "id": { "type": "string" }, - "primary_color_hex": { - "example": "8205B3", + "submitted_at": { "type": "string" }, - "primary_team": { - "$ref": "#/definitions/twitch.ChannelTeam" - }, - "profile_image_url": { + "text": { "type": "string" - }, - "stream": { - "$ref": "#/definitions/twitch.ChannelStream" } }, "type": "object" }, - "twitch.ChannelStream": { + "target.Availability": { "properties": { - "game": { - "$ref": "#/definitions/twitch.ChannelGame" + "backup_store": { + "type": "boolean" }, - "id": { - "type": "string" + "primary_store": { + "type": "boolean" }, - "started_at": { - "example": "2026-08-14T07:18:46Z", - "type": "string" + "scheduled_delivery": { + "type": "boolean" + }, + "shipping": { + "type": "boolean" + }, + "sold_out": { + "type": "boolean" } }, "type": "object" }, - "twitch.ChannelTeam": { + "target.Breadcrumb": { "properties": { "id": { + "example": "4yi5p", "type": "string" }, "name": { - "example": "yumetalent", + "example": "Coffee", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "twitch.Clip": { + "target.CategoriesResponse": { "properties": { - "created_at": { - "example": "2026-08-07T10:59:22Z", - "type": "string" - }, - "curator": { - "$ref": "#/definitions/twitch.ClipCurator" - }, - "duration_seconds": { - "example": 42, - "type": "number" + "categories": { + "items": { + "$ref": "#/definitions/target.Category" + }, + "type": "array" }, - "game": { - "$ref": "#/definitions/twitch.ClipGame" + "count": { + "example": 29, + "type": "integer" }, - "id": { + "fetched_at": { "type": "string" }, - "thumbnail_url": { - "type": "string" + "group_count": { + "example": 16, + "type": "integer" }, - "title": { - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/target.CategoryGroup" + }, + "type": "array" }, - "url": { + "source_url": { "type": "string" - }, - "view_count": { - "example": 5370, - "type": "integer" } }, "type": "object" }, - "twitch.ClipCurator": { + "target.Category": { "properties": { - "display_name": { - "type": "string" - }, "id": { + "example": "5xt1a", "type": "string" }, - "login": { - "type": "string" - } - }, - "type": "object" - }, - "twitch.ClipGame": { - "properties": { - "id": { + "image_url": { "type": "string" }, "name": { - "example": "League of Legends", + "example": "Grocery", "type": "string" }, - "slug": { - "example": "league-of-legends", + "url": { + "example": "https://www.target.com/c/grocery/-/N-5xt1a", "type": "string" } }, "type": "object" }, - "twitch.ClipsResponse": { + "target.CategoryGroup": { "properties": { - "clips": { + "categories": { "items": { - "$ref": "#/definitions/twitch.Clip" + "$ref": "#/definitions/target.Category" }, "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", + "example": "Grocery", "type": "string" } }, "type": "object" }, - "twitch.ScheduleResponse": { + "target.CategoryProductsResponse": { "properties": { - "channel": { + "applied_filter_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "category_id": { + "example": "5q0ga", "type": "string" }, "count": { - "example": 5, + "example": 24, "type": "integer" }, - "next_segment_at": { - "example": "2026-08-15T12:00:00Z", - "type": "string" - }, - "next_segment_id": { + "fetched_at": { "type": "string" }, - "segments": { + "filter_groups": { "items": { - "$ref": "#/definitions/twitch.ScheduleSegment" + "$ref": "#/definitions/target.FilterGroup" }, "type": "array" - } - }, - "type": "object" - }, - "twitch.ScheduleSegment": { - "properties": { - "cancelled_until": { - "type": "string" }, - "categories": { + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 24, + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/twitch.ScheduleCategory" + "$ref": "#/definitions/target.ProductSummary" }, "type": "array" }, - "end_at": { - "example": "2026-08-15T19:00:00Z", + "sort": { + "example": "featured", "type": "string" }, - "id": { + "source_url": { "type": "string" }, - "is_cancelled": { - "example": false, - "type": "boolean" + "store_id": { + "example": 2885, + "type": "integer" }, - "start_at": { - "example": "2026-08-15T12:00:00Z", - "type": "string" + "total": { + "example": 4158, + "type": "integer" }, - "title": { - "example": "LEC", - "type": "string" + "total_pages": { + "example": 50, + "type": "integer" } }, "type": "object" }, - "twitch.SearchCategory": { + "target.FilterGroup": { "properties": { - "box_art_url": { + "display_name": { + "example": "Deals", "type": "string" }, + "expanded": { + "type": "boolean" + }, "id": { + "example": "d_deals", "type": "string" }, - "slug": { - "example": "valorant", + "options": { + "items": { + "$ref": "#/definitions/target.FilterOption" + }, + "type": "array" + }, + "type": { + "example": "checkbox", "type": "string" } }, "type": "object" }, - "twitch.SearchChannel": { + "target.FilterOption": { "properties": { - "game_name": { + "display_name": { + "example": "Clearance", "type": "string" }, "id": { + "example": "5tdv1", "type": "string" }, - "is_live": { - "example": true, - "type": "boolean" - }, - "is_verified": { + "selected": { "type": "boolean" }, - "login": { - "type": "string" - }, - "profile_image_url": { + "url": { + "example": "d_deals:clearance", "type": "string" }, - "stream_title": { + "value": { + "example": "clearance", "type": "string" - }, - "viewers_count": { - "example": 3361, - "type": "integer" } }, "type": "object" }, - "twitch.SearchResponse": { + "target.FilterOptionsResponse": { "properties": { + "applied_filter_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "category_id": { + "example": "5q0ga", + "type": "string" + }, "count": { - "example": 10, + "example": 7, "type": "integer" }, - "query": { + "fetched_at": { "type": "string" }, - "results": { + "filter_groups": { "items": { - "$ref": "#/definitions/twitch.SearchResult" + "$ref": "#/definitions/target.FilterGroup" }, "type": "array" - } - }, - "type": "object" - }, - "twitch.SearchResult": { - "properties": { - "category": { - "$ref": "#/definitions/twitch.SearchCategory" - }, - "channel": { - "$ref": "#/definitions/twitch.SearchChannel" }, - "text": { + "query": { + "example": "coffee", "type": "string" }, - "type": { - "description": "\"category\" or \"channel\"", - "example": "channel", + "source_url": { "type": "string" + }, + "store_id": { + "example": 2885, + "type": "integer" + }, + "total": { + "example": 4158, + "type": "integer" } }, "type": "object" }, - "twitch.Stream": { + "target.Price": { "properties": { - "broadcaster": { - "$ref": "#/definitions/twitch.StreamBroadcaster" + "current": { + "example": 12.79, + "type": "number" }, - "id": { + "formatted": { + "example": "$12.79", "type": "string" }, - "preview_image_url": { + "regular": { + "example": 12.79, + "type": "number" + }, + "store_id": { + "example": 2885, + "type": "integer" + }, + "unit_formatted": { + "example": "$1.07/ounce", "type": "string" + } + }, + "type": "object" + }, + "target.Product": { + "properties": { + "availability": { + "$ref": "#/definitions/target.Availability" }, - "tags": { + "brand": { + "example": "Starbucks", + "type": "string" + }, + "breadcrumbs": { + "items": { + "$ref": "#/definitions/target.Breadcrumb" + }, + "type": "array" + }, + "bullets": { "items": { "type": "string" }, "type": "array" }, - "title": { + "category": { + "example": "Ground Coffee", "type": "string" }, - "viewers_count": { - "example": 56596, - "type": "integer" - } - }, - "type": "object" - }, - "twitch.StreamBroadcaster": { - "properties": { - "display_name": { + "category_id": { + "example": "x2hqv", "type": "string" }, - "id": { + "description": { "type": "string" }, - "is_partner": { - "example": true, - "type": "boolean" + "dpci": { + "example": "231-10-1932", + "type": "string" }, - "login": { + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "item_type": { + "example": "Coffee", "type": "string" - } - }, - "type": "object" - }, - "twitch.StreamsResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" }, - "game": { + "parent_category_id": { + "example": "4yi5p", "type": "string" }, - "streams": { + "parent_tcin": { + "example": "89169599", + "type": "string" + }, + "price": { + "$ref": "#/definitions/target.Price" + }, + "primary_image_url": { + "type": "string" + }, + "rating": { + "$ref": "#/definitions/target.Rating" + }, + "specifications": { "items": { - "$ref": "#/definitions/twitch.Stream" + "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" }, - "twitch.TeamMember": { + "target.ProductResponse": { "properties": { - "display_name": { - "type": "string" - }, - "id": { + "fetched_at": { "type": "string" }, - "is_live": { - "example": true, - "type": "boolean" - }, - "login": { - "type": "string" + "product": { + "$ref": "#/definitions/target.Product" }, - "profile_image_url": { + "source_url": { "type": "string" }, - "viewers_count": { - "example": 38251, + "store_id": { + "example": 2885, "type": "integer" } }, "type": "object" }, - "twitch.TeamResponse": { + "target.ProductSummary": { "properties": { - "banner_url": { + "brand": { + "example": "Starbucks", "type": "string" }, - "description": { + "category_id": { + "example": "x2hqv", "type": "string" }, - "display_name": { - "example": "Yume Talent", + "parent_category_id": { + "example": "4yi5p", "type": "string" }, - "id": { + "parent_tcin": { + "example": "89169599", "type": "string" }, - "logo_url": { + "price": { + "$ref": "#/definitions/target.Price" + }, + "primary_image_url": { "type": "string" }, - "member_count": { - "example": 5, - "type": "integer" + "rating": { + "$ref": "#/definitions/target.Rating" }, - "members": { - "items": { - "$ref": "#/definitions/twitch.TeamMember" - }, - "type": "array" + "tcin": { + "example": "12954151", + "type": "string" }, - "name": { + "title": { + "example": "Starbucks Pike Place Roast Medium Ground Coffee - 12oz", "type": "string" }, - "owner_login": { + "url": { "type": "string" } }, "type": "object" }, - "twitch.TopGame": { + "target.Question": { "properties": { - "box_art_url": { + "answers": { + "items": { + "$ref": "#/definitions/target.Answer" + }, + "type": "array" + }, + "author": { "type": "string" }, + "helpful": { + "type": "integer" + }, "id": { "type": "string" }, - "name": { - "example": "Dota 2", + "submitted_at": { "type": "string" }, - "slug": { - "example": "dota-2", + "text": { + "type": "string" + } + }, + "type": "object" + }, + "target.QuestionsResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "tags": { + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "questions": { "items": { - "type": "string" + "$ref": "#/definitions/target.Question" }, "type": "array" }, - "viewers_count": { - "example": 390201, + "source_url": { + "type": "string" + }, + "tcin": { + "type": "string" + }, + "total_pages": { "type": "integer" } }, "type": "object" }, - "twitch.TopGamesResponse": { + "target.Rating": { "properties": { - "count": { - "example": 20, + "average": { + "example": 4.51, + "type": "number" + }, + "rating_count": { + "example": 1586, "type": "integer" }, - "games": { - "items": { - "$ref": "#/definitions/twitch.TopGame" - }, - "type": "array" + "review_count": { + "example": 1076, + "type": "integer" } }, "type": "object" }, - "twitch.Video": { + "target.Review": { "properties": { - "game": { - "$ref": "#/definitions/twitch.ClipGame" + "author": { + "type": "string" + }, + "helpful": { + "type": "integer" }, "id": { "type": "string" }, - "length_seconds": { - "example": 20818, + "rating": { "type": "integer" }, - "owner": { - "$ref": "#/definitions/twitch.VideoOwner" - }, - "published_at": { - "example": "2022-04-02T07:10:16Z", + "submitted_at": { "type": "string" }, - "thumbnail_url": { + "syndicated": { + "type": "boolean" + }, + "text": { "type": "string" }, "title": { "type": "string" }, - "view_count": { - "example": 2800795, - "type": "integer" + "verified": { + "type": "boolean" } }, "type": "object" }, - "twitch.VideoOwner": { + "target.ReviewsResponse": { "properties": { - "display_name": { - "type": "string" + "count": { + "type": "integer" }, - "id": { + "fetched_at": { "type": "string" }, - "is_partner": { - "example": true, - "type": "boolean" + "page": { + "type": "integer" }, - "login": { + "per_page": { + "type": "integer" + }, + "reviews": { + "items": { + "$ref": "#/definitions/target.Review" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "tcin": { "type": "string" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "twitch.VideosResponse": { + "target.SearchResponse": { "properties": { + "applied_filter_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, "count": { - "example": 20, + "example": 24, "type": "integer" }, - "login": { + "fetched_at": { "type": "string" }, - "videos": { + "filter_groups": { "items": { - "$ref": "#/definitions/twitch.Video" + "$ref": "#/definitions/target.FilterGroup" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 24, + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/target.ProductSummary" }, "type": "array" + }, + "query": { + "example": "coffee", + "type": "string" + }, + "sort": { + "example": "relevance", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": 2885, + "type": "integer" + }, + "total": { + "example": 20939, + "type": "integer" + }, + "total_pages": { + "example": 50, + "type": "integer" } }, "type": "object" }, - "twitch.VodComment": { + "target.Store": { "properties": { - "badges": { + "address_line1": { + "example": "20745 Stevens Creek Blvd", + "type": "string" + }, + "city": { + "example": "Cupertino", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "distance_miles": { + "example": 2.62, + "type": "number" + }, + "hours": { "items": { - "type": "string" + "$ref": "#/definitions/target.StoreHoursDay" }, "type": "array" }, - "commenter": { - "$ref": "#/definitions/twitch.VodCommentCommenter" + "name": { + "example": "Cupertino De Anza Blvd", + "type": "string" }, - "created_at": { - "example": "2026-08-14T07:20:39Z", + "phone": { + "example": "408-725-2651", "type": "string" }, - "fragments": { + "postal_code": { + "example": "95014-2123", + "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.", "items": { - "$ref": "#/definitions/twitch.VodCommentFragment" + "type": "string" }, "type": "array" }, - "id": { + "state": { + "example": "CA", "type": "string" }, - "message": { + "status": { + "example": "Open", "type": "string" }, - "offset_seconds": { - "example": 113, - "type": "integer" + "store_id": { + "example": "323", + "type": "string" }, - "user_color": { - "example": "#0000FF", + "time_zone": { + "example": "PST", "type": "string" } }, "type": "object" }, - "twitch.VodCommentCommenter": { + "target.StoreHoursDay": { "properties": { - "display_name": { + "close_time": { + "example": "23:00:00", "type": "string" }, - "id": { + "date": { + "example": "2026-09-15", "type": "string" }, - "login": { - "type": "string" - } - }, - "type": "object" - }, - "twitch.VodCommentFragment": { - "properties": { - "emote_id": { + "day_name": { + "example": "Tuesday", "type": "string" }, - "text": { + "is_open": { + "type": "boolean" + }, + "open_time": { + "example": "07:00:00", "type": "string" } }, "type": "object" }, - "twitch.VodCommentsResponse": { + "target.StoresResponse": { "properties": { - "comments": { - "items": { - "$ref": "#/definitions/twitch.VodComment" - }, - "type": "array" - }, "count": { - "example": 55, + "example": 20, "type": "integer" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "next_offset_seconds": { - "example": 140, - "type": "integer" + "fetched_at": { + "type": "string" }, - "offset_seconds": { - "example": 0, - "type": "integer" + "place": { + "example": "95014", + "type": "string" }, - "video_id": { + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/target.Store" + }, + "type": "array" } }, "type": "object" }, - "twitch.channelResponseDoc": { + "target.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/twitch.ChannelResponse" + "$ref": "#/definitions/target.CategoriesResponse" }, "msg": { "example": "OK", @@ -173489,14 +173891,14 @@ }, "type": "object" }, - "twitch.clipsResponseDoc": { + "target.categoryProductsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/twitch.ClipsResponse" + "$ref": "#/definitions/target.CategoryProductsResponse" }, "msg": { "example": "OK", @@ -173505,14 +173907,14 @@ }, "type": "object" }, - "twitch.scheduleResponseDoc": { + "target.filterOptionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/twitch.ScheduleResponse" + "$ref": "#/definitions/target.FilterOptionsResponse" }, "msg": { "example": "OK", @@ -173521,14 +173923,14 @@ }, "type": "object" }, - "twitch.searchResponseDoc": { + "target.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/twitch.SearchResponse" + "$ref": "#/definitions/target.ProductResponse" }, "msg": { "example": "OK", @@ -173537,46 +173939,42 @@ }, "type": "object" }, - "twitch.streamsResponseDoc": { + "target.questionsResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/twitch.StreamsResponse" + "$ref": "#/definitions/target.QuestionsResponse" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "twitch.teamResponseDoc": { + "target.reviewsResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/twitch.TeamResponse" + "$ref": "#/definitions/target.ReviewsResponse" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "twitch.topGamesResponseDoc": { + "target.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/twitch.TopGamesResponse" + "$ref": "#/definitions/target.SearchResponse" }, "msg": { "example": "OK", @@ -173585,14 +173983,14 @@ }, "type": "object" }, - "twitch.videosResponseDoc": { + "target.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/twitch.VideosResponse" + "$ref": "#/definitions/target.StoresResponse" }, "msg": { "example": "OK", @@ -173601,141 +173999,225 @@ }, "type": "object" }, - "twitch.vodCommentsResponseDoc": { + "techcrunch.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "type": "string" }, - "data": { - "$ref": "#/definitions/twitch.VodCommentsResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "ubereats.Address": { + "techcrunch.AuthorResponse": { "properties": { - "city": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/techcrunch.AuthorArticle" + }, + "type": "array" }, - "country": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headshot_url": { "type": "string" }, - "postalCode": { + "job_title": { "type": "string" }, - "region": { + "name": { "type": "string" }, - "street": { + "page": { + "type": "integer" + }, + "social_links": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "url": { "type": "string" } }, "type": "object" }, - "ubereats.MenuItem": { + "techradar.AuthorResponse": { "properties": { - "description": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "imageUrl": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "isSoldOut": { + "has_next_page": { "type": "boolean" }, - "price": { - "type": "number" + "job_title": { + "type": "string" }, - "title": { + "name": { "type": "string" }, - "uuid": { + "page": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "social_links": { + "items": { + "$ref": "#/definitions/techradar.AuthorSocialLink" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "ubereats.MenuResponse": { + "techradar.AuthorSocialLink": { "properties": { - "currencyCode": { + "platform": { "type": "string" }, - "sections": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "techstack.Technology": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/ubereats.MenuSection" + "type": "string" }, "type": "array" }, - "storeTitle": { + "confidence": { + "description": "high | medium | low", "type": "string" }, - "storeUuid": { + "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" }, - "url": { + "name": { + "type": "string" + }, + "version": { "type": "string" } }, "type": "object" }, - "ubereats.MenuSection": { + "techstack.UnmatchedEvidence": { "properties": { - "items": { + "domains": { "items": { - "$ref": "#/definitions/ubereats.MenuItem" + "type": "string" }, "type": "array" }, + "generator": { + "type": "string" + } + }, + "type": "object" + }, + "telegraph.AuthorArticle": { + "properties": { + "excerpt": { + "type": "string" + }, + "published_at": { + "type": "string" + }, "title": { "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "ubereats.Restaurant": { + "telegraph.AuthorResponse": { "properties": { - "cuisineTags": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/telegraph.AuthorArticle" }, "type": "array" }, - "currencyCode": { + "bio": { "type": "string" }, - "deliveryEtaText": { + "job_title": { "type": "string" }, - "imageUrl": { + "name": { "type": "string" }, - "isSponsored": { - "type": "boolean" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "tes.EmployerDetail": { + "properties": { + "address": { + "type": "string" }, - "latitude": { - "type": "number" + "age_range": { + "type": "string" }, - "longitude": { - "type": "number" + "description": { + "type": "string" }, - "name": { + "funding_status": { "type": "string" }, - "rating": { - "type": "number" + "gender": { + "type": "string" }, - "reviewCount": { - "type": "integer" + "id": { + "type": "string" }, - "slug": { + "location": { "type": "string" }, - "storeUuid": { + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "positions": { + "items": { + "$ref": "#/definitions/tes.EmployerPosition" + }, + "type": "array" + }, + "type": { "type": "string" }, "url": { @@ -173744,100 +174226,74 @@ }, "type": "object" }, - "ubereats.Review": { + "tes.EmployerPosition": { "properties": { - "createdAt": { - "type": "string" - }, - "eaterName": { - "type": "string" - }, - "formattedDate": { + "id": { "type": "string" }, - "text": { + "title": { "type": "string" }, - "timeSinceReview": { + "url": { "type": "string" } }, "type": "object" }, - "ubereats.SearchResponse": { + "tes.JobDetail": { "properties": { - "cityName": { + "application_email": { "type": "string" }, - "cursor": { + "application_url": { "type": "string" }, - "hasMore": { - "type": "boolean" - }, - "offset": { - "type": "integer" + "closing_date": { + "type": "string" }, - "restaurants": { + "contract_terms": { "items": { - "$ref": "#/definitions/ubereats.Restaurant" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "ubereats.StoreDetail": { - "properties": { - "address": { - "$ref": "#/definitions/ubereats.Address" }, - "cuisineTags": { + "contract_types": { "items": { "type": "string" }, "type": "array" }, - "currencyCode": { + "description_excerpt": { "type": "string" }, - "heroImageUrl": { + "employer": { "type": "string" }, - "isOpen": { - "type": "boolean" - }, - "isOrderable": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "employer_header_url": { + "type": "string" }, - "menu": { - "items": { - "$ref": "#/definitions/ubereats.MenuSection" - }, - "type": "array" + "employer_logo_url": { + "type": "string" }, - "phoneNumber": { + "employer_url": { "type": "string" }, - "priceBucket": { + "employer_website": { "type": "string" }, - "rating": { - "type": "number" + "id": { + "type": "string" }, - "reviewCount": { - "type": "integer" + "location": { + "type": "string" }, - "slug": { + "posted_date": { "type": "string" }, - "storeUuid": { + "quick_apply": { + "type": "boolean" + }, + "salary": { "type": "string" }, "title": { @@ -173845,307 +174301,248 @@ }, "url": { "type": "string" - }, - "workingHoursTagline": { - "type": "string" } }, "type": "object" }, - "ubereats.StoreReviewsResponse": { + "tes.JobFacet": { "properties": { - "rating": { - "type": "number" - }, - "reviewCount": { - "type": "integer" - }, - "reviews": { + "children": { "items": { - "$ref": "#/definitions/ubereats.Review" + "$ref": "#/definitions/tes.JobFacet" }, "type": "array" }, - "storeUuid": { - "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, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/ubereats.MenuResponse" - }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "ubereats.searchResponseDoc": { + "tes.JobFacets": { "properties": { - "code": { - "example": 200, - "type": "integer" + "contract_terms": { + "items": { + "$ref": "#/definitions/tes.JobFacet" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/ubereats.SearchResponse" + "contract_types": { + "items": { + "$ref": "#/definitions/tes.JobFacet" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "ubereats.storeResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "positions": { + "items": { + "$ref": "#/definitions/tes.JobFacet" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/ubereats.StoreDetail" + "subjects": { + "items": { + "$ref": "#/definitions/tes.JobFacet" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "workplaces": { + "items": { + "$ref": "#/definitions/tes.JobFacet" + }, + "type": "array" } }, "type": "object" }, - "ubereats.storeReviewsResponseDoc": { + "tes.JobSearchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "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." }, - "data": { - "$ref": "#/definitions/ubereats.StoreReviewsResponse" + "jobs": { + "items": { + "$ref": "#/definitions/tes.JobSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "ulta.Answer": { - "properties": { - "author": { + "keywords": { "type": "string" }, - "created_at": { + "location": { "type": "string" }, - "helpful_votes": { + "page": { "type": "integer" }, - "id": { - "type": "string" - }, - "is_expert": { - "type": "boolean" - }, - "not_helpful_votes": { + "page_size": { "type": "integer" }, - "text": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "ulta.CategoriesResponse": { + "tes.JobSummary": { "properties": { - "categories": { + "closing_date": { + "type": "string" + }, + "contract_terms": { "items": { - "$ref": "#/definitions/ulta.CategoryEntry" + "type": "string" }, "type": "array" }, - "fetched_at": { + "contract_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "employer": { "type": "string" }, - "source_url": { + "employer_logo_url": { "type": "string" - } - }, - "type": "object" - }, - "ulta.CategoryEntry": { - "properties": { - "department": { - "example": "makeup-nails", + }, + "id": { "type": "string" }, - "group": { - "example": "Eyes", + "location": { "type": "string" }, - "name": { - "example": "Mascara", + "salary": { + "type": "string" + }, + "short_description": { + "type": "string" + }, + "title": { "type": "string" }, "url": { - "example": "https://www.ulta.com/shop/makeup/eyes/mascara", "type": "string" } }, "type": "object" }, - "ulta.CategoryFacet": { + "tes.ResourceAttachment": { "properties": { - "label": { + "file_type": { "type": "string" }, - "selected": { - "type": "boolean" + "preview_image_url": { + "type": "string" }, - "value": { + "size": { "type": "string" } }, "type": "object" }, - "ulta.CategoryResponse": { + "tes.ResourceDetail": { "properties": { - "category": { + "age_range": { "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.", + "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": { - "$ref": "#/definitions/ulta.CategoryFacet" + "$ref": "#/definitions/tes.ResourceAttachment" }, "type": "array" }, - "fetched_at": { + "author": { "type": "string" }, - "filter": { + "author_url": { "type": "string" }, - "has_more": { + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "free": { "type": "boolean" }, - "page": { - "type": "integer" + "id": { + "type": "string" }, - "page_size": { - "type": "integer" + "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" }, - "products": { - "items": { - "$ref": "#/definitions/ulta.ProductSummary" - }, - "type": "array" + "price": { + "type": "number" }, - "result_count": { + "rating": { + "type": "number" + }, + "rating_count": { "type": "integer" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "ulta.ProductDetailResponse": { - "properties": { - "brand_name": { + "resource_type": { "type": "string" }, - "category": { + "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": { - "type": "string" + "$ref": "#/definitions/tes.ResourceReview" }, "type": "array" }, - "currency_code": { - "type": "string" - }, - "description": { + "subject": { "type": "string" }, - "fetched_at": { + "thumbnail_url": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "list_price": { + "title": { "type": "string" }, - "product_id": { + "url": { "type": "string" - }, - "product_name": { + } + }, + "type": "object" + }, + "tes.ResourceReview": { + "properties": { + "author": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "sale_price": { + "author_url": { "type": "string" }, - "sku_id": { + "comment": { "type": "string" }, - "source_url": { + "id": { "type": "string" }, - "unavailable": { - "type": "boolean" - }, - "url": { + "posted": { "type": "string" }, - "variants": { - "items": { - "$ref": "#/definitions/ulta.ProductVariant" - }, - "type": "array" + "rating": { + "type": "number" } }, "type": "object" }, - "ulta.ProductQuestionsResponse": { + "tes.ResourceSearchResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "country": { "type": "string" }, "page": { @@ -174154,294 +174551,185 @@ "page_size": { "type": "integer" }, - "product_id": { + "query": { "type": "string" }, - "questions": { + "resources": { "items": { - "$ref": "#/definitions/ulta.Question" + "$ref": "#/definitions/tes.ResourceSummary" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_questions": { + "total": { "type": "integer" } }, "type": "object" }, - "ulta.ProductReviewsResponse": { + "tes.ResourceShop": { "properties": { - "average_rating": { - "type": "number" + "avatar_url": { + "type": "string" }, - "count": { + "bio": { + "type": "string" + }, + "downloads": { "type": "integer" }, - "fetched_at": { + "name": { "type": "string" }, "page": { "type": "integer" }, - "page_size": { - "type": "integer" - }, - "product_id": { - "type": "string" + "rating": { + "type": "number" }, "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.", + "resources": { "items": { - "type": "integer" + "$ref": "#/definitions/tes.ShopResourceSummary" }, "type": "array" }, - "recommended_ratio": { - "type": "number" - }, - "reviews": { - "items": { - "$ref": "#/definitions/ulta.Review" - }, - "type": "array" + "uploads": { + "type": "integer" }, - "source_url": { + "url": { "type": "string" }, - "total_pages": { - "type": "integer" + "username": { + "type": "string" }, - "total_reviews": { + "views": { "type": "integer" } }, "type": "object" }, - "ulta.ProductSummary": { + "tes.ResourceSummary": { "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": { + "author": { "type": "string" }, - "rating": { + "bundle_original_price": { "type": "number" }, - "review_count": { + "bundle_resource_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": { + "currency": { "type": "string" }, - "sku_id": { - "type": "string" - } - }, - "type": "object" - }, - "ulta.Question": { - "properties": { - "answer_count": { + "downloads": { "type": "integer" }, - "answers": { + "file_types": { "items": { - "$ref": "#/definitions/ulta.Answer" + "type": "string" }, "type": "array" }, - "author": { + "first_published": { "type": "string" }, - "created_at": { - "type": "string" + "free": { + "type": "boolean" }, "id": { "type": "string" }, - "location": { - "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" }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "ulta.Review": { - "properties": { - "author": { + "last_published": { "type": "string" }, - "body": { + "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" }, - "created_at": { - "type": "string" + "on_sale": { + "type": "boolean" }, - "headline": { - "type": "string" + "price": { + "type": "number" }, - "helpful_votes": { + "rating": { + "type": "number" + }, + "rating_count": { "type": "integer" }, - "id": { - "type": "string" + "resource_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "location": { + "thumbnail_url": { "type": "string" }, - "not_helpful_votes": { - "type": "integer" - }, - "rating": { - "type": "integer" - }, - "updated_at": { + "title": { "type": "string" }, - "verified_purchase": { - "type": "boolean" + "url": { + "type": "string" } }, "type": "object" }, - "ulta.SearchResponse": { + "tes.SchoolSearchResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, "page": { "type": "integer" }, "page_size": { "type": "integer" }, - "products": { + "query": { + "type": "string" + }, + "schools": { "items": { - "$ref": "#/definitions/ulta.ProductSummary" + "$ref": "#/definitions/tes.SchoolSummary" }, "type": "array" }, - "query": { - "type": "string" - }, - "result_count": { + "total": { "type": "integer" }, - "source_url": { - "type": "string" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "ulta.Store": { + "tes.SchoolSummary": { "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": { + "description": { "type": "string" }, - "phone": { + "id": { "type": "string" }, - "postal_code": { + "logo_url": { "type": "string" }, - "services": { - "items": { - "type": "string" - }, - "type": "array" - }, - "slug": { + "name": { "type": "string" }, - "state": { + "post_code": { "type": "string" }, "url": { @@ -174450,47 +174738,24 @@ }, "type": "object" }, - "ulta.StoreResponse": { + "tes.ShopResourceSummary": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "currency": { "type": "string" }, - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - }, - "radius_meters": { - "type": "integer" - }, - "search": { - "type": "string" + "free": { + "type": "boolean" }, - "source_url": { + "id": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/ulta.Store" - }, - "type": "array" - } - }, - "type": "object" - }, - "ulta.SuggestProduct": { - "properties": { - "brand_name": { - "type": "string" + "price": { + "type": "number" }, - "image_url": { + "thumbnail_url": { "type": "string" }, - "product_name": { + "title": { "type": "string" }, "url": { @@ -174499,60 +174764,46 @@ }, "type": "object" }, - "ulta.SuggestResponse": { + "tes.employerDetailResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "first_top_result": { - "items": { - "$ref": "#/definitions/ulta.SuggestProduct" - }, - "type": "array" - }, - "query": { - "type": "string" + "data": { + "$ref": "#/definitions/tes.EmployerDetail" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/ulta.Suggestion" - }, - "type": "array" } }, "type": "object" }, - "ulta.Suggestion": { + "tes.jobDetailResponseDoc": { "properties": { - "label": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "top_results": { - "items": { - "$ref": "#/definitions/ulta.SuggestProduct" - }, - "type": "array" + "data": { + "$ref": "#/definitions/tes.JobDetail" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "ulta.categoriesResponseDoc": { + "tes.jobSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.CategoriesResponse" + "$ref": "#/definitions/tes.JobSearchResponse" }, "msg": { "example": "OK", @@ -174561,14 +174812,14 @@ }, "type": "object" }, - "ulta.categoryResponseDoc": { + "tes.resourceDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.CategoryResponse" + "$ref": "#/definitions/tes.ResourceDetail" }, "msg": { "example": "OK", @@ -174577,14 +174828,14 @@ }, "type": "object" }, - "ulta.productDetailResponseDoc": { + "tes.resourceSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.ProductDetailResponse" + "$ref": "#/definitions/tes.ResourceSearchResponse" }, "msg": { "example": "OK", @@ -174593,14 +174844,14 @@ }, "type": "object" }, - "ulta.productQuestionsResponseDoc": { + "tes.resourceShopResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.ProductQuestionsResponse" + "$ref": "#/definitions/tes.ResourceShop" }, "msg": { "example": "OK", @@ -174609,14 +174860,14 @@ }, "type": "object" }, - "ulta.productReviewsResponseDoc": { + "tes.schoolSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.ProductReviewsResponse" + "$ref": "#/definitions/tes.SchoolSearchResponse" }, "msg": { "example": "OK", @@ -174625,30 +174876,122 @@ }, "type": "object" }, - "ulta.searchResponseDoc": { + "teslajobs.ListResponse": { "properties": { - "code": { - "example": 200, + "jobs": { + "items": { + "$ref": "#/definitions/teslajobs.TeslaJobListing" + }, + "type": "array" + }, + "location": { + "example": "Palo Alto", + "type": "string" + }, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/ulta.SearchResponse" + "page_size": { + "example": 20, + "type": "integer" }, - "msg": { - "example": "OK", + "query": { + "example": "software engineer", "type": "string" + }, + "total": { + "example": 302, + "type": "integer" } }, "type": "object" }, - "ulta.storesResponseDoc": { + "teslajobs.TeslaJob": { + "properties": { + "apply_url": { + "type": "string" + }, + "compensation_text": { + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "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" + }, + "teslajobs.TeslaJobListing": { + "properties": { + "department": { + "example": "Tesla AI", + "type": "string" + }, + "id": { + "example": "224501", + "type": "string" + }, + "location": { + "example": "Palo Alto, California", + "type": "string" + }, + "title": { + "example": "AI Engineer, Manipulation, Optimus", + "type": "string" + } + }, + "type": "object" + }, + "teslajobs.jobResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.StoreResponse" + "$ref": "#/definitions/teslajobs.TeslaJob" }, "msg": { "example": "OK", @@ -174657,14 +175000,14 @@ }, "type": "object" }, - "ulta.suggestResponseDoc": { + "teslajobs.listResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.SuggestResponse" + "$ref": "#/definitions/teslajobs.ListResponse" }, "msg": { "example": "OK", @@ -174673,168 +175016,179 @@ }, "type": "object" }, - "upwork.FreelancerFeedback": { + "theage.ArticleResponse": { "properties": { - "client_name": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { "type": "string" }, - "comment": { + "image_url": { "type": "string" }, - "date": { + "is_accessible_for_free": { + "type": "boolean" + }, + "is_truncated": { + "type": "boolean" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paywalled": { + "type": "boolean" + }, + "published_at": { "type": "string" }, - "rating": { - "type": "number" + "section": { + "type": "string" }, "title": { "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "upwork.FreelancerResponse": { + "theage.AuthorResponse": { "properties": { - "feedback": { + "articles": { "items": { - "$ref": "#/definitions/upwork.FreelancerFeedback" + "$ref": "#/definitions/theage.HeadlineItem" }, "type": "array" }, - "hourly_rate": { - "type": "string" - }, - "id": { + "bio": { "type": "string" }, - "job_success_score": { - "type": "integer" - }, - "local_time": { + "email": { "type": "string" }, - "location": { + "image_url": { "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" + "social_links": { + "items": { + "type": "string" + }, + "type": "array" }, "url": { "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "upwork.JobClient": { + "theage.HeadlineItem": { "properties": { - "company_size": { - "type": "string" - }, - "country": { + "author": { "type": "string" }, - "hires": { + "image_url": { "type": "string" }, - "industry": { + "published_at": { "type": "string" }, - "location": { + "summary": { "type": "string" }, - "member_since": { + "title": { "type": "string" }, - "total_hours": { + "type": { "type": "string" }, - "total_spent": { + "url": { "type": "string" } }, "type": "object" }, - "upwork.JobResponse": { + "theatlantic.ArticleResponse": { "properties": { - "applicant_countries": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "budget_type": { - "type": "string" - }, - "client": { - "$ref": "#/definitions/upwork.JobClient" - }, - "country": { - "type": "string" - }, - "currency": { - "type": "string" - }, "description": { "type": "string" }, - "duration": { + "image_url": { "type": "string" }, - "employment_type": { + "metered": { + "type": "boolean" + }, + "paragraphs": { "items": { "type": "string" }, "type": "array" }, - "experience_level": { + "published_at": { "type": "string" }, - "fixed_budget": { - "type": "number" - }, - "hourly_max": { - "type": "number" + "section": { + "type": "string" }, - "hourly_min": { - "type": "number" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { + "title": { "type": "string" }, - "location_type": { + "updated_at": { "type": "string" }, - "posted_at": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "theatlantic.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/theatlantic.HeadlineItem" + }, + "type": "array" }, - "project_type": { + "biography": { "type": "string" }, - "proposals": { + "headshot_url": { "type": "string" }, - "title": { + "name": { "type": "string" }, "url": { @@ -174843,38 +175197,49 @@ }, "type": "object" }, - "upwork.JobSummary": { + "theatlantic.HeadlineItem": { "properties": { - "budget_text": { - "type": "string" - }, - "budget_type": { - "description": "\"hourly\" or \"fixed\"", + "author": { "type": "string" }, "description": { "type": "string" }, - "duration": { + "image_url": { "type": "string" }, - "experience_level": { + "published_at": { "type": "string" }, - "id": { - "description": "ID is Upwork's own opaque job identifier (the digits after \"~\" in the\njob's URL), suitable for Service.Job.", + "title": { "type": "string" }, - "posted_at": { + "url": { "type": "string" - }, - "skills": { + } + }, + "type": "object" + }, + "theatlantic.HeadlinesResponse": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/theatlantic.HeadlineItem" }, "type": "array" }, - "title": { + "section": { + "type": "string" + } + }, + "type": "object" + }, + "theatlantic.Section": { + "properties": { + "name": { + "type": "string" + }, + "slug": { "type": "string" }, "url": { @@ -174883,31 +175248,25 @@ }, "type": "object" }, - "upwork.SearchResponse": { + "theatlantic.SectionsResponse": { "properties": { - "jobs": { + "sections": { "items": { - "$ref": "#/definitions/upwork.JobSummary" + "$ref": "#/definitions/theatlantic.Section" }, "type": "array" - }, - "page": { - "type": "integer" - }, - "query": { - "type": "string" } }, "type": "object" }, - "upwork.freelancerResponseDoc": { + "theatlantic.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/upwork.FreelancerResponse" + "$ref": "#/definitions/theatlantic.ArticleResponse" }, "msg": { "example": "OK", @@ -174916,14 +175275,14 @@ }, "type": "object" }, - "upwork.jobResponseDoc": { + "theatlantic.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/upwork.JobResponse" + "$ref": "#/definitions/theatlantic.AuthorResponse" }, "msg": { "example": "OK", @@ -174932,14 +175291,14 @@ }, "type": "object" }, - "upwork.searchResponseDoc": { + "theatlantic.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/upwork.SearchResponse" + "$ref": "#/definitions/theatlantic.HeadlinesResponse" }, "msg": { "example": "OK", @@ -174948,692 +175307,669 @@ }, "type": "object" }, - "usage.usageBillingStateDoc": { + "theatlantic.sectionsResponseDoc": { "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, + "code": { + "example": 200, "type": "integer" }, - "overage_credits": { - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/theatlantic.SectionsResponse" }, - "period_end": { - "example": "2026-05-01T00:00:00Z", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "theblaze.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "period_key": { - "example": "2026-04", - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "period_start": { - "example": "2026-04-01T00:00:00Z", + "image_url": { "type": "string" }, - "plan": { - "example": "Pro", + "name": { "type": "string" }, - "pricing_source": { - "example": "plan_default", + "role": { "type": "string" }, - "subscription_price_cents": { - "example": 7900, - "type": "integer" - }, - "updated_at": { - "example": "2026-04-22T12:00:00Z", + "slug": { "type": "string" }, - "user_id": { - "example": "user-1", + "url": { "type": "string" } }, "type": "object" }, - "usage.usageEndpointItemDoc": { + "thedailybeast.AuthorArticle": { "properties": { - "charged_requests": { - "example": 220, - "type": "integer" - }, - "credits": { - "example": 660, - "type": "integer" - }, - "endpoint": { - "example": "google/search", + "title": { "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" + "url": { + "type": "string" } }, "type": "object" }, - "usage.usageEndpointsDoc": { + "thedailybeast.AuthorResponse": { "properties": { - "from": { - "example": "2026-04-01T00:00:00Z", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/thedailybeast.AuthorArticle" + }, + "type": "array" }, - "items": { + "bio": { "items": { - "$ref": "#/definitions/usage.usageEndpointItemDoc" + "type": "string" }, "type": "array" }, - "range": { - "example": "period", + "image_url": { "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" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "twitter": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "usage.usageOverviewDoc": { + "thehill.AuthorArticle": { "properties": { - "billing": { - "$ref": "#/definitions/usage.usageBillingStateDoc" - }, - "from": { - "example": "2026-04-01T00:00:00Z", + "category": { "type": "string" }, - "range": { - "example": "period", + "category_url": { "type": "string" }, - "requests": { - "$ref": "#/definitions/usage.usageRequestSummaryDoc" + "published_at": { + "type": "string" }, - "to": { - "example": "2026-05-01T00:00:00Z", + "title": { "type": "string" }, - "usage": { - "$ref": "#/definitions/usage.usageWindowSummaryDoc" + "url": { + "type": "string" } }, "type": "object" }, - "usage.usageOverviewResponseDoc": { + "thehill.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/thehill.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/usage.usageOverviewDoc" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "usage.usagePlatformAdjacencyDoc": { + "thehindu.AuthorResponse": { "properties": { - "generated_at": { - "example": "2026-09-06T02:00:00Z", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/thehindu.HeadlineItem" + }, + "type": "array" }, - "platforms": { + "biography": { "items": { - "$ref": "#/definitions/usage.usagePlatformAdjacencyItemDoc" + "type": "string" }, "type": "array" }, - "users": { - "example": 97, - "type": "integer" + "designation": { + "type": "string" }, - "window": { - "example": "lifetime", + "email": { "type": "string" - } - }, - "type": "object" - }, - "usage.usagePlatformAdjacencyItemDoc": { - "properties": { - "co_used": { - "items": { - "$ref": "#/definitions/usage.usagePlatformCoUseDoc" - }, - "type": "array" }, - "platform": { - "example": "tiktok", + "facebook_url": { "type": "string" }, - "requests": { - "example": 2410, - "type": "integer" + "image_url": { + "type": "string" }, - "top_endpoints": { - "items": { - "$ref": "#/definitions/usage.usagePlatformEndpointTotalDoc" - }, - "type": "array" + "linkedin_url": { + "type": "string" }, - "users": { - "example": 9, - "type": "integer" + "name": { + "type": "string" + }, + "twitter_url": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "usage.usagePlatformAdjacencyResponseDoc": { + "thehindu.HeadlineItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "author": { + "type": "string" }, - "data": { - "$ref": "#/definitions/usage.usagePlatformAdjacencyDoc" + "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" }, - "usage.usagePlatformCoUseDoc": { + "thejournal.AuthorArticle": { "properties": { - "platform": { - "example": "instagram", + "image_url": { "type": "string" }, - "users": { - "example": 4, - "type": "integer" + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "usage.usagePlatformEndpointTotalDoc": { + "thejournal.AuthorResponse": { "properties": { - "endpoint": { - "example": "tiktok/search", + "articles": { + "items": { + "$ref": "#/definitions/thejournal.AuthorArticle" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "id": { "type": "string" }, - "requests": { - "example": 1830, - "type": "integer" + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "usage.usageRecentIPItemDoc": { + "thenextweb.AuthorResponse": { "properties": { - "error_count": { - "example": 6, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "ip": { - "example": "203.0.113.10", + "image_url": { "type": "string" }, - "last_seen_at": { - "example": "2026-04-22T12:00:00Z", + "name": { "type": "string" }, - "last_user_agent": { - "example": "Mozilla/5.0", + "slug": { "type": "string" }, - "request_count": { - "example": 90, - "type": "integer" - }, - "success_count": { - "example": 84, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "usage.usageRecentIPsDoc": { + "therealreal.AutocompleteResponse": { "properties": { - "from": { - "example": "2026-04-01T00:00:00Z", + "source_url": { "type": "string" }, - "items": { + "suggestions": { "items": { - "$ref": "#/definitions/usage.usageRecentIPItemDoc" + "$ref": "#/definitions/therealreal.Suggestion" }, "type": "array" - }, - "range": { - "example": "period", - "type": "string" - }, - "to": { - "example": "2026-05-01T00:00:00Z", - "type": "string" } }, "type": "object" }, - "usage.usageRecentIPsResponseDoc": { + "therealreal.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/usage.usageRecentIPsDoc" + "categories": { + "items": { + "$ref": "#/definitions/therealreal.Category" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "usage.usageRequestSummaryDoc": { + "therealreal.Category": { "properties": { - "avg_latency_ms": { - "example": 824.5, - "type": "number" - }, - "distinct_ip_count": { - "example": 3, - "type": "integer" + "children": { + "items": { + "$ref": "#/definitions/therealreal.Category" + }, + "type": "array" }, - "error_requests": { - "example": 30, + "count": { + "example": 225361, "type": "integer" }, - "last_request_at": { - "example": "2026-04-22T12:00:00Z", + "id": { + "example": "493", "type": "string" }, - "requests": { - "example": 420, - "type": "integer" + "name": { + "example": "Handbags", + "type": "string" }, - "success_requests": { - "example": 390, - "type": "integer" + "permalink": { + "example": "women/handbags", + "type": "string" } }, "type": "object" }, - "usage.usageTimeseriesDoc": { + "therealreal.CollectionSlug": { "properties": { - "bucket": { - "example": "day", + "slug": { + "example": "on-sale-now", "type": "string" }, - "from": { - "example": "2026-04-01T00:00:00Z", + "url": { + "example": "https://www.therealreal.com/sales/on-sale-now", "type": "string" - }, - "items": { + } + }, + "type": "object" + }, + "therealreal.CollectionsResponse": { + "properties": { + "collections": { "items": { - "$ref": "#/definitions/usage.usageTimeseriesItemDoc" + "$ref": "#/definitions/therealreal.CollectionSlug" }, "type": "array" }, - "range": { - "example": "period", + "source_url": { "type": "string" }, - "to": { - "example": "2026-05-01T00:00:00Z", - "type": "string" + "total": { + "example": 535, + "type": "integer" } }, "type": "object" }, - "usage.usageTimeseriesItemDoc": { + "therealreal.Condition": { "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, + "count": { + "example": 162975, "type": "integer" }, - "non_billable_requests": { - "example": 2, - "type": "integer" + "id": { + "example": "20", + "type": "string" }, - "overage": { - "example": 0, - "type": "integer" + "name": { + "example": "Very Good", + "type": "string" + } + }, + "type": "object" + }, + "therealreal.ConditionsResponse": { + "properties": { + "conditions": { + "items": { + "$ref": "#/definitions/therealreal.Condition" + }, + "type": "array" }, - "requests": { - "example": 32, - "type": "integer" + "source_url": { + "type": "string" } }, "type": "object" }, - "usage.usageTimeseriesResponseDoc": { + "therealreal.Designer": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "example": "267", + "type": "string" }, - "data": { - "$ref": "#/definitions/usage.usageTimeseriesDoc" + "name": { + "example": "Chanel", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "chanel", "type": "string" } }, "type": "object" }, - "usage.usageWindowSummaryDoc": { + "therealreal.DesignerDirectoryCategory": { "properties": { - "charged_requests": { - "example": 380, - "type": "integer" + "name": { + "example": "Women", + "type": "string" }, - "credits": { - "example": 1140, - "type": "integer" + "slug": { + "example": "women", + "type": "string" + } + }, + "type": "object" + }, + "therealreal.DesignersResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/therealreal.DesignerDirectoryCategory" + }, + "type": "array" }, - "failed_requests": { - "example": 15, - "type": "integer" + "category": { + "example": "women", + "type": "string" }, - "non_billable_requests": { - "example": 25, - "type": "integer" + "designers": { + "items": { + "$ref": "#/definitions/therealreal.Designer" + }, + "type": "array" }, - "overage": { - "example": 0, - "type": "integer" + "source_url": { + "type": "string" }, - "requests": { - "example": 420, + "total": { + "example": 5413, "type": "integer" } }, "type": "object" }, - "usatoday.ArticleResponse": { + "therealreal.Listing": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "available": { + "example": true, + "type": "boolean" }, - "description": { + "color": { + "example": "Blue", "type": "string" }, - "image_url": { + "condition": { + "example": "Very Good", "type": "string" }, - "is_accessible_for_free": { - "type": "boolean" + "designer": { + "example": "Chanel", + "type": "string" }, - "paragraphs": { + "designer_slug": { + "example": "chanel", + "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" + }, + "images": { "items": { "type": "string" }, "type": "array" }, - "published_at": { + "name": { + "example": "Denim Pearl Crush Wallet On Chain", "type": "string" }, - "section": { - "type": "string" + "original_price_usd": { + "example": 3800, + "type": "number" }, - "title": { - "type": "string" + "price_usd": { + "example": 3800, + "type": "number" }, - "updated_at": { + "sku": { + "example": "CHA1494621", "type": "string" }, "url": { + "example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu", "type": "string" + }, + "waitlisted": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "usatoday.AuthorArticle": { + "therealreal.ListingDetail": { "properties": { - "description": { - "type": "string" + "available": { + "example": true, + "type": "boolean" }, - "image_url": { + "category_label": { + "example": "Women's Fashion & Accessories", "type": "string" }, - "published_label": { + "category_name": { + "example": "Women", "type": "string" }, - "title": { + "color": { + "example": "Blue", "type": "string" }, - "url": { + "condition": { + "example": "Very Good", "type": "string" - } - }, - "type": "object" - }, - "usatoday.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/usatoday.AuthorArticle" - }, - "type": "array" }, - "bio": { + "condition_detail": { + "example": "Minor discoloration throughout; minor discoloration at hardware; minor scuff at corner.", "type": "string" }, - "name": { + "description": { "type": "string" }, - "profile_id": { + "designer": { + "example": "Chanel", "type": "string" }, - "social_accounts": { - "items": { - "$ref": "#/definitions/usatoday.AuthorSocialAccount" - }, - "type": "array" - }, - "url": { + "designer_slug": { + "example": "chanel", "type": "string" - } - }, - "type": "object" - }, - "usatoday.AuthorSocialAccount": { - "properties": { - "platform": { + }, + "gender": { + "example": "Women", "type": "string" }, - "url": { + "id": { + "example": "54388578", "type": "string" - } - }, - "type": "object" - }, - "usatoday.HeadlineItem": { - "properties": { + }, "image_url": { + "example": "https://product-images.therealreal.com/CHA1494621_1_enlarged.jpg", "type": "string" }, - "published_at": { + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "measurements": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "name": { + "example": "Denim Pearl Crush Wallet On Chain", "type": "string" }, - "title": { + "original_price_usd": { + "example": 3800, + "type": "number" + }, + "price_usd": { + "example": 3800, + "type": "number" + }, + "sku": { + "example": "CHA1494621", "type": "string" }, - "updated_at": { + "source_url": { "type": "string" }, "url": { + "example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu", "type": "string" + }, + "waitlisted": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "usatoday.HeadlinesResponse": { + "therealreal.ProductsResponse": { "properties": { - "items": { + "has_more": { + "example": true, + "type": "boolean" + }, + "listings": { "items": { - "$ref": "#/definitions/usatoday.HeadlineItem" + "$ref": "#/definitions/therealreal.Listing" }, "type": "array" }, - "section": { + "next_after": { + "example": "YXJyYXljb25uZWN0aW9uOjExOQ==", + "type": "string" + }, + "source_url": { "type": "string" + }, + "total": { + "example": 404167, + "type": "integer" } }, "type": "object" }, - "usatoday.NewsResponse": { + "therealreal.SimilarResponse": { "properties": { - "items": { + "listings": { "items": { - "$ref": "#/definitions/usatoday.HeadlineItem" + "$ref": "#/definitions/therealreal.Listing" }, "type": "array" - } - }, - "type": "object" - }, - "usatoday.Section": { - "properties": { - "name": { - "type": "string" - }, - "slug": { - "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "usatoday.SectionsResponse": { + "therealreal.Suggestion": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/usatoday.Section" - }, - "type": "array" + "text": { + "example": "gucci handbags", + "type": "string" } }, "type": "object" }, - "usatoday.articleResponseDoc": { + "therealreal.autocompleteResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/usatoday.ArticleResponse" + "$ref": "#/definitions/therealreal.AutocompleteResponse" }, "msg": { "example": "OK", @@ -175642,14 +175978,14 @@ }, "type": "object" }, - "usatoday.authorResponseDoc": { + "therealreal.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/usatoday.AuthorResponse" + "$ref": "#/definitions/therealreal.CategoriesResponse" }, "msg": { "example": "OK", @@ -175658,14 +175994,14 @@ }, "type": "object" }, - "usatoday.headlinesResponseDoc": { + "therealreal.collectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/usatoday.HeadlinesResponse" + "$ref": "#/definitions/therealreal.CollectionsResponse" }, "msg": { "example": "OK", @@ -175674,14 +176010,14 @@ }, "type": "object" }, - "usatoday.newsResponseDoc": { + "therealreal.conditionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/usatoday.NewsResponse" + "$ref": "#/definitions/therealreal.ConditionsResponse" }, "msg": { "example": "OK", @@ -175690,14 +176026,14 @@ }, "type": "object" }, - "usatoday.sectionsResponseDoc": { + "therealreal.designersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/usatoday.SectionsResponse" + "$ref": "#/definitions/therealreal.DesignersResponse" }, "msg": { "example": "OK", @@ -175706,78 +176042,30 @@ }, "type": "object" }, - "user.userAPIKeyItemDoc": { + "therealreal.listingResponseDoc": { "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" + "code": { + "example": 200, + "type": "integer" }, - "status": { - "example": "active", - "type": "string" + "data": { + "$ref": "#/definitions/therealreal.ListingDetail" }, - "updated_at": { - "example": "2026-04-22T12:00:00Z", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "user.userAPIKeysDoc": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/user.userAPIKeyItemDoc" - }, - "type": "array" - } - }, - "type": "object" - }, - "user.userAPIKeysResponseDoc": { + "therealreal.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/user.userAPIKeysDoc" + "$ref": "#/definitions/therealreal.ProductsResponse" }, "msg": { "example": "OK", @@ -175786,32 +176074,14 @@ }, "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": { + "therealreal.similarResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/user.userBrowserLanguageDoc" + "$ref": "#/definitions/therealreal.SimilarResponse" }, "msg": { "example": "OK", @@ -175820,109 +176090,101 @@ }, "type": "object" }, - "user.userMeDoc": { + "thestarmy.AuthorArticle": { "properties": { - "email": { - "example": "operator@example.com", + "image_url": { "type": "string" }, - "id": { - "example": "user-1", + "published_at": { "type": "string" }, - "plan": { - "example": "Pro", + "section": { "type": "string" }, - "username": { - "example": "operator", + "summary": { "type": "string" - } - }, - "type": "object" - }, - "user.userMeResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/user.userMeDoc" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "user.userRevealAPIKeyDoc": { + "thestarmy.AuthorResponse": { "properties": { - "api_key": { - "example": "7d0f3f6a5f6c4b91a6e3f5d91ef7dc7e5c7b0c8b4f2b4e57a7d8f1e2c3b4a5d6", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/thestarmy.AuthorArticle" + }, + "type": "array" }, - "key": { - "$ref": "#/definitions/user.userAPIKeyItemDoc" - } - }, - "type": "object" - }, - "user.userRevealAPIKeyResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "email": { + "type": "string" }, - "data": { - "$ref": "#/definitions/user.userRevealAPIKeyDoc" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "user.userRotateAPIKeyDoc": { + "theverge.AuthorArticle": { "properties": { - "active_key": { - "$ref": "#/definitions/user.userAPIKeyItemDoc" + "category": { + "type": "string" }, - "grace_period_seconds": { - "example": 86400, - "type": "integer" + "excerpt": { + "type": "string" }, - "new_api_key": { - "example": "7d0f3f6a5f6c4b91a6e3f5d91ef7dc7e5c7b0c8b4f2b4e57a7d8f1e2c3b4a5d6", + "published_at": { "type": "string" }, - "previous_key": { - "$ref": "#/definitions/user.userAPIKeyItemDoc" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "user.userRotateAPIKeyResponseDoc": { + "theverge.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/theverge.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/user.userRotateAPIKeyDoc" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "usmagazine.AuthorLink": { + "thisismoney.AuthorArticle": { "properties": { - "type": { + "excerpt": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { "type": "string" }, "url": { @@ -175931,25 +176193,25 @@ }, "type": "object" }, - "usmagazine.AuthorResponse": { + "thisismoney.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/usmagazine.HeadlineItem" + "$ref": "#/definitions/thisismoney.AuthorArticle" }, "type": "array" }, - "biography": { + "bio": { + "type": "string" + }, + "coverage": { "items": { "type": "string" }, "type": "array" }, - "links": { - "items": { - "$ref": "#/definitions/usmagazine.AuthorLink" - }, - "type": "array" + "job_title": { + "type": "string" }, "name": { "type": "string" @@ -175960,24 +176222,32 @@ }, "type": "object" }, - "usmagazine.HeadlineItem": { + "threads.Author": { "properties": { - "author": { + "id": { "type": "string" }, - "image_url": { + "name": { "type": "string" }, - "published_at": { + "username": { "type": "string" + } + }, + "type": "object" + }, + "threads.Post": { + "properties": { + "author": { + "$ref": "#/definitions/threads.Author" }, - "summary": { + "code": { "type": "string" }, - "title": { + "image_url": { "type": "string" }, - "type": { + "text": { "type": "string" }, "url": { @@ -175986,196 +176256,175 @@ }, "type": "object" }, - "usptoppubs.DetailResponse": { + "threads.Profile": { "properties": { - "abstract": { + "avatar_url": { "type": "string" }, - "applicant_names": { - "items": { - "type": "string" - }, - "type": "array" - }, - "application_number": { - "example": "19/048819", + "biography": { "type": "string" }, - "assignee_name": { + "followers_count": { + "type": "integer" + }, + "name": { "type": "string" }, - "claims": { - "items": { - "type": "string" - }, - "type": "array" + "threads_count": { + "type": "integer" }, - "cpc_codes": { + "url": { "type": "string" }, - "database": { - "example": "US-PGPUB", + "username": { "type": "string" + } + }, + "type": "object" + }, + "threads.ProfilePostsResult": { + "properties": { + "has_more": { + "type": "boolean" }, - "description": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/threads.Thread" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "filing_date": { - "example": "2025-02-07", + "next_cursor": { "type": "string" }, - "guid": { - "example": "US-20260238009-A1", + "username": { "type": "string" - }, - "inventors_short": { + } + }, + "type": "object" + }, + "threads.RepliesResult": { + "properties": { + "code": { "type": "string" }, - "ipc_codes": { - "type": "string" + "has_more": { + "type": "boolean" }, - "kind_codes": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/threads.Thread" }, "type": "array" }, - "language": { - "example": "EN", - "type": "string" - }, - "page_count": { - "type": "integer" - }, - "publication_date": { - "example": "2026-08-13", - "type": "string" - }, - "publication_number": { - "example": "US20260238009A1", + "next_cursor": { "type": "string" }, - "source_url": { - "type": "string" + "pagination_limited": { + "type": "boolean" }, - "title": { - "example": "HOME GRID FOR IMPROVED EFFICIENCY OF SOLAR ENERGY", + "username": { "type": "string" } }, "type": "object" }, - "usptoppubs.SearchResponse": { + "threads.SearchResult": { "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" + "has_more": { + "type": "boolean" }, - "results": { + "items": { "items": { - "$ref": "#/definitions/usptoppubs.SearchResult" + "$ref": "#/definitions/threads.Thread" }, "type": "array" }, - "source_url": { + "next_cursor": { + "type": "string" + }, + "query": { "type": "string" } }, "type": "object" }, - "usptoppubs.SearchResult": { + "threads.Thread": { "properties": { - "applicant_names": { + "author": { + "$ref": "#/definitions/threads.Author" + }, + "code": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_urls": { "items": { "type": "string" }, "type": "array" }, - "application_number": { - "example": "15/620,213", - "type": "string" + "is_reply": { + "type": "boolean" }, - "assignee_name": { - "type": "string" + "like_count": { + "type": "integer" }, - "cpc_codes": { - "type": "string" + "quote_count": { + "type": "integer" }, - "database": { - "example": "USPAT", - "type": "string" + "reply_count": { + "type": "integer" }, - "filing_date": { - "example": "2017-06-12", + "reply_to": { "type": "string" }, - "guid": { - "example": "US-10758101-B2", - "type": "string" + "repost_count": { + "type": "integer" }, - "inventors_short": { + "text": { "type": "string" }, - "ipc_codes": { + "url": { "type": "string" }, - "kind_codes": { + "video_urls": { "items": { "type": "string" }, "type": "array" - }, - "language": { - "example": "EN", - "type": "string" - }, - "page_count": { + } + }, + "type": "object" + }, + "threads.postResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "publication_date": { - "example": "2020-09-01", - "type": "string" - }, - "publication_number": { - "example": "US10758101B2", - "type": "string" + "data": { + "$ref": "#/definitions/threads.Post" }, - "title": { - "example": "UPRIGHT VACUUM CLEANER WITH BATTERY SUPPORT PLATE", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "usptoppubs.detailResponseDoc": { + "threads.profilePostsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/usptoppubs.DetailResponse" + "$ref": "#/definitions/threads.ProfilePostsResult" }, "msg": { "example": "OK", @@ -176184,14 +176433,14 @@ }, "type": "object" }, - "usptoppubs.searchResponseDoc": { + "threads.profileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/usptoppubs.SearchResponse" + "$ref": "#/definitions/threads.Profile" }, "msg": { "example": "OK", @@ -176200,66 +176449,94 @@ }, "type": "object" }, - "valnet.AuthorSocialLink": { + "threads.repliesResponseDoc": { "properties": { - "type": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/threads.RepliesResult" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "threads.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/threads.SearchResult" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vanguardng.AuthorArticle": { + "ticketmaster.Attraction": { "properties": { - "byline": { + "classification": { + "$ref": "#/definitions/ticketmaster.Classification" + }, + "discovery_id": { + "example": "K8vZ9172Qo7", "type": "string" }, - "published_at": { + "has_artist_video": { + "type": "boolean" + }, + "id": { + "example": "1688071", "type": "string" }, - "summary": { + "image_url": { "type": "string" }, - "title": { + "name": { + "example": "Ariana Grande", "type": "string" }, - "url": { + "setlist_source_url": { "type": "string" - } - }, - "type": "object" - }, - "vanguardng.AuthorResponse": { - "properties": { - "articles": { + }, + "setlists": { "items": { - "$ref": "#/definitions/vanguardng.AuthorArticle" + "$ref": "#/definitions/ticketmaster.Setlist" }, "type": "array" }, - "feed_url": { - "type": "string" - }, - "name": { + "synopsis": { "type": "string" }, - "scanned": { - "type": "integer" - }, - "section": { + "url": { "type": "string" } }, "type": "object" }, - "vanityfair.AuthorArticle": { + "ticketmaster.AttractionRef": { "properties": { - "published_at": { + "discovery_id": { + "example": "K8vZ9172Qo7", "type": "string" }, - "title": { + "id": { + "example": "1688071", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "Ariana Grande", "type": "string" }, "url": { @@ -176268,849 +176545,769 @@ }, "type": "object" }, - "vanityfair.AuthorResponse": { + "ticketmaster.AttractionRelatedResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/vanityfair.AuthorArticle" - }, - "type": "array" + "attraction_id": { + "example": "1688071", + "type": "string" }, - "biography": { + "attractions": { "items": { - "type": "string" + "$ref": "#/definitions/ticketmaster.AttractionRef" }, "type": "array" }, - "image_url": { - "type": "string" + "count": { + "type": "integer" }, - "job_title": { + "fetched_at": { "type": "string" }, - "name": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.AttractionResponse": { + "properties": { + "attraction": { + "$ref": "#/definitions/ticketmaster.Attraction" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "variety.AuthorResponse": { + "ticketmaster.AttractionReviewsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "ai_review_summary": { + "type": "string" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "attraction_id": { + "example": "1688071", + "type": "string" }, - "has_next_page": { - "type": "boolean" + "average_rating": { + "example": 4.6, + "type": "number" }, - "image_url": { - "type": "string" + "best_rating": { + "example": 5, + "type": "number" }, - "name": { + "fetched_at": { "type": "string" }, - "page": { + "limit": { + "example": 10, "type": "integer" }, - "slug": { - "type": "string" + "offset": { + "example": 0, + "type": "integer" }, - "social_links": { + "reviews": { "items": { - "$ref": "#/definitions/variety.AuthorSocialLink" + "$ref": "#/definitions/ticketmaster.Review" }, "type": "array" }, - "url": { + "source_url": { + "type": "string" + }, + "time_zone": { + "example": "America/New_York", "type": "string" + }, + "total": { + "example": 2024, + "type": "integer" } }, "type": "object" }, - "variety.AuthorSocialLink": { + "ticketmaster.Classification": { "properties": { - "platform": { + "genre": { + "example": "Pop", "type": "string" }, - "url": { + "segment": { + "example": "Music", "type": "string" - } - }, - "type": "object" - }, - "vestiaire.Brand": { - "properties": { - "id": { - "example": "50", + }, + "sub_genre": { + "example": "Electro Pop", "type": "string" }, - "name": { - "example": "Chanel", + "sub_type": { + "example": "Musician", "type": "string" }, - "url": { - "example": "https://www.vestiairecollective.com/chanel/", + "type": { + "example": "Individual", "type": "string" } }, "type": "object" }, - "vestiaire.BrandsResponse": { + "ticketmaster.DiscoverCategoriesResponse": { "properties": { - "brands": { + "categories": { "items": { - "$ref": "#/definitions/vestiaire.Brand" + "$ref": "#/definitions/ticketmaster.DiscoverCategory" }, "type": "array" }, + "count": { + "type": "integer" + }, "fetched_at": { - "example": "2026-09-09T12:00:00Z", "type": "string" }, - "total": { - "example": 13693, + "page": { "type": "integer" - } - }, - "type": "object" - }, - "vestiaire.CategoriesResponse": { - "properties": { - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + }, + "per_page": { + "type": "integer" + }, + "section": { "type": "string" }, - "universes": { + "source_urls": { "items": { - "$ref": "#/definitions/vestiaire.Universe" + "type": "string" }, "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "vestiaire.Category": { + "ticketmaster.DiscoverCategory": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/vestiaire.Category" - }, - "type": "array" - }, - "count": { - "example": 82421, - "type": "integer" - }, "id": { - "example": "5", "type": "string" }, + "major": { + "type": "boolean" + }, "name": { - "example": "Bags", + "type": "string" + }, + "section": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "vestiaire.ConditionsResponse": { + "ticketmaster.DiscoverCitiesResponse": { "properties": { - "conditions": { + "cities": { "items": { - "$ref": "#/definitions/vestiaire.FacetValue" + "$ref": "#/definitions/ticketmaster.DiscoverCity" }, "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", + "country": { "type": "string" }, - "name": { - "example": "Chanel", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "vestiaire.PriceRange": { - "properties": { - "max_cents": { - "example": 9765700, + }, + "page": { "type": "integer" }, - "min_cents": { - "example": 700, + "per_page": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "total": { "type": "integer" } }, "type": "object" }, - "vestiaire.ProductRef": { + "ticketmaster.DiscoverCity": { "properties": { - "id": { - "example": "6444", + "country": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "locale": { "type": "string" }, "name": { - "example": "Off-White", "type": "string" }, - "parent_id": { - "example": "2", + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "vestiaire.ProductResponse": { + "ticketmaster.EventDetail": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "brand": { - "$ref": "#/definitions/vestiaire.ProductRef" - }, - "category": { - "$ref": "#/definitions/vestiaire.ProductRef" + "attractions": { + "items": { + "$ref": "#/definitions/ticketmaster.AttractionRef" + }, + "type": "array" }, - "color": { - "example": "Black", - "type": "string" + "cancelled": { + "type": "boolean" }, - "condition": { - "example": "Never worn", - "type": "string" + "classification": { + "$ref": "#/definitions/ticketmaster.Classification" }, "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", + "discovery_id": { + "example": "vv1A7ZkG_GkdqBxS4", "type": "string" }, - "id": { - "example": "70860454", + "event_change_status": { + "example": "none", "type": "string" }, - "in_stock": { - "example": false, - "type": "boolean" + "event_type": { + "example": "STANDARD", + "type": "string" }, - "like_count": { - "example": 2, - "type": "integer" + "id": { + "example": "04006319DDEA2CD5", + "type": "string" }, - "material": { - "example": "Leather", + "image_url": { "type": "string" }, - "model": { - "$ref": "#/definitions/vestiaire.ProductRef" + "limited_availability": { + "type": "boolean" }, - "name": { - "example": "Leather biker jacket", + "onsale_time": { + "example": "2025-09-10T15:00:00Z", "type": "string" }, - "negotiable": { - "example": true, + "postponed": { "type": "boolean" }, - "pictures": { + "presales": { "items": { - "type": "string" + "$ref": "#/definitions/ticketmaster.Presale" }, "type": "array" }, - "price_cents": { - "example": 31100, - "type": "integer" + "product_type": { + "example": "General", + "type": "string" }, - "reserved": { - "example": false, + "rescheduled": { "type": "boolean" }, - "seller": { - "$ref": "#/definitions/vestiaire.ProductSeller" - }, - "size": { - "example": "L", + "seatmap_url": { "type": "string" }, - "size_standard": { - "example": "International", + "sold_out": { + "type": "boolean" + }, + "start_time": { + "example": "2026-08-04T02:00:00Z", "type": "string" }, - "sold": { - "example": false, + "tba": { "type": "boolean" }, - "source_url": { - "example": "https://www.vestiairecollective.com/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml", + "ticketing_status": { + "example": "UNKNOWN", "type": "string" }, - "universe": { - "example": "Women", + "time_zone": { + "example": "America/Chicago", + "type": "string" + }, + "title": { + "example": "Ariana Grande - The Eternal Sunshine Tour", "type": "string" }, "url": { - "example": "https://www.vestiairecollective.com/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml", "type": "string" + }, + "venue": { + "$ref": "#/definitions/ticketmaster.VenueRef" + }, + "virtual": { + "type": "boolean" } }, "type": "object" }, - "vestiaire.ProductSeller": { + "ticketmaster.EventResponse": { "properties": { - "badge": { - "example": "Common", - "type": "string" - }, - "country": { - "example": "United States", - "type": "string" - }, - "country_iso": { - "example": "US", - "type": "string" + "event": { + "$ref": "#/definitions/ticketmaster.EventDetail" }, - "id": { - "example": "36526194", + "fetched_at": { "type": "string" }, - "products_listed": { - "example": 23, - "type": "integer" - }, - "products_sold": { - "example": 8, - "type": "integer" - }, - "username": { - "example": "michelle36526194", + "source_url": { "type": "string" } }, "type": "object" }, - "vestiaire.SearchFacets": { + "ticketmaster.EventSummary": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/vestiaire.FacetValue" - }, - "type": "array" - }, - "categories": { + "attractions": { "items": { - "$ref": "#/definitions/vestiaire.FacetValue" + "$ref": "#/definitions/ticketmaster.AttractionRef" }, "type": "array" }, - "conditions": { - "items": { - "$ref": "#/definitions/vestiaire.FacetValue" - }, - "type": "array" - } - }, - "type": "object" - }, - "vestiaire.SearchItem": { - "properties": { - "brand": { - "example": "Chanel", - "type": "string" + "cancelled": { + "type": "boolean" }, - "brand_id": { - "example": "50", + "discovery_id": { + "example": "vv1A7ZkG_GkdqBxS4", "type": "string" }, - "color": { - "example": "Black", + "event_change_status": { + "example": "none", "type": "string" }, - "country": { - "example": "US", + "id": { + "example": "04006319DDEA2CD5", "type": "string" }, - "created_at": { - "example": "2026-09-08T10:00:03Z", + "image_url": { "type": "string" }, - "currency": { - "example": "USD", - "type": "string" + "limited_availability": { + "type": "boolean" }, - "id": { - "example": "70816051", + "onsale_time": { + "example": "2025-09-10T15:00:00Z", "type": "string" }, - "in_stock": { - "example": false, + "postponed": { "type": "boolean" }, - "likes": { - "example": 1, - "type": "integer" + "presales": { + "items": { + "$ref": "#/definitions/ticketmaster.Presale" + }, + "type": "array" }, - "model": { - "example": "Timeless/Classique Chain", + "rescheduled": { + "type": "boolean" + }, + "seatmap_url": { "type": "string" }, - "name": { - "example": "Timeless/Classique Chain leather backpack", + "sold_out": { + "type": "boolean" + }, + "start_time": { + "example": "2026-08-04T02:00:00Z", "type": "string" }, - "pictures": { - "items": { - "type": "string" - }, - "type": "array" + "tba": { + "type": "boolean" }, - "price_cents": { - "example": 270000, - "type": "integer" + "ticketing_status": { + "example": "UNKNOWN", + "type": "string" }, - "seller_id": { - "example": "28924234", + "time_zone": { + "example": "America/Chicago", "type": "string" }, - "sold": { - "example": false, - "type": "boolean" + "title": { + "example": "Ariana Grande - The Eternal Sunshine Tour", + "type": "string" }, "url": { - "example": "https://www.vestiairecollective.com/women-bags/backpacks/chanel/black-leather-timeless-classique-chain-chanel-backpack-70816051.shtml", "type": "string" + }, + "venue": { + "$ref": "#/definitions/ticketmaster.VenueRef" + }, + "virtual": { + "type": "boolean" } }, "type": "object" }, - "vestiaire.SearchResponse": { + "ticketmaster.EventsResponse": { "properties": { - "facets": { - "$ref": "#/definitions/vestiaire.SearchFacets" + "count": { + "example": 20, + "type": "integer" }, - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + "entity_id": { "type": "string" }, - "items": { + "events": { "items": { - "$ref": "#/definitions/vestiaire.SearchItem" + "$ref": "#/definitions/ticketmaster.EventSummary" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" + "fetched_at": { + "type": "string" }, - "per_page": { - "example": 24, + "page": { "type": "integer" }, - "price_range": { - "$ref": "#/definitions/vestiaire.PriceRange" - }, - "q": { - "example": "chanel bag", + "query": { "type": "string" }, "sort": { - "example": "relevance", + "example": "date", "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, + "total": { + "example": 28, "type": "integer" } }, "type": "object" }, - "vestiaire.SearchSellersResponse": { + "ticketmaster.Presale": { "properties": { - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + "end_time": { + "example": "2025-09-10T03:00:00Z", "type": "string" }, - "q": { - "example": "michelle", + "name": { + "example": "Artist Presale", "type": "string" }, - "sellers": { - "items": { - "$ref": "#/definitions/vestiaire.SellerSearchMatch" - }, - "type": "array" + "start_time": { + "example": "2025-09-09T15:00:00Z", + "type": "string" } }, "type": "object" }, - "vestiaire.SellerResponse": { + "ticketmaster.Review": { "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", + "city": { + "example": "Chicago", "type": "string" }, - "firstname": { - "example": "michelle", + "date_created": { + "example": "2026-08-14T16:14:29Z", "type": "string" }, - "followers": { - "example": 26, - "type": "integer" - }, - "following": { - "example": 11, - "type": "integer" - }, - "id": { - "example": "36526194", + "nick_name": { + "example": "Lynn", "type": "string" }, - "products_bought": { - "example": 0, - "type": "integer" - }, - "products_listed": { - "example": 23, - "type": "integer" - }, - "products_sold": { - "example": 8, + "rating": { + "example": 5, "type": "integer" }, - "segment": { - "example": "C2C", - "type": "string" - }, - "source_url": { - "example": "https://www.vestiairecollective.com/profile/36526194", + "review": { "type": "string" }, - "url": { - "example": "https://www.vestiairecollective.com/profile/36526194", + "title": { + "example": "Best concert of my life", "type": "string" }, - "username": { - "example": "michelle36526194", + "venue": { + "example": "United Center", "type": "string" } }, "type": "object" }, - "vestiaire.SellerSearchMatch": { + "ticketmaster.Setlist": { "properties": { - "avatar_url": { + "city_name": { + "example": "London", "type": "string" }, - "id": { - "example": "36526194", + "country_name": { + "example": "United Kingdom", "type": "string" }, - "name": { - "example": "michelle", + "event_date": { + "example": "2026-08-20", "type": "string" }, - "username": { - "example": "michelle36526194", + "sets": { + "items": { + "$ref": "#/definitions/ticketmaster.SetlistSet" + }, + "type": "array" + }, + "tour_name": { + "example": "Eternal Sunshine", + "type": "string" + }, + "venue_name": { + "example": "The O2 Arena", "type": "string" } }, "type": "object" }, - "vestiaire.SuggestBrand": { + "ticketmaster.SetlistSet": { "properties": { - "id": { - "example": "50", - "type": "string" - }, "name": { - "example": "Chanel", + "example": "Act I", "type": "string" }, - "url": { - "example": "https://www.vestiairecollective.com/chanel/", - "type": "string" + "songs": { + "items": { + "$ref": "#/definitions/ticketmaster.SetlistSong" + }, + "type": "array" } }, "type": "object" }, - "vestiaire.SuggestResponse": { + "ticketmaster.SetlistSong": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/vestiaire.SuggestBrand" - }, - "type": "array" + "name": { + "example": "thank u, next", + "type": "string" }, - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + "original_artist": { + "example": "Lady Gaga", "type": "string" }, - "q": { - "example": "chane", + "performance_notes": { + "example": "extended outro", "type": "string" }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" + "pre_recorded": { + "type": "boolean" } }, "type": "object" }, - "vestiaire.Universe": { + "ticketmaster.Suggestion": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/vestiaire.Category" - }, - "type": "array" + "category": { + "type": "string" }, - "count": { - "example": 346038, + "event_count": { "type": "integer" }, - "id": { - "example": "1", + "image_url": { "type": "string" }, - "name": { - "example": "Women", + "title": { "type": "string" - } - }, - "type": "object" - }, - "vestiaire.brandsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/vestiaire.BrandsResponse" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "vestiaire.categoriesResponseDoc": { + "ticketmaster.SuggestionsResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/vestiaire.CategoriesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "query": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/ticketmaster.Suggestion" + }, + "type": "array" } }, "type": "object" }, - "vestiaire.conditionsResponseDoc": { + "ticketmaster.TrendingAttraction": { "properties": { - "code": { - "example": 200, - "type": "integer" + "discovery_id": { + "example": "K8vZ9172Qo7", + "type": "string" }, - "data": { - "$ref": "#/definitions/vestiaire.ConditionsResponse" + "genre": { + "example": "Pop", + "type": "string" }, - "msg": { - "example": "OK", + "genre_id": { + "example": "KnvZfZ7vAev", "type": "string" - } - }, - "type": "object" - }, - "vestiaire.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/vestiaire.ProductResponse" + "id": { + "example": "1688071", + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "vestiaire.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/vestiaire.SearchResponse" + "images": { + "items": { + "$ref": "#/definitions/ticketmaster.TrendingAttractionImage" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "example": "Ariana Grande", "type": "string" - } - }, - "type": "object" - }, - "vestiaire.searchSellersResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "rank": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/vestiaire.SearchSellersResponse" + "segment": { + "example": "Music", + "type": "string" }, - "msg": { - "example": "OK", + "segment_id": { + "example": "KZFzniwnSyZfZ7v7nJ", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "vestiaire.sellerResponseDoc": { + "ticketmaster.TrendingAttractionImage": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/vestiaire.SellerResponse" + "ratio": { + "example": "16_9", + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "vestiaire.suggestResponseDoc": { + "ticketmaster.TrendingAttractionsResponse": { "properties": { - "code": { - "example": 200, + "attractions": { + "items": { + "$ref": "#/definitions/ticketmaster.TrendingAttraction" + }, + "type": "array" + }, + "count": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/vestiaire.SuggestResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "vice.AuthorResponse": { + "ticketmaster.Venue": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/vice.HeadlineItem" - }, - "type": "array" + "address": { + "example": "1901 W Madison", + "type": "string" }, - "biography": { + "city": { + "example": "Chicago", + "type": "string" + }, + "city_categories": { "items": { - "type": "string" + "$ref": "#/definitions/ticketmaster.VenueCityCategory" }, "type": "array" }, - "image_url": { + "country": { + "example": "US", "type": "string" }, - "name": { + "discovery_id": { + "example": "KovZpa2M7e", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "vice.HeadlineItem": { - "properties": { - "author": { + "id": { + "example": "32882", "type": "string" }, "image_url": { "type": "string" }, - "published_at": { + "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" }, - "summary": { + "postal_code": { + "example": "60612", "type": "string" }, - "title": { + "seat_maps": { + "items": { + "$ref": "#/definitions/ticketmaster.VenueSeatMap" + }, + "type": "array" + }, + "state": { + "example": "IL", "type": "string" }, - "type": { + "time_zone": { + "example": "America/Chicago", "type": "string" }, "url": { @@ -177119,355 +177316,234 @@ }, "type": "object" }, - "vinted.BrandEntry": { + "ticketmaster.VenueCityCategory": { "properties": { "id": { - "example": "14", + "example": "KZFzniwnSyZfZ7v7nJ", "type": "string" }, "name": { - "example": "adidas", + "example": "Concerts", "type": "string" }, "url": { - "example": "https://www.vinted.com/brand/14-adidas", "type": "string" } }, "type": "object" }, - "vinted.BrandResponse": { + "ticketmaster.VenueEnhancedDetailsResponse": { "properties": { "fetched_at": { - "example": "2026-08-07T12:00:00Z", "type": "string" }, - "id": { - "example": "386688", + "header_image_url": { "type": "string" }, - "items": { + "related_links": { "items": { - "$ref": "#/definitions/vinted.ItemCard" + "$ref": "#/definitions/ticketmaster.VenueRelatedLink" }, "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", + "venue_id": { + "example": "32882", "type": "string" } }, "type": "object" }, - "vinted.BrandsResponse": { + "ticketmaster.VenueInfoBlock": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/vinted.BrandEntry" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "name": { + "example": "Parking", "type": "string" }, - "source_url": { - "example": "https://www.vinted.com/brands", + "text": { "type": "string" } }, "type": "object" }, - "vinted.CatalogResponse": { + "ticketmaster.VenueRef": { "properties": { - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "address": { + "example": "1901 W Madison", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/vinted.ItemCard" - }, - "type": "array" - }, - "page": { - "example": 1, - "type": "integer" - }, - "search_text": { - "example": "jacket", + "city": { + "example": "Chicago", "type": "string" }, - "source_url": { - "example": "https://www.vinted.com/catalog?search_text=jacket", + "country": { + "example": "US", "type": "string" - } - }, - "type": "object" - }, - "vinted.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/vinted.CategoryEntry" - }, - "type": "array" }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "discovery_id": { + "example": "KovZpa2M7e", "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", + "example": "32882", "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", + "image_url": { "type": "string" }, - "id": { - "example": "1904", - "type": "string" + "latitude": { + "example": 41.881244, + "type": "number" }, - "items": { - "items": { - "$ref": "#/definitions/vinted.ItemCard" - }, - "type": "array" + "longitude": { + "example": -87.674274, + "type": "number" }, "name": { - "example": "Women", + "example": "United Center", "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "postal_code": { + "example": "60612", + "type": "string" }, - "source_url": { - "example": "https://www.vinted.com/catalog/1904", + "state": { + "example": "IL", "type": "string" }, "url": { - "example": "https://www.vinted.com/catalog/1904", "type": "string" } }, "type": "object" }, - "vinted.ItemCard": { + "ticketmaster.VenueRelatedLink": { "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", + "example": "Chicago Bulls", "type": "string" }, "url": { - "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", "type": "string" } }, "type": "object" }, - "vinted.ItemResponse": { + "ticketmaster.VenueResponse": { "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", + "venue": { + "$ref": "#/definitions/ticketmaster.Venue" + } + }, + "type": "object" + }, + "ticketmaster.VenueSeatMap": { + "properties": { + "image_url": { "type": "string" }, - "url": { - "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", + "name": { + "example": "Chicago Bulls", "type": "string" } }, "type": "object" }, - "vinted.MemberResponse": { + "ticketmaster.attractionRelatedResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-08-07T12:00:00Z", - "type": "string" - }, - "followers_count": { - "example": 5, + "code": { + "example": 200, "type": "integer" }, - "following_count": { - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/ticketmaster.AttractionRelatedResponse" }, - "id": { - "example": "3159465141", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.attractionResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "location": { - "example": "Scottsbluff, United States", + "data": { + "$ref": "#/definitions/ticketmaster.AttractionResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.attractionReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "rating": { - "example": 5, - "type": "number" + "data": { + "$ref": "#/definitions/ticketmaster.AttractionReviewsResponse" }, - "source_url": { - "example": "https://www.vinted.com/member/3159465141", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.categoriesResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "url": { - "example": "https://www.vinted.com/member/3159465141", - "type": "string" + "data": { + "$ref": "#/definitions/ticketmaster.DiscoverCategoriesResponse" }, - "username": { - "example": "alexist738", + "msg": { "type": "string" } }, "type": "object" }, - "vinted.brandResponseDoc": { + "ticketmaster.citiesResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.BrandResponse" + "$ref": "#/definitions/ticketmaster.DiscoverCitiesResponse" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "vinted.brandsResponseDoc": { + "ticketmaster.eventResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.BrandsResponse" + "$ref": "#/definitions/ticketmaster.EventResponse" }, "msg": { "example": "OK", @@ -177476,14 +177552,14 @@ }, "type": "object" }, - "vinted.catalogResponseDoc": { + "ticketmaster.eventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.CatalogResponse" + "$ref": "#/definitions/ticketmaster.EventsResponse" }, "msg": { "example": "OK", @@ -177492,30 +177568,28 @@ }, "type": "object" }, - "vinted.categoriesResponseDoc": { + "ticketmaster.suggestionsResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.CategoriesResponse" + "$ref": "#/definitions/ticketmaster.SuggestionsResponse" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "vinted.categoryResponseDoc": { + "ticketmaster.trendingAttractionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.CategoryResponse" + "$ref": "#/definitions/ticketmaster.TrendingAttractionsResponse" }, "msg": { "example": "OK", @@ -177524,14 +177598,14 @@ }, "type": "object" }, - "vinted.itemResponseDoc": { + "ticketmaster.venueEnhancedDetailsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.ItemResponse" + "$ref": "#/definitions/ticketmaster.VenueEnhancedDetailsResponse" }, "msg": { "example": "OK", @@ -177540,14 +177614,14 @@ }, "type": "object" }, - "vinted.memberResponseDoc": { + "ticketmaster.venueResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.MemberResponse" + "$ref": "#/definitions/ticketmaster.VenueResponse" }, "msg": { "example": "OK", @@ -177556,442 +177630,401 @@ }, "type": "object" }, - "vox.AuthorArticle": { + "ticketweb.Attraction": { "properties": { "category": { + "example": "Arts & Theater", "type": "string" }, - "excerpt": { + "genre": { + "example": "Comedy", "type": "string" }, - "published_at": { + "id": { "type": "string" }, - "title": { + "image_url": { "type": "string" }, - "url": { + "name": { + "example": "Comedy Beast", "type": "string" } }, "type": "object" }, - "vox.AuthorResponse": { + "ticketweb.DeliveryMethod": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/vox.AuthorArticle" - }, - "type": "array" - }, - "bio": { + "description": { "type": "string" }, - "job_title": { + "fee": { + "example": "Free", "type": "string" }, "name": { - "type": "string" - }, - "url": { + "example": "eTickets", "type": "string" } }, "type": "object" }, - "walgreens.Store": { + "ticketweb.EventDetail": { "properties": { - "address_line1": { - "type": "string" + "age_restriction": { + "example": 18, + "type": "integer" }, - "brand": { + "age_restriction_message": { + "example": "Ages 18+", "type": "string" }, - "city": { + "announce_time": { "type": "string" }, - "county": { + "attractions": { + "items": { + "$ref": "#/definitions/ticketweb.Attraction" + }, + "type": "array" + }, + "currency": { + "example": "USD", "type": "string" }, - "distance_miles": { - "type": "number" + "delivery_methods": { + "items": { + "$ref": "#/definitions/ticketweb.DeliveryMethod" + }, + "type": "array" }, - "fax": { + "description": { "type": "string" }, - "intersection": { + "end_time": { "type": "string" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "has_tickets": { + "example": true, + "type": "boolean" }, - "name": { + "id": { + "example": "14241184", "type": "string" }, - "pharmacy_close_time": { + "image_url": { "type": "string" }, - "pharmacy_open_time": { + "name": { + "example": "Comedy Beast", "type": "string" }, - "phone": { + "on_sale_time": { + "example": "2026-07-01T12:05:00.000-05:00", "type": "string" }, - "services": { + "price_range": { + "$ref": "#/definitions/ticketweb.PriceRange" + }, + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/ticketweb.TicketSection" }, "type": "array" }, - "state": { - "type": "string" - }, - "store_close_time": { - "type": "string" - }, - "store_number": { - "type": "string" - }, - "store_open_time": { - "type": "string" - }, - "store_type": { + "start_time": { + "example": "2026-08-25T19:30:00.000-05:00", "type": "string" }, - "time_zone": { + "terms_and_conditions": { "type": "string" }, - "zip": { + "url": { "type": "string" - } - }, - "type": "object" - }, - "walgreens.StoresResponse": { - "properties": { - "stores": { - "items": { - "$ref": "#/definitions/walgreens.Store" - }, - "type": "array" }, - "total_count": { - "type": "integer" + "venue": { + "$ref": "#/definitions/ticketweb.EventVenue" } }, "type": "object" }, - "walgreens.storesResponseDoc": { + "ticketweb.EventResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "event": { + "$ref": "#/definitions/ticketweb.EventDetail" }, - "data": { - "$ref": "#/definitions/walgreens.StoresResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "walmart.Product": { + "ticketweb.EventSummary": { "properties": { - "attributes": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, "availability": { - "example": "IN_STOCK", + "enum": [ + "in_stock", + "sold_out", + "unknown" + ], + "example": "in_stock", "type": "string" }, - "brand": { - "example": "Apple", + "id": { + "example": "14241184", "type": "string" }, - "canonical_url": { - "example": "https://www.walmart.com/ip/5689919121", + "image_url": { "type": "string" }, - "category": { - "example": "Electronics", + "name": { + "example": "Comedy Beast", "type": "string" }, - "currency": { - "example": "USD", + "start_time": { + "example": "2026-08-25T19:30", "type": "string" }, - "description": { - "example": "Wireless earbuds with active noise cancellation.", + "url": { "type": "string" }, - "highlights": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image": { - "example": "https://i5.walmartimages.com/seo/example.jpeg", + "venue": { + "$ref": "#/definitions/ticketweb.VenueRef" + } + }, + "type": "object" + }, + "ticketweb.EventVenue": { + "properties": { + "address": { + "example": "907 South Peters", "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "is_sponsored": { - "example": false, - "type": "boolean" - }, - "item_id": { - "example": "5689919121", + "city": { + "example": "New Orleans", "type": "string" }, - "price": { - "example": 169, - "type": "number" - }, - "price_text": { - "example": "$169.00", + "country": { + "example": "US", "type": "string" }, - "product_id": { - "example": "5689919121", + "id": { + "example": "15005", "type": "string" }, - "rating": { - "example": 4.6, - "type": "number" + "map_image": { + "type": "string" }, - "review_count": { - "example": 17823, - "type": "integer" + "name": { + "example": "Howlin' Wolf", + "type": "string" }, - "seller_name": { - "example": "Walmart.com", + "postal_code": { + "example": "70130", "type": "string" }, - "title": { - "example": "Apple AirPods Pro 2", + "state": { + "example": "LA", "type": "string" }, - "variants": { - "items": { - "$ref": "#/definitions/walmart.ProductSummary" - }, - "type": "array" + "time_zone": { + "example": "US/Central", + "type": "string" } }, "type": "object" }, - "walmart.ProductSummary": { + "ticketweb.PriceRange": { "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" + "max": { + "example": 8.16, + "type": "number" }, - "image": { - "example": "https://i5.walmartimages.com/seo/example.jpeg", - "type": "string" + "min": { + "example": 8.16, + "type": "number" + } + }, + "type": "object" + }, + "ticketweb.SearchResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" }, - "images": { + "events": { "items": { - "type": "string" + "$ref": "#/definitions/ticketweb.EventSummary" }, "type": "array" }, - "is_sponsored": { - "example": false, - "type": "boolean" - }, - "item_id": { - "example": "5689919121", + "fetched_at": { "type": "string" }, - "price": { - "example": 169, - "type": "number" + "page": { + "example": 1, + "type": "integer" }, - "price_text": { - "example": "$169.00", + "query": { "type": "string" }, - "product_id": { - "example": "5689919121", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "ticketweb.TicketFees": { + "properties": { + "credit_card": { + "example": 0.16, + "type": "number" }, - "rating": { - "example": 4.6, + "facility": { "type": "number" }, - "review_count": { - "example": 17823, - "type": "integer" + "per_ticket": { + "example": 1.5, + "type": "number" }, - "seller_name": { - "example": "Walmart.com", - "type": "string" + "rebate": { + "example": 1.5, + "type": "number" }, - "title": { - "example": "Apple AirPods Pro 2", - "type": "string" + "taxes": { + "type": "number" } }, "type": "object" }, - "walmart.RatingBreakdown": { + "ticketweb.TicketPrice": { "properties": { - "five_star": { - "example": 1698, - "type": "integer" + "base": { + "example": 5, + "type": "number" }, - "four_star": { - "example": 273, - "type": "integer" + "fees": { + "$ref": "#/definitions/ticketweb.TicketFees" }, - "one_star": { - "example": 215, + "max_purchase_limit": { + "example": 10, "type": "integer" }, - "three_star": { - "example": 150, + "min_purchase_limit": { "type": "integer" }, - "two_star": { - "example": 116, - "type": "integer" + "name": { + "example": "GA Seating", + "type": "string" + }, + "sold_out": { + "type": "boolean" + }, + "total": { + "example": 8.16, + "type": "number" } }, "type": "object" }, - "walmart.Review": { + "ticketweb.TicketSection": { "properties": { - "author": { - "example": "MusicFan", + "name": { + "example": "GA Seating", "type": "string" }, - "negative_feedback": { - "example": 1, - "type": "integer" + "prices": { + "items": { + "$ref": "#/definitions/ticketweb.TicketPrice" + }, + "type": "array" }, - "positive_feedback": { - "example": 12, + "purchase_limit": { + "example": 10, "type": "integer" }, - "rating": { - "example": 5, - "type": "number" - }, - "review_id": { - "example": "406499690", + "sold_out": { + "type": "boolean" + } + }, + "type": "object" + }, + "ticketweb.VenueDetail": { + "properties": { + "address": { + "example": "907 South Peters, New Orleans, LA 70130", "type": "string" }, - "submission_date": { - "example": "11/30/2025", + "id": { + "example": "15005", "type": "string" }, - "text": { + "name": { + "example": "Howlin' Wolf", "type": "string" }, - "title": { - "example": "Great sound", + "url": { "type": "string" } }, "type": "object" }, - "walmart.ReviewsResponse": { + "ticketweb.VenueRef": { "properties": { - "average_rating": { - "example": 4.3, - "type": "number" - }, - "item_id": { - "example": "5689919121", + "address": { + "example": "New Orleans, LA", "type": "string" }, - "rating_counts": { - "$ref": "#/definitions/walmart.RatingBreakdown" - }, - "recommended_percent": { - "example": 87, - "type": "number" - }, - "reviews": { - "items": { - "$ref": "#/definitions/walmart.Review" - }, - "type": "array" - }, - "reviews_with_text_count": { - "example": 1345, - "type": "integer" - }, - "top_negative_review": { - "$ref": "#/definitions/walmart.Review" - }, - "top_positive_review": { - "$ref": "#/definitions/walmart.Review" + "name": { + "example": "Howlin' Wolf", + "type": "string" }, - "total_review_count": { - "example": 2452, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "walmart.SearchResponse": { + "ticketweb.VenueResponse": { "properties": { - "items": { + "count": { + "example": 20, + "type": "integer" + }, + "events": { "items": { - "$ref": "#/definitions/walmart.ProductSummary" + "$ref": "#/definitions/ticketweb.EventSummary" }, "type": "array" }, + "fetched_at": { + "type": "string" + }, "page": { "example": 1, "type": "integer" }, - "query": { - "example": "lego", + "source_url": { "type": "string" }, - "total_results": { - "example": 1200, - "type": "integer" + "venue": { + "$ref": "#/definitions/ticketweb.VenueDetail" } }, "type": "object" }, - "walmart.productResponseDoc": { + "ticketweb.eventResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/walmart.Product" + "$ref": "#/definitions/ticketweb.EventResponse" }, "msg": { "example": "OK", @@ -178000,14 +178033,14 @@ }, "type": "object" }, - "walmart.reviewsResponseDoc": { + "ticketweb.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/walmart.ReviewsResponse" + "$ref": "#/definitions/ticketweb.SearchResponse" }, "msg": { "example": "OK", @@ -178016,14 +178049,14 @@ }, "type": "object" }, - "walmart.searchResponseDoc": { + "ticketweb.venueResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/walmart.SearchResponse" + "$ref": "#/definitions/ticketweb.VenueResponse" }, "msg": { "example": "OK", @@ -178032,104 +178065,86 @@ }, "type": "object" }, - "wapo.ArticleResponse": { + "tiffany.CategoriesResponse": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "paragraphs": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/tiffany.CategoryFacet" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "title": { - "type": "string" + "count": { + "type": "integer" }, - "updated_at": { + "fetched_at": { "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "wapo.AuthorResponse": { + "tiffany.CategoryFacet": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/wapo.HeadlineItem" - }, - "type": "array" - }, - "author_type": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "expertise": { + "id": { + "description": "ID is the exact value to pass as tiffany-category's own \"category\"\nquery parameter.", "type": "string" }, - "facebook_url": { + "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" }, - "image_url": { + "label": { + "description": "Label is a human-readable label derived from ID.", "type": "string" }, - "linkedin_url": { + "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": { "type": "string" }, - "location": { - "type": "string" + "count": { + "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, "page": { "type": "integer" }, - "role": { - "type": "string" + "per_page": { + "type": "integer" }, - "slug": { + "products": { + "items": { + "$ref": "#/definitions/tiffany.ProductSummary" + }, + "type": "array" + }, + "sort": { "type": "string" }, - "total_count": { - "type": "integer" + "source_url": { + "type": "string" }, "total_pages": { "type": "integer" }, - "twitter_url": { - "type": "string" - }, - "url": { - "type": "string" + "total_products": { + "type": "integer" } }, "type": "object" }, - "wapo.HeadlineItem": { + "tiffany.ContentResult": { "properties": { "description": { "type": "string" @@ -178137,12 +178152,6 @@ "image_url": { "type": "string" }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, "title": { "type": "string" }, @@ -178152,262 +178161,135 @@ }, "type": "object" }, - "wapo.HeadlinesResponse": { + "tiffany.ContentSearchResponse": { "properties": { "count": { "type": "integer" }, - "has_more": { - "type": "boolean" + "fetched_at": { + "type": "string" }, - "items": { + "keyword": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "results": { "items": { - "$ref": "#/definitions/wapo.HeadlineItem" + "$ref": "#/definitions/tiffany.ContentResult" }, "type": "array" }, - "section": { + "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "wapo.NewsItem": { + "tiffany.FilterValue": { "properties": { - "last_modified": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "title": { - "type": "string" + "product_count": { + "type": "integer" }, - "url": { + "value": { "type": "string" } }, "type": "object" }, - "wapo.NewsResponse": { + "tiffany.FiltersResponse": { "properties": { - "items": { + "color": { "items": { - "$ref": "#/definitions/wapo.NewsItem" + "$ref": "#/definitions/tiffany.FilterValue" }, "type": "array" - } - }, - "type": "object" - }, - "wapo.Section": { - "properties": { - "name": { - "type": "string" }, - "slug": { - "type": "string" + "designer": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "url": { + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "wapo.SectionsResponse": { - "properties": { - "sections": { + }, + "gemstone": { "items": { - "$ref": "#/definitions/wapo.Section" + "$ref": "#/definitions/tiffany.FilterValue" }, "type": "array" - } - }, - "type": "object" - }, - "wapo.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/wapo.ArticleResponse" + "gender": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "wapo.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "material": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/wapo.AuthorResponse" + "product_type": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "wapo.headlinesResponseDoc": { + "tiffany.ProductDetailResponse": { "properties": { - "code": { - "example": 200, + "available_quantity": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wapo.HeadlinesResponse" - }, - "msg": { - "example": "OK", + "brand": { "type": "string" - } - }, - "type": "object" - }, - "wapo.newsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/wapo.NewsResponse" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "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" - }, - "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", + "collection": { "type": "string" }, - "id": { - "example": "1829184", + "color": { "type": "string" }, - "name": { - "example": "Kids Shower Curtains", + "currency": { "type": "string" }, - "url": { - "example": "https://www.wayfair.com/baby-kids/sb0/kids-shower-curtains-c1829184.html", - "type": "string" - } - }, - "type": "object" - }, - "wayfair.CategoryResponse": { - "properties": { - "category": { + "description": { "type": "string" }, - "category_id": { + "designer": { "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": { + "gemstone": { "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" }, @@ -178416,526 +178298,357 @@ "in_stock": { "type": "boolean" }, - "original_price": { - "type": "string" - }, - "price": { - "type": "string" + "low_inventory": { + "type": "boolean" }, - "product_id": { + "material": { "type": "string" }, - "product_name": { + "name": { "type": "string" }, - "rating": { + "price": { "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" + "product_id": { + "type": "string" }, - "rating_count": { - "description": "RatingCount is the product's total review count, sourced from the\npage's own aggregate rating summary.", - "type": "integer" + "product_type": { + "type": "string" }, - "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.", + "size": { "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.", + "style_id": { "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).", + "variations": { "items": { - "$ref": "#/definitions/wayfair.VariantCategory" + "$ref": "#/definitions/tiffany.ProductVariation" }, "type": "array" } }, "type": "object" }, - "wayfair.ProductSummary": { + "tiffany.ProductSummary": { "properties": { - "brand_name": { + "collection": { "type": "string" }, - "currency_code": { + "color": { "type": "string" }, - "image_url": { + "currency": { "type": "string" }, - "original_price": { + "designer": { "type": "string" }, - "price": { + "gemstone": { "type": "string" }, - "product_id": { + "id": { "type": "string" }, - "product_name": { + "image_url": { "type": "string" }, - "url": { + "in_stock": { + "type": "boolean" + }, + "low_inventory": { + "type": "boolean" + }, + "material": { "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" + "price": { + "type": "number" }, - "image_url": { + "product_type": { "type": "string" }, - "name": { + "style_id": { "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" + "url": { + "type": "string" } }, "type": "object" }, - "wayfair.categoriesResponseDoc": { + "tiffany.ProductVariation": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wayfair.CategoriesResponse" + "color": { + "type": "string" }, - "msg": { - "example": "OK", + "id": { "type": "string" + }, + "online": { + "type": "boolean" } }, "type": "object" }, - "wayfair.categoryResponseDoc": { + "tiffany.SearchResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wayfair.CategoryResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "keyword": { "type": "string" - } - }, - "type": "object" - }, - "wayfair.productDetailResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wayfair.ProductDetailResponse" + "per_page": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "web.ScrapeInfo": { - "properties": { - "backend": { - "description": "headless backend that rendered, when method=browser", - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/tiffany.ProductSummary" + }, + "type": "array" }, - "cache_state": { - "description": "\"hit\" | \"miss\" — whether this response came from the cache", + "sort": { "type": "string" }, - "cached_at": { - "description": "RFC3339 time the served copy was fetched (cache hits only)", + "source_url": { "type": "string" }, - "escalated": { - "description": "true when the fetch escalated from HTTP to a headless browser", - "type": "boolean" + "total_pages": { + "type": "integer" }, - "method": { - "description": "\"http\" | \"browser\"", - "type": "string" + "total_products": { + "type": "integer" } }, "type": "object" }, - "web.ScrapeLink": { + "tiffany.SearchSuggestion": { "properties": { - "href": { - "type": "string" + "popularity": { + "type": "integer" }, - "rel": { + "query": { "type": "string" }, - "text": { - "type": "string" + "result_count": { + "type": "integer" } }, "type": "object" }, - "web.ScrapeMetadata": { + "tiffany.Store": { "properties": { - "author": { + "address1": { "type": "string" }, - "canonical_url": { + "city": { "type": "string" }, - "content_type": { - "type": "string" + "closed": { + "type": "boolean" }, - "description": { + "country_code": { "type": "string" }, - "final_url": { - "type": "string" + "distance_miles": { + "type": "number" }, - "image": { - "type": "string" + "faqs": { + "items": { + "$ref": "#/definitions/tiffany.StoreFAQ" + }, + "type": "array" }, - "language": { - "type": "string" + "hours": { + "items": { + "$ref": "#/definitions/tiffany.StoreDayHours" + }, + "type": "array" }, - "modified_at": { + "internal_store_id": { "type": "string" }, - "published_at": { - "type": "string" + "latitude": { + "type": "number" }, - "section": { - "type": "string" + "longitude": { + "type": "number" }, - "site_name": { + "name": { "type": "string" }, - "source_url": { + "phone": { "type": "string" }, - "status_code": { - "type": "integer" + "postal_code": { + "type": "string" }, - "title": { + "region": { "type": "string" - } - }, - "type": "object" - }, - "web.ScrapeOption": { - "properties": { - "backend": { - "example": "", + }, + "reservation_url": { "type": "string" }, - "formats": { - "example": [ - "markdown" - ], + "services": { "items": { "type": "string" }, "type": "array" }, - "max_age": { - "example": 604800000, - "type": "integer" - }, - "only_main_content": { - "type": "boolean" + "specialities": { + "items": { + "type": "string" + }, + "type": "array" }, - "proxy": { - "example": "", + "store_id": { "type": "string" }, - "render": { - "enum": [ - "auto", - "http", - "browser", - "unblocker" - ], - "example": "auto", + "store_type": { + "example": "Flagship", "type": "string" }, - "store_in_cache": { - "type": "boolean" + "timezone": { + "type": "string" }, "url": { - "example": "https://example.com", "type": "string" - }, - "wait_for": { - "example": 0, - "type": "integer" } }, - "required": [ - "url" - ], "type": "object" }, - "web.ScrapeResult": { + "tiffany.StoreDayHours": { "properties": { - "html": { - "type": "string" + "closed": { + "type": "boolean" }, - "link_details": { - "items": { - "$ref": "#/definitions/web.ScrapeLink" - }, - "type": "array" + "day": { + "type": "string" }, - "links": { + "intervals": { "items": { - "type": "string" + "$ref": "#/definitions/tiffany.StoreHoursInterval" }, "type": "array" - }, - "markdown": { + } + }, + "type": "object" + }, + "tiffany.StoreFAQ": { + "properties": { + "answer": { "type": "string" }, - "metadata": { - "$ref": "#/definitions/web.ScrapeMetadata" - }, - "raw_html": { + "question": { "type": "string" - }, - "scrape": { - "$ref": "#/definitions/web.ScrapeInfo" } }, "type": "object" }, - "web.TechStackOption": { + "tiffany.StoreHoursInterval": { "properties": { - "render": { - "enum": [ - "browser", - "auto", - "http" - ], - "example": "browser", + "end": { "type": "string" }, - "url": { - "example": "https://www.example.com", + "start": { "type": "string" } }, - "required": [ - "url" - ], "type": "object" }, - "web.TechStackResult": { + "tiffany.StoresResponse": { "properties": { - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, "count": { "type": "integer" }, - "detector_version": { + "fetched_at": { "type": "string" }, - "failure_reason": { - "type": "string" + "latitude": { + "type": "number" }, - "final_url": { - "type": "string" + "longitude": { + "type": "number" }, - "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" + "radius": { + "type": "number" }, - "reachable": { - "type": "boolean" + "source_url": { + "type": "string" }, - "technologies": { + "stores": { "items": { - "$ref": "#/definitions/techstack.Technology" + "$ref": "#/definitions/tiffany.Store" }, "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": { + "tiffany.SuggestResponse": { "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, + "count": { "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", + "fetched_at": { "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", + "query": { "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", + "source_url": { "type": "string" }, - "upgrade_url": { - "description": "upgrade_url is where to change plan.", - "example": "https://crawlora.net/pricing", - "type": "string" + "suggestions": { + "items": { + "$ref": "#/definitions/tiffany.SearchSuggestion" + }, + "type": "array" } }, "type": "object" }, - "web.billingRejectionResponseDoc": { + "tiffany.categoriesResponseDoc": { "properties": { "code": { - "example": 402, + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/web.billingRejectionDoc" + "$ref": "#/definitions/tiffany.CategoriesResponse" }, "msg": { - "example": "Payment Required", + "example": "OK", "type": "string" } }, "type": "object" }, - "web.scrapeResponseDoc": { + "tiffany.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/web.ScrapeResult" + "$ref": "#/definitions/tiffany.CategoryResponse" }, "msg": { "example": "OK", @@ -178944,14 +178657,14 @@ }, "type": "object" }, - "web.techStackResponseDoc": { + "tiffany.contentSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/web.TechStackResult" + "$ref": "#/definitions/tiffany.ContentSearchResponse" }, "msg": { "example": "OK", @@ -178960,73 +178673,14 @@ }, "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": { + "tiffany.filtersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/webmonitor.checkDoc" - }, - "type": "array" + "$ref": "#/definitions/tiffany.FiltersResponse" }, "msg": { "example": "OK", @@ -179035,55 +178689,14 @@ }, "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": { + "tiffany.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "properties": { - "deleted": { - "example": true, - "type": "boolean" - } - }, - "type": "object" + "$ref": "#/definitions/tiffany.ProductDetailResponse" }, "msg": { "example": "OK", @@ -179092,83 +178705,30 @@ }, "type": "object" }, - "webmonitor.monitorDoc": { + "tiffany.searchResponseDoc": { "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" - }, - "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" + "data": { + "$ref": "#/definitions/tiffany.SearchResponse" }, - "url": { - "example": "https://example.com/pricing", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "webmonitor.monitorListResponseDoc": { + "tiffany.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/webmonitor.monitorDoc" - }, - "type": "array" + "$ref": "#/definitions/tiffany.StoresResponse" }, "msg": { "example": "OK", @@ -179177,14 +178737,14 @@ }, "type": "object" }, - "webmonitor.monitorResponseDoc": { + "tiffany.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/webmonitor.monitorDoc" + "$ref": "#/definitions/tiffany.SuggestResponse" }, "msg": { "example": "OK", @@ -179193,1682 +178753,1519 @@ }, "type": "object" }, - "webmonitor.notificationBodyDoc": { + "tiktok.Category": { "properties": { - "events": { - "example": [ - "change.detected", - "run.completed" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "webhook_secret": { - "example": "whsec_...", + "name": { "type": "string" }, - "webhook_url": { - "example": "https://example.com/webhooks/crawlora", + "type": { "type": "string" } }, "type": "object" }, - "webmonitor.notificationDoc": { + "tiktok.ChallengeDetailResp": { "properties": { - "events": { - "example": [ - "change.detected", - "run.completed" - ], - "items": { - "type": "string" + "challengeInfo": {}, + "extra": { + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } }, - "type": "array" + "type": "object" }, - "webhook_url": { - "example": "https://example.com/webhooks/crawlora", - "type": "string" - } - }, - "type": "object" - }, - "webmonitor.sitemapTargetBodyDoc": { - "properties": { - "exclude_patterns": { - "example": [ - "/blog/*" - ], - "items": { - "type": "string" + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } }, - "type": "array" + "type": "object" }, - "include_patterns": { - "example": [ - "/products/*" - ], - "items": { - "type": "string" + "shareMeta": { + "properties": { + "desc": { + "type": "string" + }, + "title": { + "type": "string" + } }, - "type": "array" + "type": "object" }, - "max_urls": { - "example": 5000, + "statusCode": { + "type": "integer" + }, + "status_code": { "type": "integer" + }, + "status_msg": { + "type": "string" } }, "type": "object" }, - "webmonitor.sitemapTargetDoc": { + "tiktok.ChallengeListResp": { "properties": { - "exclude_patterns": { - "example": [ - "/blog/*" - ], - "items": { - "type": "string" + "cursor": { + "type": "string" + }, + "extra": { + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } }, + "type": "object" + }, + "hasMore": { + "type": "boolean" + }, + "itemList": { + "items": {}, "type": "array" }, - "include_patterns": { - "example": [ - "/products/*" - ], - "items": { - "type": "string" + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } }, - "type": "array" + "type": "object" }, - "max_urls": { - "example": 5000, + "statusCode": { + "type": "integer" + }, + "status_code": { "type": "integer" + }, + "status_msg": { + "type": "string" } }, "type": "object" }, - "webmonitor.updateMonitorBodyDoc": { + "tiktok.CommentResp": { "properties": { - "cadence_minutes": { - "example": 60, - "type": "integer" - }, - "enabled": { - "example": true, + "alias_comment_deleted": { "type": "boolean" }, - "name": { - "example": "Pricing page", - "type": "string" + "comments": { + "items": {}, + "type": "array" }, - "notification": { - "$ref": "#/definitions/webmonitor.notificationBodyDoc" + "cursor": { + "type": "integer" }, - "sitemap": { - "$ref": "#/definitions/webmonitor.sitemapTargetBodyDoc" + "extra": { + "properties": { + "api_debug_info": {}, + "fatal_item_ids": {}, + "now": { + "type": "integer" + } + }, + "type": "object" }, - "target_type": { - "enum": [ - "page", - "sitemap" - ], - "example": "page", - "type": "string" - } - }, - "type": "object" - }, - "webmonitor.webhookDeliveryDoc": { - "properties": { - "attempts": { - "example": 1, + "has_filtered_comments": { "type": "integer" }, - "delivered_at": { - "example": "2026-08-22T10:00:02Z", - "type": "string" + "has_more": { + "type": "integer" }, - "error": { - "type": "string" + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" }, - "event": { - "enum": [ - "change.detected", - "run.completed" - ], - "example": "change.detected", - "type": "string" + "reply_style": { + "type": "integer" }, - "status": { - "enum": [ - "delivered", - "rejected", - "failed", - "skipped_unsafe_url" - ], - "example": "delivered", + "status_code": { + "type": "integer" + }, + "status_msg": { "type": "string" }, - "status_code": { - "example": 200, + "top_gifts": {}, + "total": { "type": "integer" } }, "type": "object" }, - "wendys.CategoriesResponse": { + "tiktok.ExploreResp": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/wendys.Category" - }, - "type": "array" - }, - "count": { - "example": 25, - "type": "integer" - }, - "fetched_at": { + "cursor": { "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" + "extra": { + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } }, - "type": "array" + "type": "object" }, - "id": { - "example": "100", - "type": "string" + "hasMore": { + "type": "boolean" }, - "image_url": { - "type": "string" + "itemList": { + "items": {}, + "type": "array" }, - "name": { - "example": "Hamburgers", - "type": "string" + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" }, - "slug": { - "example": "hamburgers", - "type": "string" + "statusCode": { + "type": "integer" }, - "url": { + "status_code": { + "type": "integer" + }, + "status_msg": { "type": "string" } }, "type": "object" }, - "wendys.ComboNutritionSelection": { + "tiktok.Profile": { "properties": { - "name": { - "example": "Dave's Single®", - "type": "string" + "stats": { + "$ref": "#/definitions/tiktok.ProfileStats" }, - "slot_type": { - "example": "ENTREE", - "type": "string" + "user": { + "$ref": "#/definitions/tiktok.User" } }, "type": "object" }, - "wendys.ComboOption": { + "tiktok.ProfileStats": { "properties": { - "base_price": { - "example": 5.59, - "type": "number" + "diggCount": { + "example": 0, + "type": "integer" }, - "calories": { - "example": "560 Cal", - "type": "string" + "followerCount": { + "example": 458800, + "type": "integer" }, - "is_default": { - "type": "boolean" + "followingCount": { + "example": 1, + "type": "integer" }, - "name": { - "example": "Dave's Single®", - "type": "string" + "friendCount": { + "example": 1, + "type": "integer" }, - "product_id": { - "example": "10000000000081", - "type": "string" + "heart": { + "example": 800300, + "type": "integer" + }, + "heartCount": { + "example": 800300, + "type": "integer" + }, + "videoCount": { + "example": 59, + "type": "integer" } }, "type": "object" }, - "wendys.ComboSlot": { + "tiktok.SearchHashtagResp": { "properties": { - "name": { - "example": "Dave's Hamburger Combo", - "type": "string" - }, - "options": { - "items": { - "$ref": "#/definitions/wendys.ComboOption" - }, + "challenge_list": { + "items": {}, "type": "array" }, - "slot_type": { - "example": "ENTREE", + "cursor": { + "type": "integer" + }, + "extra": {}, + "has_more": { + "type": "integer" + }, + "input_keyword": { "type": "string" - } - }, - "type": "object" - }, - "wendys.Component": { - "properties": { - "allergens": { - "example": [ - "Wheat", - "Milk" - ], - "items": { - "type": "string" + }, + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } }, - "type": "array" + "type": "object" }, - "description": { + "music_list": {}, + "qc": { "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", + "rid": { "type": "string" }, - "is_default_option": { - "type": "boolean" + "status_code": { + "type": "integer" }, - "name": { - "example": "Grilled Chicken", + "status_msg": { "type": "string" }, - "price": { - "example": 0.5, - "type": "number" + "type": { + "type": "integer" }, - "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" - } + "user_list": {} }, "type": "object" }, - "wendys.DirectoryChild": { + "tiktok.SearchResp": { "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" + "cursor": { + "type": "integer" }, - "name": { - "example": "Ohio", - "type": "string" + "data": { + "items": {}, + "type": "array" }, - "path": { - "example": "united-states/oh", + "extra": {}, + "feedback_type": { "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, + "has_more": { "type": "integer" }, - "url": { + "input_keyword": { "type": "string" - } - }, - "type": "object" - }, - "wendys.DirectoryResponse": { - "properties": { - "children": { - "items": { - "$ref": "#/definitions/wendys.DirectoryChild" - }, + }, + "itemList": { + "items": {}, "type": "array" }, - "count": { - "example": 88, - "type": "integer" + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" }, - "fetched_at": { + "qc": { "type": "string" }, - "name": { + "rid": { "type": "string" }, - "path": { - "example": "united-states/oh", - "type": "string" + "status_code": { + "type": "integer" }, - "source_url": { + "status_msg": { "type": "string" + }, + "type": { + "type": "integer" } }, "type": "object" }, - "wendys.ItemResponse": { + "tiktok.SearchUserResp": { "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" + "challenge_list": {}, + "cursor": { + "type": "integer" }, - "calories": { - "example": "520 Cal", + "extra": {}, + "feedback_type": { "type": "string" }, - "category": { - "example": "hamburgers", - "type": "string" + "global_doodle_config": {}, + "has_more": { + "type": "integer" }, - "combo_slots": { - "description": "ComboSlots is set only when IsCombo is true.", - "items": { - "$ref": "#/definitions/wendys.ComboSlot" - }, - "type": "array" + "input_keyword": { + "type": "string" }, - "components": { - "items": { - "$ref": "#/definitions/wendys.Component" + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } }, - "type": "array" - }, - "description": { - "description": "Description, BasePrice, Calories, Components and Variants are set\nonly when IsCombo is false.", - "type": "string" + "type": "object" }, - "fetched_at": { + "music_list": {}, + "qc": { "type": "string" }, - "image_url": { + "rid": { "type": "string" }, - "is_combo": { - "type": "boolean" - }, - "item": { - "example": "daves-combo", - "type": "string" + "status_code": { + "type": "integer" }, - "name": { - "example": "Dave's Combo", + "status_msg": { "type": "string" }, - "source_url": { - "type": "string" + "type": { + "type": "integer" }, - "variants": { - "items": { - "$ref": "#/definitions/wendys.ItemVariant" - }, + "user_list": { + "items": {}, "type": "array" } }, "type": "object" }, - "wendys.ItemVariant": { + "tiktok.TrendingResp": { "properties": { - "base_price": { - "example": 2.79, - "type": "number" - }, - "calories": { - "example": "260 Cal", + "cursor": { "type": "string" }, - "description": { - "type": "string" + "extra": { + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } + }, + "type": "object" }, - "is_default": { - "description": "IsDefault marks the variant Wendy's own page selects by default.", + "hasMore": { "type": "boolean" }, - "item_id": { - "example": "40054", - "type": "string" + "itemList": { + "items": {}, + "type": "array" }, - "name": { - "example": "Small Natural-Cut Fries", + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" + }, + "statusCode": { + "type": "integer" + }, + "statusMsg": { "type": "string" }, - "short_name": { - "example": "Small", + "status_code": { + "type": "integer" + }, + "status_msg": { "type": "string" + }, + "trendingTopics": { + "items": {}, + "type": "array" } }, "type": "object" }, - "wendys.MenuItemSummary": { + "tiktok.User": { "properties": { - "calories": { - "example": "760 Cal", + "avatarLarger": { + "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" }, - "has_required_modifiers": { - "type": "boolean" + "bioLink": { + "properties": { + "link": { + "example": "www.openai.com/chatgpt", + "type": "string" + } + }, + "type": "object" }, - "image_url": { + "commerceUserInfo": { + "properties": { + "category": { + "example": "Software & Apps", + "type": "string" + }, + "commerceUser": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "createTime": { + "example": 1689461786, + "type": "integer" + }, + "id": { + "example": "7256182609359995947", "type": "string" }, - "is_combo": { - "description": "IsCombo marks an item whose /wendys/item response returns\ncombo_slots instead of components/variants.", - "type": "boolean" + "isOrganization": { + "example": 1, + "type": "integer" }, - "is_limited_time_offer": { - "type": "boolean" + "language": { + "example": "en", + "type": "string" }, - "item_id": { - "example": "31009", + "nickname": { + "example": "chatgpt", "type": "string" }, - "name": { - "example": "Dave's Combo", + "privateAccount": { + "example": false, + "type": "boolean" + }, + "region": { + "example": "US", "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", + "secUid": { + "example": "MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB", "type": "string" }, - "slug": { - "example": "daves-combo", + "secret": { + "example": false, + "type": "boolean" + }, + "signature": { + "example": "What can I help with?", "type": "string" }, - "url": { + "ttSeller": { + "example": false, + "type": "boolean" + }, + "uniqueId": { + "example": "uniqueId", "type": "string" + }, + "verified": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "wendys.MenuResponse": { + "tiktok.UserPostLinkResp": { "properties": { - "category": { - "example": "hamburgers", + "cursor": { "type": "string" }, - "count": { - "example": 12, - "type": "integer" + "extra": { + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } + }, + "type": "object" }, - "fetched_at": { - "type": "string" + "hasMore": { + "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/wendys.MenuItemSummary" - }, + "itemList": { + "items": {}, "type": "array" }, - "source_url": { + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" + }, + "status_code": { + "type": "integer" + }, + "status_msg": { "type": "string" } }, "type": "object" }, - "wendys.NearbyResponse": { + "tiktok.VideoDetailResp": { "properties": { - "count": { - "example": 25, - "type": "integer" + "extra": { + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } + }, + "type": "object" }, - "fetched_at": { - "type": "string" + "itemInfo": {}, + "log_pb": { + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" }, - "radius": { - "example": 20, + "shareMeta": { + "properties": { + "desc": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "status_code": { "type": "integer" }, - "source_url": { + "status_msg": { "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/wendys.NearbyStore" - }, - "type": "array" } }, "type": "object" }, - "wendys.NearbyStore": { + "tiktok.categoryResponseDoc": { "properties": { - "address": { - "$ref": "#/definitions/wendys.StoreAddress" + "code": { + "example": 200, + "type": "integer" }, - "breakfast_hours": { + "data": { "items": { - "$ref": "#/definitions/wendys.StoreHours" + "$ref": "#/definitions/tiktok.Category" }, "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" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tiktok.challengeListResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_open": { - "type": "boolean" + "data": { + "$ref": "#/definitions/tiktok.ChallengeListResp" }, - "latitude": { - "example": 38.897527, - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tiktok.challengeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "longitude": { - "example": -77.006362, - "type": "number" + "data": { + "$ref": "#/definitions/tiktok.ChallengeDetailResp" }, - "name": { - "example": "WASHINGTON UNION STATION", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tiktok.commentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "phone_number": { - "example": "2028380978", - "type": "string" + "data": { + "$ref": "#/definitions/tiktok.CommentResp" }, - "store_id": { - "example": "12921", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tiktok.exploreResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "timezone": { - "example": "US/Eastern", + "data": { + "$ref": "#/definitions/tiktok.ExploreResp" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "wendys.NutritionFacts": { + "tiktok.postResponseDoc": { "properties": { - "calcium_mg": { - "example": 15, - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "calories": { - "example": 560, - "type": "number" + "data": { + "$ref": "#/definitions/tiktok.VideoDetailResp" }, - "calories_from_fat": { - "example": 300, - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tiktok.profilePostResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "cholesterol_mg": { - "example": 90, - "type": "number" + "data": { + "$ref": "#/definitions/tiktok.UserPostLinkResp" }, - "dietary_fiber_g": { - "example": 2, - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tiktok.profileResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "iron_mg": { - "example": 25, - "type": "number" + "data": { + "$ref": "#/definitions/tiktok.Profile" }, - "monounsaturated_fat_g": { - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tiktok.searchHashtagResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "polyunsaturated_fat_g": { - "type": "number" + "data": { + "$ref": "#/definitions/tiktok.SearchHashtagResp" }, - "potassium_mg": { - "example": 10, - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tiktok.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "protein_g": { - "example": 31, - "type": "number" + "data": { + "$ref": "#/definitions/tiktok.SearchResp" }, - "saturated_fat_g": { - "example": 14, - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tiktok.searchUserResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "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" + "data": { + "$ref": "#/definitions/tiktok.SearchUserResp" }, - "sodium_mg": { - "example": 1170, - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tiktok.trendingResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "sugars_g": { - "example": 9, - "type": "number" + "data": { + "$ref": "#/definitions/tiktok.TrendingResp" }, - "total_carbohydrate_g": { - "example": 37, - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "time.AuthorArticle": { + "properties": { + "excerpt": { + "type": "string" }, - "total_fat_g": { - "example": 34, - "type": "number" + "published_at": { + "type": "string" }, - "trans_fat_g": { - "example": 1.5, - "type": "number" + "section": { + "type": "string" }, - "vitamin_a": { - "type": "number" + "section_url": { + "type": "string" }, - "vitamin_c": { - "type": "number" + "title": { + "type": "string" }, - "vitamin_d_mcg": { - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "wendys.NutritionResponse": { + "time.AuthorResponse": { "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" - ], + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/time.AuthorArticle" }, "type": "array" }, - "category": { - "example": "hamburgers", + "bio": { "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": { + "image_url": { "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", + "job_title": { "type": "string" }, "name": { - "example": "Dave's Single", "type": "string" }, - "nutrition": { - "$ref": "#/definitions/wendys.NutritionFacts" + "social_accounts": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "wendys.RestaurantResponse": { + "timesofindia.AuthorArticle": { "properties": { - "active_day_part": { - "description": "ActiveDayPart is which of the restaurant's own dayparts (breakfast,\nlunch/dinner, ...) is currently serving.", - "example": "BREAKFAST", + "title": { "type": "string" }, - "address": { - "$ref": "#/definitions/wendys.StoreAddress" - }, - "breakfast_hours": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "timesofindia.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/wendys.StoreHours" + "$ref": "#/definitions/timesofindia.AuthorArticle" }, "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.", + "biography": { "items": { - "$ref": "#/definitions/wendys.StoreHours" + "type": "string" }, "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", + "email": { "type": "string" }, - "phone_number": { - "example": "2028380978", + "image_url": { "type": "string" }, - "source_url": { + "job_title": { "type": "string" }, - "store_id": { - "example": "12921", + "location": { "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" + "name": { + "type": "string" }, - "supports_drive_thru": { - "type": "boolean" + "organization": { + "type": "string" }, - "timezone": { - "example": "US/Eastern", + "url": { "type": "string" } }, "type": "object" }, - "wendys.StoreAddress": { + "timesofisrael.AuthorResponse": { "properties": { - "city": { - "example": "Alliance", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "country": { - "example": "US", - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "line1": { - "example": "1833 W. State St.", + "image_url": { "type": "string" }, - "postal_code": { - "example": "44601-3538", + "name": { "type": "string" }, - "region": { - "example": "OH", + "social_links": { + "items": { + "$ref": "#/definitions/timesofisrael.AuthorSocialLink" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "wendys.StoreHours": { + "timesofisrael.AuthorSocialLink": { "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": { "type": "string" }, - "opens": { - "example": "06:30", + "url": { "type": "string" } }, "type": "object" }, - "wendys.StoreMenuItem": { + "tmdb.CastCredit": { "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).", + "character": { "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", + "slug": { "type": "string" } }, "type": "object" }, - "wendys.StoreMenuResponse": { + "tmdb.CollectionResponse": { "properties": { - "count": { - "example": 170, - "type": "integer" - }, - "fetched_at": { + "id": { "type": "string" }, - "items": { + "movies": { "items": { - "$ref": "#/definitions/wendys.StoreMenuItem" + "$ref": "#/definitions/tmdb.MediaRef" }, "type": "array" }, + "overview": { + "type": "string" + }, "source_url": { "type": "string" }, - "store_id": { - "example": "12921", + "title": { + "type": "string" + }, + "uri": { "type": "string" } }, "type": "object" }, - "wendys.StoreResponse": { + "tmdb.CrewCredit": { "properties": { - "address": { - "$ref": "#/definitions/wendys.StoreAddress" - }, - "delivery_platforms": { - "description": "DeliveryPlatforms lists the third-party platforms this store's page\nlinks out to.", + "jobs": { "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", + "slug": { "type": "string" } }, "type": "object" }, - "wendys.TimeSlotsResponse": { + "tmdb.FilmographyCredit": { "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" + "id": { + "type": "string" }, - "fetched_at": { + "title": { "type": "string" }, - "source_url": { + "type": { + "example": "movie", "type": "string" }, - "store_id": { - "example": "12921", + "uri": { "type": "string" } }, "type": "object" }, - "wendys.categoriesResponseDoc": { + "tmdb.Genre": { "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" + "id": { + "example": "18", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "name": { + "example": "Drama", + "type": "string" } }, "type": "object" }, - "wendys.directoryResponseDoc": { + "tmdb.GenresResponse": { "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" + "movie": { + "items": { + "$ref": "#/definitions/tmdb.Genre" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/wendys.DirectoryResponse" + "source_url": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "tv": { + "items": { + "$ref": "#/definitions/tmdb.Genre" + }, + "type": "array" } }, "type": "object" }, - "wendys.itemResponseDoc": { + "tmdb.MediaRef": { "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" + "id": { + "type": "string" }, - "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" + "overview": { + "type": "string" }, - "data": { - "$ref": "#/definitions/wendys.MenuResponse" + "poster_url": { + "type": "string" }, - "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" + "release_date": { + "type": "string" }, - "data": { - "$ref": "#/definitions/wendys.NearbyResponse" + "title": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "uri": { + "type": "string" } }, "type": "object" }, - "wendys.nutritionResponseDoc": { + "tmdb.MovieListResponse": { "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" + "category": { + "type": "string" }, - "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" + "has_next_page": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/wendys.RestaurantResponse" + "movies": { + "items": { + "$ref": "#/definitions/tmdb.MediaRef" + }, + "type": "array" }, - "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", + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wendys.StoreMenuResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "source_url": { + "type": "string" } }, "type": "object" }, - "wendys.storeResponseDoc": { + "tmdb.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" + "budget": { + "type": "number" }, - "data": { - "$ref": "#/definitions/wendys.StoreResponse" + "cast": { + "items": { + "$ref": "#/definitions/tmdb.CastCredit" + }, + "type": "array" }, - "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" + "countries": { + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/wendys.TimeSlotsResponse" + "genres": { + "items": { + "type": "string" + }, + "type": "array" }, - "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", + "homepage": { "type": "string" }, - "path": { - "description": "Path is the locator path, the value /whataburger/store takes.", - "example": "tx/abilene/1625-tx-hwy-351.html", + "id": { + "example": "27205", "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", + "original_language": { + "example": "English", "type": "string" }, - "url": { + "overview": { "type": "string" - } - }, - "type": "object" - }, - "whataburger.SitemapResponse": { - "properties": { - "count": { - "example": 100, - "type": "integer" - }, - "entries": { - "items": { - "$ref": "#/definitions/whataburger.SitemapEntry" - }, - "type": "array" }, - "fetched_at": { + "poster_url": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "rating": { + "$ref": "#/definitions/tmdb.Rating" }, - "source_url": { + "release_date": { + "example": "2010-07-15", "type": "string" }, - "total": { - "example": 3955, - "type": "integer" + "revenue": { + "type": "number" }, - "total_pages": { - "example": 40, + "runtime_minutes": { + "example": 148, "type": "integer" - } - }, - "type": "object" - }, - "whataburger.StoreAddress": { - "properties": { - "city": { - "example": "ABILENE", - "type": "string" }, - "country": { - "example": "US", + "source_url": { "type": "string" }, - "line1": { - "example": "1625 TX HWY 351", + "status": { + "example": "Released", "type": "string" }, - "line2": { + "tagline": { "type": "string" }, - "postal_code": { - "example": "79601", + "title": { + "example": "Inception", "type": "string" }, - "region": { - "example": "TX", + "top_crew": { + "items": { + "$ref": "#/definitions/tmdb.CrewCredit" + }, + "type": "array" + }, + "uri": { "type": "string" + }, + "year": { + "example": 2010, + "type": "integer" } }, "type": "object" }, - "whataburger.StoreHours": { + "tmdb.PersonListResponse": { "properties": { - "closed": { - "description": "Closed is true when Whataburger publishes the day with no open interval.", - "example": false, + "has_next_page": { "type": "boolean" }, - "closes": { - "example": "23:59", - "type": "string" + "page": { + "type": "integer" }, - "day_of_week": { - "example": "Monday", - "type": "string" + "people": { + "items": { + "$ref": "#/definitions/tmdb.PersonRef" + }, + "type": "array" }, - "opens": { - "example": "00:00", + "source_url": { "type": "string" } }, "type": "object" }, - "whataburger.StoreResponse": { + "tmdb.PersonRef": { "properties": { - "address": { - "$ref": "#/definitions/whataburger.StoreAddress" - }, - "fetched_at": { + "id": { "type": "string" }, - "google_place_id": { + "known_for": { "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.", + "profile_url": { "type": "string" }, - "phone_number": { - "example": "(325) 692-8480", + "uri": { + "type": "string" + } + }, + "type": "object" + }, + "tmdb.PersonResponse": { + "properties": { + "biography": { "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)." + "birth_date": { + "example": "1956-07-09", + "type": "string" }, - "services": { - "description": "Services are the restaurant services Whataburger publishes for this\nlocation, e.g. \"Curbside\", \"Delivery\".", + "filmography": { "items": { - "type": "string" + "$ref": "#/definitions/tmdb.FilmographyCredit" }, "type": "array" }, - "source_url": { + "id": { + "example": "31", "type": "string" }, - "store_id": { - "example": "1403", + "name": { + "example": "Tom Hanks", "type": "string" }, - "timezone": { - "example": "America/Chicago", + "photo_url": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "uri": { "type": "string" } }, "type": "object" }, - "whataburger.StoreServiceHours": { + "tmdb.Rating": { "properties": { - "curbside": { - "items": { - "$ref": "#/definitions/whataburger.StoreHours" - }, - "type": "array" - }, - "delivery": { - "items": { - "$ref": "#/definitions/whataburger.StoreHours" - }, - "type": "array" + "average": { + "example": 8.372, + "type": "number" }, - "dine_in": { - "items": { - "$ref": "#/definitions/whataburger.StoreHours" - }, - "type": "array" + "count": { + "example": 39524, + "type": "integer" }, - "drive_thru": { - "items": { - "$ref": "#/definitions/whataburger.StoreHours" - }, - "type": "array" + "review_count": { + "example": 8, + "type": "integer" } }, "type": "object" }, - "whataburger.sitemapResponseDoc": { + "tmdb.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", + "has_next_page": { + "type": "boolean" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/whataburger.SitemapResponse" + "query": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "results": { + "items": { + "$ref": "#/definitions/tmdb.SearchResult" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "type": { + "type": "string" } }, "type": "object" }, - "whataburger.storeResponseDoc": { + "tmdb.SearchResult": { "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/whataburger.StoreResponse" + "overview": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "release_date": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "example": "movie", + "type": "string" + }, + "uri": { + "type": "string" } }, "type": "object" }, - "whatnot.BrowseResponse": { + "tmdb.TVListResponse": { "properties": { "category": { "type": "string" }, + "has_next_page": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, "shows": { "items": { - "$ref": "#/definitions/whatnot.LiveShow" + "$ref": "#/definitions/tmdb.MediaRef" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "whatnot.CategoriesResponse": { + "tmdb.TVResponse": { "properties": { - "categories": { + "cast": { "items": { - "$ref": "#/definitions/whatnot.Category" + "$ref": "#/definitions/tmdb.CastCredit" }, "type": "array" - } - }, - "type": "object" - }, - "whatnot.Category": { - "properties": { - "id": { - "type": "string" }, - "name": { - "type": "string" + "countries": { + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { - "description": "e.g. \"trading_card_games\"", + "first_air_year": { + "example": 2008, + "type": "integer" + }, + "genres": { + "items": { + "type": "string" + }, + "type": "array" + }, + "homepage": { "type": "string" - } - }, - "type": "object" - }, - "whatnot.LiveProduct": { - "properties": { - "currency": { + }, + "id": { + "example": "1396", "type": "string" }, - "current_bid_cents": { + "last_air_year": { + "example": 2013, "type": "integer" }, - "current_bid_count": { + "number_of_episodes": { + "example": 62, "type": "integer" }, - "description": { + "original_language": { + "example": "English", "type": "string" }, - "id": { + "overview": { "type": "string" }, - "price_cents": { - "type": "integer" + "poster_url": { + "type": "string" }, - "quantity": { - "type": "integer" + "rating": { + "$ref": "#/definitions/tmdb.Rating" }, - "seller": { - "$ref": "#/definitions/whatnot.LiveSeller" + "source_url": { + "type": "string" }, "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", + "example": "Ended", "type": "string" }, - "title": { + "tagline": { "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": { + "title": { + "example": "Breaking Bad", "type": "string" }, - "products": { + "top_crew": { "items": { - "$ref": "#/definitions/whatnot.LiveProduct" + "$ref": "#/definitions/tmdb.CrewCredit" }, "type": "array" }, - "url": { + "uri": { "type": "string" } }, "type": "object" }, - "whatnot.LiveSeller": { + "tmdb.collectionResponseDoc": { "properties": { - "rating": { - "type": "number" - }, - "review_count": { + "code": { + "example": 200, "type": "integer" }, - "username": { + "data": { + "$ref": "#/definitions/tmdb.CollectionResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "whatnot.LiveShow": { + "tmdb.genresResponseDoc": { "properties": { - "id": { - "description": "pass as the :id path param to /whatnot/live/{id}", - "type": "string" - }, - "seller_username": { - "type": "string" - }, - "start_time_ms": { + "code": { + "example": 200, "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" + "data": { + "$ref": "#/definitions/tmdb.GenresResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "whatnot.SellerProfile": { + "tmdb.movieListResponseDoc": { "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": { + "code": { + "example": 200, "type": "integer" }, - "sold_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/tmdb.MovieListResponse" }, - "username": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "whatnot.SellerResponse": { + "tmdb.movieResponseDoc": { "properties": { - "has_more": { - "type": "boolean" - }, - "next_cursor": { - "type": "string" - }, - "profile": { - "$ref": "#/definitions/whatnot.SellerProfile" + "code": { + "example": 200, + "type": "integer" }, - "shows": { - "items": { - "$ref": "#/definitions/whatnot.LiveShow" - }, - "type": "array" + "data": { + "$ref": "#/definitions/tmdb.MovieResponse" }, - "total_count": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "whatnot.browseResponseDoc": { + "tmdb.personListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/whatnot.BrowseResponse" + "$ref": "#/definitions/tmdb.PersonListResponse" }, "msg": { "example": "OK", @@ -180877,14 +180274,14 @@ }, "type": "object" }, - "whatnot.categoriesResponseDoc": { + "tmdb.personResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/whatnot.CategoriesResponse" + "$ref": "#/definitions/tmdb.PersonResponse" }, "msg": { "example": "OK", @@ -180893,14 +180290,14 @@ }, "type": "object" }, - "whatnot.liveResponseDoc": { + "tmdb.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/whatnot.LiveResponse" + "$ref": "#/definitions/tmdb.SearchResponse" }, "msg": { "example": "OK", @@ -180909,14 +180306,14 @@ }, "type": "object" }, - "whatnot.sellerResponseDoc": { + "tmdb.tvListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/whatnot.SellerResponse" + "$ref": "#/definitions/tmdb.TVListResponse" }, "msg": { "example": "OK", @@ -180925,48 +180322,34 @@ }, "type": "object" }, - "wingstop.DeliveryStoreResponse": { + "tmdb.tvResponseDoc": { "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/tmdb.TVResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "wingstop.DirectoryChild": { + "tmz.AuthorArticle": { "properties": { - "is_store": { - "description": "IsStore is a convenience flag equivalent to Kind == \"store\".", - "example": false, - "type": "boolean" + "image_url": { + "type": "string" }, - "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", + "published_at": { "type": "string" }, - "name": { - "example": "Houston", + "summary": { "type": "string" }, - "path": { - "example": "us/tx/houston", + "title": { "type": "string" }, "url": { @@ -180975,86 +180358,60 @@ }, "type": "object" }, - "wingstop.DirectoryResponse": { + "tmz.AuthorResponse": { "properties": { - "children": { + "articles": { "items": { - "$ref": "#/definitions/wingstop.DirectoryChild" + "$ref": "#/definitions/tmz.AuthorArticle" }, "type": "array" }, - "count": { - "example": 48, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, "name": { "type": "string" }, - "path": { - "example": "us/tx", + "page": { + "type": "integer" + }, + "slug": { "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "wingstop.Flavor": { + "tokopedia.AutocompleteResponse": { "properties": { - "description": { - "type": "string" - }, - "heat_scale": { - "description": "HeatScale is Wingstop's own 0 (no heat) to 5 (hottest) rating.", - "example": 1, - "type": "integer" + "browser_rendered": { + "type": "boolean" }, - "id": { + "fetched_at": { "type": "string" }, - "image_url": { + "query": { "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" + "suggestions": { + "items": { + "$ref": "#/definitions/tokopedia.Suggestion" + }, + "type": "array" } }, "type": "object" }, - "wingstop.FlavorsResponse": { + "tokopedia.CategoryResponse": { "properties": { - "count": { - "example": 16, - "type": "integer" + "category_path": { + "type": "string" }, "fetched_at": { "type": "string" }, - "flavors": { + "products": { "items": { - "$ref": "#/definitions/wingstop.Flavor" + "$ref": "#/definitions/tokopedia.Product" }, "type": "array" }, @@ -181064,36 +180421,34 @@ }, "type": "object" }, - "wingstop.MenuCategory": { + "tokopedia.HomeResponse": { "properties": { - "id": { - "type": "string" + "browser_rendered": { + "type": "boolean" }, - "image_url": { + "fetched_at": { "type": "string" }, - "name": { - "example": "Wing Combos", - "type": "string" + "has_next_page": { + "type": "boolean" + }, + "page": { + "type": "integer" }, "products": { "items": { - "$ref": "#/definitions/wingstop.MenuProduct" + "$ref": "#/definitions/tokopedia.Product" }, "type": "array" }, - "slug": { - "example": "wing-combos", - "type": "string" + "tab": { + "$ref": "#/definitions/tokopedia.HomeTab" } }, "type": "object" }, - "wingstop.MenuProduct": { + "tokopedia.HomeTab": { "properties": { - "description": { - "type": "string" - }, "id": { "type": "string" }, @@ -181101,597 +180456,302 @@ "type": "string" }, "name": { - "example": "6 pc Wing Combo", "type": "string" - }, - "slug": { - "example": "6-wing-combo", + } + }, + "type": "object" + }, + "tokopedia.HomeTabsResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "variants": { - "description": "Variants is always non-empty: one entry for a standalone item, one\nper size/preparation for a family.", + "tabs": { "items": { - "$ref": "#/definitions/wingstop.MenuVariant" + "$ref": "#/definitions/tokopedia.HomeTab" }, "type": "array" } }, "type": "object" }, - "wingstop.MenuResponse": { + "tokopedia.Product": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/wingstop.MenuCategory" - }, - "type": "array" - }, - "fetched_at": { + "image_url": { "type": "string" }, - "path": { + "name": { "type": "string" }, - "service_mode": { - "example": "carryout", - "type": "string" + "price": { + "type": "integer" }, - "source_url": { + "price_text": { "type": "string" }, - "store": { - "$ref": "#/definitions/wingstop.MenuStoreSummary" - } - }, - "type": "object" - }, - "wingstop.MenuStoreSummary": { - "properties": { - "currency_code": { - "example": "USD", + "rating": { "type": "string" }, - "lead_time_minutes": { - "example": 10, - "type": "integer" - }, - "name": { - "example": "Wingstop Houston Jones", + "shop_city": { "type": "string" }, - "slug": { - "example": "wingstop-128-houston-tx-77065", + "shop_name": { "type": "string" }, - "store_id": { - "example": "128", + "url": { "type": "string" - }, - "tax_rate_percent": { - "example": 8.25, - "type": "number" } }, "type": "object" }, - "wingstop.MenuVariant": { + "tokopedia.ProductDetail": { "properties": { + "browser_rendered": { + "type": "boolean" + }, "description": { "type": "string" }, - "id": { + "discount_percent": { "type": "string" }, - "image_url": { + "fetched_at": { "type": "string" }, - "is_default": { - "type": "boolean" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "is_limited_time": { - "type": "boolean" + "name": { + "type": "string" }, - "is_new": { - "type": "boolean" - }, - "is_popular": { - "type": "boolean" + "original_price": { + "type": "string" }, - "max_calories": { - "example": 1330, + "price": { "type": "integer" }, - "min_calories": { - "example": 430, - "type": "integer" + "price_text": { + "type": "string" }, - "name": { - "example": "6 pc Boneless Combo", + "product_id": { "type": "string" }, - "price": { - "example": 10.69, - "type": "number" + "product_key": { + "type": "string" }, - "short_name": { + "shop_domain": { "type": "string" }, - "slug": { - "example": "6-boneless-combo", + "source_url": { "type": "string" } }, "type": "object" }, - "wingstop.NearbyResponse": { + "tokopedia.ReviewFilterAvailability": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "radius_miles": { - "example": 20, - "type": "integer" + "available": { + "type": "boolean" }, - "source_url": { + "key": { "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/wingstop.NearbyStore" - }, - "type": "array" } }, "type": "object" }, - "wingstop.NearbyStore": { + "tokopedia.ReviewFiltersResponse": { "properties": { - "address": { - "$ref": "#/definitions/wingstop.StoreAddress" + "browser_rendered": { + "type": "boolean" }, - "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" - ], + "fetched_at": { + "type": "string" + }, + "media": { "items": { - "type": "string" + "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" }, "type": "array" }, - "distance_miles": { - "example": 0.6, - "type": "number" + "product_id": { + "type": "string" }, - "fulfillment_services": { - "description": "FulfillmentServices are this store's enabled handoff modes, e.g.\n\"carryout\", \"delivery\".", + "ratings": { "items": { - "type": "string" + "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" }, "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.", + "topics": { "items": { - "$ref": "#/definitions/wingstop.StoreHours" + "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" }, "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": { + "tokopedia.SearchFilter": { "properties": { - "city": { - "example": "Houston", - "type": "string" - }, - "country": { - "example": "US", - "type": "string" - }, - "line1": { - "example": "9804 Jones Rd Ste A", - "type": "string" - }, - "line2": { - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/tokopedia.SearchFilterOption" + }, + "type": "array" }, - "postal_code": { - "example": "77065", + "placeholder": { "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, + "searchable": { "type": "boolean" }, - "closes": { - "example": "01:00", - "type": "string" - }, - "day_of_week": { - "example": "Monday", + "template": { "type": "string" }, - "opens": { - "example": "10:30", + "title": { "type": "string" } }, "type": "object" }, - "wingstop.StoreResponse": { + "tokopedia.SearchFilterOption": { "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\".", + "children": { "items": { - "type": "string" + "$ref": "#/definitions/tokopedia.SearchFilterOption" }, "type": "array" }, - "google_place_id": { + "description": { "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", + "hex_color": { "type": "string" }, - "longitude": { - "example": -95.5838414, - "type": "number" - }, - "name": { - "example": "Wingstop", + "icon": { "type": "string" }, - "path": { - "description": "Path is the canonical /wingstop/store path for this restaurant, as\nrequested.", + "input_type": { "type": "string" }, - "phone_number": { - "example": "+12814779464", + "key": { "type": "string" }, - "price_range": { - "example": "$", + "max": { "type": "string" }, - "service_hours": { - "allOf": [ - { - "$ref": "#/definitions/wingstop.StoreServiceHours" - } - ], - "description": "ServiceHours is the same week broken down per fulfillment channel --\nsee StoreServiceHours." + "min": { + "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "store_id": { - "example": "128", + "total_data": { "type": "string" }, - "timezone": { - "example": "America/Chicago", + "value": { "type": "string" } }, "type": "object" }, - "wingstop.StoreServiceHours": { + "tokopedia.SearchFiltersResponse": { "properties": { - "delivery": { - "items": { - "$ref": "#/definitions/wingstop.StoreHours" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "drive_through": { + "filters": { "items": { - "$ref": "#/definitions/wingstop.StoreHours" + "$ref": "#/definitions/tokopedia.SearchFilter" }, "type": "array" }, - "pickup": { - "items": { - "$ref": "#/definitions/wingstop.StoreHours" - }, - "type": "array" + "query": { + "type": "string" }, - "takeout": { + "sorts": { "items": { - "$ref": "#/definitions/wingstop.StoreHours" + "$ref": "#/definitions/tokopedia.SearchSort" }, "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": { + "tokopedia.SearchResponse": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "browser_rendered": { + "type": "boolean" }, - "description": { + "fetched_at": { "type": "string" }, - "image_url": { - "type": "string" + "page": { + "type": "integer" }, - "paragraphs": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/tokopedia.Product" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "title": { + "query": { "type": "string" }, - "updated_at": { - "type": "string" + "sort": { + "type": "integer" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "wired.AuthorArticle": { + "tokopedia.SearchSort": { "properties": { - "published_at": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { + "apply_filter": { "type": "string" - } - }, - "type": "object" - }, - "wired.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/wired.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" }, - "image_url": { + "input_type": { "type": "string" }, - "job_title": { + "key": { "type": "string" }, "name": { "type": "string" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { + "value": { "type": "string" } }, "type": "object" }, - "wired.HeadlinesResponse": { + "tokopedia.Suggestion": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "is_ad": { + "type": "boolean" }, - "section": { + "text": { + "type": "string" + }, + "url": { "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": { + "tokopedia.autocompleteResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.ArticleResponse" + "$ref": "#/definitions/tokopedia.AutocompleteResponse" }, "msg": { "example": "OK", @@ -181700,14 +180760,14 @@ }, "type": "object" }, - "wired.authorResponseDoc": { + "tokopedia.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.AuthorResponse" + "$ref": "#/definitions/tokopedia.CategoryResponse" }, "msg": { "example": "OK", @@ -181716,14 +180776,14 @@ }, "type": "object" }, - "wired.headlinesResponseDoc": { + "tokopedia.homeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.HeadlinesResponse" + "$ref": "#/definitions/tokopedia.HomeResponse" }, "msg": { "example": "OK", @@ -181732,14 +180792,14 @@ }, "type": "object" }, - "wired.newsResponseDoc": { + "tokopedia.homeTabsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.NewsResponse" + "$ref": "#/definitions/tokopedia.HomeTabsResponse" }, "msg": { "example": "OK", @@ -181748,14 +180808,14 @@ }, "type": "object" }, - "wired.sectionsResponseDoc": { + "tokopedia.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.SectionsResponse" + "$ref": "#/definitions/tokopedia.ProductDetail" }, "msg": { "example": "OK", @@ -181764,1550 +180824,1520 @@ }, "type": "object" }, - "wish.CategoriesResponse": { + "tokopedia.reviewFiltersResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/wish.Category" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/tokopedia.ReviewFiltersResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "wish.Category": { + "tokopedia.searchFiltersResponseDoc": { "properties": { - "filter_groups": { - "items": { - "$ref": "#/definitions/wish.FilterGroup" - }, - "type": "array" - }, - "filter_id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "is_main_tab": { - "type": "boolean" + "data": { + "$ref": "#/definitions/tokopedia.SearchFiltersResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "wish.Filter": { + "tokopedia.searchResponseDoc": { "properties": { - "default_selected": { - "type": "boolean" - }, - "filter_id": { - "type": "string" - }, - "is_quick_filter": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "is_toggle": { - "type": "boolean" + "data": { + "$ref": "#/definitions/tokopedia.SearchResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "wish.FilterGroup": { + "tomsguide.AuthorResponse": { "properties": { - "filters": { + "articles": { "items": { - "$ref": "#/definitions/wish.Filter" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "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": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "is_sold_out": { + "has_next_page": { "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": { + "job_title": { "type": "string" }, - "url": { + "name": { "type": "string" }, - "variations": { - "items": { - "$ref": "#/definitions/wish.ProductVariation" - }, - "type": "array" - } - }, - "type": "object" - }, - "wish.ProductReviewsResponse": { - "properties": { - "count": { + "page": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "product_id": { + "slug": { "type": "string" }, - "result_count": { - "type": "integer" - }, - "reviews": { + "social_links": { "items": { - "$ref": "#/definitions/wish.Review" + "$ref": "#/definitions/tomsguide.AuthorSocialLink" }, "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "wish.ProductSummary": { + "tomsguide.AuthorSocialLink": { "properties": { - "currency_code": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "merchant_id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, - "product_id": { + "platform": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, "url": { "type": "string" } }, "type": "object" }, - "wish.ProductVariation": { + "tomshardware.AuthorResponse": { "properties": { - "color": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "currency_code": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "inventory": { - "type": "integer" + "has_next_page": { + "type": "boolean" }, - "merchant_id": { + "job_title": { "type": "string" }, - "merchant_name": { + "name": { "type": "string" }, - "merchant_rating": { - "type": "number" - }, - "price": { - "type": "number" + "page": { + "type": "integer" }, - "size": { + "slug": { "type": "string" }, - "variation_id": { + "social_links": { + "items": { + "$ref": "#/definitions/tomshardware.AuthorSocialLink" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "wish.RelatedItem": { + "tomshardware.AuthorSocialLink": { "properties": { - "currency_code": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "merchant_id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, - "product_id": { + "platform": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, "url": { "type": "string" } }, "type": "object" }, - "wish.RelatedItemsResponse": { + "torontostar.AuthorArticle": { "properties": { - "fetched_at": { + "published_at": { "type": "string" }, - "product_id": { + "summary": { "type": "string" }, - "shelves": { - "items": { - "$ref": "#/definitions/wish.RelatedShelf" - }, - "type": "array" + "title": { + "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "wish.RelatedShelf": { + "torontostar.AuthorResponse": { "properties": { - "feed_mode": { - "example": "similar", - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "items": { + "articles": { "items": { - "$ref": "#/definitions/wish.RelatedItem" + "$ref": "#/definitions/torontostar.AuthorArticle" }, "type": "array" }, - "subtitle": { - "example": "Similar Items with 5-7 Day Shipping", + "bio": { "type": "string" }, - "title": { - "example": "Faster Shipping", - "type": "string" - } - }, - "type": "object" - }, - "wish.Review": { - "properties": { - "color": { + "image_url": { "type": "string" }, - "comment": { + "job_title": { "type": "string" }, - "created_at": { + "location": { "type": "string" }, - "downvote_count": { - "type": "integer" - }, - "id": { + "name": { "type": "string" }, - "image_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "is_wish_star": { - "type": "boolean" - }, - "rating": { - "type": "integer" - }, - "title": { + "slug": { "type": "string" }, - "upvote_count": { - "type": "integer" - }, - "user_country_code": { + "topics": { "type": "string" }, - "user_name": { + "url": { "type": "string" } }, "type": "object" }, - "wish.SearchResponse": { + "townhall.AuthorArticle": { "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": { + "image_url": { "type": "string" }, - "result_count": { - "type": "integer" - }, - "source_url": { + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "wish.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" }, - "wish.categoriesResponseDoc": { + "townhall.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wish.CategoriesResponse" + "articles": { + "items": { + "$ref": "#/definitions/townhall.AuthorArticle" + }, + "type": "array" }, - "msg": { - "example": "OK", + "bio": { "type": "string" - } - }, - "type": "object" - }, - "wish.productDetailResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wish.ProductDetailResponse" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "wish.productReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wish.ProductReviewsResponse" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "wish.relatedItemsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/wish.RelatedItemsResponse" - }, - "msg": { - "example": "OK", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "wish.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wish.SearchResponse" }, - "msg": { - "example": "OK", + "url": { "type": "string" - } - }, - "type": "object" - }, - "wish.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wish.SuggestResponse" }, - "msg": { - "example": "OK", + "x_url": { "type": "string" } }, "type": "object" }, - "wolt.AvailabilityResponse": { + "trends.ExploreQueriesResponse": { "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" + "category": { + "example": 0, + "type": "integer" }, - "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.", + "geo": { + "example": "US", "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.", + "hl": { + "example": "en-US", "type": "string" }, - "estimates": { + "keywords": { "items": { - "$ref": "#/definitions/wolt.DeliveryEstimate" + "type": "string" }, "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": { + "property": { "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.", + "queries": { "items": { - "type": "string" + "$ref": "#/definitions/trends.RelatedGroup" }, "type": "array" }, - "self_delivery": { - "type": "boolean" - }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "wolt.CategoryFilter": { - "properties": { - "count": { - "type": "integer" - }, - "id": { + "query_type": { + "example": "top", "type": "string" }, - "name": { + "time_range": { + "example": "today 12-m", "type": "string" - } - }, - "type": "object" - }, - "wolt.CitiesResponse": { - "properties": { - "cities": { - "items": { - "$ref": "#/definitions/wolt.City" - }, - "type": "array" }, - "country": { + "type": { + "example": "web", "type": "string" }, - "total_results": { + "tz": { + "example": 0, "type": "integer" } }, "type": "object" }, - "wolt.City": { + "trends.ExploreRequest": { "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.", + "category": { + "example": 0, "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": { + "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" }, - "restaurants": { + "hl": { + "example": "en-US", + "type": "string" + }, + "keywords": { + "example": [ + "chatgpt", + "openai" + ], "items": { - "$ref": "#/definitions/wolt.Restaurant" + "type": "string" }, "type": "array" }, - "title": { + "property": { + "example": "", "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": { + "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" }, - "formatted_times": { + "type": { + "enum": [ + "web", + "image", + "news", + "youtube", + "shopping" + ], + "example": "web", "type": "string" + }, + "tz": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "wolt.DeliveryEstimate": { + "trends.ExploreResponse": { "properties": { - "label": { - "type": "string" - }, - "max_minutes": { + "category": { + "example": 0, "type": "integer" }, - "method": { + "geo": { + "example": "US", "type": "string" }, - "min_minutes": { - "type": "integer" + "hl": { + "example": "en-US", + "type": "string" }, - "minutes": { - "type": "integer" - } - }, - "type": "object" - }, - "wolt.FiltersResponse": { - "properties": { - "categories": { + "interest_by_region": { "items": { - "$ref": "#/definitions/wolt.CategoryFilter" + "$ref": "#/definitions/trends.RegionInterest" }, "type": "array" }, - "total_results": { - "type": "integer" - } - }, - "type": "object" - }, - "wolt.MenuCategory": { - "properties": { - "items": { + "interest_over_time": { "items": { - "$ref": "#/definitions/wolt.MenuItem" + "$ref": "#/definitions/trends.InterestPoint" }, "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": { + "keywords": { "items": { "type": "string" }, "type": "array" }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { + "property": { "type": "string" }, - "original_price": { - "type": "number" - }, - "price": { - "type": "number" - }, - "tags": { + "related_queries": { "items": { - "type": "string" + "$ref": "#/definitions/trends.RelatedGroup" }, "type": "array" }, - "unit_info": { - "type": "string" + "related_topics": { + "items": { + "$ref": "#/definitions/trends.RelatedGroup" + }, + "type": "array" }, - "unit_price": { - "$ref": "#/definitions/wolt.UnitPrice" - } - }, - "type": "object" - }, - "wolt.MenuResponse": { - "properties": { - "categories": { + "rising_queries": { "items": { - "$ref": "#/definitions/wolt.MenuCategory" + "$ref": "#/definitions/trends.RelatedGroup" }, "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\".", + "time_range": { + "example": "today 12-m", "type": "string" }, - "restaurant": { - "$ref": "#/definitions/wolt.RestaurantResponse" - } - }, - "type": "object" - }, - "wolt.MenuSearchResponse": { - "properties": { - "items": { + "top_queries": { "items": { - "$ref": "#/definitions/wolt.MenuItem" + "$ref": "#/definitions/trends.RelatedGroup" }, "type": "array" }, - "query": { - "type": "string" - }, - "slug": { + "type": { + "example": "web", "type": "string" }, - "total_results": { + "tz": { + "example": 0, "type": "integer" } }, "type": "object" }, - "wolt.OpenStatus": { + "trends.InterestByRegionResponse": { "properties": { - "is_open": { - "type": "boolean" - }, - "label": { - "type": "string" - }, - "next_close": { - "type": "string" + "category": { + "example": 0, + "type": "integer" }, - "next_open": { + "geo": { + "example": "US", "type": "string" }, - "now": { + "hl": { + "example": "en-US", "type": "string" }, - "previous_open": { - "type": "string" - } - }, - "type": "object" - }, - "wolt.Restaurant": { - "properties": { - "address": { - "type": "string" + "interest_by_region": { + "items": { + "$ref": "#/definitions/trends.RegionInterest" + }, + "type": "array" }, - "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.", + "keywords": { "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": { + "property": { "type": "string" }, - "latitude": { - "description": "Latitude/Longitude are the venue's own coordinates.", - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { + "time_range": { + "example": "today 12-m", "type": "string" }, - "online": { - "type": "boolean" - }, - "price_range": { - "type": "integer" - }, - "product_line": { + "type": { + "example": "web", "type": "string" }, - "rating_count": { + "tz": { + "example": 0, "type": "integer" - }, - "rating_score": { - "type": "number" - }, - "short_description": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "wolt.RestaurantResponse": { + "trends.InterestOverTimeResponse": { "properties": { - "address": { - "type": "string" + "category": { + "example": 0, + "type": "integer" }, - "brand_name": { + "geo": { + "example": "US", "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.", + "hl": { + "example": "en-US", "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.", + "interest_over_time": { "items": { - "$ref": "#/definitions/wolt.VenueCategory" + "$ref": "#/definitions/trends.InterestPoint" }, "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": { + "keywords": { "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": { + "property": { "type": "string" }, - "pickup_friendly": { - "type": "boolean" - }, - "post_code": { + "time_range": { + "example": "today 12-m", "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": { + "example": "web", "type": "string" }, - "rating_count": { - "type": "integer" - }, - "rating_score": { - "type": "number" - }, - "service_fee_max": { - "type": "integer" - }, - "service_fee_min": { - "type": "integer" - }, - "service_fee_percent": { + "tz": { + "example": 0, "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": { + "trends.InterestPoint": { "properties": { - "category": { + "formatted_axis_time": { + "example": "Apr 2026", "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": { + "formatted_time": { + "example": "Apr 2026", "type": "string" }, - "query": { + "time": { + "example": "1777075200", "type": "string" }, - "restaurants": { + "values": { "items": { - "$ref": "#/definitions/wolt.Restaurant" + "$ref": "#/definitions/trends.TrendValue" }, "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": { + "trends.RegionInterest": { "properties": { - "id": { + "geo_code": { + "example": "US-CA", "type": "string" }, - "name": { + "geo_name": { + "example": "California", "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\"" + "values": { + "items": { + "$ref": "#/definitions/trends.TrendValue" + }, + "type": "array" } }, "type": "object" }, - "wolt.searchResponseDoc": { + "trends.RelatedGroup": { "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" + "items": { + "items": { + "$ref": "#/definitions/trends.RelatedItem" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "keyword": { + "example": "chatgpt", + "type": "string" } }, "type": "object" }, - "wsj.ArticleResponse": { + "trends.RelatedItem": { "properties": { - "archive_timestamp": { + "formatted_value": { + "example": "100", "type": "string" }, - "archive_url": { + "link": { + "example": "/trends/explore?q=chatgpt", "type": "string" }, - "author": { + "query": { + "example": "chatgpt login", "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { + "topic_mid": { + "example": "/g/11khcfz0y2", "type": "string" }, - "title": { + "topic_title": { + "example": "ChatGPT", "type": "string" }, - "url": { + "topic_type": { + "example": "Topic", "type": "string" }, - "word_count": { + "value": { + "example": 100, "type": "integer" } }, "type": "object" }, - "wsj.AuthorArticle": { + "trends.RelatedTopicsResponse": { "properties": { - "published_at": { - "type": "string" + "category": { + "example": 0, + "type": "integer" }, - "title": { + "geo": { + "example": "US", "type": "string" }, - "url": { + "hl": { + "example": "en-US", "type": "string" - } - }, - "type": "object" - }, - "wsj.AuthorResponse": { - "properties": { - "articles": { + }, + "keywords": { "items": { - "$ref": "#/definitions/wsj.AuthorArticle" + "type": "string" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { + "property": { "type": "string" }, - "social_accounts": { + "related_topics": { "items": { - "$ref": "#/definitions/wsj.AuthorSocialAccount" + "$ref": "#/definitions/trends.RelatedGroup" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wsj.AuthorSocialAccount": { - "properties": { - "platform": { + "time_range": { + "example": "today 12-m", "type": "string" }, - "url": { + "type": { + "example": "web", "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, + "tz": { + "example": 0, "type": "integer" - }, - "data": { - "$ref": "#/definitions/wsj.AuthorResponse" - }, - "msg": { - "example": "OK", - "type": "string" } }, "type": "object" }, - "x.Metrics": { + "trends.TrendCategory": { "properties": { - "bookmarks": { - "type": "integer" - }, - "likes": { - "type": "integer" - }, - "replies": { - "type": "integer" - }, - "reposts": { + "id": { + "example": 0, "type": "integer" }, - "views": { - "type": "integer" + "name": { + "example": "All", + "type": "string" } }, "type": "object" }, - "x.Post": { + "trends.TrendValue": { "properties": { - "author": { - "$ref": "#/definitions/x.User" - }, - "created_at": { - "type": "string" - }, - "id": { + "formatted_value": { + "example": "87", "type": "string" }, - "metrics": { - "$ref": "#/definitions/x.Metrics" - }, - "quoted": { - "$ref": "#/definitions/x.PostQuote" + "has_data": { + "example": true, + "type": "boolean" }, - "text": { + "keyword": { + "example": "chatgpt", "type": "string" }, - "url": { - "type": "string" + "value": { + "example": 87, + "type": "integer" } }, "type": "object" }, - "x.PostQuote": { + "trends.TrendingArticle": { "properties": { - "author": { - "$ref": "#/definitions/x.User" - }, - "created_at": { + "source": { + "example": "Example News", "type": "string" }, - "id": { + "time": { + "example": "2 hours ago", "type": "string" }, - "text": { + "title": { + "example": "Why chatgpt is trending", "type": "string" }, "url": { + "example": "https://example.com/news", "type": "string" } }, "type": "object" }, - "x.Profile": { + "trends.TrendingDetailRequest": { "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" + "category": { + "example": 0, + "type": "integer" }, - "avatar_url": { + "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" }, - "banner_url": { + "hl": { + "example": "en-US", "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.", + "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" + }, + "trends.TrendingItem": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/trends.TrendingArticle" }, "type": "array" }, - "created_at": { + "explore_url": { + "example": "https://trends.google.com/trends/explore?q=chatgpt&geo=US", "type": "string" }, - "description": { + "query": { + "example": "chatgpt", "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" + "rank": { + "example": 1, + "type": "integer" }, - "external_url": { + "related_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "share_url": { "type": "string" }, - "id": { + "started_unix": { + "example": 1777075200, + "type": "integer" + }, + "status": { + "example": "active", "type": "string" }, - "is_blue_verified": { - "type": "boolean" + "title": { + "example": "chatgpt", + "type": "string" }, - "is_default_profile_image": { - "description": "IsDefaultProfileImage marks accounts still on the placeholder avatar --\na strong shell/abandoned-account signal.", - "type": "boolean" + "traffic": { + "example": "200K+", + "type": "string" }, - "is_protected": { - "type": "boolean" + "updated_unix": { + "example": 1777078800, + "type": "integer" + } + }, + "type": "object" + }, + "trends.TrendingResponse": { + "properties": { + "category": { + "example": 0, + "type": "integer" }, - "is_unavailable": { - "type": "boolean" + "geo": { + "example": "US", + "type": "string" }, - "location": { + "hl": { + "example": "en-US", "type": "string" }, - "metrics": { - "$ref": "#/definitions/x.ProfileMetrics" + "items": { + "items": { + "$ref": "#/definitions/trends.TrendingItem" + }, + "type": "array" }, - "name": { + "sort_by": { + "example": "relevance", "type": "string" }, - "url": { + "status": { + "example": "all", "type": "string" }, - "username": { + "time_range": { + "example": "24h", "type": "string" }, - "verified_type": { - "description": "VerifiedType distinguishes the flavour of verification (e.g. \"Business\",\n\"Government\"); empty for ordinary/blue accounts.", + "tz": { + "example": 0, + "type": "integer" + }, + "window": { + "example": "24h", "type": "string" } }, "type": "object" }, - "x.ProfileMetrics": { + "trends.TrendsCategoriesResponse": { "properties": { - "followers": { - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/trends.TrendCategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "trends.TrendsEnumsResponse": { + "properties": { + "explore_time_ranges": { + "items": { + "type": "string" + }, + "type": "array" }, - "following": { - "type": "integer" + "locations": { + "items": { + "type": "string" + }, + "type": "array" }, - "likes": { - "type": "integer" + "search_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "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" + "trend_statuses": { + "items": { + "type": "string" + }, + "type": "array" }, - "media": { - "type": "integer" + "trending_categories": { + "items": { + "$ref": "#/definitions/trends.TrendCategory" + }, + "type": "array" }, - "posts": { - "type": "integer" + "trending_sort_bys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trending_time_ranges": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "x.ProfilePosts": { + "trends.TrendsLocationsResponse": { "properties": { - "count": { - "type": "integer" - }, - "posts": { + "locations": { "items": { - "$ref": "#/definitions/x.Post" + "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "trends.exploreQueriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/trends.ExploreQueriesResponse" }, - "username": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "x.User": { + "trends.exploreResponseDoc": { "properties": { - "avatar_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "banner_url": { - "type": "string" + "data": { + "$ref": "#/definitions/trends.ExploreResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "trends.interestByRegionResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_blue_verified": { - "type": "boolean" - }, - "is_protected": { - "type": "boolean" + "data": { + "$ref": "#/definitions/trends.InterestByRegionResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "trends.interestOverTimeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/trends.InterestOverTimeResponse" }, - "username": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "x.postResponseDoc": { + "trends.relatedTopicsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/x.Post" + "$ref": "#/definitions/trends.RelatedTopicsResponse" }, "msg": { "example": "OK", @@ -183316,14 +182346,14 @@ }, "type": "object" }, - "x.profilePostsResponseDoc": { + "trends.trendingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/x.ProfilePosts" + "$ref": "#/definitions/trends.TrendingResponse" }, "msg": { "example": "OK", @@ -183332,14 +182362,14 @@ }, "type": "object" }, - "x.profileResponseDoc": { + "trends.trendsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/x.Profile" + "$ref": "#/definitions/trends.TrendsCategoriesResponse" }, "msg": { "example": "OK", @@ -183348,583 +182378,711 @@ }, "type": "object" }, - "xbox.BrowseResponse": { + "trends.trendsEnumsResponseDoc": { "properties": { - "has_more": { - "example": true, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/xbox.GameSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/trends.TrendsEnumsResponse" }, - "next_cursor": { + "msg": { + "example": "OK", "type": "string" - }, - "total_items": { - "example": 17620, - "type": "integer" } }, "type": "object" }, - "xbox.CollectionResponse": { + "trends.trendsLocationsResponseDoc": { "properties": { - "has_more": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "TopFreeGames", - "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/xbox.GameSummary" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "next_cursor": { - "type": "string" + "data": { + "$ref": "#/definitions/trends.TrendsLocationsResponse" }, - "title": { - "example": "Top free games", + "msg": { + "example": "OK", "type": "string" - }, - "total_items": { - "example": 500, - "type": "integer" } }, "type": "object" }, - "xbox.ContentRating": { + "tripadvisor.AutocompleteResponse": { "properties": { - "age": { - "example": 17, - "type": "integer" - }, - "board": { - "example": "ESRB", + "locale": { + "example": "en-HK", "type": "string" }, - "description": { - "example": "For ages 17 and up", + "query": { + "example": "hong kong", "type": "string" }, - "descriptors": { - "example": [ - "[\"Blood and Gore\"", - "\"Intense Violence\"]" - ], + "results": { "items": { - "type": "string" + "$ref": "#/definitions/tripadvisor.SearchItem" }, "type": "array" }, - "image_url": { - "type": "string" - }, - "rating": { - "example": "MATURE 17+", - "type": "string" + "scope_geo_id": { + "example": 60763, + "type": "integer" } }, "type": "object" }, - "xbox.GameDetail": { + "tripadvisor.EnumsResponse": { "properties": { - "available_on": { + "attraction_categories": { "example": [ - "[\"XboxSeriesX|S\"", - "\"PC\"]" + "attraction", + "tour", + "day_trip" ], "items": { "type": "string" }, "type": "array" }, - "average_rating": { - "example": 4.5, - "type": "number" - }, - "box_art_url": { - "type": "string" + "attraction_category_ids": { + "additionalProperties": { + "type": "string" + }, + "example": { + "day_trip": "c63", + "tour": "c42" + }, + "type": "object" }, - "categories": { + "currencies": { "example": [ - "[\"Shooter\"]" + "HKD", + "USD", + "EUR" ], "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": { + "filter_ids": { "example": [ - "[\"CFQ7TTC0KHS0\"]" + "class", + "ufe" ], "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" + "hotel_amenities": { + "example": [ + 9176, + 9179 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "short_description": { - "type": "string" + "hotel_classes": { + "example": [ + 1, + 2, + 3, + 4, + 5 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "title": { - "example": "Halo Infinite", - "type": "string" + "languages": { + "example": [ + "en", + "fr", + "zh-CN" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "url": { - "example": "https://www.xbox.com/en-US/games/store/game/9pk3g146xxvf", - "type": "string" + "listing_types": { + "example": [ + "hotel", + "restaurant", + "attraction" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "videos": { + "locales": { + "example": [ + "en-HK", + "en-US", + "en-GB" + ], "items": { - "$ref": "#/definitions/xbox.Video" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "xbox.GameSummary": { - "properties": { - "available_on": { + }, + "pricing_modes": { "example": [ - "[\"XboxSeriesX|S\"", - "\"PC\"]" + "ALL_IN_RATE" ], "items": { "type": "string" }, "type": "array" }, - "average_rating": { - "example": 4.5, - "type": "number" + "restaurant_options": { + "example": [ + 20693 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "box_art_url": { - "type": "string" + "restaurant_types": { + "example": [ + 10591 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "categories": { + "sorts": { "example": [ - "[\"Shooter\"]" + "BEST_VALUE", + "POPULARITY" ], "items": { "type": "string" }, "type": "array" }, - "content_rating": { - "$ref": "#/definitions/xbox.ContentRating" + "unsupported_entity_types": { + "example": [ + "airline", + "airport" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "tripadvisor.HotelItem": { + "properties": { + "address": { + "type": "string" }, - "hero_art_url": { + "currency": { + "example": "HKD", "type": "string" }, - "is_preorder": { - "type": "boolean" + "id": { + "example": "113311", + "type": "string" }, - "poster_url": { + "image": { "type": "string" }, - "price": { - "$ref": "#/definitions/xbox.Price" + "latitude": { + "example": 40.76174, + "type": "number" }, - "product_id": { - "example": "9PK3G146XXVF", + "longitude": { + "example": -73.975365, + "type": "number" + }, + "parent": { + "example": "New York City", "type": "string" }, - "product_kind": { - "example": "Game", + "phone": { "type": "string" }, - "publisher": { - "example": "343 Industries", + "price": { + "example": "HK$7,793", "type": "string" }, - "rating_count": { + "provider": { + "example": "Agoda", + "type": "string" + }, + "rank": { + "example": 146, "type": "integer" }, - "release_date_utc": { - "example": "2021-12-08T00:00:00Z", + "rank_label": { + "example": "#141 of 519 hotels in New York City", "type": "string" }, - "title": { - "example": "Halo Infinite", - "type": "string" + "rating": { + "example": 4.5, + "type": "number" }, - "url": { - "example": "https://www.xbox.com/en-US/games/store/game/9pk3g146xxvf", + "review_count": { + "example": 1517, + "type": "integer" + }, + "review_rating": { + "type": "number" + }, + "review_snippet": { "type": "string" - } - }, - "type": "object" - }, - "xbox.Price": { - "properties": { - "currency": { - "example": "USD", + }, + "review_title": { "type": "string" }, - "discount_percentage": { - "example": 25, + "star_rating": { + "example": 5, "type": "number" }, - "is_free": { - "example": false, - "type": "boolean" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "list_price": { - "example": 59.99, - "type": "number" + "title": { + "example": "The Peninsula New York", + "type": "string" }, - "msrp": { - "example": 59.99, - "type": "number" + "type": { + "example": "hotel", + "type": "string" }, - "sale_end_date_utc": { - "example": "2026-10-23T03:59:59Z", + "url": { "type": "string" } }, "type": "object" }, - "xbox.RatingsSummary": { + "tripadvisor.HotelListResponse": { "properties": { - "average_rating": { - "example": 3.3, - "type": "number" + "currency": { + "example": "HKD", + "type": "string" }, - "star1_count": { - "example": 82702, + "full_matches": { + "example": 519, "type": "integer" }, - "star2_count": { - "example": 8799, + "geo_id": { + "example": 294217, "type": "integer" }, - "star3_count": { - "example": 9863, + "limit": { + "example": 30, "type": "integer" }, - "star4_count": { - "example": 12807, + "offset": { + "example": 0, "type": "integer" }, - "star5_count": { - "example": 112007, - "type": "integer" + "results": { + "items": { + "$ref": "#/definitions/tripadvisor.HotelItem" + }, + "type": "array" }, - "total_count": { - "example": 226178, + "sort": { + "example": "BEST_VALUE", + "type": "string" + }, + "total": { + "example": 519, "type": "integer" } }, "type": "object" }, - "xbox.Review": { + "tripadvisor.NestedSearchItem": { "properties": { - "device_family": { - "example": "Windows.Xbox", + "query": { + "example": "hong kong hotels", "type": "string" }, - "helpful_negative": { - "example": 647, - "type": "integer" - }, - "helpful_positive": { - "example": 16025, - "type": "integer" + "title": { + "example": "Hotels", + "type": "string" }, - "rating": { - "example": 5, - "type": "integer" + "type": { + "example": "hotel_search", + "type": "string" }, - "review_id": { + "url": { + "example": "https://en.tripadvisor.com.hk/Hotels-g294217-Hong_Kong-Hotels.html", + "type": "string" + } + }, + "type": "object" + }, + "tripadvisor.PlaceAddressParts": { + "properties": { + "country": { "type": "string" }, - "submitted_date_time": { - "example": "2024-04-19T18:53:50Z", + "locality": { "type": "string" }, - "text": { + "postal_code": { "type": "string" }, - "title": { - "example": "Great game", + "region": { "type": "string" }, - "user_name": { - "example": "Ryder2010676", + "street": { "type": "string" } }, "type": "object" }, - "xbox.ReviewsResponse": { + "tripadvisor.PlaceImage": { "properties": { - "product_id": { - "example": "BT5P2X999VH2", + "caption": { "type": "string" }, - "ratings": { - "$ref": "#/definitions/xbox.RatingsSummary" + "height": { + "example": 768, + "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/xbox.Review" - }, - "type": "array" + "url": { + "type": "string" }, - "total_reviews": { - "example": 91078, + "width": { + "example": 1024, "type": "integer" } }, "type": "object" }, - "xbox.SearchResponse": { + "tripadvisor.PlaceItem": { "properties": { - "category": { - "example": "games", + "address": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "booking_url": { + "type": "string" }, - "items": { + "categories": { "items": { - "$ref": "#/definitions/xbox.GameSummary" + "type": "string" }, "type": "array" }, - "next_cursor": { + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "currency": { + "example": "HKD", "type": "string" }, - "query": { - "example": "halo", + "id": { + "example": "5493196", "type": "string" }, - "total_items": { - "example": 41, + "image": { + "type": "string" + }, + "latitude": { + "example": 22.28331, + "type": "number" + }, + "longitude": { + "example": 114.15874, + "type": "number" + }, + "parent": { + "example": "Hong Kong", + "type": "string" + }, + "phone": { + "type": "string" + }, + "price": { + "example": "HK$7,793", + "type": "string" + }, + "price_level": { + "example": "$$ - $$$", + "type": "string" + }, + "provider": { + "example": "Agoda", + "type": "string" + }, + "rank": { + "example": 12, "type": "integer" - } - }, - "type": "object" - }, - "xbox.Video": { - "properties": { - "height": { + }, + "rank_label": { + "example": "#12 of 12000 restaurants in Hong Kong", + "type": "string" + }, + "rating": { + "example": 4.5, + "type": "number" + }, + "review_count": { + "example": 1217, "type": "integer" }, - "preview_image_url": { + "review_rating": { + "type": "number" + }, + "review_snippet": { + "type": "string" + }, + "review_title": { "type": "string" }, + "star_rating": { + "example": 5, + "type": "number" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, "title": { + "example": "Hong Kong Asian Cuisine", "type": "string" }, - "url": { + "type": { + "example": "restaurant", "type": "string" }, - "width": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "xbox.browseResponseDoc": { + "tripadvisor.PlaceLink": { "properties": { - "code": { - "example": 200, - "type": "integer" + "label": { + "example": "Official website", + "type": "string" }, - "data": { - "$ref": "#/definitions/xbox.BrowseResponse" + "type": { + "example": "website", + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "xbox.collectionResponseDoc": { + "tripadvisor.PlaceResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "type": "string" }, - "data": { - "$ref": "#/definitions/xbox.CollectionResponse" + "address_parts": { + "$ref": "#/definitions/tripadvisor.PlaceAddressParts" }, - "msg": { - "example": "OK", + "amenities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "awards": { + "items": { + "type": "string" + }, + "type": "array" + }, + "breadcrumbs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "canonical_url": { "type": "string" - } - }, - "type": "object" - }, - "xbox.gameResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/xbox.GameDetail" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { "type": "string" - } - }, - "type": "object" - }, - "xbox.reviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/xbox.ReviewsResponse" + "features": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "geo_id": { + "example": "60763", "type": "string" - } - }, - "type": "object" - }, - "xbox.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/xbox.SearchResponse" + "id": { + "example": "5493196", + "type": "string" }, - "msg": { - "example": "OK", + "image": { "type": "string" - } - }, - "type": "object" - }, - "xda.AuthorResponse": { - "properties": { - "articles": { + }, + "images": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/tripadvisor.PlaceImage" }, "type": "array" }, - "biography": { + "latitude": { + "example": 22.28331, + "type": "number" + }, + "links": { + "items": { + "$ref": "#/definitions/tripadvisor.PlaceLink" + }, + "type": "array" + }, + "longitude": { + "example": 114.15874, + "type": "number" + }, + "opening_hours": { + "items": { + "type": "string" + }, + "type": "array" + }, + "phone": { "type": "string" }, - "image_url": { + "price_level": { + "example": "$$ - $$$", "type": "string" }, - "name": { + "price_range": { + "example": "$$ - $$$", "type": "string" }, - "social_links": { + "rank": { + "example": 1, + "type": "integer" + }, + "rank_label": { + "example": "#1 of 1,531 things to do in Hong Kong", + "type": "string" + }, + "rating": { + "type": "number" + }, + "reviews": { + "type": "integer" + }, + "summary": { + "type": "string" + }, + "tags": { "items": { - "$ref": "#/definitions/valnet.AuthorSocialLink" + "type": "string" }, "type": "array" }, "title": { "type": "string" }, + "type": { + "type": "string" + }, "url": { "type": "string" + }, + "website_url": { + "type": "string" } }, "type": "object" }, - "yahooautos.ArticleResponse": { + "tripadvisor.ReviewItem": { "properties": { "author": { "type": "string" }, - "description": { + "author_avatar": { "type": "string" }, - "image_url": { + "author_hometown": { "type": "string" }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "author_id": { + "type": "string" }, - "paragraphs": { + "author_url": { + "type": "string" + }, + "created_date": { + "type": "string" + }, + "date": { + "type": "string" + }, + "helpful": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "language": { + "type": "string" + }, + "original_language": { + "type": "string" + }, + "photos": { "items": { "type": "string" }, "type": "array" }, - "provider": { - "type": "string" + "rating": { + "type": "number" }, - "published_at": { + "stay_date": { "type": "string" }, - "section": { + "text": { "type": "string" }, "title": { "type": "string" }, - "updated_at": { + "trip_type": { "type": "string" }, "url": { @@ -183933,75 +183091,180 @@ }, "type": "object" }, - "yahooautos.CategoryPaginate": { + "tripadvisor.ReviewsResponse": { "properties": { - "next_page": { - "example": 2, + "id": { + "example": "5493196", + "type": "string" + }, + "language": { + "example": "en", + "type": "string" + }, + "limit": { + "example": 20, "type": "integer" }, "page": { "example": 1, "type": "integer" + }, + "reviews": { + "items": { + "$ref": "#/definitions/tripadvisor.ReviewItem" + }, + "type": "array" + }, + "total": { + "example": 25770, + "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "yahooautos.CategoryResponse": { + "tripadvisor.SearchItem": { "properties": { - "category": { + "document_id": { + "example": "loc;294217;g294217", "type": "string" }, - "items": { + "id": { + "example": "294217", + "type": "string" + }, + "image": { + "type": "string" + }, + "latitude": { + "example": 22.28331, + "type": "number" + }, + "longitude": { + "example": 114.15874, + "type": "number" + }, + "nested_results": { "items": { - "$ref": "#/definitions/yahooautos.StreamItem" + "$ref": "#/definitions/tripadvisor.NestedSearchItem" }, "type": "array" }, - "pagination": { - "$ref": "#/definitions/yahooautos.CategoryPaginate" + "parent": { + "example": "China, Asia", + "type": "string" + }, + "title": { + "example": "Hong Kong", + "type": "string" + }, + "type": { + "example": "geo", + "type": "string" + }, + "url": { + "example": "https://en.tripadvisor.com.hk/Tourism-g294217-Hong_Kong-Vacations.html", + "type": "string" } }, "type": "object" }, - "yahooautos.HomeResponse": { + "tripadvisor.SearchResponse": { "properties": { - "items": { + "currency": { + "example": "HKD", + "type": "string" + }, + "geo_id": { + "example": 294217, + "type": "integer" + }, + "limit": { + "example": 30, + "type": "integer" + }, + "locale": { + "example": "en-HK", + "type": "string" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "results": { "items": { - "$ref": "#/definitions/yahooautos.StreamItem" + "$ref": "#/definitions/tripadvisor.PlaceItem" + }, + "type": "array" + }, + "sort": { + "example": "POPULARITY", + "type": "string" + }, + "source": { + "example": "html_listing", + "type": "string" + }, + "type": { + "example": "restaurant", + "type": "string" + }, + "unsupported_types": { + "example": [ + "vacation_rental", + "tour", + "airline" + ], + "items": { + "type": "string" }, "type": "array" } }, "type": "object" }, - "yahooautos.StreamItem": { + "tripadvisor.tripadvisorAutocompleteResponseDoc": { "properties": { - "category": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/tripadvisor.AutocompleteResponse" }, - "thumbnail_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tripadvisor.tripadvisorEnumsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/tripadvisor.EnumsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahooautos.articleResponseDoc": { + "tripadvisor.tripadvisorHotelsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooautos.ArticleResponse" + "$ref": "#/definitions/tripadvisor.HotelListResponse" }, "msg": { "example": "OK", @@ -184010,14 +183273,14 @@ }, "type": "object" }, - "yahooautos.categoryResponseDoc": { + "tripadvisor.tripadvisorReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooautos.CategoryResponse" + "$ref": "#/definitions/tripadvisor.ReviewsResponse" }, "msg": { "example": "OK", @@ -184026,14 +183289,14 @@ }, "type": "object" }, - "yahooautos.homeResponseDoc": { + "tripadvisor.tripadvisorSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooautos.HomeResponse" + "$ref": "#/definitions/tripadvisor.SearchResponse" }, "msg": { "example": "OK", @@ -184042,151 +183305,280 @@ }, "type": "object" }, - "yahooentertainment.ArticleResponse": { + "tripcom.DetailResponse": { "properties": { - "author": { + "city_name": { + "example": "Bang Sao Thong", "type": "string" }, - "description": { + "country_name": { + "example": "Thailand", "type": "string" }, - "image_url": { + "description": { "type": "string" }, - "keywords": { + "highlights": { + "example": [ + "Free airport transfers", + "Great views" + ], "items": { "type": "string" }, "type": "array" }, - "paragraphs": { + "hotel_id": { + "example": 39371462, + "type": "integer" + }, + "image_count": { + "example": 10, + "type": "integer" + }, + "images": { "items": { "type": "string" }, "type": "array" }, - "provider": { + "local_name": { "type": "string" }, - "published_at": { - "type": "string" + "location": { + "$ref": "#/definitions/tripcom.Location" }, - "section": { + "name": { + "example": "Divalux Resort and Spa Bangkok, Suvarnabhumi Airport-Free Shuttle", "type": "string" }, - "title": { + "open_year": { + "example": "2019", "type": "string" }, - "updated_at": { + "policy": { + "$ref": "#/definitions/tripcom.Policy" + }, + "popular_facilities": { + "example": [ + "Outdoor swimming pool", + "Spa", + "Massage room" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "province_name": { + "example": "Samut Prakan Province", "type": "string" }, - "url": { + "rating": { + "$ref": "#/definitions/tripcom.Rating" + }, + "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" + }, + "star_rating": { + "example": 5, + "type": "integer" } }, "type": "object" }, - "yahooentertainment.CategoryPaginate": { + "tripcom.HotelSummary": { "properties": { - "next_page": { - "example": 2, + "description": { + "example": "The hotel has a relaxing wellness atmosphere...", + "type": "string" + }, + "hotel_id": { + "example": 39371462, "type": "integer" }, - "page": { - "example": 1, + "image_url": { + "example": "https://ak-d.tripcdn.com/images/0585b12000sq6ih4c6345.jpg", + "type": "string" + }, + "location": { + "example": "88 Moo3, Sriwaree Road, Sisa Chokhe Noi, Bang Sao Thong District, Srisa Chorakhe Noi, Bang Sao Thong", + "type": "string" + }, + "name": { + "example": "Divalux Resort and Spa Bangkok, Suvarnabhumi Airport-Free Shuttle", + "type": "string" + }, + "price": { + "$ref": "#/definitions/tripcom.Price" + }, + "rating_score": { + "example": 8.7, + "type": "number" + }, + "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" }, - "yahooentertainment.CategoryResponse": { + "tripcom.Location": { "properties": { - "category": { + "address": { + "example": "88 Moo3, Sriwaree Road, Sisa Chokhe Noi, Bang Sao Thong District, Samut Prakan Province, 10570, Thailand", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/yahooentertainment.StreamItem" - }, - "type": "array" + "latitude": { + "example": 13.69316, + "type": "number" }, - "pagination": { - "$ref": "#/definitions/yahooentertainment.CategoryPaginate" + "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" }, - "yahooentertainment.HomeResponse": { + "tripcom.Policy": { "properties": { - "items": { + "check_in_out": { + "example": [ + "Check-in: After 14:00", + "Check-out: Before 12:00", + "Front desk hours: 24/7" + ], "items": { - "$ref": "#/definitions/yahooentertainment.StreamItem" + "type": "string" + }, + "type": "array" + }, + "child": { + "example": [ + "Children of all ages are welcome at this property." + ], + "items": { + "type": "string" }, "type": "array" } }, "type": "object" }, - "yahooentertainment.StreamItem": { + "tripcom.Price": { "properties": { - "category": { - "type": "string" - }, - "id": { - "type": "string" + "amount": { + "example": 38, + "type": "number" }, - "thumbnail_url": { + "currency": { + "example": "US$", "type": "string" }, - "title": { + "raw": { + "example": "US$38", "type": "string" }, - "url": { + "unit": { + "example": "1 night", "type": "string" } }, "type": "object" }, - "yahooentertainment.articleResponseDoc": { + "tripcom.Rating": { "properties": { - "code": { - "example": 200, - "type": "integer" + "amenities_score": { + "example": 8.8, + "type": "number" }, - "data": { - "$ref": "#/definitions/yahooentertainment.ArticleResponse" + "cleanliness_score": { + "example": 8.7, + "type": "number" }, - "msg": { - "example": "OK", + "location_score": { + "example": 8.3, + "type": "number" + }, + "recommend": { + "example": "79% Recommended", + "type": "string" + }, + "score": { + "example": 8.6, + "type": "number" + }, + "score_description": { + "example": "Very good", "type": "string" + }, + "score_max": { + "example": 10, + "type": "number" + }, + "service_score": { + "example": 8.7, + "type": "number" + }, + "total_comment": { + "example": 875, + "type": "integer" } }, "type": "object" }, - "yahooentertainment.categoryResponseDoc": { + "tripcom.SearchResponse": { "properties": { - "code": { - "example": 200, + "city_id": { + "example": "359", + "type": "string" + }, + "city_slug": { + "example": "bangkok", + "type": "string" + }, + "count": { + "example": 9, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahooentertainment.CategoryResponse" + "hotels": { + "items": { + "$ref": "#/definitions/tripcom.HotelSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.trip.com/hotels/bangkok-hotels-list-359/", "type": "string" } }, "type": "object" }, - "yahooentertainment.homeResponseDoc": { + "tripcom.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooentertainment.HomeResponse" + "$ref": "#/definitions/tripcom.SearchResponse" }, "msg": { "example": "OK", @@ -184195,856 +183587,846 @@ }, "type": "object" }, - "yahoofinance.ActionEvents": { + "trustmrr.AcquireListing": { "properties": { - "capital_gains": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "asking_price": { + "type": "number" }, - "dividends": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "category": { + "example": "SaaS", + "type": "string" }, - "splits": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.CalendarResponse": { - "properties": { - "end": { - "example": "2026-05-27", + "description": { "type": "string" }, - "limit": { - "example": 12, - "type": "integer" + "first_listed_for_sale_at": { + "type": "string" }, - "offset": { - "example": 0, - "type": "integer" + "founded_date": { + "type": "string" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "growth_30d": { + "type": "number" }, - "start": { - "example": "2026-05-20", + "icon": { "type": "string" }, - "type": { - "example": "earnings", - "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.CalendarsResponse": { - "properties": { - "calendars": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.DomainListResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/yahoofinance.DomainRef" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.DomainRef": { - "properties": { - "key": { - "example": "technology", + "listing_tier": { "type": "string" }, + "multiple": { + "type": "number" + }, "name": { - "example": "Technology", + "example": "Ploxto", "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.DownloadRequest": { - "properties": { - "auto_adjust": { - "type": "boolean" }, - "back_adjust": { - "type": "boolean" + "offer_count": { + "type": "integer" }, - "end": { + "payment_provider": { "type": "string" }, - "include_actions": { - "type": "boolean" - }, - "include_prepost": { - "type": "boolean" - }, - "interval": { - "type": "string" + "profit_margin_last_30_days": { + "type": "number" }, - "keepna": { - "type": "boolean" + "revenue_last_30_days": { + "type": "number" }, - "period": { + "slug": { + "example": "ploxto", "type": "string" }, - "rounding": { + "stealth_mode": { "type": "boolean" }, - "start": { + "url": { + "example": "https://trustmrr.com/startup/ploxto", "type": "string" - }, - "symbols": { - "items": { - "type": "string" - }, - "type": "array" } }, - "required": [ - "symbols" - ], "type": "object" }, - "yahoofinance.DownloadResponse": { + "trustmrr.AcquireResponse": { "properties": { - "results": { + "count": { + "type": "integer" + }, + "startups": { "items": { - "$ref": "#/definitions/yahoofinance.DownloadResult" + "$ref": "#/definitions/trustmrr.AcquireListing" }, "type": "array" } }, "type": "object" }, - "yahoofinance.DownloadResult": { + "trustmrr.AskingPricePoint": { "properties": { - "error": { + "created_at": { "type": "string" }, - "history": { - "$ref": "#/definitions/yahoofinance.HistoryResponse" - }, - "symbol": { - "type": "string" + "price": { + "type": "number" } }, "type": "object" }, - "yahoofinance.EarningsDatesResponse": { + "trustmrr.CategoriesResponse": { "properties": { - "limit": { - "example": 12, - "type": "integer" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "rows": { + "categories": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/trustmrr.Category" }, "type": "array" }, - "symbol": { - "example": "AAPL", - "type": "string" + "count": { + "example": 31, + "type": "integer" } }, "type": "object" }, - "yahoofinance.FinancialsResponse": { + "trustmrr.Category": { "properties": { - "modules": { - "additionalProperties": {}, - "type": "object" + "description": { + "type": "string" }, - "period": { - "example": "annual", + "icon": { + "example": "Sparkles", "type": "string" }, - "statement": { - "example": "income", + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "label": { + "example": "Artificial Intelligence", "type": "string" }, - "symbol": { - "example": "AAPL", + "label_short": { + "example": "AI", "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.HistoryMetadataResponse": { - "properties": { - "meta": { - "additionalProperties": {}, - "type": "object" }, - "symbol": { - "example": "AAPL", + "slug": { + "example": "ai", + "type": "string" + }, + "url": { + "example": "https://trustmrr.com/category/ai", "type": "string" } }, "type": "object" }, - "yahoofinance.HistoryResponse": { + "trustmrr.CategoryResponse": { "properties": { - "events": { - "$ref": "#/definitions/yahoofinance.ActionEvents" + "count": { + "type": "integer" }, - "meta": { - "additionalProperties": {}, - "type": "object" + "slug": { + "example": "saas", + "type": "string" }, - "points": { + "startups": { "items": { - "$ref": "#/definitions/yahoofinance.PricePoint" + "$ref": "#/definitions/trustmrr.CategoryStartup" }, "type": "array" }, - "symbol": { - "example": "AAPL", + "url": { + "example": "https://trustmrr.com/category/saas", "type": "string" } }, "type": "object" }, - "yahoofinance.ISINResponse": { + "trustmrr.CategoryStartup": { "properties": { - "isin": { - "example": "US0378331005", - "type": "string" + "current_last_30_days_revenue": { + "type": "number" }, - "symbol": { - "example": "AAPL", + "current_mrr": { + "type": "number" + }, + "current_total_revenue": { + "type": "number" + }, + "description": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.IndustryResponse": { - "properties": { - "key": { - "example": "semiconductors", + }, + "icon": { "type": "string" }, + "is_merchant_of_record": { + "type": "boolean" + }, "name": { - "example": "Semiconductors", + "example": "Hidden Business", "type": "string" }, - "overview": { - "additionalProperties": {}, - "type": "object" - }, - "research_reports": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "on_sale": { + "type": "boolean" }, - "sector_key": { - "example": "technology", + "slug": { + "example": "hidden-business-3", "type": "string" }, - "sector_name": { - "example": "Technology", + "url": { + "example": "https://trustmrr.com/startup/hidden-business-3", "type": "string" + } + }, + "type": "object" + }, + "trustmrr.LeaderboardEntry": { + "properties": { + "current_last_30_days_revenue": { + "type": "number" }, - "symbol": { - "type": "string" + "current_mrr": { + "example": 3569654.22, + "type": "number" }, - "top_companies": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "current_total_revenue": { + "example": 76627685.07, + "type": "number" }, - "top_growth_companies": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "description": { + "type": "string" }, - "top_performing_companies": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.InfoResponse": { - "properties": { - "modules": { - "additionalProperties": {}, - "type": "object" + "growth_30d": { + "type": "number" }, - "symbol": { - "example": "AAPL", + "growth_mrr_30d": { + "type": "number" + }, + "icon": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.LookupResponse": { - "properties": { - "count": { - "example": 10, - "type": "integer" }, - "documents": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "is_merchant_of_record": { + "type": "boolean" }, - "query": { - "example": "apple", + "name": { + "example": "Stan", "type": "string" }, - "start": { - "example": 0, - "type": "integer" + "on_sale": { + "type": "boolean" }, - "total": { - "example": 10, + "rank": { + "example": 1, "type": "integer" }, - "type": { - "example": "all", + "revenue_per_visitor_last_30_days": { + "type": "number" + }, + "slug": { + "example": "stan", "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.MarketStatusResponse": { - "properties": { - "market": { - "example": "US", + }, + "stealth_mode": { + "type": "boolean" + }, + "traffic_last_30_days": { + "type": "number" + }, + "url": { + "example": "https://trustmrr.com/startup/stan", "type": "string" }, - "status": { - "additionalProperties": {}, - "type": "object" + "x_founder_name": { + "type": "string" + }, + "x_handle": { + "type": "string" + }, + "x_profile_picture": { + "type": "string" } }, "type": "object" }, - "yahoofinance.MarketSummaryResponse": { + "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": { - "market": { - "example": "US", - "type": "string" + "count": { + "example": 100, + "type": "integer" }, - "summary": { + "entries": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/trustmrr.LeaderboardEntry" }, "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.ModuleResponse": { - "properties": { - "modules": { - "additionalProperties": {}, - "type": "object" }, - "symbol": { - "example": "AAPL", - "type": "string" + "metric": { + "allOf": [ + { + "$ref": "#/definitions/trustmrr.LeaderboardMetric" + } + ], + "example": "mrr" } }, "type": "object" }, - "yahoofinance.OptionExpiration": { + "trustmrr.MarketplaceResponse": { "properties": { - "calls": { + "best_deals": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/trustmrr.MarketplaceStartup" }, "type": "array" }, - "expiration_date": { - "example": 1779235200, - "type": "integer" - }, - "puts": { + "recently_listed": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/trustmrr.MarketplaceStartup" }, "type": "array" } }, "type": "object" }, - "yahoofinance.OptionsResponse": { + "trustmrr.MarketplaceRevenue": { "properties": { - "expiration_dates": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "options": { - "items": { - "$ref": "#/definitions/yahoofinance.OptionExpiration" - }, - "type": "array" + "last_30_days": { + "example": 23589.38, + "type": "number" }, - "symbol": { - "example": "AAPL", - "type": "string" + "mrr": { + "example": 20361.89, + "type": "number" }, - "underlying": { - "additionalProperties": {}, - "type": "object" + "total": { + "example": 23589.38, + "type": "number" } }, "type": "object" }, - "yahoofinance.PricePoint": { + "trustmrr.MarketplaceStartup": { "properties": { - "adj_close": { - "example": 211, - "type": "number" + "active_subscriptions": { + "example": 4790, + "type": "integer" }, - "close": { - "example": 211, + "asking_price": { + "example": 600000, "type": "number" }, - "datetime": { - "example": "2026-05-18T13:30:00Z", + "category": { + "example": "Mobile Apps", "type": "string" }, - "high": { - "example": 212, + "country": { + "example": "PL", + "type": "string" + }, + "customers": { + "example": 0, + "type": "integer" + }, + "description": { + "type": "string" + }, + "first_listed_for_sale_at": { + "type": "string" + }, + "founded_date": { + "example": "2025-06-01T00:00:00.000Z", + "type": "string" + }, + "google_search_impressions_last_30_days": { + "type": "integer" + }, + "growth_30d": { "type": "number" }, - "low": { - "example": 209, + "growth_mrr_30d": { "type": "number" }, - "open": { - "example": 210, + "icon": { + "type": "string" + }, + "multiple": { + "example": 2.1, "type": "number" }, - "timestamp": { - "example": 1779111000, + "name": { + "example": "TrackAI", + "type": "string" + }, + "on_sale": { + "example": true, + "type": "boolean" + }, + "payment_provider": { + "example": "revenuecat", + "type": "string" + }, + "profit_margin_last_30_days": { + "example": 10, + "type": "number" + }, + "rank": { + "example": 858, "type": "integer" }, - "volume": { - "example": 54200000, + "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" }, - "yahoofinance.QuoteResponse": { + "trustmrr.Startup": { "properties": { - "quotes": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "ahrefs_domain": { + "type": "string" }, - "symbols": { + "ahrefs_domain_rating": { + "type": "integer" + }, + "asking_price": { + "example": 600000, + "type": "number" + }, + "asking_price_history": { "items": { - "type": "string" + "$ref": "#/definitions/trustmrr.AskingPricePoint" }, "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.ScreenerRequest": { - "properties": { - "count": { - "type": "integer" }, - "offset": { - "type": "integer" + "branding_primary_color": { + "example": "#ffffff", + "type": "string" }, - "query": { - "additionalProperties": {}, - "type": "object" + "branding_secondary_color": { + "example": "#000000", + "type": "string" }, - "quote_type": { + "category": { + "example": "Mobile App", "type": "string" }, - "sort_asc": { - "type": "boolean" + "category_slug": { + "example": "mobile-app", + "type": "string" }, - "sort_field": { + "country": { + "example": "PL", "type": "string" - } - }, - "required": [ - "query" - ], - "type": "object" - }, - "yahoofinance.ScreenerResponse": { - "properties": { + }, + "created_at": { + "type": "string" + }, + "deal_score": { + "type": "number" + }, "description": { "type": "string" }, - "id": { - "example": "day_gainers", + "enrichment": { + "$ref": "#/definitions/trustmrr.StartupEnrichment" + }, + "first_listed_for_sale_at": { "type": "string" }, - "meta": { - "additionalProperties": {}, - "type": "object" + "founded_date": { + "type": "string" }, - "quotes": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "growth_30d": { + "type": "number" }, - "title": { - "example": "Day Gainers", + "growth_mrr_30d": { + "type": "number" + }, + "has_dofollow_backlink": { + "type": "boolean" + }, + "has_google_analytics": { + "type": "boolean" + }, + "has_search_console": { + "type": "boolean" + }, + "icon": { "type": "string" }, - "total": { - "example": 25, - "type": "integer" - } - }, - "type": "object" - }, - "yahoofinance.ScreenersResponse": { - "properties": { - "screeners": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.SearchResponse": { - "properties": { - "lists": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "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." }, - "news": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "is_merchant_of_record": { + "type": "boolean" }, - "query": { + "is_sponsored": { + "type": "boolean" + }, + "listing_tier": { + "example": "pro", "type": "string" }, - "quotes": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "looking_for_cofounder": { + "type": "boolean" }, - "research": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.SectorResponse": { - "properties": { - "industries": { + "looking_for_cofounder_message": { + "type": "string" + }, + "marketing_channels": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/trustmrr.StartupChannel" }, "type": "array" }, - "key": { - "example": "technology", + "merchant_category_code": { + "example": "7372", + "type": "string" + }, + "mrr_last_synced_at": { "type": "string" }, + "multiple": { + "example": 2.12, + "type": "number" + }, "name": { - "example": "Technology", + "example": "TrackAI", "type": "string" }, - "overview": { - "additionalProperties": {}, - "type": "object" + "offer_count": { + "type": "integer" }, - "research_reports": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "on_sale": { + "type": "boolean" }, - "symbol": { - "example": "^IXT", + "payment_provider": { + "example": "revenuecat", "type": "string" }, - "top_companies": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "profit_margin_last_30_days": { + "example": 10, + "type": "number" }, - "top_etfs": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "rank": { + "example": 858, + "type": "integer" }, - "top_mutual_funds": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - } - }, - "type": "object" - }, - "yahoofinance.SharesFullResponse": { - "properties": { - "end": { - "example": "2026-05-20", + "revenue": { + "$ref": "#/definitions/trustmrr.StartupRevenue" + }, + "revenue_last_synced_at": { "type": "string" }, - "points": { + "revenue_per_visitor_last_30_days": { + "type": "number" + }, + "secondary_payment_provider": { + "type": "string" + }, + "seller_message": { + "type": "string" + }, + "slug": { + "example": "trackai", + "type": "string" + }, + "status": { + "example": "active", + "type": "string" + }, + "stealth_mode": { + "type": "boolean" + }, + "target_audience": { + "example": "B2C", + "type": "string" + }, + "tech_stack": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/trustmrr.StartupTech" }, "type": "array" }, - "start": { - "example": "2025-01-01", + "traffic_last_12_months": { + "type": "number" + }, + "traffic_last_24_hours": { + "type": "number" + }, + "traffic_last_30_days": { + "type": "number" + }, + "traffic_last_7_days": { + "type": "number" + }, + "updated_at": { "type": "string" }, - "symbol": { - "example": "AAPL", + "url": { + "example": "https://trustmrr.com/startup/trackai", + "type": "string" + }, + "user_category": { + "example": "Mobile Apps", + "type": "string" + }, + "user_category_slug": { + "example": "mobile-apps", + "type": "string" + }, + "website": { + "example": "https://trackai.app", + "type": "string" + }, + "x_follower_count": { + "type": "integer" + }, + "x_founder_name": { + "type": "string" + }, + "x_handle": { + "type": "string" + }, + "x_profile_picture": { "type": "string" } }, "type": "object" }, - "yahoofinance.SharesResponse": { + "trustmrr.StartupChannel": { "properties": { - "shares": { - "additionalProperties": {}, - "type": "object" + "category": { + "example": "paid", + "type": "string" }, - "symbol": { - "example": "AAPL", + "slug": { + "example": "meta-ads", "type": "string" } }, "type": "object" }, - "yahoofinance.TrendingResponse": { + "trustmrr.StartupEnrichment": { "properties": { - "count": { - "example": 5, - "type": "integer" + "business_type": { + "example": "B2C", + "type": "string" }, - "job_timestamp": { - "example": 1779268508061, + "estimated_user_count": { "type": "integer" }, - "region": { - "example": "US", + "funding_status": { "type": "string" }, - "start_interval": { - "example": 202605200800, - "type": "integer" + "last_enriched_at": { + "type": "string" }, - "symbols": { + "pricing_model": { + "type": "string" + }, + "problem_solved": { + "type": "string" + }, + "screenshots": { "items": { - "type": "string" + "$ref": "#/definitions/trustmrr.StartupScreenshot" }, "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.ValuationResponse": { - "properties": { - "headers": { + }, + "tags": { "items": { "type": "string" }, "type": "array" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "target_persona": { + "type": "string" }, - "symbol": { - "example": "AAPL", + "value_proposition": { "type": "string" } }, "type": "object" }, - "yahoofinance.actionsResponseDoc": { + "trustmrr.StartupInsight": { "properties": { - "code": { - "example": 200, + "business_type": { + "example": "B2C", + "type": "string" + }, + "estimated_user_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.ActionEvents" + "pricing_model": { + "type": "string" }, - "msg": { - "example": "OK", + "problem_solved": { + "type": "string" + }, + "target_persona": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "value_proposition": { "type": "string" } }, "type": "object" }, - "yahoofinance.calendarResponseDoc": { + "trustmrr.StartupRef": { "properties": { - "code": { - "example": 200, - "type": "integer" + "last_modified": { + "example": "2026-07-08T05:09:42.880Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.CalendarResponse" + "slug": { + "example": "gumroad", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://trustmrr.com/startup/gumroad", "type": "string" } }, "type": "object" }, - "yahoofinance.calendarsResponseDoc": { + "trustmrr.StartupRevenue": { "properties": { - "code": { - "example": 200, + "active_subscriptions": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.CalendarsResponse" + "customers": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "last_30_days": { + "type": "number" + }, + "mrr": { + "type": "number" + }, + "total": { + "type": "number" } }, "type": "object" }, - "yahoofinance.domainListResponseDoc": { + "trustmrr.StartupScreenshot": { "properties": { - "code": { - "example": 200, - "type": "integer" + "captured_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.DomainListResponse" + "label": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "yahoofinance.downloadResponseDoc": { + "trustmrr.StartupTech": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoofinance.DownloadResponse" + "category": { + "example": "frontend", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "reactnative", "type": "string" } }, "type": "object" }, - "yahoofinance.earningsDatesResponseDoc": { + "trustmrr.StartupsResponse": { "properties": { - "code": { - "example": 200, + "has_next": { + "example": true, + "type": "boolean" + }, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.EarningsDatesResponse" + "page_size": { + "example": 100, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "startups": { + "items": { + "$ref": "#/definitions/trustmrr.StartupRef" + }, + "type": "array" + }, + "total": { + "example": 8196, + "type": "integer" } }, "type": "object" }, - "yahoofinance.financialsResponseDoc": { + "trustmrr.acquireResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.FinancialsResponse" + "$ref": "#/definitions/trustmrr.AcquireResponse" }, "msg": { "example": "OK", @@ -185053,14 +184435,14 @@ }, "type": "object" }, - "yahoofinance.historyMetadataResponseDoc": { + "trustmrr.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.HistoryMetadataResponse" + "$ref": "#/definitions/trustmrr.CategoriesResponse" }, "msg": { "example": "OK", @@ -185069,14 +184451,14 @@ }, "type": "object" }, - "yahoofinance.historyResponseDoc": { + "trustmrr.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.HistoryResponse" + "$ref": "#/definitions/trustmrr.CategoryResponse" }, "msg": { "example": "OK", @@ -185085,14 +184467,14 @@ }, "type": "object" }, - "yahoofinance.industryResponseDoc": { + "trustmrr.leaderboardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.IndustryResponse" + "$ref": "#/definitions/trustmrr.LeaderboardResponse" }, "msg": { "example": "OK", @@ -185101,14 +184483,14 @@ }, "type": "object" }, - "yahoofinance.infoResponseDoc": { + "trustmrr.marketplaceResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.InfoResponse" + "$ref": "#/definitions/trustmrr.MarketplaceResponse" }, "msg": { "example": "OK", @@ -185117,14 +184499,14 @@ }, "type": "object" }, - "yahoofinance.isinResponseDoc": { + "trustmrr.startupResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.ISINResponse" + "$ref": "#/definitions/trustmrr.Startup" }, "msg": { "example": "OK", @@ -185133,14 +184515,14 @@ }, "type": "object" }, - "yahoofinance.lookupResponseDoc": { + "trustmrr.startupsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.LookupResponse" + "$ref": "#/definitions/trustmrr.StartupsResponse" }, "msg": { "example": "OK", @@ -185149,260 +184531,501 @@ }, "type": "object" }, - "yahoofinance.marketStatusResponseDoc": { + "trustpilot.BusinessAbout": { "properties": { - "code": { - "example": 200, - "type": "integer" + "business_country_code": { + "example": "DK", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.MarketStatusResponse" + "contact": { + "$ref": "#/definitions/trustpilot.BusinessContact" }, - "msg": { - "example": "OK", + "description_html": { + "type": "string" + }, + "description_text": { + "type": "string" + }, + "facebook_url": { + "example": "https://www.facebook.com/Trustpilot", + "type": "string" + }, + "has_company_elements": { + "example": true, + "type": "boolean" + }, + "information_source": { + "example": "customer", + "type": "string" + }, + "promotion_points": { + "items": { + "type": "string" + }, + "type": "array" + }, + "promotion_title": { "type": "string" } }, "type": "object" }, - "yahoofinance.marketSummaryResponseDoc": { + "trustpilot.BusinessActivity": { "properties": { - "code": { - "example": 200, - "type": "integer" + "claimed_date": { + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.MarketSummaryResponse" + "has_business_unit_merge_history": { + "example": false, + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" + "has_subscription": { + "example": false, + "type": "boolean" + }, + "is_asking_for_reviews": { + "example": false, + "type": "boolean" + }, + "is_claimed": { + "example": false, + "type": "boolean" + }, + "is_using_ai_responses": { + "example": false, + "type": "boolean" + }, + "is_using_paid_features": { + "example": false, + "type": "boolean" + }, + "previously_claimed": { + "example": false, + "type": "boolean" + }, + "verification": { + "$ref": "#/definitions/trustpilot.BusinessVerification" } }, "type": "object" }, - "yahoofinance.moduleResponseDoc": { + "trustpilot.BusinessBreadcrumb": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "example": "electronics_technology", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.ModuleResponse" + "level": { + "example": "top", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Electronics & Technology", "type": "string" } }, "type": "object" }, - "yahoofinance.optionsResponseDoc": { + "trustpilot.BusinessCategory": { "properties": { - "code": { - "example": 200, + "cardinality": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.OptionsResponse" + "id": { + "example": "software_company", + "type": "string" }, - "msg": { - "example": "OK", + "is_primary": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Software Company", "type": "string" + }, + "rank": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "yahoofinance.quoteResponseDoc": { + "trustpilot.BusinessCompanyReply": { "properties": { - "code": { - "example": 200, - "type": "integer" + "message": { + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.QuoteResponse" + "published_at_text": { + "type": "string" }, - "msg": { - "example": "OK", + "updated_at_text": { "type": "string" } }, "type": "object" }, - "yahoofinance.screenerResponseDoc": { + "trustpilot.BusinessContact": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.ScreenerResponse" + "city": { + "type": "string" }, - "msg": { - "example": "OK", + "country": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "zip_code": { "type": "string" } }, "type": "object" }, - "yahoofinance.screenersResponseDoc": { + "trustpilot.BusinessPageLanguage": { "properties": { - "code": { - "example": 200, - "type": "integer" + "iso_language": { + "example": "en-US", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.ScreenersResponse" + "language_code": { + "example": "en", + "type": "string" }, - "msg": { - "example": "OK", + "locale": { + "example": "en-US", + "type": "string" + }, + "uri": { + "example": "https://www.trustpilot.com", "type": "string" } }, "type": "object" }, - "yahoofinance.searchResponseDoc": { + "trustpilot.BusinessPageMeta": { "properties": { - "code": { - "example": 200, - "type": "integer" + "canonical_url": { + "example": "https://www.trustpilot.com/review/openai.com", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.SearchResponse" + "domain": { + "example": "https://www.trustpilot.com", + "type": "string" }, - "msg": { - "example": "OK", + "languages": { + "items": { + "$ref": "#/definitions/trustpilot.BusinessPageLanguage" + }, + "type": "array" + }, + "locale": { + "example": "en-US", "type": "string" } }, "type": "object" }, - "yahoofinance.sectorResponseDoc": { + "trustpilot.BusinessRatingHistogram": { "properties": { - "code": { - "example": 200, - "type": "integer" + "five": { + "example": 80, + "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.SectorResponse" + "four": { + "example": 20, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "one": { + "example": 817, + "type": "integer" + }, + "three": { + "example": 22, + "type": "integer" + }, + "total": { + "example": 984, + "type": "integer" + }, + "two": { + "example": 45, + "type": "integer" } }, "type": "object" }, - "yahoofinance.sharesFullResponseDoc": { + "trustpilot.BusinessRelatedResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoofinance.SharesFullResponse" + "business": { + "$ref": "#/definitions/trustpilot.businessHeader" }, - "msg": { - "example": "OK", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/trustpilot.RelatedBusiness" + }, + "type": "array" } }, "type": "object" }, - "yahoofinance.sharesResponseDoc": { + "trustpilot.BusinessReplyMetrics": { "properties": { - "code": { - "example": 200, + "average_days_to_reply": { + "example": 10.59, + "type": "number" + }, + "last_reply_to_negative_review": { + "type": "string" + }, + "negative_reviews_with_replies": { + "example": 7964, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.SharesResponse" + "reply_percentage": { + "example": 47.88, + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" + "total_negative_reviews": { + "example": 16630, + "type": "integer" } }, "type": "object" }, - "yahoofinance.trendingResponseDoc": { + "trustpilot.BusinessResponse": { "properties": { - "code": { - "example": 200, + "about": { + "$ref": "#/definitions/trustpilot.BusinessAbout" + }, + "breadcrumbs": { + "items": { + "$ref": "#/definitions/trustpilot.BusinessBreadcrumb" + }, + "type": "array" + }, + "categories": { + "items": { + "$ref": "#/definitions/trustpilot.BusinessCategory" + }, + "type": "array" + }, + "claimed": { + "example": false, + "type": "boolean" + }, + "company_activity": { + "$ref": "#/definitions/trustpilot.BusinessActivity" + }, + "name": { + "example": "OpenAI", + "type": "string" + }, + "page_meta": { + "$ref": "#/definitions/trustpilot.BusinessPageMeta" + }, + "paid_subscription": { + "example": false, + "type": "boolean" + }, + "rating": { + "example": 1.5, + "type": "number" + }, + "rating_histogram": { + "$ref": "#/definitions/trustpilot.BusinessRatingHistogram" + }, + "reply_metrics": { + "$ref": "#/definitions/trustpilot.BusinessReplyMetrics" + }, + "review_count": { + "example": 984, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.TrendingResponse" + "review_summary": { + "$ref": "#/definitions/trustpilot.BusinessReviewSummary" }, - "msg": { - "example": "OK", + "review_topics": { + "items": { + "$ref": "#/definitions/trustpilot.BusinessReviewTopic" + }, + "type": "array" + }, + "slug": { + "example": "openai.com", + "type": "string" + }, + "trust_score": { + "example": 1.3, + "type": "number" + }, + "trustpilot_url": { + "example": "https://www.trustpilot.com/review/openai.com", + "type": "string" + }, + "website_url": { + "example": "https://openai.com", "type": "string" } }, "type": "object" }, - "yahoofinance.valuationResponseDoc": { + "trustpilot.BusinessReviewItem": { "properties": { - "code": { - "example": 200, + "author_country": { + "example": "GB", + "type": "string" + }, + "author_name": { + "example": "Summit", + "type": "string" + }, + "author_review_count": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.ValuationResponse" + "body": { + "type": "string" }, - "msg": { - "example": "OK", + "company_reply": { + "$ref": "#/definitions/trustpilot.BusinessCompanyReply" + }, + "experienced_at_text": { + "type": "string" + }, + "id": { + "example": "69b2e2443283f179ac73d3ce", + "type": "string" + }, + "invited": { + "example": false, + "type": "boolean" + }, + "labels": { + "$ref": "#/definitions/trustpilot.BusinessReviewLabels" + }, + "published_at_text": { + "type": "string" + }, + "rating": { + "example": 1, + "type": "integer" + }, + "title": { "type": "string" + }, + "updated_at_text": { + "type": "string" + }, + "verified": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "yahoohealth.ArticleResponse": { + "trustpilot.BusinessReviewLabels": { "properties": { - "author": { + "filtered": { + "example": false, + "type": "boolean" + }, + "merged": { "type": "string" }, - "description": { + "pending": { + "example": false, + "type": "boolean" + }, + "review_source": { + "example": "Organic", "type": "string" }, - "image_url": { + "verification_level": { + "example": "not-verified", "type": "string" }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "verification_source": { + "example": "invitation", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewSummary": { + "properties": { + "model_version": { + "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "status": { + "type": "string" }, - "provider": { + "summary": { "type": "string" }, - "published_at": { + "updated_at": { + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewTopic": { + "properties": { + "model_version": { "type": "string" }, - "section": { + "order": { + "example": 1, + "type": "integer" + }, + "summary": { "type": "string" }, - "title": { + "topic": { + "example": "user_experience", "type": "string" }, "updated_at": { "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewsAppliedFilters": { + "properties": { + "language": { + "example": "en", + "type": "string" }, - "url": { + "query": { + "example": "refund", "type": "string" + }, + "replied": { + "type": "boolean" + }, + "stars": { + "example": 1, + "type": "integer" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "yahoohealth.CategoryPaginate": { + "trustpilot.BusinessReviewsPagination": { "properties": { + "has_next_page": { + "example": true, + "type": "boolean" + }, "next_page": { "example": 2, "type": "integer" @@ -185410,528 +185033,611 @@ "page": { "example": 1, "type": "integer" + }, + "per_page": { + "example": 20, + "type": "integer" + }, + "total_pages": { + "example": 50, + "type": "integer" + }, + "total_reviews": { + "example": 984, + "type": "integer" } }, "type": "object" }, - "yahoohealth.CategoryResponse": { + "trustpilot.BusinessReviewsResponse": { "properties": { - "category": { - "type": "string" + "applied_filters": { + "$ref": "#/definitions/trustpilot.BusinessReviewsAppliedFilters" + }, + "business": { + "$ref": "#/definitions/trustpilot.businessHeader" }, "items": { "items": { - "$ref": "#/definitions/yahoohealth.StreamItem" + "$ref": "#/definitions/trustpilot.BusinessReviewItem" }, "type": "array" }, "pagination": { - "$ref": "#/definitions/yahoohealth.CategoryPaginate" + "$ref": "#/definitions/trustpilot.BusinessReviewsPagination" } }, "type": "object" }, - "yahoohealth.HomeResponse": { + "trustpilot.BusinessVerification": { "properties": { - "items": { + "verified_by_google": { + "example": false, + "type": "boolean" + }, + "verified_payment_method": { + "example": false, + "type": "boolean" + }, + "verified_user_identity": { + "example": false, + "type": "boolean" + } + }, + "type": "object" + }, + "trustpilot.CategoriesResponse": { + "properties": { + "groups": { "items": { - "$ref": "#/definitions/yahoohealth.StreamItem" + "$ref": "#/definitions/trustpilot.CategoryGroup" }, "type": "array" } }, "type": "object" }, - "yahoohealth.StreamItem": { + "trustpilot.CategoryBusiness": { "properties": { - "category": { + "business_unit_id": { + "example": "5e18c99abe863e0001b6ff0c", "type": "string" }, - "id": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/trustpilot.CategoryBusinessTag" + }, + "type": "array" }, - "thumbnail_url": { + "display_name": { + "example": "Houzeo", "type": "string" }, - "title": { + "email": { + "example": "support@houzeo.com", "type": "string" }, - "url": { + "identifying_name": { + "example": "www.houzeo.com", "type": "string" - } - }, - "type": "object" - }, - "yahoohealth.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoohealth.ArticleResponse" + "location": { + "$ref": "#/definitions/trustpilot.CategoryBusinessLocation" }, - "msg": { - "example": "OK", + "logo_url": { + "example": "https://s3-eu-west-1.amazonaws.com/tpd/screenshotlogo-domain/example/198x149.png", "type": "string" - } - }, - "type": "object" - }, - "yahoohealth.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoohealth.CategoryResponse" - }, - "msg": { - "example": "OK", + "phone": { + "example": "(844) 448-0110", "type": "string" - } - }, - "type": "object" - }, - "yahoohealth.homeResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "recommended": { + "example": true, + "type": "boolean" + }, + "review_count": { + "example": 3473, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoohealth.HomeResponse" + "stars": { + "example": 5, + "type": "number" }, - "msg": { - "example": "OK", + "trust_score": { + "example": 4.8, + "type": "number" + }, + "trustpilot_url": { + "example": "https://www.trustpilot.com/review/www.houzeo.com", + "type": "string" + }, + "website_url": { + "example": "https://www.houzeo.com", "type": "string" } }, "type": "object" }, - "yahoolife.ArticleResponse": { + "trustpilot.CategoryBusinessLocation": { "properties": { - "author": { - "type": "string" - }, - "description": { + "address": { "type": "string" }, - "image_url": { + "city": { "type": "string" }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "provider": { + "country": { "type": "string" }, - "published_at": { + "zip_code": { "type": "string" - }, - "section": { + } + }, + "type": "object" + }, + "trustpilot.CategoryBusinessTag": { + "properties": { + "category_id": { + "example": "software_company", "type": "string" }, - "title": { + "display_name": { + "example": "Software Company", "type": "string" }, - "updated_at": { - "type": "string" + "is_predicted": { + "example": false, + "type": "boolean" }, - "url": { - "type": "string" + "is_primary": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "yahoolife.HomeResponse": { + "trustpilot.CategoryGroup": { "properties": { "items": { "items": { - "$ref": "#/definitions/yahoolife.StreamItem" + "$ref": "#/definitions/trustpilot.CategoryLink" }, "type": "array" - } - }, - "type": "object" - }, - "yahoolife.StreamItem": { - "properties": { - "id": { - "type": "string" }, - "thumbnail_url": { + "name": { + "example": "Electronics & Technology", "type": "string" }, - "title": { + "slug": { + "example": "electronics_technology", "type": "string" }, "url": { + "example": "https://www.trustpilot.com/categories/electronics_technology", "type": "string" } }, "type": "object" }, - "yahoolife.articleResponseDoc": { + "trustpilot.CategoryLink": { "properties": { - "code": { - "example": 200, - "type": "integer" + "name": { + "example": "Software Company", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoolife.ArticleResponse" + "slug": { + "example": "software_company", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://www.trustpilot.com/categories/software_company", "type": "string" } }, "type": "object" }, - "yahoolife.homeResponseDoc": { + "trustpilot.CategoryPagination": { "properties": { - "code": { - "example": 200, + "has_next_page": { + "example": true, + "type": "boolean" + }, + "next_page": { + "example": 3, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoolife.HomeResponse" + "page": { + "example": 2, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "per_page": { + "example": 20, + "type": "integer" + }, + "total_hits": { + "example": 7963, + "type": "integer" + }, + "total_pages": { + "example": 399, + "type": "integer" } }, "type": "object" }, - "yahoonews.ArticleResponse": { + "trustpilot.CategoryResponse": { "properties": { - "author": { - "type": "string" - }, - "category": { - "type": "string" + "breadcrumbs": { + "items": { + "$ref": "#/definitions/trustpilot.CategoryLink" + }, + "type": "array" }, - "description": { + "country": { + "example": "US", "type": "string" }, - "id": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/trustpilot.CategoryBusiness" + }, + "type": "array" }, - "image_url": { + "name": { + "example": "Software Company", "type": "string" }, - "keywords": { + "newest_companies": { "items": { - "type": "string" + "$ref": "#/definitions/trustpilot.CategoryBusiness" }, "type": "array" }, - "paragraphs": { + "page": { + "example": 2, + "type": "integer" + }, + "pagination": { + "$ref": "#/definitions/trustpilot.CategoryPagination" + }, + "recently_reviewed_companies": { "items": { - "type": "string" + "$ref": "#/definitions/trustpilot.CategoryBusiness" }, "type": "array" }, - "provider": { - "type": "string" - }, - "provider_url": { - "type": "string" - }, - "published_at": { - "type": "string" + "related_categories": { + "items": { + "$ref": "#/definitions/trustpilot.CategoryLink" + }, + "type": "array" }, - "title": { + "slug": { + "example": "software_company", "type": "string" }, - "updated_at": { + "sort": { + "example": "recommended", "type": "string" }, - "url": { + "trustpilot_url": { + "example": "https://www.trustpilot.com/categories/software_company", "type": "string" } }, "type": "object" }, - "yahoonews.CategoryResponse": { + "trustpilot.CategorySearchResponse": { "properties": { - "category": { - "type": "string" - }, - "items": { + "categories": { "items": { - "$ref": "#/definitions/yahoonews.StreamItem" + "$ref": "#/definitions/trustpilot.CategorySearchResult" }, "type": "array" - } - }, - "type": "object" - }, - "yahoonews.Comment": { - "properties": { - "author": { - "$ref": "#/definitions/yahoonews.CommentAuthor" }, - "body": { + "country": { + "example": "US", "type": "string" }, - "created_at": { + "locale": { + "example": "en-US", "type": "string" }, - "id": { + "query": { + "example": "openai", "type": "string" }, - "pinned": { - "type": "boolean" - }, - "reactions": { - "$ref": "#/definitions/yahoonews.CommentReactions" - }, - "reply_count": { + "size": { + "example": 3, "type": "integer" - }, - "updated_at": { - "type": "string" } }, "type": "object" }, - "yahoonews.CommentAuthor": { + "trustpilot.CategorySearchResult": { "properties": { - "avatar_url": { + "category_id": { + "example": "software_company", "type": "string" }, - "handle": { + "display_name": { + "example": "Software Company", "type": "string" }, - "has_default_avatar": { - "type": "boolean" - }, - "nickname": { + "top_level_category_id": { + "example": "electronics_technology", "type": "string" - }, - "total_comment_count": { - "type": "integer" - }, - "total_reaction_count": { - "type": "integer" } }, "type": "object" }, - "yahoonews.CommentReactions": { + "trustpilot.RelatedBusiness": { "properties": { - "clap": { - "type": "integer" + "business_unit_id": { + "example": "63e1530f2ba9106ee583e099", + "type": "string" }, - "heart": { - "type": "integer" + "display_name": { + "example": "Chatgpt", + "type": "string" }, - "laugh": { - "type": "integer" + "identifying_name": { + "example": "chatgpt.com", + "type": "string" }, - "sad": { - "type": "integer" + "logo_url": { + "example": "https://s3-eu-west-1.amazonaws.com/tpd/screenshots/example/198x149.png", + "type": "string" }, - "thumbs_down": { + "review_count": { + "example": 2720, "type": "integer" }, - "thumbs_up": { - "type": "integer" + "source": { + "example": "suggested_companies", + "type": "string" }, - "total": { - "type": "integer" + "stars": { + "example": 1.5, + "type": "number" + }, + "trust_score": { + "example": 1.6, + "type": "number" + }, + "trustpilot_url": { + "example": "https://www.trustpilot.com/review/chatgpt.com", + "type": "string" } }, "type": "object" }, - "yahoonews.CommentsResponse": { + "trustpilot.SearchAddress": { "properties": { - "comments_count": { - "type": "integer" + "approximate_area": { + "$ref": "#/definitions/trustpilot.SearchAreaBounds" }, - "content_id": { + "city": { + "example": "San Francisco", "type": "string" }, - "has_next_page": { - "type": "boolean" + "coordinates": { + "$ref": "#/definitions/trustpilot.SearchCoordinates" }, - "items": { - "items": { - "$ref": "#/definitions/yahoonews.Comment" - }, - "type": "array" + "country": { + "example": "United States", + "type": "string" }, - "next_cursor": { + "country_code": { + "example": "US", "type": "string" }, - "sort": { + "postcode": { + "example": "94105", + "type": "string" + }, + "street": { + "example": "1 Market St", "type": "string" } }, "type": "object" }, - "yahoonews.HomeResponse": { + "trustpilot.SearchAreaBounds": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/yahoonews.StreamItem" - }, - "type": "array" + "north_west": { + "$ref": "#/definitions/trustpilot.SearchCoordinates" + }, + "south_east": { + "$ref": "#/definitions/trustpilot.SearchCoordinates" } }, "type": "object" }, - "yahoonews.Image": { + "trustpilot.SearchCategory": { "properties": { - "height": { - "type": "integer" + "id": { + "example": "software_company", + "type": "string" }, - "url": { + "name": { + "example": "Software Company", "type": "string" }, - "width": { - "type": "integer" + "primary": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "yahoonews.RelatedResponse": { + "trustpilot.SearchCoordinates": { "properties": { - "content_id": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/yahoonews.StreamItem" - }, - "type": "array" + "lat": { + "example": 39.7837304, + "type": "number" }, - "next_cursor": { - "type": "string" + "lon": { + "example": -100.445882, + "type": "number" } }, "type": "object" }, - "yahoonews.RepliesResponse": { + "trustpilot.SearchResponse": { "properties": { - "comment_id": { - "type": "string" - }, - "content_id": { + "country": { + "example": "US", "type": "string" }, - "has_next_page": { - "type": "boolean" - }, "items": { "items": { - "$ref": "#/definitions/yahoonews.Comment" + "$ref": "#/definitions/trustpilot.SearchResult" }, "type": "array" }, - "next_cursor": { + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 5, + "type": "integer" + }, + "query": { + "example": "openai", "type": "string" }, - "sort": { + "search_mode": { + "example": "keyword", "type": "string" }, - "total_count": { + "total_hits": { + "example": 147, + "type": "integer" + }, + "total_pages": { + "example": 30, "type": "integer" } }, "type": "object" }, - "yahoonews.StreamItem": { + "trustpilot.SearchResult": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "type": "string" - }, - "comment_count": { - "type": "integer" + "address": { + "$ref": "#/definitions/trustpilot.SearchAddress" }, - "id": { + "business_unit_id": { + "example": "630f21bc9f08b0302a52590d", "type": "string" }, - "images": { + "categories": { "items": { - "$ref": "#/definitions/yahoonews.Image" + "$ref": "#/definitions/trustpilot.SearchCategory" }, "type": "array" }, - "published_at": { + "country_code": { + "example": "FR", "type": "string" }, - "source": { + "display_name": { + "example": "OpenAI", "type": "string" }, - "source_url": { + "email": { + "example": "hello@example.com", "type": "string" }, - "summary": { + "identifying_name": { + "example": "openai.com", "type": "string" }, - "thumbnail_url": { + "logo_url": { + "example": "https://s3-eu-west-1.amazonaws.com/tpd/logos/example/0x0.png", "type": "string" }, - "title": { + "phone": { + "example": "+1-555-555-5555", "type": "string" }, - "url": { + "predicted_top_category": { + "$ref": "#/definitions/trustpilot.SearchCategory" + }, + "review_count": { + "example": 984, + "type": "integer" + }, + "stars": { + "example": 1.5, + "type": "number" + }, + "trust_score": { + "example": 1.3, + "type": "number" + }, + "trustpilot_url": { + "example": "https://www.trustpilot.com/review/openai.com", + "type": "string" + }, + "verified": { + "example": false, + "type": "boolean" + }, + "website_url": { + "example": "https://openai.com", "type": "string" } }, "type": "object" }, - "yahoonews.SuggestResponse": { + "trustpilot.businessHeader": { "properties": { - "fetched_at": { + "claimed": { + "example": false, + "type": "boolean" + }, + "name": { + "example": "OpenAI", "type": "string" }, - "query": { - "example": "chatgpt", + "rating": { + "example": 1.5, + "type": "number" + }, + "review_count": { + "example": 984, + "type": "integer" + }, + "slug": { + "example": "openai.com", "type": "string" }, - "source_url": { + "trust_score": { + "example": 1.3, + "type": "number" + }, + "trustpilot_url": { + "example": "https://www.trustpilot.com/review/openai.com", "type": "string" }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" + "website_url": { + "example": "https://openai.com", + "type": "string" } }, "type": "object" }, - "yahoonews.articleResponseDoc": { + "trustpilot.businessProfileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.ArticleResponse" + "$ref": "#/definitions/trustpilot.BusinessResponse" }, "msg": { "example": "OK", @@ -185940,14 +185646,14 @@ }, "type": "object" }, - "yahoonews.categoryResponseDoc": { + "trustpilot.businessRelatedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.CategoryResponse" + "$ref": "#/definitions/trustpilot.BusinessRelatedResponse" }, "msg": { "example": "OK", @@ -185956,14 +185662,14 @@ }, "type": "object" }, - "yahoonews.commentsResponseDoc": { + "trustpilot.businessReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.CommentsResponse" + "$ref": "#/definitions/trustpilot.BusinessReviewsResponse" }, "msg": { "example": "OK", @@ -185972,14 +185678,14 @@ }, "type": "object" }, - "yahoonews.homeResponseDoc": { + "trustpilot.businessSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.HomeResponse" + "$ref": "#/definitions/trustpilot.SearchResponse" }, "msg": { "example": "OK", @@ -185988,14 +185694,14 @@ }, "type": "object" }, - "yahoonews.relatedResponseDoc": { + "trustpilot.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.RelatedResponse" + "$ref": "#/definitions/trustpilot.CategoriesResponse" }, "msg": { "example": "OK", @@ -186004,14 +185710,14 @@ }, "type": "object" }, - "yahoonews.repliesResponseDoc": { + "trustpilot.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.RepliesResponse" + "$ref": "#/definitions/trustpilot.CategoryResponse" }, "msg": { "example": "OK", @@ -186020,14 +185726,14 @@ }, "type": "object" }, - "yahoonews.suggestResponseDoc": { + "trustpilot.categorySearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.SuggestResponse" + "$ref": "#/definitions/trustpilot.CategorySearchResponse" }, "msg": { "example": "OK", @@ -186036,664 +185742,665 @@ }, "type": "object" }, - "yahoosearch.ImageResult": { + "twitch.ChannelGame": { "properties": { - "domain": { - "example": "example.com", + "id": { "type": "string" }, - "height": { - "example": 1080, - "type": "integer" + "name": { + "example": "League of Legends", + "type": "string" }, - "image_url": { - "example": "https://example.com/chatgpt.jpg", + "slug": { + "example": "league-of-legends", + "type": "string" + } + }, + "type": "object" + }, + "twitch.ChannelResponse": { + "properties": { + "id": { "type": "string" }, - "page_url": { - "example": "https://example.com/article", + "is_live": { + "example": true, + "type": "boolean" + }, + "is_partner": { + "example": true, + "type": "boolean" + }, + "last_broadcast_title": { "type": "string" }, - "position": { - "example": 1, - "type": "integer" + "login": { + "type": "string" }, - "thumbnail_url": { + "primary_color_hex": { + "example": "8205B3", "type": "string" }, - "title": { - "example": "ChatGPT logo", + "primary_team": { + "$ref": "#/definitions/twitch.ChannelTeam" + }, + "profile_image_url": { "type": "string" }, - "width": { - "example": 1920, - "type": "integer" + "stream": { + "$ref": "#/definitions/twitch.ChannelStream" } }, "type": "object" }, - "yahoosearch.ImagesResponse": { + "twitch.ChannelStream": { "properties": { - "query": { - "example": "chatgpt", + "game": { + "$ref": "#/definitions/twitch.ChannelGame" + }, + "id": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.ImageResult" - }, - "type": "array" + "started_at": { + "example": "2026-08-14T07:18:46Z", + "type": "string" } }, "type": "object" }, - "yahoosearch.LocalResponse": { + "twitch.ChannelTeam": { "properties": { - "query": { - "example": "pizza near seattle wa", + "id": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.LocalResult" - }, - "type": "array" + "name": { + "example": "yumetalent", + "type": "string" } }, "type": "object" }, - "yahoosearch.LocalResult": { + "twitch.Clip": { "properties": { - "address": { - "example": "2001 4th Ave", + "created_at": { + "example": "2026-08-07T10:59:22Z", "type": "string" }, - "category": { - "example": "Pizza", - "type": "string" + "curator": { + "$ref": "#/definitions/twitch.ClipCurator" }, - "id": { - "example": "36383310", - "type": "string" + "duration_seconds": { + "example": 42, + "type": "number" }, - "image_url": { - "type": "string" + "game": { + "$ref": "#/definitions/twitch.ClipGame" }, - "name": { - "example": "Serious Pie Downtown", + "id": { "type": "string" }, - "open_status": { - "example": "Closed", + "thumbnail_url": { "type": "string" }, - "phone": { - "example": "(206) 838-7388", + "title": { "type": "string" }, - "position": { - "example": 1, - "type": "integer" - }, - "price_range": { - "example": "$$", + "url": { "type": "string" }, - "rating": { - "example": 4, - "type": "number" - }, - "review_count": { - "example": 4870, + "view_count": { + "example": 5370, "type": "integer" } }, "type": "object" }, - "yahoosearch.NewsResponse": { + "twitch.ClipCurator": { "properties": { - "query": { - "example": "chatgpt", + "display_name": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.NewsResult" - }, - "type": "array" + "id": { + "type": "string" + }, + "login": { + "type": "string" } }, "type": "object" }, - "yahoosearch.NewsResult": { + "twitch.ClipGame": { "properties": { - "age": { - "example": "29 minutes ago", - "type": "string" - }, - "description": { - "type": "string" - }, - "position": { - "example": 1, - "type": "integer" - }, - "source": { - "example": "AFP", - "type": "string" - }, - "thumbnail_url": { + "id": { "type": "string" }, - "title": { - "example": "OpenAI announces ChatGPT update", + "name": { + "example": "League of Legends", "type": "string" }, - "url": { - "example": "https://example.com/article", + "slug": { + "example": "league-of-legends", "type": "string" } }, "type": "object" }, - "yahoosearch.SearchPagination": { + "twitch.ClipsResponse": { "properties": { - "next_page": { - "example": 2, - "type": "integer" + "clips": { + "items": { + "$ref": "#/definitions/twitch.Clip" + }, + "type": "array" }, - "page": { - "example": 1, + "count": { + "example": 20, "type": "integer" - } - }, - "type": "object" - }, - "yahoosearch.SearchResponse": { - "properties": { - "pagination": { - "$ref": "#/definitions/yahoosearch.SearchPagination" }, - "query": { - "example": "openai", + "login": { "type": "string" - }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.SearchResult" - }, - "type": "array" } }, "type": "object" }, - "yahoosearch.SearchResult": { + "twitch.ScheduleCategory": { "properties": { - "description": { - "example": "OpenAI is an AI research and deployment company. Our mission is to ensure that artificial general intelligence benefits all of humanity.", + "box_art_url": { "type": "string" }, - "hostname": { - "example": "openai.com", + "id": { "type": "string" }, - "position": { - "example": 1, - "type": "integer" - }, - "title": { - "example": "OpenAI | Research & Deployment", + "name": { + "example": "League of Legends", "type": "string" }, - "url": { - "example": "https://openai.com/", + "slug": { + "example": "league-of-legends", "type": "string" } }, "type": "object" }, - "yahoosearch.SuggestResponse": { + "twitch.ScheduleResponse": { "properties": { - "fetched_at": { + "channel": { "type": "string" }, - "query": { - "example": "chatgpt", + "count": { + "example": 5, + "type": "integer" + }, + "next_segment_at": { + "example": "2026-08-15T12:00:00Z", "type": "string" }, - "source_url": { + "next_segment_id": { "type": "string" }, - "suggestions": { + "segments": { "items": { - "$ref": "#/definitions/yahoosearch.Suggestion" + "$ref": "#/definitions/twitch.ScheduleSegment" }, "type": "array" } }, "type": "object" }, - "yahoosearch.Suggestion": { + "twitch.ScheduleSegment": { "properties": { - "entity": { - "$ref": "#/definitions/yahoosearch.SuggestionEntity" + "cancelled_until": { + "type": "string" }, - "text": { - "example": "chatgpt free", + "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" }, - "yahoosearch.SuggestionEntity": { + "twitch.SearchCategory": { "properties": { - "description": { - "type": "string" - }, - "image_url": { + "box_art_url": { "type": "string" }, - "subtitle": { + "id": { "type": "string" }, - "type": { - "example": "company", + "slug": { + "example": "valorant", "type": "string" } }, "type": "object" }, - "yahoosearch.VideoResult": { + "twitch.SearchChannel": { "properties": { - "description": { + "game_name": { "type": "string" }, - "domain": { - "example": "YouTube", + "id": { "type": "string" }, - "duration": { - "example": "00:29", - "type": "string" + "is_live": { + "example": true, + "type": "boolean" }, - "position": { - "example": 1, - "type": "integer" + "is_verified": { + "type": "boolean" }, - "thumbnail_url": { + "login": { "type": "string" }, - "title": { - "example": "ChatGPT Demo", + "profile_image_url": { "type": "string" }, - "url": { - "example": "https://www.youtube.com/watch?v=example", + "stream_title": { "type": "string" + }, + "viewers_count": { + "example": 3361, + "type": "integer" } }, "type": "object" }, - "yahoosearch.VideosResponse": { + "twitch.SearchResponse": { "properties": { + "count": { + "example": 10, + "type": "integer" + }, "query": { - "example": "chatgpt", "type": "string" }, "results": { "items": { - "$ref": "#/definitions/yahoosearch.VideoResult" + "$ref": "#/definitions/twitch.SearchResult" }, "type": "array" } }, "type": "object" }, - "yahoosearch.imagesResponseDoc": { + "twitch.SearchResult": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "$ref": "#/definitions/twitch.SearchCategory" }, - "data": { - "$ref": "#/definitions/yahoosearch.ImagesResponse" + "channel": { + "$ref": "#/definitions/twitch.SearchChannel" }, - "msg": { - "example": "OK", + "text": { + "type": "string" + }, + "type": { + "description": "\"category\" or \"channel\"", + "example": "channel", "type": "string" } }, "type": "object" }, - "yahoosearch.localResponseDoc": { + "twitch.Stream": { "properties": { - "code": { - "example": 200, - "type": "integer" + "broadcaster": { + "$ref": "#/definitions/twitch.StreamBroadcaster" }, - "data": { - "$ref": "#/definitions/yahoosearch.LocalResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "preview_image_url": { "type": "string" - } - }, - "type": "object" - }, - "yahoosearch.newsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosearch.NewsResponse" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "title": { "type": "string" + }, + "viewers_count": { + "example": 56596, + "type": "integer" } }, "type": "object" }, - "yahoosearch.searchResponseDoc": { + "twitch.StreamBroadcaster": { "properties": { - "code": { - "example": 200, - "type": "integer" + "display_name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoosearch.SearchResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "is_partner": { + "example": true, + "type": "boolean" + }, + "login": { "type": "string" } }, "type": "object" }, - "yahoosearch.suggestResponseDoc": { + "twitch.StreamsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosearch.SuggestResponse" - }, - "msg": { - "example": "OK", + "game": { "type": "string" + }, + "streams": { + "items": { + "$ref": "#/definitions/twitch.Stream" + }, + "type": "array" } }, "type": "object" }, - "yahoosearch.videosResponseDoc": { + "twitch.TeamMember": { "properties": { - "code": { - "example": 200, - "type": "integer" + "display_name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoosearch.VideosResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "is_live": { + "example": true, + "type": "boolean" + }, + "login": { + "type": "string" + }, + "profile_image_url": { "type": "string" + }, + "viewers_count": { + "example": 38251, + "type": "integer" } }, "type": "object" }, - "yahooshopping.ArticleResponse": { + "twitch.TeamResponse": { "properties": { - "author": { + "banner_url": { "type": "string" }, "description": { "type": "string" }, - "image_url": { + "display_name": { + "example": "Yume Talent", "type": "string" }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "provider": { + "id": { "type": "string" }, - "published_at": { + "logo_url": { "type": "string" }, - "section": { - "type": "string" + "member_count": { + "example": 5, + "type": "integer" }, - "title": { - "type": "string" + "members": { + "items": { + "$ref": "#/definitions/twitch.TeamMember" + }, + "type": "array" }, - "updated_at": { + "name": { "type": "string" }, - "url": { + "owner_login": { "type": "string" } }, "type": "object" }, - "yahooshopping.CategoryPaginate": { + "twitch.TopGame": { "properties": { - "next_page": { - "example": 2, - "type": "integer" + "box_art_url": { + "type": "string" }, - "page": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "yahooshopping.CategoryResponse": { - "properties": { - "category": { + "id": { "type": "string" }, - "items": { + "name": { + "example": "Dota 2", + "type": "string" + }, + "slug": { + "example": "dota-2", + "type": "string" + }, + "tags": { "items": { - "$ref": "#/definitions/yahooshopping.StreamItem" + "type": "string" }, "type": "array" }, - "pagination": { - "$ref": "#/definitions/yahooshopping.CategoryPaginate" + "viewers_count": { + "example": 390201, + "type": "integer" } }, "type": "object" }, - "yahooshopping.HomeResponse": { + "twitch.TopGamesResponse": { "properties": { - "items": { + "count": { + "example": 20, + "type": "integer" + }, + "games": { "items": { - "$ref": "#/definitions/yahooshopping.StreamItem" + "$ref": "#/definitions/twitch.TopGame" }, "type": "array" } }, "type": "object" }, - "yahooshopping.ShoppingListItem": { + "twitch.Video": { "properties": { - "currency": { - "type": "string" + "game": { + "$ref": "#/definitions/twitch.ClipGame" }, - "image_url": { + "id": { "type": "string" }, - "price": { - "type": "number" + "length_seconds": { + "example": 20818, + "type": "integer" }, - "sale_price": { - "type": "number" + "owner": { + "$ref": "#/definitions/twitch.VideoOwner" }, - "seller": { + "published_at": { + "example": "2022-04-02T07:10:16Z", "type": "string" }, - "title": { + "thumbnail_url": { "type": "string" }, - "url": { + "title": { "type": "string" + }, + "view_count": { + "example": 2800795, + "type": "integer" } }, "type": "object" }, - "yahooshopping.ShoppingListListing": { + "twitch.VideoOwner": { "properties": { - "image_url": { + "display_name": { "type": "string" }, - "list": { + "id": { "type": "string" }, - "title": { + "is_partner": { + "example": true, + "type": "boolean" + }, + "login": { "type": "string" } }, "type": "object" }, - "yahooshopping.ShoppingListResponse": { + "twitch.VideosResponse": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/yahooshopping.ShoppingListItem" - }, - "type": "array" + "count": { + "example": 20, + "type": "integer" }, - "list": { + "login": { "type": "string" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "yahooshopping.ShoppingListsResponse": { - "properties": { - "lists": { + "videos": { "items": { - "$ref": "#/definitions/yahooshopping.ShoppingListListing" + "$ref": "#/definitions/twitch.Video" }, "type": "array" } }, "type": "object" }, - "yahooshopping.StoreListing": { + "twitch.VodComment": { "properties": { - "logo_url": { + "badges": { + "items": { + "type": "string" + }, + "type": "array" + }, + "commenter": { + "$ref": "#/definitions/twitch.VodCommentCommenter" + }, + "created_at": { + "example": "2026-08-14T07:20:39Z", "type": "string" }, - "name": { + "fragments": { + "items": { + "$ref": "#/definitions/twitch.VodCommentFragment" + }, + "type": "array" + }, + "id": { "type": "string" }, - "store": { + "message": { + "type": "string" + }, + "offset_seconds": { + "example": 113, + "type": "integer" + }, + "user_color": { + "example": "#0000FF", "type": "string" } }, "type": "object" }, - "yahooshopping.StoreOffer": { + "twitch.VodCommentCommenter": { "properties": { - "brand": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "image_url": { + "display_name": { "type": "string" }, - "price": { - "type": "number" - }, - "sale_price": { - "type": "number" - }, - "title": { + "id": { "type": "string" }, - "url": { + "login": { "type": "string" } }, "type": "object" }, - "yahooshopping.StoreResponse": { + "twitch.VodCommentFragment": { "properties": { - "name": { + "emote_id": { "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/yahooshopping.StoreOffer" - }, - "type": "array" - }, - "store": { + "text": { "type": "string" } }, "type": "object" }, - "yahooshopping.StoresResponse": { + "twitch.VodCommentsResponse": { "properties": { - "stores": { + "comments": { "items": { - "$ref": "#/definitions/yahooshopping.StoreListing" + "$ref": "#/definitions/twitch.VodComment" }, "type": "array" - } - }, - "type": "object" - }, - "yahooshopping.StreamItem": { - "properties": { - "category": { - "type": "string" }, - "id": { - "type": "string" + "count": { + "example": 55, + "type": "integer" }, - "thumbnail_url": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "title": { - "type": "string" + "next_offset_seconds": { + "example": 140, + "type": "integer" }, - "url": { + "offset_seconds": { + "example": 0, + "type": "integer" + }, + "video_id": { "type": "string" } }, "type": "object" }, - "yahooshopping.articleResponseDoc": { + "twitch.channelResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.ArticleResponse" + "$ref": "#/definitions/twitch.ChannelResponse" }, "msg": { "example": "OK", @@ -186702,14 +186409,14 @@ }, "type": "object" }, - "yahooshopping.categoryResponseDoc": { + "twitch.clipsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.CategoryResponse" + "$ref": "#/definitions/twitch.ClipsResponse" }, "msg": { "example": "OK", @@ -186718,14 +186425,14 @@ }, "type": "object" }, - "yahooshopping.homeResponseDoc": { + "twitch.scheduleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.HomeResponse" + "$ref": "#/definitions/twitch.ScheduleResponse" }, "msg": { "example": "OK", @@ -186734,14 +186441,14 @@ }, "type": "object" }, - "yahooshopping.shoppingListResponseDoc": { + "twitch.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.ShoppingListResponse" + "$ref": "#/definitions/twitch.SearchResponse" }, "msg": { "example": "OK", @@ -186750,14 +186457,14 @@ }, "type": "object" }, - "yahooshopping.shoppingListsResponseDoc": { + "twitch.streamsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.ShoppingListsResponse" + "$ref": "#/definitions/twitch.StreamsResponse" }, "msg": { "example": "OK", @@ -186766,14 +186473,14 @@ }, "type": "object" }, - "yahooshopping.storeResponseDoc": { + "twitch.teamResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.StoreResponse" + "$ref": "#/definitions/twitch.TeamResponse" }, "msg": { "example": "OK", @@ -186782,14 +186489,14 @@ }, "type": "object" }, - "yahooshopping.storesResponseDoc": { + "twitch.topGamesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.StoresResponse" + "$ref": "#/definitions/twitch.TopGamesResponse" }, "msg": { "example": "OK", @@ -186798,498 +186505,408 @@ }, "type": "object" }, - "yahoosports.Broadcast": { + "twitch.videosResponseDoc": { "properties": { - "abbr": { - "example": "NFLN", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "NFL Network", + "data": { + "$ref": "#/definitions/twitch.VideosResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoosports.Game": { + "twitch.vodCommentsResponseDoc": { "properties": { - "away_score": { - "type": "integer" - }, - "away_team": { - "$ref": "#/definitions/yahoosports.TeamRef" - }, - "broadcasts": { - "items": { - "$ref": "#/definitions/yahoosports.Broadcast" - }, - "type": "array" - }, - "display_name": { - "example": "Green Bay @ Pittsburgh", - "type": "string" - }, - "home_score": { + "code": { + "example": 200, "type": "integer" }, - "home_team": { - "$ref": "#/definitions/yahoosports.TeamRef" + "data": { + "$ref": "#/definitions/twitch.VodCommentsResponse" }, - "id": { - "example": "nfl.g.20260813023", + "msg": { + "example": "OK", "type": "string" - }, - "slug": { - "example": "green-bay-packers-pittsburgh-steelers-20260813023", + } + }, + "type": "object" + }, + "ubereats.Address": { + "properties": { + "city": { "type": "string" }, - "start_time": { - "example": "2026-08-13T16:00:00-07:00", + "country": { "type": "string" }, - "status": { - "example": "PREGAME", + "postalCode": { "type": "string" }, - "status_display": { + "region": { "type": "string" }, - "url": { + "street": { "type": "string" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" - }, - "week": { - "type": "integer" } }, "type": "object" }, - "yahoosports.GameResponse": { + "ubereats.MenuItem": { "properties": { - "away_score": { - "type": "integer" - }, - "away_team": { - "$ref": "#/definitions/yahoosports.TeamRef" - }, - "broadcasts": { - "items": { - "$ref": "#/definitions/yahoosports.Broadcast" - }, - "type": "array" - }, - "display_name": { - "example": "Cleveland @ Detroit", - "type": "string" - }, - "fetched_at": { + "description": { "type": "string" }, - "game": { - "example": "cleveland-guardians-detroit-tigers-460811106", + "imageUrl": { "type": "string" }, - "home_score": { - "type": "integer" + "isSoldOut": { + "type": "boolean" }, - "home_team": { - "$ref": "#/definitions/yahoosports.TeamRef" + "price": { + "type": "number" }, - "id": { - "example": "mlb.g.460811106", + "title": { "type": "string" }, - "league": { - "example": "mlb", + "uuid": { + "type": "string" + } + }, + "type": "object" + }, + "ubereats.MenuResponse": { + "properties": { + "currencyCode": { "type": "string" }, - "line_score": { + "sections": { "items": { - "$ref": "#/definitions/yahoosports.LinePeriod" + "$ref": "#/definitions/ubereats.MenuSection" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "start_time": { + "storeTitle": { "type": "string" }, - "status": { - "example": "FINAL", + "storeUuid": { "type": "string" }, - "status_display": { - "example": "Final", + "url": { "type": "string" - }, - "team_stats": { + } + }, + "type": "object" + }, + "ubereats.MenuSection": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/yahoosports.TeamStatLine" + "$ref": "#/definitions/ubereats.MenuItem" }, "type": "array" }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" - }, - "week": { - "type": "integer" - }, - "winning_team_id": { + "title": { "type": "string" } }, "type": "object" }, - "yahoosports.GolfLeaderboardEntry": { + "ubereats.Restaurant": { "properties": { - "player": { - "$ref": "#/definitions/yahoosports.GolfPlayerRef" - }, - "rank": { - "example": "T1", - "type": "string" - }, - "rounds": { + "cuisineTags": { "items": { - "$ref": "#/definitions/yahoosports.GolfRoundResult" + "type": "string" }, "type": "array" }, - "score": { - "example": -5, - "type": "integer" - }, - "score_display": { - "example": "-5", + "currencyCode": { "type": "string" }, - "stats": { - "$ref": "#/definitions/yahoosports.GolfPlayerStats" + "deliveryEtaText": { + "type": "string" }, - "status": { - "example": "IN_PROGRESS", + "imageUrl": { "type": "string" }, - "thru": { - "example": 18, - "type": "integer" - } - }, - "type": "object" - }, - "yahoosports.GolfLeaderboardResponse": { - "properties": { - "count": { - "example": 156, - "type": "integer" + "isSponsored": { + "type": "boolean" }, - "entries": { - "items": { - "$ref": "#/definitions/yahoosports.GolfLeaderboardEntry" - }, - "type": "array" + "latitude": { + "type": "number" }, - "fetched_at": { + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "season": { - "example": 2026, + "rating": { + "type": "number" + }, + "reviewCount": { "type": "integer" }, - "source_url": { + "slug": { "type": "string" }, - "tour": { - "example": "pga-tour", + "storeUuid": { "type": "string" }, - "tournament": { - "$ref": "#/definitions/yahoosports.GolfTournamentRef" + "url": { + "type": "string" } }, "type": "object" }, - "yahoosports.GolfPlayerRef": { + "ubereats.Review": { "properties": { - "country": { - "example": "United States", + "createdAt": { "type": "string" }, - "id": { - "example": "golf.p.23296", + "eaterName": { "type": "string" }, - "name": { - "example": "Michael Thorbjornsen", + "formattedDate": { "type": "string" }, - "short_name": { - "example": "M. Thorbjornsen", + "text": { "type": "string" }, - "url": { + "timeSinceReview": { "type": "string" } }, "type": "object" }, - "yahoosports.GolfPlayerStats": { + "ubereats.SearchResponse": { "properties": { - "birdies": { - "example": 12, - "type": "integer" + "cityName": { + "type": "string" }, - "bogeys": { - "example": 3, - "type": "integer" + "cursor": { + "type": "string" }, - "double_bogeys": { - "example": 0, - "type": "integer" + "hasMore": { + "type": "boolean" }, - "eagles": { - "example": 1, + "offset": { "type": "integer" }, - "earnings": { - "example": "$0.00", - "type": "string" - }, - "pars": { - "example": 48, - "type": "integer" + "restaurants": { + "items": { + "$ref": "#/definitions/ubereats.Restaurant" + }, + "type": "array" } }, "type": "object" }, - "yahoosports.GolfRoundResult": { + "ubereats.StoreDetail": { "properties": { - "round": { - "example": 1, - "type": "integer" + "address": { + "$ref": "#/definitions/ubereats.Address" }, - "score": { - "example": -5, - "type": "integer" + "cuisineTags": { + "items": { + "type": "string" + }, + "type": "array" }, - "score_display": { - "example": "-5", + "currencyCode": { "type": "string" }, - "strokes": { - "example": 65, - "type": "integer" - } - }, - "type": "object" - }, - "yahoosports.GolfScheduleResponse": { - "properties": { - "count": { - "example": 41, - "type": "integer" - }, - "fetched_at": { + "heroImageUrl": { "type": "string" }, - "season": { - "example": 2026, - "type": "integer" + "isOpen": { + "type": "boolean" }, - "source_url": { - "type": "string" + "isOrderable": { + "type": "boolean" }, - "tour": { - "example": "pga-tour", - "type": "string" + "latitude": { + "type": "number" }, - "tournaments": { + "longitude": { + "type": "number" + }, + "menu": { "items": { - "$ref": "#/definitions/yahoosports.GolfTournament" + "$ref": "#/definitions/ubereats.MenuSection" }, "type": "array" - } - }, - "type": "object" - }, - "yahoosports.GolfTournament": { - "properties": { - "end_date": { - "example": "2026-08-16", - "type": "string" }, - "id": { - "example": "golf.e.23", + "phoneNumber": { "type": "string" }, - "name": { - "example": "FedEx St. Jude Championship", + "priceBucket": { "type": "string" }, - "purse": { - "example": "20000000.00", - "type": "string" + "rating": { + "type": "number" }, - "season": { - "example": 2026, + "reviewCount": { "type": "integer" }, - "start_date": { - "example": "2026-08-13", + "slug": { "type": "string" }, - "status": { - "example": "IN_PROGRESS", + "storeUuid": { + "type": "string" + }, + "title": { "type": "string" }, "url": { "type": "string" }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" + "workingHoursTagline": { + "type": "string" } }, "type": "object" }, - "yahoosports.GolfTournamentRef": { + "ubereats.StoreReviewsResponse": { "properties": { - "current_round": { - "example": 1, + "rating": { + "type": "number" + }, + "reviewCount": { "type": "integer" }, - "end_date": { - "example": "2026-08-16", - "type": "string" + "reviews": { + "items": { + "$ref": "#/definitions/ubereats.Review" + }, + "type": "array" }, - "id": { - "example": "golf.e.23", + "storeUuid": { "type": "string" + } + }, + "type": "object" + }, + "ubereats.feedResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "FedEx St. Jude Championship", - "type": "string" + "data": { + "$ref": "#/definitions/ubereats.SearchResponse" }, - "purse": { - "example": "20000000.00", - "type": "string" - }, - "rounds": { - "example": 4, - "type": "integer" - }, - "start_date": { - "example": "2026-08-13", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ubereats.menuResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "status": { - "example": "IN_PROGRESS", - "type": "string" + "data": { + "$ref": "#/definitions/ubereats.MenuResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" } }, "type": "object" }, - "yahoosports.LinePeriod": { + "ubereats.searchResponseDoc": { "properties": { - "away": { + "code": { + "example": 200, "type": "integer" }, - "home": { - "type": "integer" + "data": { + "$ref": "#/definitions/ubereats.SearchResponse" }, - "label": { - "example": "Bottom 5th", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoosports.MMAEvent": { + "ubereats.storeResponseDoc": { "properties": { - "id": { - "example": "combat.e.2144", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "UFC 324: Gaethje vs. Pimblett", - "type": "string" + "data": { + "$ref": "#/definitions/ubereats.StoreDetail" }, - "start_time": { - "example": "2026-01-25T07:12:00+08:00", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ubereats.storeReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "status": { - "example": "FINAL", + "data": { + "$ref": "#/definitions/ubereats.StoreReviewsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoosports.MMAFight": { + "ulta.Answer": { "properties": { - "card_position": { - "example": "Main", + "author": { "type": "string" }, - "current_round": { - "type": "integer" - }, - "fighter_one": { - "$ref": "#/definitions/yahoosports.MMAFighterRef" + "created_at": { + "type": "string" }, - "fighter_two": { - "$ref": "#/definitions/yahoosports.MMAFighterRef" + "helpful_votes": { + "type": "integer" }, "id": { - "example": "combat.g.13595836", - "type": "string" - }, - "start_time": { - "example": "2026-08-16T10:00:00+08:00", "type": "string" }, - "status": { - "example": "PREGAME", - "type": "string" + "is_expert": { + "type": "boolean" }, - "weight_class": { - "example": "Womens Strawweight", - "type": "string" + "not_helpful_votes": { + "type": "integer" }, - "winner_id": { + "text": { "type": "string" } }, "type": "object" }, - "yahoosports.MMAFightCardResponse": { + "ulta.CategoriesResponse": { "properties": { - "count": { - "example": 12, - "type": "integer" - }, - "event": { - "$ref": "#/definitions/yahoosports.MMAEvent" - }, - "fetched_at": { - "type": "string" - }, - "fights": { + "categories": { "items": { - "$ref": "#/definitions/yahoosports.MMAFight" + "$ref": "#/definitions/ulta.CategoryEntry" }, "type": "array" }, - "promotion": { - "example": "UFC", + "fetched_at": { "type": "string" }, "source_url": { @@ -187298,1222 +186915,1116 @@ }, "type": "object" }, - "yahoosports.MMAFighterRef": { + "ulta.CategoryEntry": { "properties": { - "country": { - "example": "United States", + "department": { + "example": "makeup-nails", "type": "string" }, - "fighting_out_of": { - "example": "United States", + "group": { + "example": "Eyes", "type": "string" }, - "headshot_url": { + "name": { + "example": "Mascara", "type": "string" }, - "id": { - "example": "combat.p.2087412", + "url": { + "example": "https://www.ulta.com/shop/makeup/eyes/mascara", "type": "string" - }, - "name": { - "example": "Mackenzie Dern", + } + }, + "type": "object" + }, + "ulta.CategoryFacet": { + "properties": { + "label": { "type": "string" }, - "rank": { - "example": 5, - "type": "integer" + "selected": { + "type": "boolean" }, - "record": { - "example": "16-5-0", + "value": { "type": "string" } }, "type": "object" }, - "yahoosports.MMAScheduleResponse": { + "ulta.CategoryResponse": { "properties": { + "category": { + "type": "string" + }, "count": { - "example": 51, "type": "integer" }, - "events": { + "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/yahoosports.MMAEvent" + "$ref": "#/definitions/ulta.CategoryFacet" }, "type": "array" }, "fetched_at": { "type": "string" }, - "promotion": { - "example": "UFC", + "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" }, - "yahoosports.MotorsportsCar": { + "ulta.ProductDetailResponse": { "properties": { - "engine": { - "example": "Mercedes M08 EQ Power+", - "type": "string" - }, - "model": { - "example": "Mercedes F1 W08 EQ Power+", + "brand_name": { "type": "string" }, - "number": { - "example": 63, - "type": "integer" + "category": { + "items": { + "type": "string" + }, + "type": "array" }, - "owner": { - "example": "Mercedes AMG Motorsport", + "currency_code": { "type": "string" - } - }, - "type": "object" - }, - "yahoosports.MotorsportsDriverRef": { - "properties": { - "id": { - "example": "motorsports.p.1490", + }, + "description": { "type": "string" }, - "name": { - "example": "George Russell", + "fetched_at": { "type": "string" }, - "url": { + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "list_price": { "type": "string" - } - }, - "type": "object" - }, - "yahoosports.MotorsportsRace": { - "properties": { - "distance_mi": { - "example": "306.12", + }, + "product_id": { "type": "string" }, - "id": { - "example": "motorsports.g.2961", + "product_name": { "type": "string" }, - "laps": { - "example": 58, - "type": "integer" + "rating": { + "type": "number" }, - "laps_completed": { - "example": 58, + "review_count": { "type": "integer" }, - "name": { - "example": "Australian Grand Prix", + "sale_price": { "type": "string" }, - "pole_winner": { - "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" - }, - "race_winner": { - "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" - }, - "start_time": { - "example": "2026-03-07T20:00:00-08:00", + "sku_id": { "type": "string" }, - "status": { - "example": "FINAL", + "source_url": { "type": "string" }, + "unavailable": { + "type": "boolean" + }, "url": { "type": "string" }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" + "variants": { + "items": { + "$ref": "#/definitions/ulta.ProductVariant" + }, + "type": "array" } }, "type": "object" }, - "yahoosports.MotorsportsRaceResponse": { + "ulta.ProductQuestionsResponse": { "properties": { "count": { - "example": 20, "type": "integer" }, "fetched_at": { "type": "string" }, - "race": { - "$ref": "#/definitions/yahoosports.MotorsportsRace" - }, - "results": { - "items": { - "$ref": "#/definitions/yahoosports.MotorsportsResult" - }, - "type": "array" + "page": { + "type": "integer" }, - "season": { - "example": 2026, + "page_size": { "type": "integer" }, - "series": { - "example": "f1", + "product_id": { "type": "string" }, + "questions": { + "items": { + "$ref": "#/definitions/ulta.Question" + }, + "type": "array" + }, "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_questions": { + "type": "integer" } }, "type": "object" }, - "yahoosports.MotorsportsResult": { + "ulta.ProductReviewsResponse": { "properties": { - "bonus_points": { - "type": "integer" - }, - "car": { - "$ref": "#/definitions/yahoosports.MotorsportsCar" + "average_rating": { + "type": "number" }, - "driver": { - "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" + "count": { + "type": "integer" }, - "fastest_lap_time": { - "example": "1:22.670", + "fetched_at": { "type": "string" }, - "laps": { - "example": 58, + "page": { "type": "integer" }, - "laps_led": { - "example": 32, + "page_size": { "type": "integer" }, - "place": { - "example": 1, - "type": "integer" + "product_id": { + "type": "string" }, - "points": { - "example": 25, + "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" }, - "starting_pos": { - "example": 1, - "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" }, - "status": { - "example": "RUNNING", - "type": "string" + "recommended_ratio": { + "type": "number" }, - "time": { - "example": "1:23:06.801", + "reviews": { + "items": { + "$ref": "#/definitions/ulta.Review" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_reviews": { + "type": "integer" } }, "type": "object" }, - "yahoosports.MotorsportsScheduleResponse": { + "ulta.ProductSummary": { "properties": { - "count": { - "example": 24, - "type": "integer" + "brand_name": { + "type": "string" }, - "fetched_at": { + "discount": { "type": "string" }, - "races": { - "items": { - "$ref": "#/definitions/yahoosports.MotorsportsRace" - }, - "type": "array" + "image_url": { + "type": "string" }, - "season": { - "example": 2026, - "type": "integer" + "is_limited_stock": { + "type": "boolean" }, - "series": { - "example": "f1", + "list_price": { "type": "string" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "yahoosports.NewsArticle": { - "properties": { - "author": { - "example": "Yahoo Sports Staff", + "product_id": { "type": "string" }, - "category": { - "example": "Sports", + "product_name": { "type": "string" }, - "published": { - "example": "2026-08-13T15:25:12Z", + "promo_text": { "type": "string" }, - "summary": { + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "sale_price": { "type": "string" }, - "title": { - "example": "NFL news, live updates: ...", + "sku_id": { "type": "string" }, + "sponsored": { + "type": "boolean" + }, "url": { "type": "string" + }, + "variant_label": { + "type": "string" } }, "type": "object" }, - "yahoosports.NewsResponse": { + "ulta.ProductVariant": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/yahoosports.NewsArticle" - }, - "type": "array" - }, - "count": { - "example": 50, - "type": "integer" - }, - "fetched_at": { + "name": { "type": "string" }, - "league": { - "example": "nfl", + "product_id": { "type": "string" }, - "source_url": { + "sku_id": { "type": "string" } }, "type": "object" }, - "yahoosports.OlympicsCountryMedals": { + "ulta.Question": { "properties": { - "bronze": { - "example": 11, + "answer_count": { "type": "integer" }, - "country": { - "example": "Norway", - "type": "string" - }, - "gold": { - "example": 18, - "type": "integer" + "answers": { + "items": { + "$ref": "#/definitions/ulta.Answer" + }, + "type": "array" }, - "ioc_code": { - "example": "NOR", + "author": { "type": "string" }, - "iso_code": { - "example": "NOR", + "created_at": { "type": "string" }, - "rank": { - "example": 1, - "type": "integer" + "id": { + "type": "string" }, - "silver": { - "example": 12, - "type": "integer" + "location": { + "type": "string" }, - "total": { - "example": 41, - "type": "integer" + "text": { + "type": "string" } }, "type": "object" }, - "yahoosports.OlympicsGames": { + "ulta.Review": { "properties": { - "end_date": { - "example": "2026-02-22T08:00:00+08:00", + "author": { "type": "string" }, - "name": { - "example": "Milan 2026 Winter Olympics", + "body": { "type": "string" }, - "season": { - "example": 2026, + "created_at": { + "type": "string" + }, + "headline": { + "type": "string" + }, + "helpful_votes": { "type": "integer" }, - "short_name": { - "example": "Milan", + "id": { "type": "string" }, - "start_date": { - "example": "2026-02-06T08:00:00+08:00", + "location": { + "type": "string" + }, + "not_helpful_votes": { + "type": "integer" + }, + "rating": { + "type": "integer" + }, + "updated_at": { "type": "string" + }, + "verified_purchase": { + "type": "boolean" } }, "type": "object" }, - "yahoosports.OlympicsMedalsResponse": { + "ulta.SearchResponse": { "properties": { "count": { - "example": 93, "type": "integer" }, "fetched_at": { "type": "string" }, - "games": { - "$ref": "#/definitions/yahoosports.OlympicsGames" + "has_more": { + "type": "boolean" }, - "medals": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/yahoosports.OlympicsCountryMedals" + "$ref": "#/definitions/ulta.ProductSummary" }, "type": "array" }, + "query": { + "type": "string" + }, + "result_count": { + "type": "integer" + }, "source_url": { "type": "string" } }, "type": "object" }, - "yahoosports.PlayerDetail": { + "ulta.Store": { "properties": { - "age": { - "type": "integer" - }, - "college": { + "address": { "type": "string" }, - "draft_pick": { - "example": 34, - "type": "integer" + "city": { + "type": "string" }, - "draft_round": { - "example": 7, - "type": "integer" + "country": { + "type": "string" }, - "draft_year": { - "example": 2025, - "type": "integer" + "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" }, - "experience_years": { + "id": { "type": "integer" }, - "height": { - "example": "6'4\"", - "type": "string" + "is_permanently_closed": { + "type": "boolean" }, - "id": { - "example": "nfl.p.42019", - "type": "string" + "latitude": { + "type": "number" }, - "injury": { - "example": "Questionable", - "type": "string" + "longitude": { + "type": "number" }, "name": { - "example": "John Williams", "type": "string" }, - "number": { - "example": "73", + "phone": { "type": "string" }, - "position": { - "example": "G", + "postal_code": { "type": "string" }, - "season_stats": { + "services": { "items": { - "$ref": "#/definitions/yahoosports.SeasonStatCategory" + "type": "string" }, "type": "array" }, - "status": { - "example": "ACT", + "slug": { "type": "string" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" + "state": { + "type": "string" }, "url": { "type": "string" - }, - "weight": { - "type": "integer" } }, "type": "object" }, - "yahoosports.PlayerResponse": { + "ulta.StoreResponse": { "properties": { + "count": { + "type": "integer" + }, "fetched_at": { "type": "string" }, - "league": { - "example": "nfl", - "type": "string" + "lat": { + "type": "number" }, - "player": { - "$ref": "#/definitions/yahoosports.PlayerDetail" + "lng": { + "type": "number" + }, + "radius_meters": { + "type": "integer" + }, + "search": { + "type": "string" }, "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/ulta.Store" + }, + "type": "array" } }, "type": "object" }, - "yahoosports.RosterPlayer": { + "ulta.SuggestProduct": { "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", + "brand_name": { "type": "string" }, - "position": { - "example": "G", + "image_url": { "type": "string" }, - "status": { - "example": "ACT", + "product_name": { "type": "string" }, "url": { "type": "string" - }, - "weight": { - "type": "integer" } }, "type": "object" }, - "yahoosports.RosterResponse": { + "ulta.SuggestResponse": { "properties": { "count": { - "example": 53, "type": "integer" }, "fetched_at": { "type": "string" }, - "league": { - "example": "nfl", - "type": "string" - }, - "players": { + "first_top_result": { "items": { - "$ref": "#/definitions/yahoosports.RosterPlayer" + "$ref": "#/definitions/ulta.SuggestProduct" }, "type": "array" }, + "query": { + "type": "string" + }, "source_url": { "type": "string" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" + "suggestions": { + "items": { + "$ref": "#/definitions/ulta.Suggestion" + }, + "type": "array" } }, "type": "object" }, - "yahoosports.ScoreboardResponse": { + "ulta.Suggestion": { "properties": { - "count": { - "example": 8, - "type": "integer" - }, - "date": { - "example": "2026-08-13", - "type": "string" - }, - "fetched_at": { + "label": { "type": "string" }, - "games": { + "top_results": { "items": { - "$ref": "#/definitions/yahoosports.Game" + "$ref": "#/definitions/ulta.SuggestProduct" }, "type": "array" }, - "league": { - "example": "nfl", - "type": "string" - }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "yahoosports.SeasonStatCategory": { + "ulta.categoriesResponseDoc": { "properties": { - "category": { - "example": "passing", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "stats": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "data": { + "$ref": "#/definitions/ulta.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yahoosports.StandingsEntry": { + "ulta.categoryResponseDoc": { "properties": { - "away_record": { - "example": "35-25", - "type": "string" - }, - "clinched_division": { - "type": "boolean" - }, - "clinched_playoff": { - "type": "boolean" - }, - "games_back": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "home_record": { - "example": "29-31", - "type": "string" + "data": { + "$ref": "#/definitions/ulta.CategoryResponse" }, - "last10": { - "example": "5-5", + "msg": { + "example": "OK", "type": "string" - }, - "position": { - "example": 3, + } + }, + "type": "object" + }, + "ulta.productDetailResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "record": { - "$ref": "#/definitions/yahoosports.TeamRecord" + "data": { + "$ref": "#/definitions/ulta.ProductDetailResponse" }, - "streak": { - "example": "L-5", + "msg": { + "example": "OK", "type": "string" - }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" } }, "type": "object" }, - "yahoosports.StandingsGroup": { + "ulta.productQuestionsResponseDoc": { "properties": { - "conference": { - "example": "American League", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "division": { - "example": "East", - "type": "string" + "data": { + "$ref": "#/definitions/ulta.ProductQuestionsResponse" }, - "entries": { - "items": { - "$ref": "#/definitions/yahoosports.StandingsEntry" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yahoosports.StandingsResponse": { + "ulta.productReviewsResponseDoc": { "properties": { - "count": { - "example": 30, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { + "data": { + "$ref": "#/definitions/ulta.ProductReviewsResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ulta.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "groups": { - "items": { - "$ref": "#/definitions/yahoosports.StandingsGroup" - }, - "type": "array" + "data": { + "$ref": "#/definitions/ulta.SearchResponse" }, - "league": { - "example": "mlb", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ulta.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { + "data": { + "$ref": "#/definitions/ulta.StoreResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoosports.Stat": { + "ulta.suggestResponseDoc": { "properties": { - "id": { - "example": "RUNS", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "label": { - "example": "Runs", - "type": "string" + "data": { + "$ref": "#/definitions/ulta.SuggestResponse" }, - "value": { - "example": "6", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoosports.TeamDetail": { + "upwork.FreelancerFeedback": { "properties": { - "abbreviation": { - "example": "GB", + "client_name": { "type": "string" }, - "conference": { - "example": "NFC", + "comment": { "type": "string" }, - "division": { - "example": "NFC North", + "date": { "type": "string" }, - "id": { - "example": "nfl.t.9", - "type": "string" + "rating": { + "type": "number" }, - "location": { - "example": "Green Bay", + "title": { "type": "string" + } + }, + "type": "object" + }, + "upwork.FreelancerResponse": { + "properties": { + "feedback": { + "items": { + "$ref": "#/definitions/upwork.FreelancerFeedback" + }, + "type": "array" }, - "logo": { + "hourly_rate": { "type": "string" }, - "name": { - "example": "Green Bay Packers", + "id": { "type": "string" }, - "nickname": { - "example": "Packers", - "type": "string" + "job_success_score": { + "type": "integer" }, - "primary_color": { - "example": "203731", + "local_time": { "type": "string" }, - "record": { - "$ref": "#/definitions/yahoosports.TeamRecord" - }, - "secondary_color": { - "example": "FFB612", + "location": { "type": "string" }, - "short_name": { - "example": "Green Bay", + "name": { "type": "string" }, - "standing_summary": { - "example": "4th NFC North", + "overview": { "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" + "rating": { + "type": "number" }, - "losses": { + "review_count": { "type": "integer" }, - "points": { - "description": "Points is soccer's own standings metric (3 per win, 1 per draw);\nomitted for every other league.", - "example": 85, + "title": { + "type": "string" + }, + "total_hours": { "type": "integer" }, - "ties": { + "total_jobs": { "type": "integer" }, - "win_pct": { - "example": ".533", + "url": { "type": "string" }, - "wins": { - "type": "integer" + "verified": { + "type": "boolean" } }, "type": "object" }, - "yahoosports.TeamRef": { + "upwork.JobClient": { "properties": { - "abbreviation": { - "example": "GB", - "type": "string" - }, - "id": { - "example": "nfl.t.9", - "type": "string" - }, - "location": { - "example": "Green Bay", + "company_size": { "type": "string" }, - "logo": { + "country": { "type": "string" }, - "name": { - "example": "Green Bay Packers", + "hires": { "type": "string" }, - "nickname": { - "example": "Packers", + "industry": { "type": "string" }, - "primary_color": { - "example": "203731", + "location": { "type": "string" }, - "secondary_color": { - "example": "FFB612", + "member_since": { "type": "string" }, - "short_name": { - "example": "Green Bay", + "total_hours": { "type": "string" }, - "url": { - "example": "https://sports.yahoo.com/nfl/teams/green-bay/", + "total_spent": { "type": "string" } }, "type": "object" }, - "yahoosports.TeamResponse": { + "upwork.JobResponse": { "properties": { - "fetched_at": { + "applicant_countries": { + "items": { + "type": "string" + }, + "type": "array" + }, + "budget_type": { "type": "string" }, - "league": { - "example": "nfl", + "client": { + "$ref": "#/definitions/upwork.JobClient" + }, + "country": { "type": "string" }, - "source_url": { + "currency": { "type": "string" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamDetail" - } - }, - "type": "object" - }, - "yahoosports.TeamScheduleResponse": { - "properties": { - "count": { - "example": 25, - "type": "integer" + "description": { + "type": "string" }, - "fetched_at": { + "duration": { "type": "string" }, - "games": { + "employment_type": { "items": { - "$ref": "#/definitions/yahoosports.Game" + "type": "string" }, "type": "array" }, - "league": { - "example": "nfl", + "experience_level": { "type": "string" }, - "source_url": { - "type": "string" - }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" - } - }, - "type": "object" - }, - "yahoosports.TeamStatLine": { - "properties": { - "stats": { - "items": { - "$ref": "#/definitions/yahoosports.Stat" - }, - "type": "array" + "fixed_budget": { + "type": "number" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" - } - }, - "type": "object" - }, - "yahoosports.TennisChampion": { - "properties": { - "name": { - "example": "Daniil Medvedev", - "type": "string" + "hourly_max": { + "type": "number" }, - "player_id": { - "example": "ten.p.19603", - "type": "string" - } - }, - "type": "object" - }, - "yahoosports.TennisMatch": { - "properties": { - "event": { - "example": "Men's Singles", - "type": "string" + "hourly_min": { + "type": "number" }, "id": { - "example": "ten.g.15754498", "type": "string" }, - "league": { - "example": "ATP", + "location_type": { "type": "string" }, - "round": { - "example": "Round of 128", + "posted_at": { "type": "string" }, - "sets": { - "items": { - "$ref": "#/definitions/yahoosports.TennisSetScore" - }, - "type": "array" - }, - "side1": { - "items": { - "$ref": "#/definitions/yahoosports.TennisPlayerRef" - }, - "type": "array" - }, - "side1_seed": { - "type": "integer" + "project_type": { + "type": "string" }, - "side2": { - "items": { - "$ref": "#/definitions/yahoosports.TennisPlayerRef" - }, - "type": "array" + "proposals": { + "type": "string" }, - "side2_seed": { - "type": "integer" + "title": { + "type": "string" }, - "start_time": { - "example": "2026-08-13T19:35:00-07:00", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "upwork.JobSummary": { + "properties": { + "budget_text": { "type": "string" }, - "status": { - "example": "IN_PROGRESS", + "budget_type": { + "description": "\"hourly\" or \"fixed\"", "type": "string" }, - "status_display": { - "example": "Set 2", + "description": { "type": "string" }, - "surface": { - "example": "Hard", + "duration": { "type": "string" }, - "tournament": { - "example": "Western & Southern Open", + "experience_level": { "type": "string" }, - "url": { + "id": { + "description": "ID is Upwork's own opaque job identifier (the digits after \"~\" in the\njob's URL), suitable for Service.Job.", "type": "string" }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" + "posted_at": { + "type": "string" }, - "winner_ids": { + "skills": { "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", + "title": { "type": "string" }, - "rank": { - "example": 64, - "type": "integer" - }, - "short_name": { - "example": "M. Landaluce", + "url": { "type": "string" } }, "type": "object" }, - "yahoosports.TennisRankingEntry": { + "upwork.SearchResponse": { "properties": { - "age": { - "example": 24, - "type": "integer" - }, - "country": { - "example": "Italy", - "type": "string" - }, - "name": { - "example": "Jannik Sinner", - "type": "string" + "jobs": { + "items": { + "$ref": "#/definitions/upwork.JobSummary" + }, + "type": "array" }, - "points": { - "example": 13450, + "page": { "type": "integer" }, - "rank": { - "example": 1, - "type": "integer" + "query": { + "type": "string" } }, "type": "object" }, - "yahoosports.TennisRankingsResponse": { + "upwork.freelancerResponseDoc": { "properties": { - "count": { - "example": 100, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "rankings": { - "items": { - "$ref": "#/definitions/yahoosports.TennisRankingEntry" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/upwork.FreelancerResponse" }, - "type": { - "example": "mens-singles", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoosports.TennisScheduleResponse": { + "upwork.jobResponseDoc": { "properties": { - "count": { - "example": 86, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/upwork.JobResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "tournaments": { - "items": { - "$ref": "#/definitions/yahoosports.TennisTournament" - }, - "type": "array" } }, "type": "object" }, - "yahoosports.TennisScoreboardResponse": { + "upwork.searchResponseDoc": { "properties": { - "count": { - "example": 20, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "matches": { - "items": { - "$ref": "#/definitions/yahoosports.TennisMatch" - }, - "type": "array" + "data": { + "$ref": "#/definitions/upwork.SearchResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoosports.TennisSetScore": { + "usage.usageBillingStateDoc": { "properties": { - "set": { - "example": 1, + "allow_overage": { + "example": true, + "type": "boolean" + }, + "created_at": { + "example": "2026-04-01T00:00:00Z", + "type": "string" + }, + "credits_remaining": { + "example": 398750, "type": "integer" }, - "side1_score": { - "example": 6, + "credits_used": { + "example": 1250, "type": "integer" }, - "side1_tiebreak": { + "currency": { + "example": "usd", + "type": "string" + }, + "daily_credit_limit": { + "example": 25000, "type": "integer" }, - "side2_score": { - "example": 3, + "daily_credits_remaining": { + "example": 24100, "type": "integer" }, - "side2_tiebreak": { + "daily_credits_used": { + "example": 900, "type": "integer" - } - }, - "type": "object" - }, - "yahoosports.TennisTournament": { - "properties": { - "champion": { - "$ref": "#/definitions/yahoosports.TennisChampion" }, - "end_time": { - "example": "2026-01-11T04:00:00-08:00", + "daily_key": { + "example": "2026-04-22", "type": "string" }, - "gender": { - "example": "MEN", - "type": "string" + "expected_subscription_amount_cents": { + "example": 7900, + "type": "integer" }, - "id": { - "example": "ten.e.2042", - "type": "string" + "expected_total_amount_cents": { + "example": 7900, + "type": "integer" }, - "match_type": { - "example": "SINGLES", - "type": "string" + "hard_limit": { + "example": false, + "type": "boolean" }, - "name": { - "example": "Brisbane International presented by Evie", - "type": "string" + "included_credits": { + "example": 400000, + "type": "integer" }, - "start_time": { - "example": "2026-01-03T16:00:00-08:00", - "type": "string" + "overage_credits": { + "example": 0, + "type": "integer" }, - "status": { - "example": "FINAL", + "period_end": { + "example": "2026-05-01T00:00:00Z", "type": "string" }, - "surface": { - "example": "Hard", + "period_key": { + "example": "2026-04", "type": "string" }, - "url": { + "period_start": { + "example": "2026-04-01T00:00:00Z", "type": "string" }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" - } - }, - "type": "object" - }, - "yahoosports.Venue": { - "properties": { - "city": { + "plan": { + "example": "Pro", "type": "string" }, - "country": { + "pricing_source": { + "example": "plan_default", "type": "string" }, - "name": { - "example": "Acrisure Stadium", + "subscription_price_cents": { + "example": 7900, + "type": "integer" + }, + "updated_at": { + "example": "2026-04-22T12:00:00Z", "type": "string" }, - "state": { + "user_id": { + "example": "user-1", "type": "string" } }, "type": "object" }, - "yahoosports.gameResponseDoc": { + "usage.usageEndpointItemDoc": { "properties": { - "code": { - "example": 200, + "charged_requests": { + "example": 220, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosports.GameResponse" + "credits": { + "example": 660, + "type": "integer" }, - "msg": { - "example": "OK", + "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" }, - "yahoosports.golfLeaderboardResponseDoc": { + "usage.usageEndpointsDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "from": { + "example": "2026-04-01T00:00:00Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoosports.GolfLeaderboardResponse" + "items": { + "items": { + "$ref": "#/definitions/usage.usageEndpointItemDoc" + }, + "type": "array" }, - "msg": { - "example": "OK", + "range": { + "example": "period", + "type": "string" + }, + "to": { + "example": "2026-05-01T00:00:00Z", "type": "string" } }, "type": "object" }, - "yahoosports.golfScheduleResponseDoc": { + "usage.usageEndpointsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.GolfScheduleResponse" + "$ref": "#/definitions/usage.usageEndpointsDoc" }, "msg": { "example": "OK", @@ -188522,30 +188033,40 @@ }, "type": "object" }, - "yahoosports.mmaFightCardResponseDoc": { + "usage.usageOverviewDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "billing": { + "$ref": "#/definitions/usage.usageBillingStateDoc" }, - "data": { - "$ref": "#/definitions/yahoosports.MMAFightCardResponse" + "from": { + "example": "2026-04-01T00:00:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "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" }, - "yahoosports.mmaScheduleResponseDoc": { + "usage.usageOverviewResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.MMAScheduleResponse" + "$ref": "#/definitions/usage.usageOverviewDoc" }, "msg": { "example": "OK", @@ -188554,46 +188075,66 @@ }, "type": "object" }, - "yahoosports.motorsportsRaceResponseDoc": { + "usage.usagePlatformAdjacencyDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "generated_at": { + "example": "2026-09-06T02:00:00Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoosports.MotorsportsRaceResponse" + "platforms": { + "items": { + "$ref": "#/definitions/usage.usagePlatformAdjacencyItemDoc" + }, + "type": "array" }, - "msg": { - "example": "OK", + "users": { + "example": 97, + "type": "integer" + }, + "window": { + "example": "lifetime", "type": "string" } }, "type": "object" }, - "yahoosports.motorsportsScheduleResponseDoc": { + "usage.usagePlatformAdjacencyItemDoc": { "properties": { - "code": { - "example": 200, + "co_used": { + "items": { + "$ref": "#/definitions/usage.usagePlatformCoUseDoc" + }, + "type": "array" + }, + "platform": { + "example": "tiktok", + "type": "string" + }, + "requests": { + "example": 2410, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosports.MotorsportsScheduleResponse" + "top_endpoints": { + "items": { + "$ref": "#/definitions/usage.usagePlatformEndpointTotalDoc" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "users": { + "example": 9, + "type": "integer" } }, "type": "object" }, - "yahoosports.newsResponseDoc": { + "usage.usagePlatformAdjacencyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.NewsResponse" + "$ref": "#/definitions/usage.usagePlatformAdjacencyDoc" }, "msg": { "example": "OK", @@ -188602,78 +188143,92 @@ }, "type": "object" }, - "yahoosports.olympicsMedalsResponseDoc": { + "usage.usagePlatformCoUseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoosports.OlympicsMedalsResponse" - }, - "msg": { - "example": "OK", + "platform": { + "example": "instagram", "type": "string" + }, + "users": { + "example": 4, + "type": "integer" } }, "type": "object" }, - "yahoosports.playerResponseDoc": { + "usage.usagePlatformEndpointTotalDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoosports.PlayerResponse" - }, - "msg": { - "example": "OK", + "endpoint": { + "example": "tiktok/search", "type": "string" + }, + "requests": { + "example": 1830, + "type": "integer" } }, "type": "object" }, - "yahoosports.rosterResponseDoc": { + "usage.usageRecentIPItemDoc": { "properties": { - "code": { - "example": 200, + "error_count": { + "example": 6, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosports.RosterResponse" + "ip": { + "example": "203.0.113.10", + "type": "string" }, - "msg": { - "example": "OK", + "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" }, - "yahoosports.scoreboardResponseDoc": { + "usage.usageRecentIPsDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "from": { + "example": "2026-04-01T00:00:00Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoosports.ScoreboardResponse" + "items": { + "items": { + "$ref": "#/definitions/usage.usageRecentIPItemDoc" + }, + "type": "array" }, - "msg": { - "example": "OK", + "range": { + "example": "period", + "type": "string" + }, + "to": { + "example": "2026-05-01T00:00:00Z", "type": "string" } }, "type": "object" }, - "yahoosports.standingsResponseDoc": { + "usage.usageRecentIPsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.StandingsResponse" + "$ref": "#/definitions/usage.usageRecentIPsDoc" }, "msg": { "example": "OK", @@ -188682,62 +188237,107 @@ }, "type": "object" }, - "yahoosports.teamResponseDoc": { + "usage.usageRequestSummaryDoc": { "properties": { - "code": { - "example": 200, + "avg_latency_ms": { + "example": 824.5, + "type": "number" + }, + "distinct_ip_count": { + "example": 3, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosports.TeamResponse" + "error_requests": { + "example": 30, + "type": "integer" }, - "msg": { - "example": "OK", + "last_request_at": { + "example": "2026-04-22T12:00:00Z", "type": "string" + }, + "requests": { + "example": 420, + "type": "integer" + }, + "success_requests": { + "example": 390, + "type": "integer" } }, "type": "object" }, - "yahoosports.teamScheduleResponseDoc": { + "usage.usageTimeseriesDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "bucket": { + "example": "day", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoosports.TeamScheduleResponse" + "from": { + "example": "2026-04-01T00:00:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "items": { + "items": { + "$ref": "#/definitions/usage.usageTimeseriesItemDoc" + }, + "type": "array" + }, + "range": { + "example": "period", + "type": "string" + }, + "to": { + "example": "2026-05-01T00:00:00Z", "type": "string" } }, "type": "object" }, - "yahoosports.tennisRankingsResponseDoc": { + "usage.usageTimeseriesItemDoc": { "properties": { - "code": { - "example": 200, + "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" }, - "data": { - "$ref": "#/definitions/yahoosports.TennisRankingsResponse" + "credits": { + "example": 84, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "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" }, - "yahoosports.tennisScheduleResponseDoc": { + "usage.usageTimeseriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.TennisScheduleResponse" + "$ref": "#/definitions/usage.usageTimeseriesDoc" }, "msg": { "example": "OK", @@ -188746,26 +188346,42 @@ }, "type": "object" }, - "yahoosports.tennisScoreboardResponseDoc": { + "usage.usageWindowSummaryDoc": { "properties": { - "code": { - "example": 200, + "charged_requests": { + "example": 380, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosports.TennisScoreboardResponse" + "credits": { + "example": 1140, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "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" }, - "yahootech.ArticleResponse": { + "usatoday.ArticleResponse": { "properties": { - "author": { - "type": "string" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, "description": { "type": "string" @@ -188773,11 +188389,8 @@ "image_url": { "type": "string" }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "is_accessible_for_free": { + "type": "boolean" }, "paragraphs": { "items": { @@ -188785,9 +188398,6 @@ }, "type": "array" }, - "provider": { - "type": "string" - }, "published_at": { "type": "string" }, @@ -188806,59 +188416,117 @@ }, "type": "object" }, - "yahootech.CategoryPaginate": { + "usatoday.AuthorArticle": { "properties": { - "next_page": { - "example": 2, - "type": "integer" + "description": { + "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "image_url": { + "type": "string" + }, + "published_label": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "yahootech.CategoryResponse": { + "usatoday.AuthorResponse": { "properties": { - "category": { + "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/yahootech.StreamItem" + "$ref": "#/definitions/usatoday.HeadlineItem" }, "type": "array" }, - "pagination": { - "$ref": "#/definitions/yahootech.CategoryPaginate" + "section": { + "type": "string" } }, "type": "object" }, - "yahootech.HomeResponse": { + "usatoday.NewsResponse": { "properties": { "items": { "items": { - "$ref": "#/definitions/yahootech.StreamItem" + "$ref": "#/definitions/usatoday.HeadlineItem" }, "type": "array" } }, "type": "object" }, - "yahootech.StreamItem": { + "usatoday.Section": { "properties": { - "category": { - "type": "string" - }, - "id": { - "type": "string" - }, - "thumbnail_url": { + "name": { "type": "string" }, - "title": { + "slug": { "type": "string" }, "url": { @@ -188867,14 +188535,25 @@ }, "type": "object" }, - "yahootech.articleResponseDoc": { + "usatoday.SectionsResponse": { + "properties": { + "sections": { + "items": { + "$ref": "#/definitions/usatoday.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "usatoday.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahootech.ArticleResponse" + "$ref": "#/definitions/usatoday.ArticleResponse" }, "msg": { "example": "OK", @@ -188883,14 +188562,14 @@ }, "type": "object" }, - "yahootech.categoryResponseDoc": { + "usatoday.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahootech.CategoryResponse" + "$ref": "#/definitions/usatoday.AuthorResponse" }, "msg": { "example": "OK", @@ -188899,14 +188578,14 @@ }, "type": "object" }, - "yahootech.homeResponseDoc": { + "usatoday.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahootech.HomeResponse" + "$ref": "#/definitions/usatoday.HeadlinesResponse" }, "msg": { "example": "OK", @@ -188915,609 +188594,508 @@ }, "type": "object" }, - "yelp.AddressDetails": { + "usatoday.newsResponseDoc": { "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/usatoday.NewsResponse" }, - "state": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yelp.BusinessAttribute": { + "usatoday.sectionsResponseDoc": { "properties": { - "alias": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/usatoday.SectionsResponse" }, - "value": { + "msg": { + "example": "OK", "type": "string" - }, - "values": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "yelp.BusinessItem": { + "user.userAPIKeyItemDoc": { "properties": { - "address": { + "created_at": { + "example": "2026-04-22T12:00:00Z", "type": "string" }, - "address_details": { - "$ref": "#/definitions/yelp.AddressDetails" - }, - "alias": { + "expires_at": { + "example": "2026-04-23T12:00:00Z", "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "claimed": { - "type": "boolean" - }, - "closed": { - "type": "boolean" + "id": { + "example": "2f8c3c7c4d8f4a4bb4bcb2d2f9e7f8f1", + "type": "string" }, - "coordinates": { - "$ref": "#/definitions/yelp.Coordinates" + "key_prefix": { + "example": "abcd1234", + "type": "string" }, - "encoded_id": { + "key_suffix": { + "example": "ef90", "type": "string" }, - "id": { - "example": "tonys-pizza-napoletana-san-francisco", + "last_used_at": { + "example": "2026-04-22T11:58:00Z", "type": "string" }, - "image": { + "last_used_ip": { + "example": "203.0.113.10", "type": "string" }, - "name": { + "masked_key": { + "example": "abcd1234...ef90", "type": "string" }, - "neighborhoods": { - "items": { - "type": "string" - }, - "type": "array" + "rotated_at": { + "example": "2026-04-22T12:00:00Z", + "type": "string" }, - "phone": { + "source": { + "example": "manual_rotate", "type": "string" }, - "phone_number": { + "status": { + "example": "active", "type": "string" }, - "photos": { + "updated_at": { + "example": "2026-04-22T12:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "user.userAPIKeysDoc": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/user.userAPIKeyItemDoc" }, "type": "array" - }, - "price": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "review_count": { + } + }, + "type": "object" + }, + "user.userAPIKeysResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/user.userAPIKeysDoc" }, - "website": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yelp.Coordinates": { + "user.userBrowserLanguageDoc": { "properties": { - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "updated": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "yelp.MobileBusinessMenuResponse": { + "user.userBrowserLanguageReq": { "properties": { - "id": { - "example": "pequods-pizza-chicago-3", + "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" }, - "items": { - "items": { - "$ref": "#/definitions/yelp.MobileMenuItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/user.userBrowserLanguageDoc" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yelp.MobileBusinessPhotosResponse": { + "user.userMeDoc": { "properties": { + "email": { + "example": "operator@example.com", + "type": "string" + }, "id": { - "example": "pequods-pizza-chicago-3", + "example": "user-1", "type": "string" }, - "limit": { - "example": 20, - "type": "integer" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "photos": { - "items": { - "$ref": "#/definitions/yelp.MobilePhotoItem" - }, - "type": "array" + "plan": { + "example": "Pro", + "type": "string" }, - "total": { - "example": 6052, - "type": "integer" + "username": { + "example": "operator", + "type": "string" } }, "type": "object" }, - "yelp.MobileBusinessResponse": { + "user.userMeResponseDoc": { "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" + "code": { + "example": 200, + "type": "integer" }, - "neighborhoods": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/user.userMeDoc" }, - "phone": { + "msg": { + "example": "OK", "type": "string" - }, - "phone_number": { + } + }, + "type": "object" + }, + "user.userRevealAPIKeyDoc": { + "properties": { + "api_key": { + "example": "7d0f3f6a5f6c4b91a6e3f5d91ef7dc7e5c7b0c8b4f2b4e57a7d8f1e2c3b4a5d6", "type": "string" }, - "photo_count": { + "key": { + "$ref": "#/definitions/user.userAPIKeyItemDoc" + } + }, + "type": "object" + }, + "user.userRevealAPIKeyResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "photos": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/user.userRevealAPIKeyDoc" }, - "price": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "user.userRotateAPIKeyDoc": { + "properties": { + "active_key": { + "$ref": "#/definitions/user.userAPIKeyItemDoc" }, - "rating": { - "type": "number" - }, - "review_count": { + "grace_period_seconds": { + "example": 86400, "type": "integer" }, - "url": { - "type": "string" - }, - "website": { + "new_api_key": { + "example": "7d0f3f6a5f6c4b91a6e3f5d91ef7dc7e5c7b0c8b4f2b4e57a7d8f1e2c3b4a5d6", "type": "string" }, - "year_established": { - "type": "integer" + "previous_key": { + "$ref": "#/definitions/user.userAPIKeyItemDoc" } }, "type": "object" }, - "yelp.MobileBusinessReviewHighlightsResponse": { + "user.userRotateAPIKeyResponseDoc": { "properties": { - "highlights": { - "items": { - "$ref": "#/definitions/yelp.MobileReviewHighlight" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "example": "pequods-pizza-chicago-3", - "type": "string" + "data": { + "$ref": "#/definitions/user.userRotateAPIKeyDoc" }, - "total": { - "example": 5, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yelp.MobileBusinessReviewsResponse": { + "usmagazine.AuthorLink": { "properties": { - "id": { - "example": "pequods-pizza-chicago-3", + "type": { "type": "string" }, - "limit": { - "example": 20, - "type": "integer" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "reviews": { - "items": { - "$ref": "#/definitions/yelp.MobileReviewItem" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "yelp.MobileBusinessReviewsSearchResponse": { + "usmagazine.AuthorResponse": { "properties": { - "id": { - "example": "pequods-pizza-chicago-3", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/usmagazine.HeadlineItem" + }, + "type": "array" }, - "reviews": { + "biography": { "items": { - "$ref": "#/definitions/yelp.MobileReviewSearchItem" + "type": "string" }, "type": "array" }, - "term": { - "example": "crust", + "links": { + "items": { + "$ref": "#/definitions/usmagazine.AuthorLink" + }, + "type": "array" + }, + "name": { "type": "string" }, - "total": { - "example": 20, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "yelp.MobileGeocodeResponse": { + "usmagazine.HeadlineItem": { "properties": { - "address": { - "example": "1600 Amphitheatre Parkway, Mountain View, CA", - "type": "string" - }, - "address_line_1": { + "author": { "type": "string" }, - "city": { + "image_url": { "type": "string" }, - "coordinates": { - "$ref": "#/definitions/yelp.Coordinates" - }, - "country": { + "published_at": { "type": "string" }, - "county": { + "summary": { "type": "string" }, - "display_name": { + "title": { "type": "string" }, - "postal_code": { + "type": { "type": "string" }, - "state": { + "url": { "type": "string" - }, - "yelp_available": { - "type": "boolean" } }, "type": "object" }, - "yelp.MobileMenuItem": { + "usptoppubs.DetailResponse": { "properties": { - "alias": { + "abstract": { "type": "string" }, - "description": { - "type": "string" + "applicant_names": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { + "application_number": { + "example": "19/048819", "type": "string" }, - "photo": { + "assignee_name": { "type": "string" }, - "photo_count": { - "type": "integer" + "claims": { + "items": { + "type": "string" + }, + "type": "array" }, - "price": { + "cpc_codes": { "type": "string" }, - "review_count": { - "type": "integer" - } - }, - "type": "object" - }, - "yelp.MobilePhotoItem": { - "properties": { - "caption": { + "database": { + "example": "US-PGPUB", "type": "string" }, - "height": { - "type": "integer" + "description": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { + "fetched_at": { "type": "string" }, - "share_url": { + "filing_date": { + "example": "2025-02-07", "type": "string" }, - "time_created": { - "type": "integer" + "guid": { + "example": "US-20260238009-A1", + "type": "string" }, - "url": { + "inventors_short": { "type": "string" }, - "width": { - "type": "integer" - } - }, - "type": "object" - }, - "yelp.MobileReviewHighlight": { - "properties": { - "identifier": { + "ipc_codes": { "type": "string" }, - "photo_url": { + "kind_codes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "language": { + "example": "EN", "type": "string" }, - "review_count": { + "page_count": { "type": "integer" }, - "review_id": { + "publication_date": { + "example": "2026-08-13", "type": "string" }, - "sentence_html": { + "publication_number": { + "example": "US20260238009A1", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "title": { + "example": "HOME GRID FOR IMPROVED EFFICIENCY OF SOLAR ENERGY", "type": "string" } }, "type": "object" }, - "yelp.MobileReviewItem": { + "usptoppubs.SearchResponse": { "properties": { - "author": { + "fetched_at": { "type": "string" }, - "author_location": { - "type": "string" + "num_found": { + "example": 500, + "type": "integer" }, - "author_review_count": { + "page": { + "example": 0, "type": "integer" }, - "id": { - "type": "string" + "per_page": { + "example": 20, + "type": "integer" }, - "language": { + "query": { + "example": "battery", "type": "string" }, - "rating": { - "type": "number" - }, - "share_url": { - "type": "string" + "results": { + "items": { + "$ref": "#/definitions/usptoppubs.SearchResult" + }, + "type": "array" }, - "text": { + "source_url": { "type": "string" - }, - "time_modified": { - "type": "integer" } }, "type": "object" }, - "yelp.MobileReviewSearchItem": { + "usptoppubs.SearchResult": { "properties": { - "author": { - "type": "string" + "applicant_names": { + "items": { + "type": "string" + }, + "type": "array" }, - "author_location": { + "application_number": { + "example": "15/620,213", "type": "string" }, - "author_review_count": { - "type": "integer" - }, - "excerpt_html": { + "assignee_name": { "type": "string" }, - "id": { + "cpc_codes": { "type": "string" }, - "language": { + "database": { + "example": "USPAT", "type": "string" }, - "rating": { - "type": "number" - }, - "share_url": { + "filing_date": { + "example": "2017-06-12", "type": "string" }, - "time_modified": { - "type": "integer" - } - }, - "type": "object" - }, - "yelp.MobileSearchResponse": { - "properties": { - "limit": { - "example": 20, - "type": "integer" + "guid": { + "example": "US-10758101-B2", + "type": "string" }, - "location": { - "example": "San Francisco, CA", + "inventors_short": { "type": "string" }, - "offset": { - "example": 0, - "type": "integer" + "ipc_codes": { + "type": "string" }, - "results": { + "kind_codes": { "items": { - "$ref": "#/definitions/yelp.BusinessItem" + "type": "string" }, "type": "array" }, - "term": { - "example": "pizza", + "language": { + "example": "EN", "type": "string" }, - "total": { - "example": 240, - "type": "integer" - } - }, - "type": "object" - }, - "yelp.mobileBusinessMenuResponseDoc": { - "properties": { - "code": { - "example": 200, + "page_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yelp.MobileBusinessMenuResponse" - }, - "msg": { - "example": "OK", + "publication_date": { + "example": "2020-09-01", "type": "string" - } - }, - "type": "object" - }, - "yelp.mobileBusinessPhotosResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yelp.MobileBusinessPhotosResponse" }, - "msg": { - "example": "OK", + "publication_number": { + "example": "US10758101B2", "type": "string" - } - }, - "type": "object" - }, - "yelp.mobileBusinessResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yelp.MobileBusinessResponse" }, - "msg": { - "example": "OK", + "title": { + "example": "UPRIGHT VACUUM CLEANER WITH BATTERY SUPPORT PLATE", "type": "string" } }, "type": "object" }, - "yelp.mobileBusinessReviewHighlightsResponseDoc": { + "usptoppubs.detailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yelp.MobileBusinessReviewHighlightsResponse" + "$ref": "#/definitions/usptoppubs.DetailResponse" }, "msg": { "example": "OK", @@ -189526,14 +189104,14 @@ }, "type": "object" }, - "yelp.mobileBusinessReviewsResponseDoc": { + "usptoppubs.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yelp.MobileBusinessReviewsResponse" + "$ref": "#/definitions/usptoppubs.SearchResponse" }, "msg": { "example": "OK", @@ -189542,99 +189120,66 @@ }, "type": "object" }, - "yelp.mobileBusinessReviewsSearchResponseDoc": { + "valnet.AuthorSocialLink": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yelp.MobileBusinessReviewsSearchResponse" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "yelp.mobileGeocodeResponseDoc": { + "vanguardng.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "byline": { + "type": "string" }, - "data": { - "$ref": "#/definitions/yelp.MobileGeocodeResponse" + "published_at": { + "type": "string" }, - "msg": { - "example": "OK", + "summary": { "type": "string" - } - }, - "type": "object" - }, - "yelp.mobileSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yelp.MobileSearchResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "yoox.CategoriesResponse": { + "vanguardng.AuthorResponse": { "properties": { - "departments": { + "articles": { "items": { - "$ref": "#/definitions/yoox.DepartmentCategories" + "$ref": "#/definitions/vanguardng.AuthorArticle" }, "type": "array" - } - }, - "type": "object" - }, - "yoox.Category": { - "properties": { - "name": { - "type": "string" }, - "slug": { + "feed_url": { "type": "string" }, - "url": { + "name": { "type": "string" - } - }, - "type": "object" - }, - "yoox.DepartmentCategories": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/yoox.Category" - }, - "type": "array" }, - "department": { + "scanned": { + "type": "integer" + }, + "section": { "type": "string" } }, "type": "object" }, - "yoox.Designer": { + "vanityfair.AuthorArticle": { "properties": { - "name": { + "published_at": { "type": "string" }, - "slug": { + "title": { "type": "string" }, "url": { @@ -189643,856 +189188,685 @@ }, "type": "object" }, - "yoox.DesignersResponse": { + "vanityfair.AuthorResponse": { "properties": { - "count": { - "type": "integer" - }, - "department": { - "type": "string" - }, - "designers": { + "articles": { "items": { - "$ref": "#/definitions/yoox.Designer" + "$ref": "#/definitions/vanityfair.AuthorArticle" }, "type": "array" - } - }, - "type": "object" - }, - "yoox.Detail": { - "properties": { - "brand": { - "type": "string" }, - "category": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "currency": { + "image_url": { "type": "string" }, - "description": { + "job_title": { "type": "string" }, - "id": { + "name": { "type": "string" }, - "images": { + "social_links": { "items": { "type": "string" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, "url": { "type": "string" } }, "type": "object" }, - "yoox.Facets": { + "variety.AuthorResponse": { "properties": { - "colors": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "sizes": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "sorts": { + "has_next_page": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "social_links": { "items": { - "type": "string" + "$ref": "#/definitions/variety.AuthorSocialLink" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "yoox.Product": { + "variety.AuthorSocialLink": { "properties": { - "brand": { + "platform": { "type": "string" }, - "currency": { + "url": { "type": "string" - }, + } + }, + "type": "object" + }, + "vestiaire.Brand": { + "properties": { "id": { + "example": "50", "type": "string" }, - "image_url": { - "type": "string" - }, - "in_stock": { - "type": "boolean" - }, "name": { + "example": "Chanel", "type": "string" }, - "price": { - "type": "number" - }, "url": { + "example": "https://www.vestiairecollective.com/chanel/", "type": "string" } }, "type": "object" }, - "yoox.SearchResponse": { + "vestiaire.BrandsResponse": { "properties": { - "count": { - "type": "integer" + "brands": { + "items": { + "$ref": "#/definitions/vestiaire.Brand" + }, + "type": "array" }, - "department": { + "fetched_at": { + "example": "2026-09-09T12:00:00Z", "type": "string" }, - "facets": { - "$ref": "#/definitions/yoox.Facets" - }, - "limit": { - "type": "integer" - }, - "page": { + "total": { + "example": 13693, "type": "integer" + } + }, + "type": "object" + }, + "vestiaire.CategoriesResponse": { + "properties": { + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" }, - "products": { + "universes": { "items": { - "$ref": "#/definitions/yoox.Product" + "$ref": "#/definitions/vestiaire.Universe" }, "type": "array" - }, - "query": { - "type": "string" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "yoox.categoriesDoc": { + "vestiaire.Category": { "properties": { - "code": { - "example": 200, + "children": { + "items": { + "$ref": "#/definitions/vestiaire.Category" + }, + "type": "array" + }, + "count": { + "example": 82421, "type": "integer" }, - "data": { - "$ref": "#/definitions/yoox.CategoriesResponse" + "id": { + "example": "5", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Bags", "type": "string" } }, "type": "object" }, - "yoox.designersDoc": { + "vestiaire.ConditionsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yoox.DesignersResponse" + "conditions": { + "items": { + "$ref": "#/definitions/vestiaire.FacetValue" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { + "example": "2026-09-09T12:00:00Z", "type": "string" } }, "type": "object" }, - "yoox.productDoc": { + "vestiaire.FacetValue": { "properties": { - "code": { - "example": 200, + "count": { + "example": 119169, "type": "integer" }, - "data": { - "$ref": "#/definitions/yoox.Detail" + "id": { + "example": "50", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Chanel", "type": "string" } }, "type": "object" }, - "yoox.searchDoc": { + "vestiaire.PriceRange": { "properties": { - "code": { - "example": 200, + "max_cents": { + "example": 9765700, "type": "integer" }, - "data": { - "$ref": "#/definitions/yoox.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "min_cents": { + "example": 700, + "type": "integer" } }, "type": "object" }, - "youtube.Caption": { + "vestiaire.ProductRef": { "properties": { - "duration": { - "type": "number" + "id": { + "example": "6444", + "type": "string" }, - "start": { - "type": "number" + "name": { + "example": "Off-White", + "type": "string" }, - "text": { + "parent_id": { + "example": "2", "type": "string" } }, "type": "object" }, - "youtube.ChannelFeedResponse": { + "vestiaire.ProductResponse": { "properties": { - "channel_id": { - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", - "type": "string" + "available": { + "example": true, + "type": "boolean" }, - "channel_title": { - "example": "OpenAI", - "type": "string" + "brand": { + "$ref": "#/definitions/vestiaire.ProductRef" }, - "channel_url": { - "example": "https://www.youtube.com/@OpenAI", + "category": { + "$ref": "#/definitions/vestiaire.ProductRef" + }, + "color": { + "example": "Black", "type": "string" }, - "continuation_token": { - "example": "NEXT_TOKEN", + "condition": { + "example": "Never worn", "type": "string" }, - "handle": { - "example": "@OpenAI", + "currency": { + "example": "USD", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/youtube.SearchItem" - }, - "type": "array" + "description": { + "example": "Black leather jacket from Off-White for women. Never worn.", + "type": "string" }, - "query": { - "example": "gpt", + "fetched_at": { + "example": "2026-09-09T12:00:00Z", "type": "string" }, - "thumbnail": { - "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "id": { + "example": "70860454", "type": "string" - } - }, - "type": "object" - }, - "youtube.ChannelShort": { - "properties": { - "position": { - "example": 1, + }, + "in_stock": { + "example": false, + "type": "boolean" + }, + "like_count": { + "example": 2, "type": "integer" }, - "thumbnail": { - "example": "https://i.ytimg.com/vi/abc123xyz89/oar2.jpg", + "material": { + "example": "Leather", "type": "string" }, - "title": { - "example": "OpenAI demo clip", - "type": "string" + "model": { + "$ref": "#/definitions/vestiaire.ProductRef" }, - "url": { - "example": "https://www.youtube.com/shorts/abc123xyz89", + "name": { + "example": "Leather biker jacket", "type": "string" }, - "video_id": { - "example": "abc123xyz89", - "type": "string" + "negotiable": { + "example": true, + "type": "boolean" }, - "view_count": { - "example": "1.2M views", - "type": "string" - } - }, - "type": "object" - }, - "youtube.ChannelShortsResponse": { - "properties": { - "channel_id": { - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", - "type": "string" + "pictures": { + "items": { + "type": "string" + }, + "type": "array" }, - "channel_title": { - "example": "OpenAI", + "price_cents": { + "example": 31100, + "type": "integer" + }, + "reserved": { + "example": false, + "type": "boolean" + }, + "seller": { + "$ref": "#/definitions/vestiaire.ProductSeller" + }, + "size": { + "example": "L", "type": "string" }, - "channel_url": { - "example": "https://www.youtube.com/@OpenAI", + "size_standard": { + "example": "International", "type": "string" }, - "handle": { - "example": "@OpenAI", + "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" }, - "shorts": { - "items": { - "$ref": "#/definitions/youtube.ChannelShort" - }, - "type": "array" + "universe": { + "example": "Women", + "type": "string" }, - "thumbnail": { - "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "url": { + "example": "https://www.vestiairecollective.com/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml", "type": "string" } }, "type": "object" }, - "youtube.Comment": { + "vestiaire.ProductSeller": { "properties": { - "channel_id": { + "badge": { + "example": "Common", "type": "string" }, - "comment_id": { + "country": { + "example": "United States", "type": "string" }, - "content": { + "country_iso": { + "example": "US", "type": "string" }, - "continuation_token": { + "id": { + "example": "36526194", "type": "string" }, - "likes_count": { + "products_listed": { + "example": 23, "type": "integer" }, - "published_time": { - "type": "string" - }, - "reply_count": { + "products_sold": { + "example": 8, "type": "integer" }, - "user_name": { + "username": { + "example": "michelle36526194", "type": "string" } }, "type": "object" }, - "youtube.CommentResponse": { + "vestiaire.SearchFacets": { "properties": { - "comments": { + "brands": { "items": { - "$ref": "#/definitions/youtube.Comment" + "$ref": "#/definitions/vestiaire.FacetValue" }, "type": "array" }, - "continuation_token": { - "type": "string" - } - }, - "type": "object" - }, - "youtube.PlaylistResponse": { - "properties": { - "channel_id": { - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", - "type": "string" - }, - "channel_title": { - "example": "OpenAI", - "type": "string" - }, - "continuation_token": { - "example": "NEXT_TOKEN", - "type": "string" - }, - "items": { + "categories": { "items": { - "$ref": "#/definitions/youtube.SearchItem" + "$ref": "#/definitions/vestiaire.FacetValue" }, "type": "array" }, - "playlist_id": { - "example": "PL1234567890abcdef", - "type": "string" - }, - "thumbnail": { - "example": "https://i.ytimg.com/vi/abc123xyz89/hqdefault.jpg", - "type": "string" - }, - "title": { - "example": "OpenAI Podcast", - "type": "string" - }, - "url": { - "example": "https://www.youtube.com/playlist?list=PL1234567890abcdef", - "type": "string" - }, - "video_count": { - "example": "12 videos", - "type": "string" + "conditions": { + "items": { + "$ref": "#/definitions/vestiaire.FacetValue" + }, + "type": "array" } }, "type": "object" }, - "youtube.Profile": { + "vestiaire.SearchItem": { "properties": { - "bio": { - "example": "OpenAI’s mission is to ensure that artificial general intelligence benefits all of humanity.", + "brand": { + "example": "Chanel", "type": "string" }, - "channel_id": { - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "brand_id": { + "example": "50", "type": "string" }, - "channel_name": { - "example": "OpenAI", + "color": { + "example": "Black", "type": "string" }, - "channel_url": { - "example": "http://www.youtube.com/@OpenAI", + "country": { + "example": "US", "type": "string" }, "created_at": { - "example": "2025-07-12T08:46:11.740932549Z", + "example": "2026-09-08T10:00:03Z", "type": "string" }, - "id": { - "example": "fe03dcedad8ab90c5f81eb4a405a464b", + "currency": { + "example": "USD", "type": "string" }, - "joined_date": { - "example": "2017-03-10T00:00:00Z", + "id": { + "example": "70816051", "type": "string" }, - "links": { - "example": [ - "twitter.com/openai", - "linkedin.com/company/openai", - "openai.com" - ], - "items": { - "type": "string" - }, - "type": "array" + "in_stock": { + "example": false, + "type": "boolean" }, - "profile_pic": { - "example": "https://yt3.googleusercontent.com/MopgmVAFV9BqlzOJ-UINtmutvEPcNe5IbKMmP_4vZZo3vnJXcZGtybUBsXaEVxkmxKyGqX9R=s900-c-k-c0x00ffffff-no-rj", - "type": "string" + "likes": { + "example": 1, + "type": "integer" }, - "region": { - "example": "United States", + "model": { + "example": "Timeless/Classique Chain", "type": "string" }, - "stats": { - "$ref": "#/definitions/youtube.ProfileStats" - }, - "updated_at": { - "example": "2025-07-12T08:46:11.740932749Z", + "name": { + "example": "Timeless/Classique Chain leather backpack", "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": { - "example": [ - "HD", - "CC" - ], + "pictures": { "items": { "type": "string" }, "type": "array" }, - "channel_id": { - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", - "type": "string" - }, - "channel_thumbnail": { - "example": "https://yt3.ggpht.com/example=s68-c-k-c0x00ffffff-no-rj", - "type": "string" - }, - "channel_title": { - "example": "OpenAI", - "type": "string" - }, - "description_snippet": { - "example": "A concise walkthrough of GPT features.", - "type": "string" - }, - "duration": { - "example": "12:34", - "type": "string" - }, - "duration_seconds": { - "example": 754, + "price_cents": { + "example": 270000, "type": "integer" }, - "handle": { - "example": "@OpenAI", + "seller_id": { + "example": "28924234", "type": "string" }, - "is_live": { - "type": "boolean" - }, - "is_short": { - "type": "boolean" - }, - "is_verified": { + "sold": { + "example": false, "type": "boolean" }, - "playlist_id": { - "example": "PL1234567890abcdef", - "type": "string" - }, - "position": { - "example": 1, - "type": "integer" - }, - "published_text": { - "example": "2 days ago", - "type": "string" - }, - "short_view_count": { - "example": "123K views", - "type": "string" - }, - "subscriber_count": { - "example": "1.93M subscribers", - "type": "string" - }, - "thumbnail": { - "example": "https://i.ytimg.com/vi/abc123/hq720.jpg", - "type": "string" - }, - "title": { - "example": "ChatGPT Explained", - "type": "string" - }, - "type": { - "example": "video", - "type": "string" - }, "url": { - "example": "https://www.youtube.com/watch?v=abc123", - "type": "string" - }, - "video_count": { - "example": "9 lessons", - "type": "string" - }, - "video_id": { - "example": "abc123xyz89", - "type": "string" - }, - "view_count": { - "example": "123,456 views", + "example": "https://www.vestiairecollective.com/women-bags/backpacks/chanel/black-leather-timeless-classique-chain-chanel-backpack-70816051.shtml", "type": "string" } }, "type": "object" }, - "youtube.SearchResponse": { + "vestiaire.SearchResponse": { "properties": { - "continuation_token": { - "example": "NEXT_TOKEN", - "type": "string" + "facets": { + "$ref": "#/definitions/vestiaire.SearchFacets" }, - "estimated_results": { - "example": 9895225, - "type": "integer" + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" }, "items": { "items": { - "$ref": "#/definitions/youtube.SearchItem" + "$ref": "#/definitions/vestiaire.SearchItem" }, "type": "array" }, - "query": { - "example": "gpt", - "type": "string" - } - }, - "type": "object" - }, - "youtube.TagResp": { - "properties": { - "continuation_token": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "meta": { - "$ref": "#/definitions/youtube.tagMeta" + "per_page": { + "example": 24, + "type": "integer" }, - "videos": { - "items": { - "$ref": "#/definitions/youtube.VideoDetail" - }, - "type": "array" - } - }, - "type": "object" - }, - "youtube.TranscriptLanguage": { - "properties": { - "is_generated": { - "type": "boolean" + "price_range": { + "$ref": "#/definitions/vestiaire.PriceRange" }, - "is_translatable": { - "type": "boolean" + "q": { + "example": "chanel bag", + "type": "string" }, - "language": { - "example": "English", + "sort": { + "example": "relevance", "type": "string" }, - "language_code": { - "example": "en", + "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" }, - "youtube.TranscriptResponse": { + "vestiaire.SearchSellersResponse": { "properties": { - "is_generated": { - "type": "boolean" - }, - "language": { - "example": "English", + "fetched_at": { + "example": "2026-09-09T12:00:00Z", "type": "string" }, - "language_code": { - "example": "en", + "q": { + "example": "michelle", "type": "string" }, - "segments": { + "sellers": { "items": { - "$ref": "#/definitions/youtube.TranscriptSegment" + "$ref": "#/definitions/vestiaire.SellerSearchMatch" }, "type": "array" - }, - "text": { - "example": "Never gonna give you up", - "type": "string" - }, - "translation_language": { - "example": "es", - "type": "string" - }, - "video_id": { - "example": "dQw4w9WgXcQ", - "type": "string" } }, "type": "object" }, - "youtube.TranscriptSegment": { + "vestiaire.SellerResponse": { "properties": { - "duration": { - "type": "number" + "community_rank": { + "example": 0, + "type": "integer" }, - "start": { - "type": "number" + "country": { + "example": "United States", + "type": "string" }, - "text": { + "country_iso": { + "example": "US", "type": "string" - } - }, - "type": "object" - }, - "youtube.VideoDetail": { - "properties": { - "channel_id": { - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + }, + "fetched_at": { + "example": "2026-09-09T12:00:00Z", "type": "string" }, - "channel_title": { - "example": "OpenAI", + "firstname": { + "example": "michelle", "type": "string" }, - "comments_count": { - "example": 1400, + "followers": { + "example": 26, "type": "integer" }, - "description": { - "example": "On the first episode of the OpenAI Podcast...", + "following": { + "example": 11, + "type": "integer" + }, + "id": { + "example": "36526194", "type": "string" }, - "dislikes_count": { - "description": "may be hidden", + "products_bought": { "example": 0, "type": "integer" }, - "duration_seconds": { - "description": "length in seconds", - "example": 2423, - "type": "number" - }, - "id": { - "example": "YbJOTdZBX1g", - "type": "string" + "products_listed": { + "example": 23, + "type": "integer" }, - "likes_count": { - "example": 11000, + "products_sold": { + "example": 8, "type": "integer" }, - "published_at": { - "example": "2025-06-18T07:59:20-07:00", + "segment": { + "example": "C2C", "type": "string" }, - "title": { - "example": "Sam Altman on AGI, GPT-5, and what’s next — the OpenAI Podcast Ep. 1", + "source_url": { + "example": "https://www.vestiairecollective.com/profile/36526194", "type": "string" }, - "views_count": { - "example": 460176, - "type": "integer" + "url": { + "example": "https://www.vestiairecollective.com/profile/36526194", + "type": "string" + }, + "username": { + "example": "michelle36526194", + "type": "string" } }, "type": "object" }, - "youtube.captionsResponseDoc": { + "vestiaire.SellerSearchMatch": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avatar_url": { + "type": "string" }, - "data": { - "items": { - "$ref": "#/definitions/youtube.Caption" - }, - "type": "array" + "id": { + "example": "36526194", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "michelle", + "type": "string" + }, + "username": { + "example": "michelle36526194", "type": "string" } }, "type": "object" }, - "youtube.channelFeedResponseDoc": { + "vestiaire.SuggestBrand": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "example": "50", + "type": "string" }, - "data": { - "$ref": "#/definitions/youtube.ChannelFeedResponse" + "name": { + "example": "Chanel", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://www.vestiairecollective.com/chanel/", "type": "string" } }, "type": "object" }, - "youtube.channelSearchResponseDataDoc": { + "vestiaire.SuggestResponse": { "properties": { - "channel_id": { - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", - "type": "string" - }, - "channel_title": { - "example": "OpenAI", - "type": "string" - }, - "channel_url": { - "example": "https://www.youtube.com/@OpenAI", - "type": "string" + "brands": { + "items": { + "$ref": "#/definitions/vestiaire.SuggestBrand" + }, + "type": "array" }, - "continuation_token": { - "example": "NEXT_TOKEN", + "fetched_at": { + "example": "2026-09-09T12:00:00Z", "type": "string" }, - "handle": { - "example": "@OpenAI", + "q": { + "example": "chane", "type": "string" }, - "items": { + "suggestions": { "items": { - "$ref": "#/definitions/youtube.SearchItem" + "type": "string" }, "type": "array" - }, - "query": { - "example": "gpt", - "type": "string" - }, - "thumbnail": { - "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", - "type": "string" } }, "type": "object" }, - "youtube.channelSearchResponseDoc": { + "vestiaire.Universe": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/youtube.channelSearchResponseDataDoc" + "categories": { + "items": { + "$ref": "#/definitions/vestiaire.Category" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "youtube.channelShortsResponseDoc": { - "properties": { - "code": { - "example": 200, + "count": { + "example": 346038, "type": "integer" }, - "data": { - "$ref": "#/definitions/youtube.ChannelShortsResponse" + "id": { + "example": "1", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Women", "type": "string" } }, "type": "object" }, - "youtube.commentsResponseDoc": { + "vestiaire.brandsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.CommentResponse" + "$ref": "#/definitions/vestiaire.BrandsResponse" }, "msg": { "example": "OK", @@ -190501,14 +189875,14 @@ }, "type": "object" }, - "youtube.playlistResponseDoc": { + "vestiaire.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.PlaylistResponse" + "$ref": "#/definitions/vestiaire.CategoriesResponse" }, "msg": { "example": "OK", @@ -190517,14 +189891,14 @@ }, "type": "object" }, - "youtube.profileResponseDoc": { + "vestiaire.conditionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.Profile" + "$ref": "#/definitions/vestiaire.ConditionsResponse" }, "msg": { "example": "OK", @@ -190533,14 +189907,14 @@ }, "type": "object" }, - "youtube.searchResponseDoc": { + "vestiaire.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.SearchResponse" + "$ref": "#/definitions/vestiaire.ProductResponse" }, "msg": { "example": "OK", @@ -190549,27 +189923,14 @@ }, "type": "object" }, - "youtube.tagMeta": { - "properties": { - "channelsCount": { - "format": "int64", - "type": "integer" - }, - "videosCount": { - "format": "int64", - "type": "integer" - } - }, - "type": "object" - }, - "youtube.tagResponseDoc": { + "vestiaire.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.TagResp" + "$ref": "#/definitions/vestiaire.SearchResponse" }, "msg": { "example": "OK", @@ -190578,17 +189939,14 @@ }, "type": "object" }, - "youtube.transcriptLanguagesResponseDoc": { + "vestiaire.searchSellersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/youtube.TranscriptLanguage" - }, - "type": "array" + "$ref": "#/definitions/vestiaire.SearchSellersResponse" }, "msg": { "example": "OK", @@ -190597,14 +189955,14 @@ }, "type": "object" }, - "youtube.transcriptResponseDoc": { + "vestiaire.sellerResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.TranscriptResponse" + "$ref": "#/definitions/vestiaire.SellerResponse" }, "msg": { "example": "OK", @@ -190613,14 +189971,14 @@ }, "type": "object" }, - "youtube.videoResponseDoc": { + "vestiaire.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.VideoDetail" + "$ref": "#/definitions/vestiaire.SuggestResponse" }, "msg": { "example": "OK", @@ -190629,337 +189987,391 @@ }, "type": "object" }, - "zalando.CategoriesResponse": { + "vice.AuthorResponse": { "properties": { - "categories": { + "articles": { "items": { - "$ref": "#/definitions/zalando.CategoryTaxonomyEntry" + "$ref": "#/definitions/vice.HeadlineItem" }, "type": "array" }, - "count": { - "example": 11, - "type": "integer" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "department": { - "example": "women", + "image_url": { "type": "string" }, - "fetched_at": { + "name": { "type": "string" }, - "market": { - "example": "de", + "url": { "type": "string" - }, - "source_urls": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "zalando.CategoryResponse": { + "vice.HeadlineItem": { "properties": { - "category": { - "example": "shoes", + "author": { "type": "string" }, - "count": { - "example": 24, - "type": "integer" + "image_url": { + "type": "string" }, - "fetched_at": { + "published_at": { "type": "string" }, - "market": { - "example": "de", + "summary": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/zalando.ProductSummary" - }, - "type": "array" + "title": { + "type": "string" }, - "source_url": { + "type": { "type": "string" }, - "total_count": { - "example": 145032, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "zalando.CategoryTaxonomyEntry": { + "vinted.BrandEntry": { "properties": { - "category": { - "example": "womens-clothing", - "type": "string" - }, - "department": { - "example": "women", + "id": { + "example": "14", "type": "string" }, "name": { - "example": "Clothing", + "example": "adidas", "type": "string" }, "url": { - "example": "https://en.zalando.de/womens-clothing/", + "example": "https://www.vinted.com/brand/14-adidas", "type": "string" } }, "type": "object" }, - "zalando.Market": { + "vinted.BrandResponse": { "properties": { - "code": { - "example": "de", + "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "domain": { - "example": "en.zalando.de", + "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" }, - "zalando.MarketsResponse": { + "vinted.BrandsResponse": { "properties": { - "count": { - "example": 8, - "type": "integer" - }, - "markets": { + "brands": { "items": { - "$ref": "#/definitions/zalando.Market" + "$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" }, - "zalando.Product": { + "vinted.CatalogResponse": { "properties": { - "brand": { - "example": "On", + "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "color": { - "example": "white white/white", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/vinted.ItemCard" + }, + "type": "array" }, - "currency": { - "example": "EUR", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "description": { + "search_text": { + "example": "jacket", "type": "string" }, - "images": { + "source_url": { + "example": "https://www.vinted.com/catalog?search_text=jacket", + "type": "string" + } + }, + "type": "object" + }, + "vinted.CategoriesResponse": { + "properties": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/vinted.CategoryEntry" }, "type": "array" }, - "name": { - "example": "CLOUD 6 - Trainers - white white", + "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "price": { - "example": 160, - "type": "number" + "source_url": { + "example": "https://www.vinted.com/catalog", + "type": "string" + } + }, + "type": "object" + }, + "vinted.CategoryEntry": { + "properties": { + "id": { + "example": "1904", + "type": "string" }, - "sku": { - "example": "ONM11A03W-A12", + "name": { + "example": "Women", "type": "string" }, "url": { - "example": "https://en.zalando.de/on-cloud-trainers-white-white-onm11a03w-a12.html", + "example": "https://www.vinted.com/catalog/1904-women_root", "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/zalando.ProductVariant" - }, - "type": "array" } }, "type": "object" }, - "zalando.ProductResponse": { + "vinted.CategoryResponse": { "properties": { "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "market": { - "example": "de", + "id": { + "example": "1904", "type": "string" }, - "product": { - "$ref": "#/definitions/zalando.Product" + "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" }, - "zalando.ProductSummary": { + "vinted.ItemCard": { "properties": { "brand": { - "example": "On", + "example": "Cabela's", "type": "string" }, "condition": { - "example": "NEW", - "type": "string" - }, - "currency": { - "example": "EUR", + "example": "Good", "type": "string" }, - "discount_percent": { - "example": 20, + "favourite_count": { + "example": 9, "type": "integer" }, - "image": { + "id": { + "example": "9595406652", "type": "string" }, - "name": { - "example": "CLOUD 6 - Trainers - white white", + "image_url": { + "example": "https://images1.vinted.net/t/01_00ebe_Runxp7FBSGM86vRdXFhYhM4A/310x430/3e52418b.webp", "type": "string" }, - "original_price": { - "example": 199.95, - "type": "number" + "price_raw": { + "example": "$20.00", + "type": "string" }, - "price": { - "example": 160, - "type": "number" + "size": { + "example": "L / US 12-14", + "type": "string" }, - "silhouette": { - "example": "LOW_SHOE", + "title": { + "example": "Vintage leather Cabelas Women's jacket", "type": "string" }, - "sku": { - "example": "ONM11A03W-A12", + "total_price_raw": { + "example": "$21.70", "type": "string" }, "url": { - "example": "https://en.zalando.de/on-cloud-trainers-white-white-onm11a03w-a12.html", + "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", "type": "string" } }, "type": "object" }, - "zalando.ProductVariant": { + "vinted.ItemResponse": { "properties": { - "availability": { - "example": "InStock", + "brand": { + "example": "Cabela's", "type": "string" }, - "currency": { - "example": "EUR", - "type": "string" + "categories": { + "example": [ + "Women", + "Clothing", + "Coats & Jackets" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "gtin": { - "example": "7615537206202", + "color": { + "example": "Brown", "type": "string" }, - "price": { - "example": 160, - "type": "number" - }, - "size": { - "example": "42", + "condition": { + "example": "Good", "type": "string" }, - "sku": { - "example": "ONM11A03W-A120010000", + "description": { + "example": "In good condition. Has scratches and scuffs.", "type": "string" }, - "url": { + "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" - } - }, - "type": "object" - }, - "zalando.SearchResponse": { - "properties": { - "count": { - "example": 24, - "type": "integer" }, - "fetched_at": { + "id": { + "example": "9595406652", "type": "string" }, - "market": { - "example": "de", + "material": { + "example": "Leather", "type": "string" }, - "products": { + "photos": { "items": { - "$ref": "#/definitions/zalando.ProductSummary" + "type": "string" }, "type": "array" }, - "query": { - "example": "running shoes", + "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" }, - "total_count": { - "example": 4911, - "type": "integer" + "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" }, - "zalando.SuggestResponse": { + "vinted.MemberResponse": { "properties": { "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "market": { - "example": "de", + "followers_count": { + "example": 5, + "type": "integer" + }, + "following_count": { + "example": 0, + "type": "integer" + }, + "id": { + "example": "3159465141", "type": "string" }, - "query": { - "example": "running sho", + "location": { + "example": "Scottsbluff, United States", "type": "string" }, + "rating": { + "example": 5, + "type": "number" + }, "source_url": { + "example": "https://www.vinted.com/member/3159465141", "type": "string" }, - "suggestions": { - "example": [ - "running shoes", - "running shoes nike", - "running shoes adidas" - ], - "items": { - "type": "string" - }, - "type": "array" + "url": { + "example": "https://www.vinted.com/member/3159465141", + "type": "string" + }, + "username": { + "example": "alexist738", + "type": "string" } }, "type": "object" }, - "zalando.categoriesResponseDoc": { + "vinted.brandResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zalando.CategoriesResponse" + "$ref": "#/definitions/vinted.BrandResponse" }, "msg": { "example": "OK", @@ -190968,14 +190380,14 @@ }, "type": "object" }, - "zalando.categoryResponseDoc": { + "vinted.brandsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zalando.CategoryResponse" + "$ref": "#/definitions/vinted.BrandsResponse" }, "msg": { "example": "OK", @@ -190984,14 +190396,14 @@ }, "type": "object" }, - "zalando.marketsResponseDoc": { + "vinted.catalogResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zalando.MarketsResponse" + "$ref": "#/definitions/vinted.CatalogResponse" }, "msg": { "example": "OK", @@ -191000,14 +190412,14 @@ }, "type": "object" }, - "zalando.productResponseDoc": { + "vinted.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zalando.ProductResponse" + "$ref": "#/definitions/vinted.CategoriesResponse" }, "msg": { "example": "OK", @@ -191016,14 +190428,14 @@ }, "type": "object" }, - "zalando.searchResponseDoc": { + "vinted.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zalando.SearchResponse" + "$ref": "#/definitions/vinted.CategoryResponse" }, "msg": { "example": "OK", @@ -191032,14 +190444,14 @@ }, "type": "object" }, - "zalando.suggestResponseDoc": { + "vinted.itemResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zalando.SuggestResponse" + "$ref": "#/definitions/vinted.ItemResponse" }, "msg": { "example": "OK", @@ -191048,801 +190460,826 @@ }, "type": "object" }, - "zappos.BrandRef": { + "vinted.memberResponseDoc": { "properties": { - "id": { - "example": "WgLNGeICAQs", - "type": "string" - }, - "name": { - "example": "Adidas Outdoor", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "adidas-outdoor", - "type": "string" + "data": { + "$ref": "#/definitions/vinted.MemberResponse" }, - "url": { - "example": "https://www.zappos.com/adidas-outdoor/WgLNGeICAQs.zso", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zappos.BrandResponse": { + "vox.AuthorArticle": { "properties": { - "brand": { + "category": { "type": "string" }, - "brand_id": { + "excerpt": { "type": "string" }, - "count": { - "type": "integer" + "published_at": { + "type": "string" }, - "facets": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vox.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/zappos.Facet" + "$ref": "#/definitions/vox.AuthorArticle" }, "type": "array" }, - "fetched_at": { + "bio": { "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" + "job_title": { + "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "total_count": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "zappos.BrandsResponse": { + "vrbo.AmenityGroup": { "properties": { - "brands": { + "items": { "items": { - "$ref": "#/definitions/zappos.BrandRef" + "type": "string" }, "type": "array" }, - "has_next": { - "example": true, - "type": "boolean" - }, - "page": { - "example": 1, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.CalendarDate": { + "properties": { + "day": { "type": "integer" }, - "page_size": { - "example": 100, + "month": { "type": "integer" }, - "total": { - "example": 440, + "year": { "type": "integer" } }, "type": "object" }, - "zappos.ColorVariant": { + "vrbo.Listing": { "properties": { - "color_id": { + "bedrooms": { + "type": "integer" + }, + "currency": { "type": "string" }, - "color_name": { + "description": { "type": "string" }, - "original_price": { + "id": { "type": "string" }, - "percent_off": { + "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" }, - "zappos.Facet": { + "vrbo.LocationSuggestion": { "properties": { - "field": { - "example": "txAttrFacet_Gender", + "geo_type": { "type": "string" }, - "multi_select": { - "type": "boolean" + "location_full_name": { + "type": "string" }, - "name": { - "example": "Gender", + "primary_text": { "type": "string" }, - "values": { + "region_id": { + "type": "string" + }, + "secondary_text": { + "type": "string" + }, + "sub_items": { "items": { - "$ref": "#/definitions/zappos.FacetValue" + "$ref": "#/definitions/vrbo.LocationSuggestion" }, "type": "array" - } + }, + "type": { + "type": "string" + } }, "type": "object" }, - "zappos.FacetValue": { + "vrbo.LocationSuggestionGroup": { "properties": { - "count": { - "example": 69, - "type": "integer" - }, - "selected": { - "type": "boolean" - }, - "url": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/vrbo.LocationSuggestion" + }, + "type": "array" }, - "value": { - "example": "Women", + "title": { "type": "string" } }, "type": "object" }, - "zappos.FeaturedReview": { + "vrbo.LocationSuggestionsResponse": { "properties": { - "author": { - "type": "string" - }, - "body": { - "type": "string" - }, - "comfort_rating": { - "type": "number" - }, - "date": { - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/vrbo.LocationSuggestionGroup" + }, + "type": "array" }, - "id": { + "search_term": { "type": "string" - }, - "look_rating": { - "type": "integer" - }, - "overall_rating": { - "type": "integer" - }, - "up_votes": { - "type": "integer" - }, - "verified_purchase": { - "type": "boolean" } }, "type": "object" }, - "zappos.FitFeedback": { + "vrbo.Photo": { "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%.", + "description": { "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" + "url": { + "type": "string" } }, "type": "object" }, - "zappos.ProductDetailResponse": { + "vrbo.Property": { "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\"]).", + "amenities": { "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.", + "amenity_groups": { "items": { - "$ref": "#/definitions/zappos.ColorVariant" + "$ref": "#/definitions/vrbo.AmenityGroup" }, "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.", + "content_sections": { "items": { - "$ref": "#/definitions/zappos.FeaturedReview" + "$ref": "#/definitions/vrbo.PropertyContentSection" }, "type": "array" }, - "fetched_at": { + "description": { "type": "string" }, - "images": { + "faqs": { "items": { - "type": "string" + "$ref": "#/definitions/vrbo.PropertyFAQ" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "original_price": { + "id": { "type": "string" }, - "price": { + "location": { "type": "string" }, - "product_id": { + "name": { "type": "string" }, - "product_name": { - "type": "string" + "photos": { + "items": { + "$ref": "#/definitions/vrbo.Photo" + }, + "type": "array" }, "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_label": { + "type": "string" }, - "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).", + "review_count": { "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": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "vrbo.PropertyContentSection": { + "properties": { + "items": { + "items": { + "type": "string" + }, + "type": "array" }, - "url": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.PropertyFAQ": { + "properties": { + "answer": { "type": "string" }, - "width_fit": { - "$ref": "#/definitions/zappos.FitFeedback" + "question": { + "type": "string" } }, "type": "object" }, - "zappos.ProductSummary": { + "vrbo.PropertyReview": { "properties": { - "brand_name": { + "author": { "type": "string" }, - "color": { + "id": { "type": "string" }, - "color_id": { + "locale": { "type": "string" }, - "gender": { + "management_responses": { "items": { - "type": "string" + "$ref": "#/definitions/vrbo.PropertyReviewResponse" }, "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" + "rating": { + "type": "number" }, - "price": { + "rating_label": { "type": "string" }, - "product_id": { + "submission_time": { "type": "string" }, - "product_name": { + "text": { "type": "string" }, - "product_type": { + "title": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "style_color": { + "travelers": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "vrbo.PropertyReviewResponse": { + "properties": { + "header": { "type": "string" }, - "style_id": { + "id": { "type": "string" }, - "url": { + "response": { "type": "string" } }, "type": "object" }, - "zappos.SearchResponse": { + "vrbo.RateCalendar": { "properties": { - "count": { - "type": "integer" + "configuration": { + "$ref": "#/definitions/vrbo.RateCalendarConfiguration" }, - "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.", + "days": { "items": { - "$ref": "#/definitions/zappos.Facet" + "$ref": "#/definitions/vrbo.RateCalendarDay" }, "type": "array" }, - "fetched_at": { + "product_id": { "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" + "property_id": { + "type": "string" }, "source_url": { "type": "string" }, - "term": { + "submit_button_label": { "type": "string" }, - "total_count": { - "type": "integer" + "validation_message": { + "type": "string" } }, "type": "object" }, - "zappos.SuggestResponse": { + "vrbo.RateCalendarConfiguration": { "properties": { - "count": { - "type": "integer" + "available_by_default": { + "type": "boolean" }, - "fetched_at": { - "type": "string" + "begin_date": { + "$ref": "#/definitions/vrbo.CalendarDate" }, - "query": { + "calendar_template_type": { "type": "string" }, - "source_url": { - "type": "string" + "current_date": { + "$ref": "#/definitions/vrbo.CalendarDate" }, - "suggestions": { + "end_date": { + "$ref": "#/definitions/vrbo.CalendarDate" + }, + "tnl_fields": { "items": { - "type": "string" + "$ref": "#/definitions/vrbo.RateCalendarField" }, "type": "array" } }, "type": "object" }, - "zappos.brandResponseDoc": { + "vrbo.RateCalendarDay": { "properties": { - "code": { - "example": 200, - "type": "integer" + "accessibility_label": { + "type": "string" }, - "data": { - "$ref": "#/definitions/zappos.BrandResponse" + "available": { + "type": "boolean" }, - "msg": { - "example": "OK", + "checkin_validity": { + "type": "boolean" + }, + "checkout_validity": { + "type": "boolean" + }, + "date": { + "$ref": "#/definitions/vrbo.CalendarDate" + }, + "display_price": { "type": "string" - } - }, - "type": "object" - }, - "zappos.brandsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/zappos.BrandsResponse" + "stay_constraints": { + "$ref": "#/definitions/vrbo.RateCalendarStayConstraints" }, - "msg": { - "example": "OK", + "theme": { "type": "string" } }, "type": "object" }, - "zappos.productDetailResponseDoc": { + "vrbo.RateCalendarField": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/zappos.ProductDetailResponse" + "key": { + "type": "string" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "zappos.searchResponseDoc": { + "vrbo.RateCalendarStayConstraints": { "properties": { - "code": { - "example": 200, + "maximum_stay_in_days": { "type": "integer" }, - "data": { - "$ref": "#/definitions/zappos.SearchResponse" + "minimum_stay_in_days": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "stay_increment_in_days": { + "type": "integer" } }, "type": "object" }, - "zappos.suggestResponseDoc": { + "vrbo.ReviewSortOption": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "type": "string" }, - "data": { - "$ref": "#/definitions/zappos.SuggestResponse" + "label": { + "type": "string" }, - "msg": { - "example": "OK", + "selected": { + "type": "boolean" + }, + "value": { "type": "string" } }, "type": "object" }, - "zara.CategoriesResponse": { + "vrbo.ReviewsResponse": { "properties": { - "categories": { + "product_id": { + "type": "string" + }, + "property_id": { + "type": "string" + }, + "reviews": { "items": { - "$ref": "#/definitions/zara.CategoryNode" + "$ref": "#/definitions/vrbo.PropertyReview" }, "type": "array" }, - "fetched_at": { + "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" }, - "zara.CategoryNode": { + "vrbo.SearchFilterGroup": { "properties": { - "has_subcategories": { - "type": "boolean" + "control_type": { + "type": "string" }, "id": { - "type": "integer" - }, - "name": { "type": "string" }, - "section_name": { + "label": { "type": "string" }, - "subcategories": { + "options": { "items": { - "$ref": "#/definitions/zara.CategoryNode" + "$ref": "#/definitions/vrbo.SearchFilterOption" }, "type": "array" - } - }, - "type": "object" - }, - "zara.CategoryProductsResponse": { - "properties": { - "category_id": { - "type": "string" - }, - "count": { - "type": "integer" }, - "fetched_at": { - "type": "string" + "range": { + "$ref": "#/definitions/vrbo.SearchFilterRange" }, - "products": { + "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/zara.ProductSummary" + "$ref": "#/definitions/vrbo.SearchFilterRange" }, "type": "array" }, - "source_url": { + "section": { "type": "string" + }, + "step_input": { + "$ref": "#/definitions/vrbo.SearchFilterStep" } }, "type": "object" }, - "zara.ColorSummary": { + "vrbo.SearchFilterOption": { "properties": { - "availability": { - "type": "string" + "disabled": { + "type": "boolean" }, "id": { "type": "string" }, - "image_url": { + "label": { "type": "string" }, - "name": { - "type": "string" + "result_count": { + "type": "integer" }, - "price": { - "type": "number" + "selected": { + "type": "boolean" }, - "product_id": { - "type": "integer" + "value": { + "type": "string" } }, "type": "object" }, - "zara.CompositionComponent": { + "vrbo.SearchFilterRange": { "properties": { - "material": { + "id": { "type": "string" }, - "percentage": { + "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" }, - "zara.CompositionPart": { + "vrbo.SearchFilterRangeSelection": { "properties": { - "components": { - "items": { - "$ref": "#/definitions/zara.CompositionComponent" - }, - "type": "array" - }, - "description": { + "id": { + "example": "nightly_price", "type": "string" + }, + "max": { + "example": 500, + "type": "number" + }, + "min": { + "example": 100, + "type": "number" } }, "type": "object" }, - "zara.Facet": { + "vrbo.SearchFilterSelection": { "properties": { - "key": { + "id": { + "example": "property_type_group", "type": "string" }, "values": { + "example": [ + "house" + ], "items": { - "$ref": "#/definitions/zara.FacetValue" + "type": "string" }, "type": "array" } }, "type": "object" }, - "zara.FacetValue": { + "vrbo.SearchFilterStep": { "properties": { - "count": { + "current": { "type": "integer" }, - "id": { - "type": "string" + "default": { + "type": "integer" }, "label": { "type": "string" + }, + "max": { + "type": "integer" + }, + "min": { + "type": "integer" + }, + "step": { + "type": "integer" } }, "type": "object" }, - "zara.ProductDetailColor": { + "vrbo.SearchOption": { "properties": { - "availability": { - "type": "string" + "adults": { + "example": 2, + "type": "integer" }, - "description": { + "check_in": { + "example": "2026-10-10", "type": "string" }, - "id": { + "check_out": { + "example": "2026-10-24", "type": "string" }, - "images": { + "child_ages": { + "description": "ChildAges contains ages 2–17 for children in the default single room.", + "example": [ + 8, + 12 + ], "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "name": { + "destination": { + "example": "Miami Beach, Florida, United States of America", "type": "string" }, - "price": { - "type": "number" - }, - "sizes": { - "items": { - "$ref": "#/definitions/zara.ProductDetailSize" - }, - "type": "array" - } - }, - "type": "object" - }, - "zara.ProductDetailResponse": { - "properties": { - "colors": { + "filter_ranges": { + "description": "Ranges applies numeric ranges by their live nested facet ID.", "items": { - "$ref": "#/definitions/zara.ProductDetailColor" + "$ref": "#/definitions/vrbo.SearchFilterRangeSelection" }, "type": "array" }, - "composition": { + "filters": { + "description": "Filters are selections copied from the live facet metadata in a search response.", "items": { - "$ref": "#/definitions/zara.CompositionPart" + "$ref": "#/definitions/vrbo.SearchFilterSelection" }, "type": "array" }, - "family_name": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "name": { - "type": "string" - }, - "product_id": { + "flexibility": { + "example": "3_DAY", "type": "string" }, - "reference": { + "lat_long": { + "example": "25.790653,-80.130043", "type": "string" }, - "section_name": { - "type": "string" + "limit": { + "example": 10, + "type": "integer" }, - "source_url": { + "region_id": { + "example": "8833", "type": "string" }, - "subfamily_name": { - "type": "string" + "rooms": { + "description": "Rooms overrides Adults and ChildAges and supports multi-room searches.", + "items": { + "$ref": "#/definitions/vrbo.SearchRoom" + }, + "type": "array" }, - "url": { + "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" }, - "zara.ProductDetailSize": { + "vrbo.SearchResponse": { "properties": { - "availability": { + "check_in": { "type": "string" }, - "id": { - "type": "integer" + "check_out": { + "type": "string" }, - "name": { + "destination": { "type": "string" }, - "price": { - "type": "number" + "filters": { + "items": { + "$ref": "#/definitions/vrbo.SearchFilterGroup" + }, + "type": "array" }, - "sku": { + "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" }, - "zara.ProductSummary": { + "vrbo.SearchRoom": { "properties": { - "availability": { - "type": "string" + "adults": { + "example": 2, + "type": "integer" }, - "colors": { + "child_ages": { + "example": [ + 8 + ], "items": { - "$ref": "#/definitions/zara.ColorSummary" + "type": "integer" }, "type": "array" - }, - "family_name": { - "type": "string" + } + }, + "type": "object" + }, + "vrbo.SearchSortOption": { + "properties": { + "default": { + "type": "boolean" }, "id": { - "type": "integer" - }, - "image_url": { "type": "string" }, - "name": { + "label": { "type": "string" }, - "price": { - "type": "number" + "selected": { + "type": "boolean" }, - "reference": { + "value": { "type": "string" - }, - "section_name": { + } + }, + "type": "object" + }, + "vrbo.TravelPage": { + "properties": { + "path": { "type": "string" }, - "subfamily_name": { + "title": { "type": "string" }, "url": { @@ -191851,101 +191288,96 @@ }, "type": "object" }, - "zara.SearchResponse": { + "vrbo.TravelPageDetail": { "properties": { - "count": { - "type": "integer" + "description": { + "type": "string" }, - "facets": { + "editorial_sections": { "items": { - "$ref": "#/definitions/zara.Facet" + "$ref": "#/definitions/vrbo.TravelPageEditorialSection" }, "type": "array" }, - "fetched_at": { + "path": { "type": "string" }, - "is_last_page": { - "type": "boolean" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "products": { + "related_page_groups": { "items": { - "$ref": "#/definitions/zara.ProductSummary" + "$ref": "#/definitions/vrbo.TravelPageLinkGroup" }, "type": "array" }, - "query": { - "type": "string" - }, - "section": { - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/vrbo.TravelPageSection" + }, + "type": "array" }, "source_url": { "type": "string" }, - "total_count": { - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "zara.Store": { + "vrbo.TravelPageEditorialSection": { "properties": { - "address": { + "description": { "type": "string" }, - "city": { + "parent_title": { "type": "string" }, - "commercial_name": { + "title": { "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPageLinkGroup": { + "properties": { + "pages": { + "items": { + "$ref": "#/definitions/vrbo.TravelPage" + }, + "type": "array" }, - "country": { + "title": { "type": "string" - }, - "donation_allowed": { - "type": "boolean" - }, - "id": { - "type": "integer" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { + } + }, + "type": "object" + }, + "vrbo.TravelPageListing": { + "properties": { + "description": { "type": "string" }, - "phone": { + "location": { "type": "string" }, - "pickup_allowed": { - "type": "boolean" - }, - "postal_code": { + "name": { "type": "string" }, - "sections": { + "photos": { "items": { - "type": "string" + "$ref": "#/definitions/vrbo.Photo" }, "type": "array" }, - "state": { - "type": "string" + "rating": { + "type": "number" }, - "status": { + "rating_label": { "type": "string" }, - "type": { + "review_count": { + "type": "integer" + }, + "summary": { "type": "string" }, "url": { @@ -191954,643 +191386,625 @@ }, "type": "object" }, - "zara.StoreResponse": { + "vrbo.TravelPageSection": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "description": { "type": "string" }, - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - }, - "radius": { - "type": "integer" + "listings": { + "items": { + "$ref": "#/definitions/vrbo.TravelPageListing" + }, + "type": "array" }, - "source_url": { + "subtitle": { "type": "string" }, - "stores": { + "title": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPagesResponse": { + "properties": { + "pages": { "items": { - "$ref": "#/definitions/zara.Store" + "$ref": "#/definitions/vrbo.TravelPage" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "zara.SuggestResponse": { + "vrbo.vrboLocationSuggestionsResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "query": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/vrbo.LocationSuggestionsResponse" } }, "type": "object" }, - "zara.categoriesResponseDoc": { + "vrbo.vrboPropertyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zara.CategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/vrbo.Property" } }, "type": "object" }, - "zara.categoryProductsResponseDoc": { + "vrbo.vrboRateCalendarResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zara.CategoryProductsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/vrbo.RateCalendar" } }, "type": "object" }, - "zara.productDetailResponseDoc": { + "vrbo.vrboReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zara.ProductDetailResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/vrbo.ReviewsResponse" } }, "type": "object" }, - "zara.searchResponseDoc": { + "vrbo.vrboSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zara.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/vrbo.SearchResponse" } }, "type": "object" }, - "zara.storesResponseDoc": { + "vrbo.vrboTravelPageDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zara.StoreResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/vrbo.TravelPageDetail" } }, "type": "object" }, - "zara.suggestResponseDoc": { + "vrbo.vrboTravelPagesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zara.SuggestResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/vrbo.TravelPagesResponse" } }, "type": "object" }, - "zaxbys.MenuCategory": { + "walgreens.Store": { "properties": { - "catering": { - "description": "Catering marks a catering-only section (larger platters/boxed\nlunches), separate from the everyday menu.", - "type": "boolean" + "address_line1": { + "type": "string" }, - "id": { - "type": "integer" + "brand": { + "type": "string" }, - "image": { + "city": { + "type": "string" + }, + "county": { + "type": "string" + }, + "distance_miles": { + "type": "number" + }, + "fax": { + "type": "string" + }, + "intersection": { "type": "string" }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, "name": { - "example": "Fingerz™ & Wings Meals", "type": "string" }, - "products": { + "pharmacy_close_time": { + "type": "string" + }, + "pharmacy_open_time": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "services": { "items": { - "$ref": "#/definitions/zaxbys.MenuProduct" + "type": "string" }, "type": "array" }, - "slug": { + "state": { "type": "string" }, - "spotlight": { - "type": "boolean" + "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" }, - "zaxbys.MenuModifierGroup": { + "walgreens.StoresResponse": { "properties": { - "id": { - "type": "integer" - }, - "name": { - "example": "Boneless or traditional?", - "type": "string" - }, - "options": { + "stores": { "items": { - "$ref": "#/definitions/zaxbys.MenuModifierOption" + "$ref": "#/definitions/walgreens.Store" }, "type": "array" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "zaxbys.MenuModifierOption": { + "walgreens.storesResponseDoc": { "properties": { - "cost": { - "example": 17, - "type": "number" - }, - "default": { - "type": "boolean" - }, - "groups": { - "items": { - "$ref": "#/definitions/zaxbys.MenuModifierGroup" - }, - "type": "array" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "example": "Sauced Fingerz", + "data": { + "$ref": "#/definitions/walgreens.StoresResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zaxbys.MenuProduct": { + "walmart.Product": { "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": { + "attributes": { + "additionalProperties": { "type": "string" }, - "type": "array" + "type": "object" }, - "calories": { - "example": "1440 - 1770", + "availability": { + "example": "IN_STOCK", "type": "string" }, - "cost": { - "example": 0, - "type": "number" - }, - "customization_available": { - "type": "boolean" - }, - "description": { + "brand": { + "example": "Apple", "type": "string" }, - "groups": { - "items": { - "$ref": "#/definitions/zaxbys.MenuModifierGroup" - }, - "type": "array" - }, - "image": { + "canonical_url": { + "example": "https://www.walmart.com/ip/5689919121", "type": "string" }, - "product_id": { - "example": 113251777, - "type": "integer" + "category": { + "example": "Electronics", + "type": "string" }, - "short_description": { + "currency": { + "example": "USD", "type": "string" }, - "size": { + "description": { + "example": "Wireless earbuds with active noise cancellation.", "type": "string" }, - "tags": { + "highlights": { "items": { "type": "string" }, "type": "array" }, - "title": { - "example": "Lemon Pepper Wings & Things Meal", + "image": { + "example": "https://i5.walmartimages.com/seo/example.jpeg", "type": "string" - } - }, - "type": "object" - }, - "zaxbys.MenuResponse": { - "properties": { - "categories": { + }, + "images": { "items": { - "$ref": "#/definitions/zaxbys.MenuCategory" + "type": "string" }, "type": "array" }, - "category_count": { - "example": 15, - "type": "integer" + "is_sponsored": { + "example": false, + "type": "boolean" }, - "fetched_at": { + "item_id": { + "example": "5689919121", "type": "string" }, - "product_count": { - "example": 106, - "type": "integer" + "price": { + "example": 169, + "type": "number" }, - "source_url": { + "price_text": { + "example": "$169.00", "type": "string" - } - }, - "type": "object" - }, - "zaxbys.NearbyResponse": { - "properties": { - "count": { - "example": 10, - "type": "integer" }, - "fetched_at": { + "product_id": { + "example": "5689919121", "type": "string" }, - "radius_miles": { - "example": 25, + "rating": { + "example": 4.6, + "type": "number" + }, + "review_count": { + "example": 17823, "type": "integer" }, - "source_url": { + "seller_name": { + "example": "Walmart.com", "type": "string" }, - "stores": { + "title": { + "example": "Apple AirPods Pro 2", + "type": "string" + }, + "variants": { "items": { - "$ref": "#/definitions/zaxbys.NearbyStore" + "$ref": "#/definitions/walmart.ProductSummary" }, "type": "array" } }, "type": "object" }, - "zaxbys.NearbyStore": { + "walmart.ProductSummary": { "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" + "availability": { + "example": "IN_STOCK", + "type": "string" }, - "currently_open": { - "type": "boolean" + "brand": { + "example": "Apple", + "type": "string" }, - "distance_miles": { - "description": "DistanceMiles is measured from the requested coordinate.", - "example": 1.78, - "type": "number" + "canonical_url": { + "example": "https://www.walmart.com/ip/5689919121", + "type": "string" }, - "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", + "currency": { + "example": "USD", "type": "string" }, - "hours": { + "image": { + "example": "https://i5.walmartimages.com/seo/example.jpeg", + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/zaxbys.StoreHours" + "type": "string" }, "type": "array" }, - "latitude": { - "example": 40.872505, - "type": "number" + "is_sponsored": { + "example": false, + "type": "boolean" }, - "longitude": { - "example": -73.854276, + "item_id": { + "example": "5689919121", + "type": "string" + }, + "price": { + "example": 169, "type": "number" }, - "name": { - "example": "Bronx - 3260 Boston Road", + "price_text": { + "example": "$169.00", "type": "string" }, - "order_url": { - "description": "OrderURL is Zaxby's own Olo-hosted ordering page for this store.", + "product_id": { + "example": "5689919121", "type": "string" }, - "phone": { - "example": "(929) 992-4390", - "type": "string" + "rating": { + "example": 4.6, + "type": "number" }, - "services": { - "$ref": "#/definitions/zaxbys.StoreServices" + "review_count": { + "example": 17823, + "type": "integer" }, - "slug": { - "example": "bronx-3260-boston-road", + "seller_name": { + "example": "Walmart.com", "type": "string" }, - "store_id": { - "example": 299987, - "type": "integer" - }, - "store_number": { - "example": "75030", + "title": { + "example": "Apple AirPods Pro 2", "type": "string" } }, "type": "object" }, - "zaxbys.StoreAddress": { + "walmart.RatingBreakdown": { "properties": { - "city": { - "example": "Bronx", - "type": "string" + "five_star": { + "example": 1698, + "type": "integer" }, - "postal_code": { - "description": "PostalCode is a US ZIP code. The upstream source is US-only.", - "example": "10469", - "type": "string" + "four_star": { + "example": 273, + "type": "integer" }, - "region": { - "example": "NY", - "type": "string" + "one_star": { + "example": 215, + "type": "integer" }, - "street": { - "example": "3260 Boston Road", - "type": "string" + "three_star": { + "example": 150, + "type": "integer" + }, + "two_star": { + "example": 116, + "type": "integer" } }, "type": "object" }, - "zaxbys.StoreHours": { + "walmart.Review": { "properties": { - "label": { - "example": "Delivery", + "author": { + "example": "MusicFan", "type": "string" }, - "ranges": { - "items": { - "$ref": "#/definitions/zaxbys.StoreHoursRange" - }, - "type": "array" + "negative_feedback": { + "example": 1, + "type": "integer" }, - "type": { - "example": "drivethru", + "positive_feedback": { + "example": 12, + "type": "integer" + }, + "rating": { + "example": 5, + "type": "number" + }, + "review_id": { + "example": "406499690", "type": "string" - } - }, - "type": "object" - }, - "zaxbys.StoreHoursRange": { - "properties": { - "closes_at": { - "example": "2026-09-06 03:00", + }, + "submission_date": { + "example": "11/30/2025", "type": "string" }, - "day": { - "example": "Sat", + "text": { "type": "string" }, - "opens_at": { - "example": "2026-09-05 10:30", + "title": { + "example": "Great sound", "type": "string" } }, "type": "object" }, - "zaxbys.StoreResponse": { + "walmart.ReviewsResponse": { "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" + "average_rating": { + "example": 4.3, + "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", + "item_id": { + "example": "5689919121", "type": "string" }, - "fetched_at": { - "type": "string" + "rating_counts": { + "$ref": "#/definitions/walmart.RatingBreakdown" }, - "hours": { + "recommended_percent": { + "example": 87, + "type": "number" + }, + "reviews": { "items": { - "$ref": "#/definitions/zaxbys.StoreHours" + "$ref": "#/definitions/walmart.Review" }, "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" + "reviews_with_text_count": { + "example": 1345, + "type": "integer" }, - "slug": { - "example": "bronx-3260-boston-road", - "type": "string" + "top_negative_review": { + "$ref": "#/definitions/walmart.Review" }, - "source_url": { - "type": "string" + "top_positive_review": { + "$ref": "#/definitions/walmart.Review" }, - "store_id": { - "example": 299987, + "total_review_count": { + "example": 2452, "type": "integer" - }, - "store_number": { - "example": "75030", - "type": "string" } }, "type": "object" }, - "zaxbys.StoreServices": { + "walmart.SearchResponse": { "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" + "items": { + "items": { + "$ref": "#/definitions/walmart.ProductSummary" + }, + "type": "array" }, - "online_ordering": { - "type": "boolean" + "page": { + "example": 1, + "type": "integer" }, - "open_late": { - "type": "boolean" + "query": { + "example": "lego", + "type": "string" }, - "pickup": { - "type": "boolean" + "total_results": { + "example": 1200, + "type": "integer" } }, "type": "object" }, - "zaxbys.menuResponseDoc": { + "walmart.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/zaxbys.MenuResponse" + "$ref": "#/definitions/walmart.Product" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "zaxbys.nearbyResponseDoc": { + "walmart.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/zaxbys.NearbyResponse" + "$ref": "#/definitions/walmart.ReviewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "zaxbys.storeResponseDoc": { + "walmart.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/zaxbys.StoreResponse" + "$ref": "#/definitions/walmart.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "zdnet.AuthorResponse": { + "wapo.ArticleResponse": { "properties": { - "article_count": { - "type": "integer" - }, - "articles": { + "authors": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "biography": { + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "paragraphs": { "items": { "type": "string" }, "type": "array" }, - "credentials": { + "published_at": { "type": "string" }, - "expertise": { + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wapo.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/zdnet.AuthorTopic" + "$ref": "#/definitions/wapo.HeadlineItem" }, "type": "array" }, - "has_next_page": { - "type": "boolean" + "author_type": { + "type": "string" + }, + "bio": { + "type": "string" + }, + "email": { + "type": "string" + }, + "expertise": { + "type": "string" + }, + "facebook_url": { + "type": "string" }, "image_url": { "type": "string" }, - "joined_at": { + "linkedin_url": { + "type": "string" + }, + "location": { "type": "string" }, "name": { @@ -192605,11 +192019,14 @@ "slug": { "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/zdnet.AuthorSocialLink" - }, - "type": "array" + "total_count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "twitter_url": { + "type": "string" }, "url": { "type": "string" @@ -192617,9 +192034,21 @@ }, "type": "object" }, - "zdnet.AuthorSocialLink": { + "wapo.HeadlineItem": { "properties": { - "platform": { + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { "type": "string" }, "url": { @@ -192628,1036 +192057,1304 @@ }, "type": "object" }, - "zdnet.AuthorTopic": { + "wapo.HeadlinesResponse": { "properties": { - "name": { - "type": "string" + "count": { + "type": "integer" }, - "url": { + "has_more": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/wapo.HeadlineItem" + }, + "type": "array" + }, + "section": { "type": "string" } }, "type": "object" }, - "zillow.AutocompleteItem": { + "wapo.NewsItem": { "properties": { - "city": { - "example": "Los Angeles", + "last_modified": { "type": "string" }, - "county": { - "example": "Los Angeles County", + "published_at": { "type": "string" }, - "id": { + "title": { "type": "string" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "near_me": { - "type": "boolean" - }, - "plid": { + "url": { "type": "string" - }, - "region_display_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "region_id": { - "example": 12447, - "type": "integer" - }, - "region_ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "region_type": { - "example": 6, - "type": "integer" - }, - "region_types": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "school_district_ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "school_ids": { + } + }, + "type": "object" + }, + "wapo.NewsResponse": { + "properties": { + "items": { "items": { - "type": "integer" + "$ref": "#/definitions/wapo.NewsItem" }, "type": "array" - }, - "state": { - "example": "CA", - "type": "string" - }, - "sub_type": { - "type": "string" - }, - "view_latitude_delta": { - "type": "number" } }, "type": "object" }, - "zillow.AutocompleteResponse": { + "wapo.Section": { "properties": { - "query": { - "example": "Los Angeles, CA", + "name": { "type": "string" }, - "request_id": { + "slug": { "type": "string" }, - "results": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wapo.SectionsResponse": { + "properties": { + "sections": { "items": { - "$ref": "#/definitions/zillow.AutocompleteItem" + "$ref": "#/definitions/wapo.Section" }, "type": "array" } }, "type": "object" }, - "zillow.PropertyAddressParts": { + "wapo.articleResponseDoc": { "properties": { - "city": { - "type": "string" - }, - "county": { - "type": "string" - }, - "neighborhood": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "state": { - "type": "string" + "data": { + "$ref": "#/definitions/wapo.ArticleResponse" }, - "street": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "wapo.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "subdivision": { - "type": "string" + "data": { + "$ref": "#/definitions/wapo.AuthorResponse" }, - "zipcode": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zillow.PropertyAgent": { + "wapo.headlinesResponseDoc": { "properties": { - "email": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "phone": { - "type": "string" + "data": { + "$ref": "#/definitions/wapo.HeadlinesResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zillow.PropertyArea": { + "wapo.newsResponseDoc": { "properties": { - "text": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "unit": { - "type": "string" + "data": { + "$ref": "#/definitions/wapo.NewsResponse" }, - "value": { - "type": "number" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "zillow.PropertyFact": { + "wapo.sectionsResponseDoc": { "properties": { - "key": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "label": { - "type": "string" + "data": { + "$ref": "#/definitions/wapo.SectionsResponse" }, - "value": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zillow.PropertyFacts": { + "wayfair.CategoriesResponse": { "properties": { - "accessibility_features": { - "items": { - "type": "string" - }, - "type": "array" - }, - "additional": { - "items": { - "$ref": "#/definitions/zillow.PropertyFact" - }, - "type": "array" - }, - "appliances": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/wayfair.CategoryRef" }, "type": "array" }, - "architectural_style": { - "type": "string" - }, - "basement": { - "type": "string" - }, - "bathrooms": { - "type": "number" - }, - "bathrooms_full": { - "type": "integer" + "has_next": { + "example": true, + "type": "boolean" }, - "bathrooms_half": { + "page": { + "example": 1, "type": "integer" }, - "bathrooms_one_quarter": { + "page_size": { + "example": 100, "type": "integer" }, - "bathrooms_three_quarter": { + "total": { + "example": 1521, "type": "integer" + } + }, + "type": "object" + }, + "wayfair.CategoryRef": { + "properties": { + "department": { + "example": "baby-kids", + "type": "string" }, - "bedrooms": { - "type": "number" - }, - "builder_model": { + "id": { + "example": "1829184", "type": "string" }, - "builder_name": { + "name": { + "example": "Kids Shower Curtains", "type": "string" }, - "community_features": { - "items": { - "type": "string" - }, - "type": "array" + "url": { + "example": "https://www.wayfair.com/baby-kids/sb0/kids-shower-curtains-c1829184.html", + "type": "string" + } + }, + "type": "object" + }, + "wayfair.CategoryResponse": { + "properties": { + "category": { + "type": "string" }, - "construction_materials": { - "items": { - "type": "string" - }, - "type": "array" + "category_id": { + "type": "string" }, - "cooling": { - "items": { - "type": "string" - }, - "type": "array" + "count": { + "type": "integer" }, - "exterior_features": { - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "fireplace_features": { - "items": { - "type": "string" - }, - "type": "array" + "has_more": { + "type": "boolean" }, - "flooring": { - "items": { - "type": "string" - }, - "type": "array" + "page": { + "type": "integer" }, - "foundation_details": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/wayfair.ProductSummary" }, "type": "array" }, - "garage_spaces": { - "type": "number" - }, - "has_fireplace": { - "type": "boolean" + "source_url": { + "type": "string" }, - "heating": { - "items": { - "type": "string" - }, - "type": "array" + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "wayfair.ProductDetailResponse": { + "properties": { + "brand_name": { + "type": "string" }, - "hoa_fee": { + "currency_code": { "type": "string" }, - "home_type": { + "fetched_at": { "type": "string" }, - "laundry_features": { + "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" }, - "levels": { + "images": { + "description": "Images lists every distinct product image found on the page.", "items": { "type": "string" }, "type": "array" }, - "living_area": { - "$ref": "#/definitions/zillow.PropertyArea" - }, - "lot_size": { - "$ref": "#/definitions/zillow.PropertyArea" + "in_stock": { + "type": "boolean" }, - "lot_size_dimensions": { + "original_price": { "type": "string" }, - "parcel_number": { + "price": { "type": "string" }, - "parking_capacity": { - "type": "integer" + "product_id": { + "type": "string" }, - "parking_features": { - "items": { - "type": "string" - }, - "type": "array" + "product_name": { + "type": "string" }, - "patio_and_porch_features": { - "items": { - "type": "string" - }, - "type": "array" + "rating": { + "type": "number" }, - "pool_features": { - "items": { - "type": "string" + "rating_breakdown": { + "additionalProperties": { + "type": "integer" }, - "type": "array" + "description": "RatingBreakdown maps each star value (\"1\" through \"5\") to the number\nof reviews with that rating.", + "type": "object" }, - "property_sub_type": { - "items": { - "type": "string" - }, - "type": "array" + "rating_count": { + "description": "RatingCount is the product's total review count, sourced from the\npage's own aggregate rating summary.", + "type": "integer" }, - "roof": { + "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" }, - "rooms": { - "items": { - "type": "string" - }, - "type": "array" + "source_url": { + "type": "string" }, - "security_features": { - "items": { - "type": "string" - }, - "type": "array" + "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" }, - "sewer": { - "items": { - "type": "string" - }, - "type": "array" + "url": { + "type": "string" }, - "spa_features": { + "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": { - "type": "string" + "$ref": "#/definitions/wayfair.VariantCategory" }, "type": "array" - }, - "stories": { - "type": "number" - }, - "structure_type": { + } + }, + "type": "object" + }, + "wayfair.ProductSummary": { + "properties": { + "brand_name": { "type": "string" }, - "tax_annual_amount": { - "type": "number" - }, - "tax_assessed_value": { - "type": "number" + "currency_code": { + "type": "string" }, - "utilities": { - "items": { - "type": "string" - }, - "type": "array" + "image_url": { + "type": "string" }, - "view": { - "items": { - "type": "string" - }, - "type": "array" + "original_price": { + "type": "string" }, - "water_source": { - "items": { - "type": "string" - }, - "type": "array" + "price": { + "type": "string" }, - "waterfront_features": { - "items": { - "type": "string" - }, - "type": "array" + "product_id": { + "type": "string" }, - "year_built": { - "type": "integer" + "product_name": { + "type": "string" }, - "zoning": { + "url": { "type": "string" } }, "type": "object" }, - "zillow.PropertyHistory": { + "wayfair.VariantCategory": { "properties": { - "price": { - "items": { - "$ref": "#/definitions/zillow.PropertyPriceHistoryEntry" - }, - "type": "array" + "name": { + "type": "string" }, - "tax": { + "options": { "items": { - "$ref": "#/definitions/zillow.PropertyTaxHistoryEntry" + "$ref": "#/definitions/wayfair.VariantOption" }, "type": "array" } }, "type": "object" }, - "zillow.PropertyItem": { + "wayfair.VariantOption": { "properties": { - "address": { - "type": "string" - }, - "baths": { - "type": "number" - }, - "beds": { - "type": "number" - }, - "broker_name": { - "type": "string" + "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" }, - "currency": { + "image_url": { "type": "string" }, - "days_on_zillow": { - "type": "integer" - }, - "detail_text": { + "name": { "type": "string" }, - "has_3d_model": { + "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" }, - "has_video": { - "type": "boolean" + "data": { + "$ref": "#/definitions/wayfair.CategoriesResponse" }, - "home_status": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "wayfair.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "home_type": { - "type": "string" + "data": { + "$ref": "#/definitions/wayfair.CategoryResponse" }, - "image": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "wayfair.productDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_showcase": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "listing_sub_type": { - "items": { - "type": "string" - }, - "type": "array" - }, - "living_area": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "lot_area": { - "type": "number" + "data": { + "$ref": "#/definitions/wayfair.ProductDetailResponse" }, - "lot_area_unit": { + "msg": { + "example": "OK", "type": "string" - }, - "photos": { - "items": { - "type": "string" - }, - "type": "array" - }, - "price": { - "type": "number" - }, - "price_text": { + } + }, + "type": "object" + }, + "wccftech.AuthorArticle": { + "properties": { + "image_url": { "type": "string" }, - "rent_zestimate": { - "type": "number" - }, - "status_text": { + "published_at": { "type": "string" }, - "url": { + "summary": { "type": "string" }, - "zestimate": { - "type": "number" + "title": { + "type": "string" }, - "zpid": { - "example": "12345678", + "url": { "type": "string" } }, "type": "object" }, - "zillow.PropertyListing": { + "wccftech.AuthorResponse": { "properties": { - "agent_name": { - "type": "string" - }, - "agents": { + "articles": { "items": { - "$ref": "#/definitions/zillow.PropertyAgent" + "$ref": "#/definitions/wccftech.AuthorArticle" }, "type": "array" }, - "attribution_text": { + "bio": { "type": "string" }, - "broker_name": { + "image_url": { "type": "string" }, - "broker_phone": { + "name": { "type": "string" }, - "date_posted": { + "role": { "type": "string" }, - "date_updated": { + "slug": { "type": "string" }, - "days_on_zillow": { - "type": "integer" - }, - "listing_id": { + "url": { "type": "string" - }, - "mls_id": { + } + }, + "type": "object" + }, + "web.ScrapeInfo": { + "properties": { + "backend": { + "description": "headless backend that rendered, when method=browser", "type": "string" }, - "open_houses": { - "items": { - "$ref": "#/definitions/zillow.PropertyOpenHouse" - }, - "type": "array" - }, - "provider": { + "cache_state": { + "description": "\"hit\" | \"miss\" — whether this response came from the cache", "type": "string" }, - "provider_listing_id": { - "type": "string" - }, - "source": { - "type": "string" - }, - "status": { + "cached_at": { + "description": "RFC3339 time the served copy was fetched (cache hits only)", "type": "string" }, - "sub_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time_on_zillow": { - "type": "string" + "escalated": { + "description": "true when the fetch escalated from HTTP to a headless browser", + "type": "boolean" }, - "type": { + "method": { + "description": "\"http\" | \"browser\"", "type": "string" } }, "type": "object" }, - "zillow.PropertyMedia": { + "web.ScrapeLink": { "properties": { - "has_3d_model": { - "type": "boolean" - }, - "has_video": { - "type": "boolean" - }, - "photo_count": { - "type": "integer" - }, - "photos": { - "items": { - "$ref": "#/definitions/zillow.PropertyPhoto" - }, - "type": "array" - }, - "primary_image": { + "href": { "type": "string" }, - "video_url": { + "rel": { "type": "string" }, - "virtual_tour_url": { + "text": { "type": "string" } }, "type": "object" }, - "zillow.PropertyNearby": { + "web.ScrapeMetadata": { "properties": { - "address": { + "author": { "type": "string" }, - "baths": { - "type": "number" + "canonical_url": { + "type": "string" }, - "beds": { - "type": "number" + "content_type": { + "type": "string" }, - "home_status": { + "description": { "type": "string" }, - "living_area": { - "type": "number" + "final_url": { + "type": "string" }, - "price": { - "type": "number" + "image": { + "type": "string" }, - "price_text": { + "language": { "type": "string" }, - "url": { + "modified_at": { "type": "string" }, - "zpid": { + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "zillow.PropertyOpenHouse": { - "properties": { - "end_time": { + }, + "section": { "type": "string" }, - "start_time": { + "site_name": { "type": "string" }, - "text": { + "source_url": { + "type": "string" + }, + "status_code": { + "type": "integer" + }, + "title": { "type": "string" } }, "type": "object" }, - "zillow.PropertyPhoto": { + "web.ScrapeOption": { "properties": { - "height": { + "backend": { + "example": "", + "type": "string" + }, + "formats": { + "example": [ + "markdown" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "max_age": { + "example": 604800000, "type": "integer" }, - "source": { + "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" }, - "width": { + "wait_for": { + "example": 0, "type": "integer" } }, + "required": [ + "url" + ], "type": "object" }, - "zillow.PropertyPriceHistoryEntry": { + "web.ScrapeResult": { "properties": { - "buyer_agent": { + "html": { "type": "string" }, - "change": { - "type": "number" + "link_details": { + "items": { + "$ref": "#/definitions/web.ScrapeLink" + }, + "type": "array" }, - "date": { - "type": "string" + "links": { + "items": { + "type": "string" + }, + "type": "array" }, - "event": { + "markdown": { "type": "string" }, - "price": { - "type": "number" + "metadata": { + "$ref": "#/definitions/web.ScrapeMetadata" }, - "price_text": { + "raw_html": { "type": "string" }, - "seller_agent": { + "scrape": { + "$ref": "#/definitions/web.ScrapeInfo" + } + }, + "type": "object" + }, + "web.TechStackOption": { + "properties": { + "render": { + "enum": [ + "browser", + "auto", + "http" + ], + "example": "browser", "type": "string" }, - "source": { + "url": { + "example": "https://www.example.com", "type": "string" - }, - "time": { - "type": "integer" } }, + "required": [ + "url" + ], "type": "object" }, - "zillow.PropertyPricing": { + "web.TechStackResult": { "properties": { - "currency": { - "type": "string" - }, - "estimated_monthly_payment": { - "type": "number" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "monthly_hoa_fee": { - "type": "number" + "count": { + "type": "integer" }, - "price": { - "type": "number" + "detector_version": { + "type": "string" }, - "price_per_square_foot": { - "type": "number" + "failure_reason": { + "type": "string" }, - "price_text": { + "final_url": { "type": "string" }, - "property_tax_rate": { - "type": "number" + "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" }, - "rent_zestimate": { - "type": "number" + "reachable": { + "type": "boolean" }, - "zestimate": { - "type": "number" + "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" }, - "zillow.PropertyResponse": { + "web.billingRejectionDoc": { "properties": { - "address": { - "type": "string" + "credit_cost": { + "description": "credit_cost is what the rejected request would have cost. Credit rejections only.", + "example": 1, + "type": "integer" }, - "address_parts": { - "$ref": "#/definitions/zillow.PropertyAddressParts" + "credits_included": { + "description": "credits_included is the plan's credit allowance for the period. Credit rejections only.", + "example": 2000, + "type": "integer" }, - "baths": { - "type": "number" + "credits_remaining": { + "description": "credits_remaining is what is left this period. Credit rejections only.", + "example": 0, + "type": "integer" }, - "beds": { - "type": "number" + "credits_used": { + "description": "credits_used is credits spent so far this period. Credit rejections only.", + "example": 2000, + "type": "integer" }, - "broker_name": { - "type": "string" + "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" }, - "currency": { - "type": "string" + "daily_credits_remaining": { + "description": "daily_credits_remaining is what is left today (UTC). Credit rejections only.", + "example": 0, + "type": "integer" }, - "days_on_zillow": { + "daily_credits_used": { + "description": "daily_credits_used is credits spent so far today (UTC). Credit rejections only.", + "example": 500, "type": "integer" }, - "description": { + "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" }, - "detail_text": { + "plan": { + "description": "plan is the caller's current plan.", + "example": "Free", "type": "string" }, - "facts": { - "$ref": "#/definitions/zillow.PropertyFacts" + "rate_limit_per_minute": { + "description": "rate_limit_per_minute is the plan's request rate. rate_limited only.", + "example": 5, + "type": "integer" }, - "has_3d_model": { - "type": "boolean" + "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" }, - "has_video": { - "type": "boolean" + "reset_scope": { + "description": "reset_scope names the window that clears this rejection.", + "enum": [ + "daily", + "monthly", + "minute", + "ip_window" + ], + "example": "monthly", + "type": "string" }, - "history": { - "$ref": "#/definitions/zillow.PropertyHistory" + "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" }, - "home_status": { + "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" }, - "home_type": { + "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" }, - "image": { + "data": { + "$ref": "#/definitions/web.billingRejectionDoc" + }, + "msg": { + "example": "Payment Required", "type": "string" + } + }, + "type": "object" + }, + "web.scrapeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_showcase": { - "type": "boolean" + "data": { + "$ref": "#/definitions/web.ScrapeResult" }, - "latitude": { - "type": "number" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "web.techStackResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "listing": { - "$ref": "#/definitions/zillow.PropertyListing" + "data": { + "$ref": "#/definitions/web.TechStackResult" }, - "listing_sub_type": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.checkDoc": { + "properties": { + "added_urls": { "items": { "type": "string" }, "type": "array" }, - "living_area": { - "type": "number" + "billed": { + "example": true, + "type": "boolean" }, - "longitude": { - "type": "number" + "changed": { + "example": false, + "type": "boolean" }, - "lot_area": { - "type": "number" + "checked_at": { + "example": "2026-08-22T10:00:00Z", + "type": "string" }, - "lot_area_unit": { + "diff": { "type": "string" }, - "media": { - "$ref": "#/definitions/zillow.PropertyMedia" + "error": { + "type": "string" }, - "nearby": { + "fingerprint": { + "type": "string" + }, + "id": { + "example": "66d2f0c1c2a4e5f6a7b8c9d1", + "type": "string" + }, + "monitor_id": { + "example": "66d2f0b1c2a4e5f6a7b8c9d0", + "type": "string" + }, + "removed_urls": { "items": { - "$ref": "#/definitions/zillow.PropertyNearby" + "type": "string" }, "type": "array" }, - "photos": { + "skipped": { + "example": false, + "type": "boolean" + }, + "webhook_deliveries": { "items": { - "type": "string" + "$ref": "#/definitions/webmonitor.webhookDeliveryDoc" }, "type": "array" + } + }, + "type": "object" + }, + "webmonitor.checkListResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "price": { - "type": "number" + "data": { + "items": { + "$ref": "#/definitions/webmonitor.checkDoc" + }, + "type": "array" }, - "price_text": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "webmonitor.createMonitorBodyDoc": { + "properties": { + "cadence_minutes": { + "example": 60, + "type": "integer" }, - "pricing": { - "$ref": "#/definitions/zillow.PropertyPricing" + "enabled": { + "example": true, + "type": "boolean" }, - "rent_zestimate": { - "type": "number" + "name": { + "example": "Pricing page", + "type": "string" }, - "schools": { - "items": { - "$ref": "#/definitions/zillow.PropertySchool" - }, - "type": "array" + "notification": { + "$ref": "#/definitions/webmonitor.notificationBodyDoc" }, - "status_text": { + "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" }, - "zestimate": { - "type": "number" + "data": { + "properties": { + "deleted": { + "example": true, + "type": "boolean" + } + }, + "type": "object" }, - "zpid": { - "example": "12345678", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zillow.PropertySchool": { + "webmonitor.monitorDoc": { "properties": { - "assigned": { + "cadence_minutes": { + "example": 60, + "type": "integer" + }, + "created_at": { + "example": "2026-08-01T00:00:00Z", + "type": "string" + }, + "enabled": { + "example": true, "type": "boolean" }, - "distance": { - "type": "number" + "failures": { + "example": 0, + "type": "integer" }, - "district": { + "id": { + "example": "66d2f0b1c2a4e5f6a7b8c9d0", "type": "string" }, - "grades": { + "last_changed_at": { + "example": "2026-08-20T09:00:00Z", "type": "string" }, - "id": { + "last_checked_at": { + "example": "2026-08-22T10:00:00Z", "type": "string" }, - "level": { + "last_error": { "type": "string" }, - "link": { + "name": { + "example": "Pricing page", "type": "string" }, - "name": { + "next_check_at": { + "example": "2026-08-22T11:00:00Z", "type": "string" }, - "rating": { - "type": "number" + "notification": { + "$ref": "#/definitions/webmonitor.notificationDoc" }, - "type": { + "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" }, - "zillow.PropertyTaxHistoryEntry": { + "webmonitor.monitorListResponseDoc": { "properties": { - "tax_increase": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "tax_paid": { - "type": "number" + "data": { + "items": { + "$ref": "#/definitions/webmonitor.monitorDoc" + }, + "type": "array" }, - "time": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.monitorResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "value": { - "type": "number" - }, - "value_increase": { - "type": "number" + "data": { + "$ref": "#/definitions/webmonitor.monitorDoc" }, - "year": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "zillow.SearchResponse": { + "webmonitor.notificationBodyDoc": { "properties": { - "location": { - "example": "San Francisco, CA", + "events": { + "example": [ + "change.detected", + "run.completed" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "webhook_secret": { + "example": "whsec_...", "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "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" }, - "results": { + "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": { - "$ref": "#/definitions/zillow.PropertyItem" + "type": "string" }, "type": "array" + }, + "max_urls": { + "example": 5000, + "type": "integer" } }, "type": "object" }, - "zomato.CitiesResponse": { + "webmonitor.sitemapTargetDoc": { "properties": { - "cities": { + "exclude_patterns": { + "example": [ + "/blog/*" + ], "items": { - "$ref": "#/definitions/zomato.City" + "type": "string" }, "type": "array" }, - "total": { + "include_patterns": { + "example": [ + "/products/*" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "max_urls": { + "example": 5000, "type": "integer" } }, "type": "object" }, - "zomato.City": { + "webmonitor.updateMonitorBodyDoc": { "properties": { + "cadence_minutes": { + "example": 60, + "type": "integer" + }, + "enabled": { + "example": true, + "type": "boolean" + }, "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", + "example": "Pricing page", "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" + "notification": { + "$ref": "#/definitions/webmonitor.notificationBodyDoc" }, - "url": { - "description": "URL is the city's canonical public Zomato page.", - "example": "https://www.zomato.com/mumbai", + "sitemap": { + "$ref": "#/definitions/webmonitor.sitemapTargetBodyDoc" + }, + "target_type": { + "enum": [ + "page", + "sitemap" + ], + "example": "page", "type": "string" } }, "type": "object" }, - "zomato.CollectionResponse": { + "webmonitor.webhookDeliveryDoc": { "properties": { - "description": { + "attempts": { + "example": 1, + "type": "integer" + }, + "delivered_at": { + "example": "2026-08-22T10:00:02Z", "type": "string" }, - "name": { + "error": { "type": "string" }, - "num_places": { + "event": { + "enum": [ + "change.detected", + "run.completed" + ], + "example": "change.detected", "type": "string" }, - "restaurants": { + "status": { + "enum": [ + "delivered", + "rejected", + "failed", + "skipped_unsafe_url" + ], + "example": "delivered", + "type": "string" + }, + "status_code": { + "example": 200, + "type": "integer" + } + }, + "type": "object" + }, + "wendys.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/zomato.CollectionRestaurant" + "$ref": "#/definitions/wendys.Category" }, "type": "array" }, - "url": { + "count": { + "example": 25, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "zomato.CollectionRestaurant": { + "wendys.Category": { "properties": { - "cuisines": { + "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" }, - "locality": { - "type": "string" - }, "name": { + "example": "Hamburgers", "type": "string" }, - "rating": { - "type": "number" - }, - "rating_count": { - "type": "string" - }, - "type": { + "slug": { + "example": "hamburgers", "type": "string" }, "url": { @@ -193666,332 +193363,859 @@ }, "type": "object" }, - "zomato.CollectionSummary": { + "wendys.ComboNutritionSelection": { "properties": { - "image_url": { - "type": "string" - }, "name": { + "example": "Dave's Single®", "type": "string" }, - "num_places": { - "type": "string" - }, - "url": { + "slot_type": { + "example": "ENTREE", "type": "string" } }, "type": "object" }, - "zomato.CollectionsResponse": { + "wendys.ComboOption": { "properties": { - "city": { + "base_price": { + "example": 5.59, + "type": "number" + }, + "calories": { + "example": "560 Cal", "type": "string" }, - "collections": { - "items": { - "$ref": "#/definitions/zomato.CollectionSummary" - }, - "type": "array" + "is_default": { + "type": "boolean" + }, + "name": { + "example": "Dave's Single®", + "type": "string" + }, + "product_id": { + "example": "10000000000081", + "type": "string" } }, "type": "object" }, - "zomato.MenuCategory": { + "wendys.ComboSlot": { "properties": { - "items": { + "name": { + "example": "Dave's Hamburger Combo", + "type": "string" + }, + "options": { "items": { - "$ref": "#/definitions/zomato.MenuItem" + "$ref": "#/definitions/wendys.ComboOption" }, "type": "array" }, - "name": { + "slot_type": { + "example": "ENTREE", "type": "string" } }, "type": "object" }, - "zomato.MenuItem": { + "wendys.Component": { "properties": { - "description": { - "type": "string" + "allergens": { + "example": [ + "Wheat", + "Milk" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "id": { + "description": { "type": "string" }, - "image_url": { + "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_veg": { + "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" }, - "zomato.MenuResponse": { + "wendys.DirectoryChild": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/zomato.MenuCategory" - }, - "type": "array" + "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" }, - "restaurant": { - "$ref": "#/definitions/zomato.RestaurantResponse" + "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" }, - "zomato.OpeningHours": { + "wendys.DirectoryResponse": { "properties": { - "days": { + "children": { + "items": { + "$ref": "#/definitions/wendys.DirectoryChild" + }, + "type": "array" + }, + "count": { + "example": 88, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "timing": { + "name": { + "type": "string" + }, + "path": { + "example": "united-states/oh", + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "zomato.RestaurantCard": { + "wendys.ItemResponse": { "properties": { - "address": { + "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" }, - "cost_for_two": { + "category": { + "example": "hamburgers", "type": "string" }, - "cuisines": { + "combo_slots": { + "description": "ComboSlots is set only when IsCombo is true.", "items": { - "type": "string" + "$ref": "#/definitions/wendys.ComboSlot" }, "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" + "components": { + "items": { + "$ref": "#/definitions/wendys.Component" + }, + "type": "array" }, - "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.", + "description": { + "description": "Description, BasePrice, Calories, Components and Variants are set\nonly when IsCombo is false.", "type": "string" }, - "id": { + "fetched_at": { "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\".", + "is_combo": { "type": "boolean" }, - "locality": { + "item": { + "example": "daves-combo", "type": "string" }, "name": { + "example": "Dave's Combo", "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.", + "source_url": { + "type": "string" + }, + "variants": { "items": { - "type": "string" + "$ref": "#/definitions/wendys.ItemVariant" }, "type": "array" - }, - "rating": { - "type": "number" - }, - "rating_count": { - "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "zomato.RestaurantDelivery": { + "wendys.ItemVariant": { "properties": { - "has_online_ordering": { - "type": "boolean" + "base_price": { + "example": 2.79, + "type": "number" }, - "is_serviceable": { - "type": "boolean" + "calories": { + "example": "260 Cal", + "type": "string" }, - "min_order_amount": { - "type": "number" + "description": { + "type": "string" }, - "pickup_available": { + "is_default": { + "description": "IsDefault marks the variant Wendy's own page selects by default.", "type": "boolean" }, - "time": { + "item_id": { + "example": "40054", "type": "string" - } - }, - "type": "object" - }, - "zomato.RestaurantRatings": { - "properties": { - "delivery": { - "$ref": "#/definitions/zomato.SplitRating" }, - "dining": { - "$ref": "#/definitions/zomato.SplitRating" + "name": { + "example": "Small Natural-Cut Fries", + "type": "string" + }, + "short_name": { + "example": "Small", + "type": "string" } }, "type": "object" }, - "zomato.RestaurantResponse": { + "wendys.MenuItemSummary": { "properties": { - "address": { + "calories": { + "example": "760 Cal", "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.", + "has_required_modifiers": { + "type": "boolean" + }, + "image_url": { "type": "string" }, - "country": { + "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" }, - "cuisines": { + "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": { - "type": "string" + "$ref": "#/definitions/wendys.MenuItemSummary" }, "type": "array" }, - "delivery": { - "allOf": [ - { - "$ref": "#/definitions/zomato.RestaurantDelivery" - } - ], - "description": "Delivery is present only when Zomato carries delivery metadata for\nthis restaurant." + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wendys.NearbyResponse": { + "properties": { + "count": { + "example": 25, + "type": "integer" }, - "id": { + "fetched_at": { "type": "string" }, - "image_url": { + "radius": { + "example": 20, + "type": "integer" + }, + "source_url": { "type": "string" }, - "is_dark_kitchen": { + "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" }, - "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_carry_out": { "type": "boolean" }, - "is_permanently_closed": { + "has_delivery": { "type": "boolean" }, - "is_temporarily_closed": { + "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" }, - "locality": { + "longitude": { + "example": -77.006362, + "type": "number" + }, + "name": { + "example": "WASHINGTON UNION STATION", "type": "string" }, - "longitude": { + "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" }, - "opening_hours": { - "description": "OpeningHours is the full weekly table behind the single-line Timing\nstring above.", + "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/zomato.OpeningHours" + "$ref": "#/definitions/wendys.StoreHours" }, "type": "array" }, - "phone": { + "currency": { + "example": "USD", "type": "string" }, - "rating": { + "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" }, - "rating_count": { - "type": "string" + "longitude": { + "example": -77.006362, + "type": "number" }, - "ratings": { - "allOf": [ - { - "$ref": "#/definitions/zomato.RestaurantRatings" - } - ], - "description": "Ratings splits the single headline Rating above into Zomato's own\nseparately-aggregated dining and delivery figures." + "name": { + "example": "WASHINGTON UNION STATION", + "type": "string" }, - "status_text": { + "phone_number": { + "example": "2028380978", "type": "string" }, - "timing": { + "source_url": { "type": "string" }, - "url": { + "store_id": { + "example": "12921", "type": "string" }, - "zipcode": { + "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" }, - "zomato.SearchResponse": { + "wendys.StoreAddress": { "properties": { "city": { + "example": "Alliance", "type": "string" }, - "has_more": { + "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" }, - "next_cursor": { + "closes": { + "example": "22:00", "type": "string" }, - "query": { + "day_of_week": { + "example": "Monday", "type": "string" }, - "restaurants": { + "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/zomato.RestaurantCard" + "$ref": "#/definitions/wendys.StoreMenuItem" }, "type": "array" }, - "total_results": { - "type": "integer" + "source_url": { + "type": "string" + }, + "store_id": { + "example": "12921", + "type": "string" } }, "type": "object" }, - "zomato.SplitRating": { + "wendys.StoreResponse": { "properties": { - "rating": { + "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" }, - "review_count": { + "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" }, - "zomato.citiesResponseDoc": { + "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/zomato.CitiesResponse" + "$ref": "#/definitions/wendys.CategoriesResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -193999,14 +194223,14 @@ }, "type": "object" }, - "zomato.collectionResponseDoc": { + "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/zomato.CollectionResponse" + "$ref": "#/definitions/wendys.DirectoryResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -194014,14 +194238,14 @@ }, "type": "object" }, - "zomato.collectionsResponseDoc": { + "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/zomato.CollectionsResponse" + "$ref": "#/definitions/wendys.ItemResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -194029,14 +194253,14 @@ }, "type": "object" }, - "zomato.menuResponseDoc": { + "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/zomato.MenuResponse" + "$ref": "#/definitions/wendys.MenuResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -194044,14 +194268,14 @@ }, "type": "object" }, - "zomato.restaurantResponseDoc": { + "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/zomato.RestaurantResponse" + "$ref": "#/definitions/wendys.NearbyResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -194059,59 +194283,28317 @@ }, "type": "object" }, - "zomato.searchResponseDoc": { + "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/zomato.SearchResponse" + "$ref": "#/definitions/wendys.NutritionResponse" }, "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" + "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" }, - "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", + "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": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "product_id": { + "type": "string" + }, + "result_count": { + "type": "integer" + }, + "reviews": { + "items": { + "$ref": "#/definitions/wish.Review" + }, + "type": "array" + }, + "source_url": { + "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": { + "type": "string" + }, + "comment": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "downvote_count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "image_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "is_wish_star": { + "type": "boolean" + }, + "rating": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "upvote_count": { + "type": "integer" + }, + "user_country_code": { + "type": "string" + }, + "user_name": { + "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" + }, + "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" + }, + "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": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "dividends": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "splits": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.CalendarResponse": { + "properties": { + "end": { + "example": "2026-05-27", + "type": "string" + }, + "limit": { + "example": 12, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "start": { + "example": "2026-05-20", + "type": "string" + }, + "type": { + "example": "earnings", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.CalendarsResponse": { + "properties": { + "calendars": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.DomainListResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahoofinance.DomainRef" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.DomainRef": { + "properties": { + "key": { + "example": "technology", + "type": "string" + }, + "name": { + "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": { + "items": { + "$ref": "#/definitions/yahoofinance.DownloadResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.DownloadResult": { + "properties": { + "error": { + "type": "string" + }, + "history": { + "$ref": "#/definitions/yahoofinance.HistoryResponse" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.EarningsDatesResponse": { + "properties": { + "limit": { + "example": 12, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.FinancialsResponse": { + "properties": { + "modules": { + "additionalProperties": {}, + "type": "object" + }, + "period": { + "example": "annual", + "type": "string" + }, + "statement": { + "example": "income", + "type": "string" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.HistoryMetadataResponse": { + "properties": { + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.HistoryResponse": { + "properties": { + "events": { + "$ref": "#/definitions/yahoofinance.ActionEvents" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "points": { + "items": { + "$ref": "#/definitions/yahoofinance.PricePoint" + }, + "type": "array" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.ISINResponse": { + "properties": { + "isin": { + "example": "US0378331005", + "type": "string" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.IndustryResponse": { + "properties": { + "key": { + "example": "semiconductors", + "type": "string" + }, + "name": { + "example": "Semiconductors", + "type": "string" + }, + "overview": { + "additionalProperties": {}, + "type": "object" + }, + "research_reports": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "sector_key": { + "example": "technology", + "type": "string" + }, + "sector_name": { + "example": "Technology", + "type": "string" + }, + "symbol": { + "type": "string" + }, + "top_companies": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "top_growth_companies": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "top_performing_companies": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.InfoResponse": { + "properties": { + "modules": { + "additionalProperties": {}, + "type": "object" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.LookupResponse": { + "properties": { + "count": { + "example": 10, + "type": "integer" + }, + "documents": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "query": { + "example": "apple", + "type": "string" + }, + "start": { + "example": 0, + "type": "integer" + }, + "total": { + "example": 10, + "type": "integer" + }, + "type": { + "example": "all", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.MarketStatusResponse": { + "properties": { + "market": { + "example": "US", + "type": "string" + }, + "status": { + "additionalProperties": {}, + "type": "object" + } + }, + "type": "object" + }, + "yahoofinance.MarketSummaryResponse": { + "properties": { + "market": { + "example": "US", + "type": "string" + }, + "summary": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.ModuleResponse": { + "properties": { + "modules": { + "additionalProperties": {}, + "type": "object" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.OptionExpiration": { + "properties": { + "calls": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "expiration_date": { + "example": 1779235200, + "type": "integer" + }, + "puts": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.OptionsResponse": { + "properties": { + "expiration_dates": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "options": { + "items": { + "$ref": "#/definitions/yahoofinance.OptionExpiration" + }, + "type": "array" + }, + "symbol": { + "example": "AAPL", + "type": "string" + }, + "underlying": { + "additionalProperties": {}, + "type": "object" + } + }, + "type": "object" + }, + "yahoofinance.PricePoint": { + "properties": { + "adj_close": { + "example": 211, + "type": "number" + }, + "close": { + "example": 211, + "type": "number" + }, + "datetime": { + "example": "2026-05-18T13:30:00Z", + "type": "string" + }, + "high": { + "example": 212, + "type": "number" + }, + "low": { + "example": 209, + "type": "number" + }, + "open": { + "example": 210, + "type": "number" + }, + "timestamp": { + "example": 1779111000, + "type": "integer" + }, + "volume": { + "example": 54200000, + "type": "integer" + } + }, + "type": "object" + }, + "yahoofinance.QuoteResponse": { + "properties": { + "quotes": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "symbols": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.ScreenerRequest": { + "properties": { + "count": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "query": { + "additionalProperties": {}, + "type": "object" + }, + "quote_type": { + "type": "string" + }, + "sort_asc": { + "type": "boolean" + }, + "sort_field": { + "type": "string" + } + }, + "required": [ + "query" + ], + "type": "object" + }, + "yahoofinance.ScreenerResponse": { + "properties": { + "description": { + "type": "string" + }, + "id": { + "example": "day_gainers", + "type": "string" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "quotes": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "title": { + "example": "Day Gainers", + "type": "string" + }, + "total": { + "example": 25, + "type": "integer" + } + }, + "type": "object" + }, + "yahoofinance.ScreenersResponse": { + "properties": { + "screeners": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.SearchResponse": { + "properties": { + "lists": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "news": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "quotes": { + "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": { + "example": "2026-05-20", + "type": "string" + }, + "points": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "start": { + "example": "2025-01-01", + "type": "string" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.SharesResponse": { + "properties": { + "shares": { + "additionalProperties": {}, + "type": "object" + }, + "symbol": { + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.TrendingResponse": { + "properties": { + "count": { + "example": 5, + "type": "integer" + }, + "job_timestamp": { + "example": 1779268508061, + "type": "integer" + }, + "region": { + "example": "US", + "type": "string" + }, + "start_interval": { + "example": 202605200800, + "type": "integer" + }, + "symbols": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.ValuationResponse": { + "properties": { + "headers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "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" + }, + "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.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" + } + }, + "type": "object" + }, + "yahooshopping.HomeResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahooshopping.StreamItem" + }, + "type": "array" + } + }, + "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.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.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.ArticleResponse" + }, + "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.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.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" + }, + "yahoosports.Broadcast": { + "properties": { + "abbr": { + "example": "NFLN", + "type": "string" + }, + "name": { + "example": "NFL Network", + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "winning_team_id": { + "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.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.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.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": { + "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" + }, + "season": { + "example": 2026, + "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.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.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.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.NewsArticle": { + "properties": { + "author": { + "example": "Yahoo Sports Staff", + "type": "string" + }, + "category": { + "example": "Sports", + "type": "string" + }, + "published": { + "example": "2026-08-13T15:25:12Z", + "type": "string" + }, + "summary": { + "type": "string" + }, + "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.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.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.ScoreboardResponse": { + "properties": { + "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" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.SeasonStatCategory": { + "properties": { + "category": { + "example": "passing", + "type": "string" + }, + "stats": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + }, + "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" + }, + "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.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.Venue": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "name": { + "example": "Acrisure Stadium", + "type": "string" + }, + "state": { + "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.golfScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.GolfScheduleResponse" + }, + "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.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.newsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.NewsResponse" + }, + "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.playerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.PlayerResponse" + }, + "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.scoreboardResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.ScoreboardResponse" + }, + "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.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" + }, + "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" + }, + "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": { + "type": "number" + }, + "start": { + "type": "number" + }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "youtube.ChannelFeedResponse": { + "properties": { + "channel_id": { + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "example": "OpenAI", + "type": "string" + }, + "channel_url": { + "example": "https://www.youtube.com/@OpenAI", + "type": "string" + }, + "continuation_token": { + "example": "NEXT_TOKEN", + "type": "string" + }, + "handle": { + "example": "@OpenAI", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/youtube.SearchItem" + }, + "type": "array" + }, + "query": { + "example": "gpt", + "type": "string" + }, + "thumbnail": { + "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "type": "string" + } + }, + "type": "object" + }, + "youtube.ChannelShort": { + "properties": { + "position": { + "example": 1, + "type": "integer" + }, + "thumbnail": { + "example": "https://i.ytimg.com/vi/abc123xyz89/oar2.jpg", + "type": "string" + }, + "title": { + "example": "OpenAI demo clip", + "type": "string" + }, + "url": { + "example": "https://www.youtube.com/shorts/abc123xyz89", + "type": "string" + }, + "video_id": { + "example": "abc123xyz89", + "type": "string" + }, + "view_count": { + "example": "1.2M views", + "type": "string" + } + }, + "type": "object" + }, + "youtube.ChannelShortsResponse": { + "properties": { + "channel_id": { + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "example": "OpenAI", + "type": "string" + }, + "channel_url": { + "example": "https://www.youtube.com/@OpenAI", + "type": "string" + }, + "handle": { + "example": "@OpenAI", + "type": "string" + }, + "shorts": { + "items": { + "$ref": "#/definitions/youtube.ChannelShort" + }, + "type": "array" + }, + "thumbnail": { + "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "type": "string" + } + }, + "type": "object" + }, + "youtube.Comment": { + "properties": { + "channel_id": { + "type": "string" + }, + "comment_id": { + "type": "string" + }, + "content": { + "type": "string" + }, + "continuation_token": { + "type": "string" + }, + "likes_count": { + "type": "integer" + }, + "published_time": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "user_name": { + "type": "string" + } + }, + "type": "object" + }, + "youtube.CommentResponse": { + "properties": { + "comments": { + "items": { + "$ref": "#/definitions/youtube.Comment" + }, + "type": "array" + }, + "continuation_token": { + "type": "string" + } + }, + "type": "object" + }, + "youtube.PlaylistResponse": { + "properties": { + "channel_id": { + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "example": "OpenAI", + "type": "string" + }, + "continuation_token": { + "example": "NEXT_TOKEN", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/youtube.SearchItem" + }, + "type": "array" + }, + "playlist_id": { + "example": "PL1234567890abcdef", + "type": "string" + }, + "thumbnail": { + "example": "https://i.ytimg.com/vi/abc123xyz89/hqdefault.jpg", + "type": "string" + }, + "title": { + "example": "OpenAI Podcast", + "type": "string" + }, + "url": { + "example": "https://www.youtube.com/playlist?list=PL1234567890abcdef", + "type": "string" + }, + "video_count": { + "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": { + "example": [ + "HD", + "CC" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "channel_id": { + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_thumbnail": { + "example": "https://yt3.ggpht.com/example=s68-c-k-c0x00ffffff-no-rj", + "type": "string" + }, + "channel_title": { + "example": "OpenAI", + "type": "string" + }, + "description_snippet": { + "example": "A concise walkthrough of GPT features.", + "type": "string" + }, + "duration": { + "example": "12:34", + "type": "string" + }, + "duration_seconds": { + "example": 754, + "type": "integer" + }, + "handle": { + "example": "@OpenAI", + "type": "string" + }, + "is_live": { + "type": "boolean" + }, + "is_short": { + "type": "boolean" + }, + "is_verified": { + "type": "boolean" + }, + "playlist_id": { + "example": "PL1234567890abcdef", + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "published_text": { + "example": "2 days ago", + "type": "string" + }, + "short_view_count": { + "example": "123K views", + "type": "string" + }, + "subscriber_count": { + "example": "1.93M subscribers", + "type": "string" + }, + "thumbnail": { + "example": "https://i.ytimg.com/vi/abc123/hq720.jpg", + "type": "string" + }, + "title": { + "example": "ChatGPT Explained", + "type": "string" + }, + "type": { + "example": "video", + "type": "string" + }, + "url": { + "example": "https://www.youtube.com/watch?v=abc123", + "type": "string" + }, + "video_count": { + "example": "9 lessons", + "type": "string" + }, + "video_id": { + "example": "abc123xyz89", + "type": "string" + }, + "view_count": { + "example": "123,456 views", + "type": "string" + } + }, + "type": "object" + }, + "youtube.SearchResponse": { + "properties": { + "continuation_token": { + "example": "NEXT_TOKEN", + "type": "string" + }, + "estimated_results": { + "example": 9895225, + "type": "integer" + }, + "items": { + "items": { + "$ref": "#/definitions/youtube.SearchItem" + }, + "type": "array" + }, + "query": { + "example": "gpt", + "type": "string" + } + }, + "type": "object" + }, + "youtube.TagResp": { + "properties": { + "continuation_token": { + "type": "string" + }, + "meta": { + "$ref": "#/definitions/youtube.tagMeta" + }, + "videos": { + "items": { + "$ref": "#/definitions/youtube.VideoDetail" + }, + "type": "array" + } + }, + "type": "object" + }, + "youtube.TranscriptLanguage": { + "properties": { + "is_generated": { + "type": "boolean" + }, + "is_translatable": { + "type": "boolean" + }, + "language": { + "example": "English", + "type": "string" + }, + "language_code": { + "example": "en", + "type": "string" + } + }, + "type": "object" + }, + "youtube.TranscriptResponse": { + "properties": { + "is_generated": { + "type": "boolean" + }, + "language": { + "example": "English", + "type": "string" + }, + "language_code": { + "example": "en", + "type": "string" + }, + "segments": { + "items": { + "$ref": "#/definitions/youtube.TranscriptSegment" + }, + "type": "array" + }, + "text": { + "example": "Never gonna give you up", + "type": "string" + }, + "translation_language": { + "example": "es", + "type": "string" + }, + "video_id": { + "example": "dQw4w9WgXcQ", + "type": "string" + } + }, + "type": "object" + }, + "youtube.TranscriptSegment": { + "properties": { + "duration": { + "type": "number" + }, + "start": { + "type": "number" + }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "youtube.VideoDetail": { + "properties": { + "channel_id": { + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "example": "OpenAI", + "type": "string" + }, + "comments_count": { + "example": 1400, + "type": "integer" + }, + "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": { + "example": "YbJOTdZBX1g", + "type": "string" + }, + "likes_count": { + "example": 11000, + "type": "integer" + }, + "published_at": { + "example": "2025-06-18T07:59:20-07:00", + "type": "string" + }, + "title": { + "example": "Sam Altman on AGI, GPT-5, and what’s next — the OpenAI Podcast Ep. 1", + "type": "string" + }, + "views_count": { + "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": { + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "example": "OpenAI", + "type": "string" + }, + "channel_url": { + "example": "https://www.youtube.com/@OpenAI", + "type": "string" + }, + "continuation_token": { + "example": "NEXT_TOKEN", + "type": "string" + }, + "handle": { + "example": "@OpenAI", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/youtube.SearchItem" + }, + "type": "array" + }, + "query": { + "example": "gpt", + "type": "string" + }, + "thumbnail": { + "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.tagMeta": { + "properties": { + "channelsCount": { + "format": "int64", + "type": "integer" + }, + "videosCount": { + "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": { + "example": "Los Angeles", + "type": "string" + }, + "county": { + "example": "Los Angeles County", + "type": "string" + }, + "id": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "near_me": { + "type": "boolean" + }, + "plid": { + "type": "string" + }, + "region_display_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "region_id": { + "example": 12447, + "type": "integer" + }, + "region_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "region_type": { + "example": 6, + "type": "integer" + }, + "region_types": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "school_district_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "school_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "state": { + "example": "CA", + "type": "string" + }, + "sub_type": { + "type": "string" + }, + "view_latitude_delta": { + "type": "number" + } + }, + "type": "object" + }, + "zillow.AutocompleteResponse": { + "properties": { + "query": { + "example": "Los Angeles, CA", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/zillow.AutocompleteItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "zillow.PropertyAddressParts": { + "properties": { + "city": { + "type": "string" + }, + "county": { + "type": "string" + }, + "neighborhood": { + "type": "string" + }, + "state": { + "type": "string" + }, + "street": { + "type": "string" + }, + "subdivision": { + "type": "string" + }, + "zipcode": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyAgent": { + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyArea": { + "properties": { + "text": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "type": "object" + }, + "zillow.PropertyFact": { + "properties": { + "key": { + "type": "string" + }, + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyFacts": { + "properties": { + "accessibility_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "additional": { + "items": { + "$ref": "#/definitions/zillow.PropertyFact" + }, + "type": "array" + }, + "appliances": { + "items": { + "type": "string" + }, + "type": "array" + }, + "architectural_style": { + "type": "string" + }, + "basement": { + "type": "string" + }, + "bathrooms": { + "type": "number" + }, + "bathrooms_full": { + "type": "integer" + }, + "bathrooms_half": { + "type": "integer" + }, + "bathrooms_one_quarter": { + "type": "integer" + }, + "bathrooms_three_quarter": { + "type": "integer" + }, + "bedrooms": { + "type": "number" + }, + "builder_model": { + "type": "string" + }, + "builder_name": { + "type": "string" + }, + "community_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "construction_materials": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cooling": { + "items": { + "type": "string" + }, + "type": "array" + }, + "exterior_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "fireplace_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "flooring": { + "items": { + "type": "string" + }, + "type": "array" + }, + "foundation_details": { + "items": { + "type": "string" + }, + "type": "array" + }, + "garage_spaces": { + "type": "number" + }, + "has_fireplace": { + "type": "boolean" + }, + "heating": { + "items": { + "type": "string" + }, + "type": "array" + }, + "hoa_fee": { + "type": "string" + }, + "home_type": { + "type": "string" + }, + "laundry_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "levels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "living_area": { + "$ref": "#/definitions/zillow.PropertyArea" + }, + "lot_size": { + "$ref": "#/definitions/zillow.PropertyArea" + }, + "lot_size_dimensions": { + "type": "string" + }, + "parcel_number": { + "type": "string" + }, + "parking_capacity": { + "type": "integer" + }, + "parking_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "patio_and_porch_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "pool_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "property_sub_type": { + "items": { + "type": "string" + }, + "type": "array" + }, + "roof": { + "type": "string" + }, + "rooms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "security_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sewer": { + "items": { + "type": "string" + }, + "type": "array" + }, + "spa_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "stories": { + "type": "number" + }, + "structure_type": { + "type": "string" + }, + "tax_annual_amount": { + "type": "number" + }, + "tax_assessed_value": { + "type": "number" + }, + "utilities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "view": { + "items": { + "type": "string" + }, + "type": "array" + }, + "water_source": { + "items": { + "type": "string" + }, + "type": "array" + }, + "waterfront_features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "year_built": { + "type": "integer" + }, + "zoning": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyHistory": { + "properties": { + "price": { + "items": { + "$ref": "#/definitions/zillow.PropertyPriceHistoryEntry" + }, + "type": "array" + }, + "tax": { + "items": { + "$ref": "#/definitions/zillow.PropertyTaxHistoryEntry" + }, + "type": "array" + } + }, + "type": "object" + }, + "zillow.PropertyListing": { + "properties": { + "agent_name": { + "type": "string" + }, + "agents": { + "items": { + "$ref": "#/definitions/zillow.PropertyAgent" + }, + "type": "array" + }, + "attribution_text": { + "type": "string" + }, + "broker_name": { + "type": "string" + }, + "broker_phone": { + "type": "string" + }, + "date_posted": { + "type": "string" + }, + "date_updated": { + "type": "string" + }, + "days_on_zillow": { + "type": "integer" + }, + "listing_id": { + "type": "string" + }, + "mls_id": { + "type": "string" + }, + "open_houses": { + "items": { + "$ref": "#/definitions/zillow.PropertyOpenHouse" + }, + "type": "array" + }, + "provider": { + "type": "string" + }, + "provider_listing_id": { + "type": "string" + }, + "source": { + "type": "string" + }, + "status": { + "type": "string" + }, + "sub_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_on_zillow": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyMedia": { + "properties": { + "has_3d_model": { + "type": "boolean" + }, + "has_video": { + "type": "boolean" + }, + "photo_count": { + "type": "integer" + }, + "photos": { + "items": { + "$ref": "#/definitions/zillow.PropertyPhoto" + }, + "type": "array" + }, + "primary_image": { + "type": "string" + }, + "video_url": { + "type": "string" + }, + "virtual_tour_url": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyNearby": { + "properties": { + "address": { + "type": "string" + }, + "baths": { + "type": "number" + }, + "beds": { + "type": "number" + }, + "home_status": { + "type": "string" + }, + "living_area": { + "type": "number" + }, + "price": { + "type": "number" + }, + "price_text": { + "type": "string" + }, + "url": { + "type": "string" + }, + "zpid": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyOpenHouse": { + "properties": { + "end_time": { + "type": "string" + }, + "start_time": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyPhoto": { + "properties": { + "height": { + "type": "integer" + }, + "source": { + "type": "string" + }, + "url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "zillow.PropertyPriceHistoryEntry": { + "properties": { + "buyer_agent": { + "type": "string" + }, + "change": { + "type": "number" + }, + "date": { + "type": "string" + }, + "event": { + "type": "string" + }, + "price": { + "type": "number" + }, + "price_text": { + "type": "string" + }, + "seller_agent": { + "type": "string" + }, + "source": { + "type": "string" + }, + "time": { + "type": "integer" + } + }, + "type": "object" + }, + "zillow.PropertyPricing": { + "properties": { + "currency": { + "type": "string" + }, + "estimated_monthly_payment": { + "type": "number" + }, + "monthly_hoa_fee": { + "type": "number" + }, + "price": { + "type": "number" + }, + "price_per_square_foot": { + "type": "number" + }, + "price_text": { + "type": "string" + }, + "property_tax_rate": { + "type": "number" + }, + "rent_zestimate": { + "type": "number" + }, + "zestimate": { + "type": "number" + } + }, + "type": "object" + }, + "zillow.PropertyResponse": { + "properties": { + "address": { + "type": "string" + }, + "address_parts": { + "$ref": "#/definitions/zillow.PropertyAddressParts" + }, + "baths": { + "type": "number" + }, + "beds": { + "type": "number" + }, + "broker_name": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "days_on_zillow": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "detail_text": { + "type": "string" + }, + "facts": { + "$ref": "#/definitions/zillow.PropertyFacts" + }, + "has_3d_model": { + "type": "boolean" + }, + "has_video": { + "type": "boolean" + }, + "history": { + "$ref": "#/definitions/zillow.PropertyHistory" + }, + "home_status": { + "type": "string" + }, + "home_type": { + "type": "string" + }, + "image": { + "type": "string" + }, + "is_showcase": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "listing": { + "$ref": "#/definitions/zillow.PropertyListing" + }, + "listing_sub_type": { + "items": { + "type": "string" + }, + "type": "array" + }, + "living_area": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "lot_area": { + "type": "number" + }, + "lot_area_unit": { + "type": "string" + }, + "media": { + "$ref": "#/definitions/zillow.PropertyMedia" + }, + "nearby": { + "items": { + "$ref": "#/definitions/zillow.PropertyNearby" + }, + "type": "array" + }, + "photos": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "type": "number" + }, + "price_text": { + "type": "string" + }, + "pricing": { + "$ref": "#/definitions/zillow.PropertyPricing" + }, + "rent_zestimate": { + "type": "number" + }, + "schools": { + "items": { + "$ref": "#/definitions/zillow.PropertySchool" + }, + "type": "array" + }, + "status_text": { + "type": "string" + }, + "url": { + "type": "string" + }, + "zestimate": { + "type": "number" + }, + "zpid": { + "example": "12345678", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertySchool": { + "properties": { + "assigned": { + "type": "boolean" + }, + "distance": { + "type": "number" + }, + "district": { + "type": "string" + }, + "grades": { + "type": "string" + }, + "id": { + "type": "string" + }, + "level": { + "type": "string" + }, + "link": { + "type": "string" + }, + "name": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyTaxHistoryEntry": { + "properties": { + "tax_increase": { + "type": "number" + }, + "tax_paid": { + "type": "number" + }, + "time": { + "type": "integer" + }, + "value": { + "type": "number" + }, + "value_increase": { + "type": "number" + }, + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "zillow.RentalUnit": { + "properties": { + "beds": { + "example": 1, + "type": "number" + }, + "price": { + "example": 2657, + "type": "number" + }, + "price_text": { + "example": "$2,657+", + "type": "string" + } + }, + "type": "object" + }, + "zillow.SearchItem": { + "properties": { + "address": { + "type": "string" + }, + "availability_count": { + "example": 6, + "type": "integer" + }, + "baths": { + "type": "number" + }, + "beds": { + "type": "number" + }, + "broker_name": { + "type": "string" + }, + "building_name": { + "example": "The Pointe at Warner Center", + "type": "string" + }, + "currency": { + "type": "string" + }, + "days_on_zillow": { + "type": "integer" + }, + "detail_text": { + "type": "string" + }, + "has_3d_model": { + "type": "boolean" + }, + "has_video": { + "type": "boolean" + }, + "home_status": { + "type": "string" + }, + "home_type": { + "type": "string" + }, + "image": { + "type": "string" + }, + "is_building": { + "example": true, + "type": "boolean" + }, + "is_showcase": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "listing_sub_type": { + "items": { + "type": "string" + }, + "type": "array" + }, + "living_area": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "lot_area": { + "type": "number" + }, + "lot_area_unit": { + "type": "string" + }, + "photos": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "type": "number" + }, + "price_max": { + "example": 3157, + "type": "number" + }, + "price_text": { + "type": "string" + }, + "rent_zestimate": { + "type": "number" + }, + "status_text": { + "type": "string" + }, + "units": { + "items": { + "$ref": "#/definitions/zillow.RentalUnit" + }, + "type": "array" + }, + "url": { + "type": "string" + }, + "zestimate": { + "type": "number" + }, + "zpid": { + "example": "12345678", + "type": "string" + } + }, + "type": "object" + }, + "zillow.SearchResponse": { + "properties": { + "location": { + "example": "San Francisco, CA", + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "results": { + "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": { + "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": "Returns designer values discovered from the selected 1stDibs category page. Each slug is valid for firstdibs-search's designer filter.", + "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 public product detail, pricing, availability, brand, category, description, and images for a 1stDibs product URL.", + "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 public ABC News Australia article metadata and body paragraphs from a canonical article URL.", + "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's byline metadata, biography, and recent articles from a canonical author URL.", + "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 fresh headlines from one public ABC News Australia section.", + "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 fresh ABC News Australia top stories from its public RSS feed.", + "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": "Returns the public ABC News Australia section inventory used by the headlines endpoint.", + "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 -- unlike this repo's other news-author endpoints, ABC News only exposes that list through an internal endpoint disallowed for every crawler in abcnews.com's robots.txt (a generic \"Disallow: /proxy/*\" rule, not limited to AI-training bots), so it is out of scope for this endpoint.", + "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 fresh headlines from one ABC News section's public hub page.", + "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 fresh ABC News top stories from its public news sitemap feed.", + "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": "Returns the ABC News section inventory: the 8 core news sections accepted by abcnews-headlines.", + "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 normalized 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 normalized 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 normalized 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. Credential-free public data from Agoda's own destination search.", + "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. Credential-free public data from Agoda's own activity content source.", + "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. Credential-free public data from Agoda's own flight content service.", + "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. Credential-free public data from Agoda's own flight search.", + "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. Credential-free public data from Agoda's own flight destination search.", + "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, drawn from the same city search as hotel search and filtered to non-hotel accommodation types. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel/home search.", + "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. Credential-free public data from Agoda's own hotel search.", + "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). Credential-free public data from Agoda's own hotel content source.", + "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 a normalized 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 reviews guests left for an Airbnb host, paginated, including the reviewer name and location.", + "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 normalized Airbnb public room details.", + "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 public calendar month hints parsed from Airbnb room bootstrap data.", + "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 normalized Airbnb public review snippets.", + "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": "Returns normalized Airbnb public web search results.", + "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 public Arc RSS 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 from its public Arc RSS feed. Feed 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": "Returns the three top-level editorial sections exposed in AL.com's site navigation and accepted by the headlines endpoint.", + "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/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-200), 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" + } + ], + "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" + ] + } + }, + "/aljazeera/article": { + "get": { + "description": "Returns a public Al Jazeera article's metadata and body paragraphs from a canonical article URL.", + "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": "Returns Al Jazeera's current public section navigation. Use a returned slug directly as the topic parameter on 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 fresh headlines from Al Jazeera's public, site-wide RSS feed.", + "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 normalized 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 normalized 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": "Returns normalized static pages from Allbirds (https://www.allbirds.com). The storefront URL is fixed server-side.", + "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 normalized static page detail for one Allbirds (https://www.allbirds.com) page handle. The storefront URL is fixed server-side.", + "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 normalized 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 normalized 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 normalized recommended products for one Allbirds (https://www.allbirds.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. 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) credential-free predictive search Ajax endpoint. 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": "Returns capped URL entries from Allbirds's (https://www.allbirds.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "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": "Returns child sitemap URLs from Allbirds's (https://www.allbirds.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "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 normalized storefront metadata for Allbirds (https://www.allbirds.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "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's own API does not expose one; see alt-sold-listings for per-grade sold prices on specific listings. Credential-free public data from Alt's own GraphQL API.", + "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: it always uses a search key scoped server-side to Alt's own live auction pool. Credential-free public data from Alt's own search backend. 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. Credential-free public data from Alt's own search backend.", + "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 via a facets-only query 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. Credential-free public data from Alt's own search backend.", + "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 -- normalized across Alt's own native listings and its aggregated external listings. id and listing_type come from a prior alt-search/alt-auctions result. 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", + "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. Credential-free public data from Alt's own GraphQL API.", + "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. Credential-free public data from Alt's own search backend. 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 recent time window, not a filtered view of live listings. Pass auction_house=Alt to see only Alt's own completed auctions. Credential-free public data from Alt's own search backend. 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": "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.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). Credential-free public data from Alt's own GraphQL API.", + "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). Parsed from amazon.jobs's stable server-rendered job detail page — there is no separate JSON detail endpoint upstream.", + "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) via its credential-free search JSON. Each result includes the full description and qualifications inline. `sort` accepts `relevant` (default, upstream 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 normalized 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": "Returns normalized Amazon search result cards for `amazon.com`.", + "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 typeahead keyword suggestions from Amazon's public suggestion API for `amazon.com`.", + "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 public Android Authority article metadata and body paragraphs from a canonical article URL.", + "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 fresh headlines from one public Android Authority section page.", + "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 the latest Android Authority stories from the public site-wide feed.", + "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": "Returns the public Android Authority section inventory accepted by the headlines endpoint.", + "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 public Android Police article metadata and readable body paragraphs from a canonical article URL.", + "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 because author pagination is disallowed by robots.txt.", + "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 headlines from one of the 18 live-verified primary navigation RSS feeds.", + "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 current Android Police top stories from its public RSS feed.", + "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": "Returns the complete live-verified Android Police primary navigation feed inventory.", + "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 normalized title), soonest first, paginated. Credential-free public AniList data.", + "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. Credential-free public AniList data.", + "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 normalized 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. Credential-free public AniList data.", + "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": "Returns a filterable, sorted anime ranking. Credential-free public AniList data. Filter by season, year, format, genre, and status.", + "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. Credential-free public anime data from AniList. Returns normalized 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 a normalized 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), scraped credential-free from the public MAL page. Credential-free public AniList data.", + "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": "Returns an anime's cast (character name, native name, billed role, image, favourites), paginated. Credential-free public AniList data.", + "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 normalized media entry, paginated. Credential-free public AniList data.", + "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": "Returns the people credited on an anime (name, production role, occupations, image), paginated. Credential-free public AniList data.", + "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 job ID", + "in": "query", + "name": "job_id_a", + "required": true, + "type": "string" + }, + { + "description": "Second job ID", + "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 job ID", + "in": "query", + "name": "job_id_a", + "required": true, + "type": "string" + }, + { + "description": "Second job ID", + "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": "Job ID to delete", + "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 returned by Submit", + "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, any order", + "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 uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 2 credits for an HTTP-profile success and 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 uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 1 credit for an HTTP-profile success and 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 uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 1 credit for an HTTP-profile success and 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 uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 1 credit for an HTTP-profile success and 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 uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 1 credit for an HTTP-profile success and 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": "Returns the AP News editorial hub inventory used by apnews-headlines.", + "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/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized Apple Books audiobooks from Apple's public iTunes Search API.", + "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 normalized audiobook metadata from Apple Books' public catalog page, 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 related audiobooks shown on the Apple Books catalog page.", + "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 author metadata and their full ebook (and audiobook, where available) bibliography from Apple Books' public catalog page.", + "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 normalized book metadata from Apple Books' public catalog page, 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 related books shown on the Apple Books catalog page.", + "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 chart rankings from Apple's public marketing-tools RSS JSON feed. Supported collections are `top-free` and `top-paid`.", + "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 Apple Books genre ID to filter the chart", + "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/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized Apple Books ebooks from Apple's public iTunes Search API.", + "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 series metadata and the full ordered list of books in the series from Apple Books' public catalog page.", + "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). Parsed from jobs.apple.com's server-rendered job detail page.", + "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 by the search backend). Apple exposes no bulk \"list everything\" API for this; its only source is its own location-filter typeahead, 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 no live upstream call required. With `q` supplied, this instead live-proxies Apple's own typeahead 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 from public iTunes RSS JSON feeds. Supported collections are `toppodcasts` and `topaudiopodcasts`.", + "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": "Returns normalized Apple Podcasts episodes from Apple's public iTunes Search API.", + "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": "Returns normalized Apple Podcasts shows from Apple's public iTunes Search API.", + "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 normalized show metadata from Apple's public iTunes Lookup API.", + "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 a show and its public Apple Podcasts episodes from Apple's iTunes Lookup API.", + "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 normalized app metadata from the App Store lookup API. 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": "Returns App Store apps associated with a specific developer artist ID.", + "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 app privacy cards shown on the App Store page, including data categories and purposes.", + "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 total ratings count and the 1-5 star histogram shown on the App Store product page.", + "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. Provide either `id` (numeric track ID) or `app_id` (bundle ID).", + "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 suggested search terms for the given partial keyword.", + "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 the version history entries shown in the App Store \"What's New\" section.", + "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 uses the configured production browser fleet when ordinary HTTP transport encounters Ars Technica's bot-verification challenge; it 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 uses the configured production browser fleet when ordinary HTTP transport encounters Ars Technica's bot-verification challenge; it 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 fresh headlines from one Ars Technica section's public RSS feed.", + "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 fresh Ars Technica stories from its public RSS feed.", + "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. Credential-free public catalog data from api.audible.com.", + "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. Credential-free public catalog data from api.audible.com.", + "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 that has no equivalent on api.audible.com's public JSON API. This is an HTML scrape of audible.com/charts, a different, less stable source class than the rest of this family, though 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 public ranked author chart. This is a people-shaped HTML surface and exposes only rank, author identity, image metadata when available, and a canonical author URI; author detail remains outside the credential-free public surface.", + "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, normalized into its themed shelves (heading + ordered ASINs). This is an HTML scrape of a marketing/editorial page (audible.com), not api.audible.com's JSON API — 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 — its layout has no consistent structure to parse.", + "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 a normalized Audible audiobook: description, authors, narrators, series, category ladders, publisher, release date, runtime, language, sample audio URL, rating (overall/performance/story), and public list price. Credential-free public catalog data from api.audible.com.", + "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 upstream similarity. Credential-free public catalog data from api.audible.com.", + "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). Credential-free public catalog data from api.audible.com.", + "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 normalized 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. Credential-free public catalog data from api.audible.com.", + "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. Credential-free public catalog data from api.audible.com.", + "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/firstdibs.categoriesDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -194126,25 +222608,27 @@ "ApiKeyAuth": [] } ], - "summary": "List 1stDibs categories and filters", + "summary": "Search Audible's catalog", "tags": [ - "1stDibs" + "Audible" ] } }, - "/1stdibs/designers": { + "/audible/series/{asin}": { "get": { "consumes": [ "application/json" ], - "description": "Returns designer values discovered from the selected 1stDibs category page. Each slug is valid for firstdibs-search's designer filter.", - "operationId": "firstdibs-designers", + "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}. Credential-free public catalog data from api.audible.com.", + "operationId": "audible-series", "parameters": [ { - "description": "Category slug from firstdibs-categories", - "in": "query", - "name": "category", - "type": "string" + "description": "Audible series ASIN, from a product's series[].asin field", + "in": "path", + "name": "asin", + "required": true, + "type": "string", + "x-example": "B006W3V2B0" } ], "produces": [ @@ -194154,7 +222638,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/firstdibs.designersDoc" + "$ref": "#/definitions/audible.seriesResponseDoc" } }, "400": { @@ -194163,6 +222647,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": { @@ -194175,26 +222671,27 @@ "ApiKeyAuth": [] } ], - "summary": "List 1stDibs designers", + "summary": "Get an Audible series' ordered book list", "tags": [ - "1stDibs" + "Audible" ] } }, - "/1stdibs/product": { + "/autotrader/dealer/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public product detail, pricing, availability, brand, category, description, and images for a 1stDibs product URL.", - "operationId": "firstdibs-product", + "description": "Returns a normalized Autotrader dealer profile (name, phone, address, rating, website) plus a first page of the dealer's own current inventory as normalized vehicle summaries and the dealer's total listing count. Credential-free public data sourced from Autotrader's own server-rendered dealer profile page.", + "operationId": "autotrader-dealer", "parameters": [ { - "description": "1stDibs product URL", - "in": "query", - "name": "url", + "description": "Autotrader dealer/owner id, the numeric path segment of a /car-dealers/{id} URL", + "in": "path", + "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "64141623" } ], "produces": [ @@ -194204,7 +222701,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/firstdibs.productDoc" + "$ref": "#/definitions/autotrader.DealerResponse" } }, "400": { @@ -194219,6 +222716,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -194231,160 +222734,365 @@ "ApiKeyAuth": [] } ], - "summary": "Get a 1stDibs product", + "summary": "Get Autotrader dealer profile", "tags": [ - "1stDibs" + "Autotrader" ] } }, - "/1stdibs/search": { + "/autotrader/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", + "description": "Searches Autotrader for new and used car listings, returning normalized vehicle summaries (make, model, trim, year, mileage, pricing, images) plus the total matching count. Credential-free public data sourced from Autotrader's own server-rendered search page.", + "operationId": "autotrader-search", "parameters": [ { - "description": "Free-text search", + "description": "Free-text keyword search", "in": "query", - "name": "q", - "type": "string" + "name": "query", + "type": "string", + "x-example": "leather seats" }, { - "description": "Category slug from firstdibs-categories", + "description": "5-digit US ZIP code to search around", "in": "query", - "name": "category", - "type": "string" + "name": "zip", + "type": "string", + "x-example": "90210" }, { - "description": "Designer slug from firstdibs-designers", + "description": "Search radius in miles around zip", "in": "query", - "name": "designer", - "type": "string" + "name": "radius", + "type": "integer", + "x-example": 50 }, { - "description": "Color value", + "description": "Autotrader make code, e.g. TOYOTA, HONDA, BMW", "in": "query", - "name": "color", - "type": "string" + "name": "make", + "type": "string", + "x-example": "TOYOTA" }, { - "description": "Period value", + "description": "Autotrader model code, e.g. CAMRY. Requires make", "in": "query", - "name": "period", - "type": "string" + "name": "model", + "type": "string", + "x-example": "CAMRY" }, { - "description": "Item location", + "description": "Autotrader trim code. Requires make and model", "in": "query", - "name": "location", - "type": "string" + "name": "trim", + "type": "string", + "x-example": "LE" }, { - "description": "Gender value", + "description": "Listing condition. Allowed values: new, used, certified, 3p_cert", + "enum": [ + "new", + "used", + "certified", + "3p_cert" + ], "in": "query", - "name": "gender", - "type": "string" + "name": "condition", + "type": "string", + "x-example": "used" }, { - "description": "Place-of-origin value", + "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": "origin", - "type": "string" + "name": "body_style", + "type": "string", + "x-example": "suv" }, { - "description": "Price preset", + "description": "Seller type. Allowed values: dealer, private", "enum": [ - "all price", - "[* TO 999]", - "[* TO 1999]", - "[* TO 4999]", - "[5000 TO *]" + "dealer", + "private" ], "in": "query", - "name": "price", - "type": "string" + "name": "seller_type", + "type": "string", + "x-example": "dealer" }, { - "description": "Minimum price", + "description": "Minimum model year", "in": "query", - "name": "price_min", - "type": "number" + "name": "min_year", + "type": "integer", + "x-example": 2020 }, { - "description": "Maximum price", + "description": "Maximum model year", "in": "query", - "name": "price_max", - "type": "number" + "name": "max_year", + "type": "integer", + "x-example": 2026 }, { - "description": "On-sale listings only", + "description": "Minimum price in US dollars", "in": "query", - "name": "on_sale", - "type": "boolean" + "name": "min_price", + "type": "integer", + "x-example": 10000 }, { - "description": "Listings with measurements", + "description": "Maximum price in US dollars", "in": "query", - "name": "measurements", - "type": "boolean" + "name": "max_price", + "type": "integer", + "x-example": 40000 }, { - "description": "Listings added this week", + "description": "Maximum odometer mileage", "in": "query", - "name": "this_week", - "type": "boolean" + "name": "max_mileage", + "type": "integer", + "x-example": 60000 }, { - "description": "Returnable items only", + "description": "1-indexed result page, defaults to 1. Autotrader returns 24 results per page", "in": "query", - "name": "returnable", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/autotrader.searchResponseDoc" + } }, - { - "description": "Recognized seller listings only", - "in": "query", - "name": "recognized_seller", - "type": "boolean" + "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": [ { - "description": "Top seller listings only", - "in": "query", - "name": "top_seller", - "type": "boolean" + "ApiKeyAuth": [] + } + ], + "summary": "Search Autotrader vehicle listings", + "tags": [ + "Autotrader" + ] + } + }, + "/autotrader/vehicle/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a normalized 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). Credential-free public data sourced from Autotrader's own server-rendered vehicle detail page.", + "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": [ { - "description": "Sort", - "enum": [ - "recommended", - "newest", - "price-high", - "price-low", - "popular" - ], + "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": "sort", - "type": "string" + "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": [ { - "default": 1, - "description": "1-based page", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "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": [ { - "default": 60, - "description": "Results per page", - "enum": [ - 60, - 120 - ], + "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": "per_page", - "type": "integer" + "name": "topic", + "required": true, + "type": "string", + "x-example": "technology" } ], "produces": [ @@ -194394,7 +223102,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/firstdibs.searchDoc" + "$ref": "#/definitions/axios.headlinesResponseDoc" } }, "400": { @@ -194403,6 +223111,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": { @@ -194415,55 +223135,101 @@ "ApiKeyAuth": [] } ], - "summary": "Search 1stDibs listings", + "summary": "Get Axios topic headlines", "tags": [ - "1stDibs" + "Axios" ] } }, - "/7now/catalog": { + "/balenciaga/categories": { "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": "Returns Balenciaga's live storefront navigation/category taxonomy. Each categories[].path is the exact value accepted by balenciaga-category's path parameter.", + "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": "7NOW store id, from GET /7now/stores.", + "description": "Category path from balenciaga-categories", "in": "query", - "name": "store_id", + "name": "path", "required": true, "type": "string", - "x-example": "39226" + "x-example": "/en-en/women/bags-for-women/handbags" }, { - "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": "Sort order", + "enum": [ + "latest", + "price_ascending", + "price_descending" + ], "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.747508 + "name": "sort", + "type": "string", + "x-example": "latest" }, { - "description": "Accepted but inert -- see lat.", + "description": "One-based page number, defaults to 1", "in": "query", - "name": "lon", - "type": "number", - "x-example": -73.989099 + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Pagination offset, applied uniformly to every catalog section. Defaults to 0.", + "description": "Products per page, defaults to 16, maximum 48", "in": "query", - "name": "skip", + "name": "limit", "type": "integer", - "x-example": 0 + "x-example": 16 }, { - "description": "Max items returned per catalog section, 1-50. Defaults to 20.", + "description": "Comma-separated exact facet filters; repeat a field for OR values, for example akeneo_macroColor:BLACK,akeneo_macroColor:WHITE", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "filters", + "type": "string", + "x-example": "akeneo_macroColor:BLACK" } ], "produces": [ @@ -194473,7 +223239,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.catalogResponseDoc" + "$ref": "#/definitions/balenciaga.listingResponseDoc" } }, "400": { @@ -194482,6 +223248,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -194500,41 +223272,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one 7NOW store's live product catalog", + "summary": "Browse a Balenciaga category", "tags": [ - "7NOW" + "Balenciaga" ] } }, - "/7now/categories": { + "/balenciaga/product": { "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 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": "7NOW store id, from GET /7now/stores.", + "description": "Product URL from a Balenciaga listing", "in": "query", - "name": "store_id", + "name": "url", "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": "/en-en/hourglass-avenue-top-handle-bag-small-black-A007IH2ACT21000.html" } ], "produces": [ @@ -194544,7 +223302,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.categoriesResponseDoc" + "$ref": "#/definitions/balenciaga.productResponseDoc" } }, "400": { @@ -194553,6 +223311,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -194571,56 +223335,116 @@ "ApiKeyAuth": [] } ], - "summary": "List every category id one 7NOW store accepts", + "summary": "Get a Balenciaga product", "tags": [ - "7NOW" + "Balenciaga" ] } }, - "/7now/category": { + "/balenciaga/product/variants": { "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 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": "7NOW store id, from GET /7now/stores.", + "description": "Balenciaga product URL or Product-Variation URL", "in": "query", - "name": "store_id", + "name": "url", "required": true, "type": "string", - "x-example": "39226" + "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": [ { - "description": "Category id, from GET /7now/categories -- either a department or a merchandising shelf.", + "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": "category_id", + "name": "q", "required": true, "type": "string", - "x-example": "48423" + "x-example": "hourglass" }, { - "description": "Restrict to one subcategory group by exact name (from a prior call's subcategories[].name).", + "description": "Sort order", + "enum": [ + "latest", + "price_ascending", + "price_descending" + ], "in": "query", - "name": "subcategory", + "name": "sort", "type": "string", - "x-example": "Pizza" + "x-example": "latest" }, { - "description": "Pagination offset, applied uniformly to every subcategory group. Defaults to 0.", + "description": "One-based page number, defaults to 1", "in": "query", - "name": "skip", + "name": "page", "type": "integer", - "x-example": 0 + "x-example": 1 }, { - "description": "Max items returned per subcategory group, 1-50. Defaults to 20.", + "description": "Comma-separated exact facet filters; repeat a field for OR values, for example akeneo_macroColor:BLACK,akeneo_macroColor:WHITE", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "filters", + "type": "string", + "x-example": "akeneo_macroColor:BLACK" } ], "produces": [ @@ -194630,7 +223454,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.categoryResponseDoc" + "$ref": "#/definitions/balenciaga.listingResponseDoc" } }, "400": { @@ -194639,6 +223463,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -194657,35 +223487,156 @@ "ApiKeyAuth": [] } ], - "summary": "Browse one 7NOW store's category by subcategory", + "summary": "Search Balenciaga products", "tags": [ - "7NOW" + "Balenciaga" ] } }, - "/7now/combo": { + "/balenciaga/store-countries": { "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 every country code accepted by balenciaga-stores, discovered from Balenciaga's own public store-locator form.", + "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": "Promotion id, from GET /7now/combos' combos[].promo_id.", + "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": "promo_id", + "name": "country", "required": true, "type": "string", - "x-example": "6a849a8fa1df2409010c719f" + "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": [ { - "description": "7NOW store id, from GET /7now/stores.", + "ApiKeyAuth": [] + } + ], + "summary": "List Balenciaga stores", + "tags": [ + "Balenciaga" + ] + } + }, + "/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": "store_id", + "name": "url", "required": true, "type": "string", - "x-example": "39640" + "x-example": "https://www.barrons.com/articles/nvidia-stock-price-meta-ai-chips-rally-11911927" } ], "produces": [ @@ -194695,7 +223646,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.comboResponseDoc" + "$ref": "#/definitions/barrons.articleResponseDoc" } }, "400": { @@ -194704,6 +223655,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -194728,41 +223685,171 @@ "ApiKeyAuth": [] } ], - "summary": "Get one 7NOW bundle deal's pick-from groups", + "summary": "Get a Barron's article's content", "tags": [ - "7NOW" + "Barrons" ] } }, - "/7now/combos": { + "/barrons/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 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": "7NOW store id, from GET /7now/stores.", + "description": "Barron's topic slug from /barrons/topics", "in": "query", - "name": "store_id", + "name": "section", "required": true, "type": "string", - "x-example": "39640" + "x-example": "technology" }, { - "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": "Results page", "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.712775 + "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": [ { - "description": "Accepted but inert -- see lat.", - "in": "query", - "name": "lon", - "type": "number", - "x-example": -74.005973 + "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 every Barron's editorial topic accepted by /barrons/headlines' section parameter, with each topic's slug, display name, and landing-page URL.", + "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/business": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a normalized 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. Credential-free public Better Business Bureau data.", + "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": [ @@ -194772,7 +223859,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.combosResponseDoc" + "$ref": "#/definitions/bbb.businessResponseDoc" } }, "400": { @@ -194781,8 +223868,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" } @@ -194799,55 +223892,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a 7NOW store's bundle deals", + "summary": "Get a Better Business Bureau business profile", "tags": [ - "7NOW" + "BBB" ] } }, - "/7now/deals": { + "/bbb/business/complaints": { "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 a business's BBB complaint history: total complaint count, complaints closed in the last 12 months, and per-complaint detail (date, type, status, narrative text, and any business response / customer answer thread). A business with no filed complaints returns total_complaints 0 and an empty complaints list -- this is a normal result, not an error. Credential-free public Better Business Bureau data.", + "operationId": "bbb-business-complaints", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", + "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", - "name": "store_id", + "name": "url", "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 + "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" } ], "produces": [ @@ -194857,7 +223922,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.dealsResponseDoc" + "$ref": "#/definitions/bbb.complaintsResponseDoc" } }, "400": { @@ -194866,8 +223931,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" } @@ -194884,41 +223955,27 @@ "ApiKeyAuth": [] } ], - "summary": "List every discounted item in one 7NOW store", + "summary": "Get a Better Business Bureau business's complaint history", "tags": [ - "7NOW" + "BBB" ] } }, - "/7now/offers": { + "/bbb/business/more-info": { "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 a business's full per-factor \"Reasons for Rating\" list and full service-area list, from the separate BBB business profile /more-info sub-page. The bbb-business endpoint's own rating_reasons field is read from the main profile page and typically holds only one generic boilerplate bullet regardless of actual rating; this endpoint fetches 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. Credential-free public Better Business Bureau data.", + "operationId": "bbb-business-more-info", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", + "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", - "name": "store_id", + "name": "url", "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": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" } ], "produces": [ @@ -194928,7 +223985,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.offersResponseDoc" + "$ref": "#/definitions/bbb.moreInfoResponseDoc" } }, "400": { @@ -194937,8 +223994,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" } @@ -194955,38 +224018,33 @@ "ApiKeyAuth": [] } ], - "summary": "List a 7NOW store's advertised promotional campaigns", + "summary": "Get a Better Business Bureau business's full rating reasons and service area", "tags": [ - "7NOW" + "BBB" ] } }, - "/7now/popular": { + "/bbb/business/reviews": { "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": "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. Credential-free public Better Business Bureau data. Unlike the other bbb-business-* endpoints, this one is fetched with browser impersonation rather than plain direct HTTP -- see the family's maintenance note for why.", + "operationId": "bbb-business-reviews", "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": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", - "name": "store_id", + "name": "url", + "required": true, "type": "string", - "x-example": "39226" + "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" }, { - "description": "Which trending index to read. One of: convenience, restaurant, global. Defaults to convenience.", - "enum": [ - "convenience", - "restaurant", - "global" - ], + "description": "Result page (10 per page), default 1", "in": "query", - "name": "vertical", - "type": "string", - "x-example": "convenience" + "name": "page", + "type": "integer" } ], "produces": [ @@ -194996,7 +224054,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.popularResponseDoc" + "$ref": "#/definitions/bbb.reviewsResponseDoc" } }, "400": { @@ -195005,8 +224063,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -195023,27 +224081,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get 7NOW trending search terms", + "summary": "Get a Better Business Bureau business's customer reviews", "tags": [ - "7NOW" + "BBB" ] } }, - "/7now/product": { + "/bbb/category": { "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": "Browses bbb.org businesses by category and location directly, without a free-text search query. Returns the same normalized business-result shape as bbb-search. Credential-free public Better Business Bureau data.", + "operationId": "bbb-category", "parameters": [ { - "description": "7NOW product id, from GET /7now/search, /7now/catalog or /7now/category.", + "description": "BBB category browse URL, from a bbb-search result's related_categories", "in": "query", - "name": "product_id", + "name": "url", "required": true, "type": "string", - "x-example": "178322-2-6-2" + "x-example": "https://www.bbb.org/us/tx/austin/category/plumber" + }, + { + "description": "Result page, default 1", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -195053,7 +224117,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.productResponseDoc" + "$ref": "#/definitions/bbb.categoryResponseDoc" } }, "400": { @@ -195062,14 +224126,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" } @@ -195086,49 +224144,119 @@ "ApiKeyAuth": [] } ], - "summary": "Get one 7NOW product's full reference record", + "summary": "Browse a Better Business Bureau category", "tags": [ - "7NOW" + "BBB" ] } }, - "/7now/promotion": { + "/bbb/scamtracker/search": { "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": "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. Omit every filter to browse the most-recent-first feed. Credential-free public Better Business Bureau data. 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": "Promotion id, from GET /7now/deals' items[].promos[].id.", + "description": "Free-text search (phone number, website, email, business name, scam ID, description). Omit to browse the most-recent feed", "in": "query", - "name": "promo_id", - "required": true, + "name": "query", "type": "string", - "x-example": "6a9746d488cc35e1bbff1584" + "x-example": "amazon" }, { - "description": "7NOW store id, from GET /7now/stores.", + "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": "store_id", - "required": true, + "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": "39640" + "x-example": "TX" }, { - "description": "Pagination offset. Defaults to 0.", + "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": "skip", + "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": 0 + "x-example": 500000 }, { - "description": "Max items returned, 1-100. Defaults to 20.", + "description": "Optional maximum reported dollar loss. Must be set together with min_dollars_lost", "in": "query", - "name": "limit", + "name": "max_dollars_lost", "type": "integer", - "x-example": 20 + "x-example": 1000000 + }, + { + "description": "Result page (10 per page), default 1", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -195138,7 +224266,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.promotionResponseDoc" + "$ref": "#/definitions/bbbscamtracker.searchResponseDoc" } }, "400": { @@ -195147,14 +224275,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" } @@ -195171,49 +224293,31 @@ "ApiKeyAuth": [] } ], - "summary": "List every item one 7NOW promotion covers", + "summary": "Search Better Business Bureau Scam Tracker reports", "tags": [ - "7NOW" + "BBB" ] } }, - "/7now/search": { + "/bbb/scamtracker/state-stats": { "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 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. This calls the same JSON API the BBB Scam Tracker heatmap dashboard's own frontend uses -- not an HTML scrape. Credential-free public Better Business Bureau data.", + "operationId": "bbb-scamtracker-state-stats", "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.", + "description": "Aggregation window, default 90", + "enum": [ + "30", + "90", + "365", + "all" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "period", + "type": "string" } ], "produces": [ @@ -195223,7 +224327,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.searchResponseDoc" + "$ref": "#/definitions/bbbscamtracker.stateStatsResponseDoc" } }, "400": { @@ -195232,8 +224336,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -195250,27 +224354,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search one 7NOW store's products", + "summary": "Get Better Business Bureau Scam Tracker state/province aggregate stats", "tags": [ - "7NOW" + "BBB" ] } }, - "/7now/stores": { + "/bbb/scamtracker/{id}": { "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 one normalized 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. Credential-free public Better Business Bureau data.", + "operationId": "bbb-scamtracker-detail", "parameters": [ { - "description": "Free-text delivery address, street, city and state, or postal code.", - "in": "query", - "name": "address", + "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": "350 5th Ave, New York, NY" + "x-example": "1397968" } ], "produces": [ @@ -195280,7 +224384,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.storesResponseDoc" + "$ref": "#/definitions/bbbscamtracker.detailResponseDoc" } }, "400": { @@ -195295,8 +224399,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -195313,39 +224417,41 @@ "ApiKeyAuth": [] } ], - "summary": "Find 7NOW delivery stores near an address", + "summary": "Get a Better Business Bureau Scam Tracker report", "tags": [ - "7NOW" + "BBB" ] } }, - "/7now/suggest": { + "/bbb/search": { "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": "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. Credential-free public Better Business Bureau data.", + "operationId": "bbb-search", "parameters": [ { - "description": "Partial search term, at least 3 characters.", + "description": "Business name or category/service keyword", "in": "query", - "name": "q", + "name": "query", "required": true, "type": "string", - "x-example": "chi" + "x-example": "plumber" }, { - "description": "Which search index to complete against. One of: convenience, restaurant, global. Defaults to convenience.", - "enum": [ - "convenience", - "restaurant", - "global" - ], + "description": "City and state (e.g. 'Austin, TX') or a ZIP code", "in": "query", - "name": "vertical", + "name": "location", + "required": true, "type": "string", - "x-example": "convenience" + "x-example": "Austin, TX" + }, + { + "description": "Result page, default 1", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -195355,7 +224461,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.suggestResponseDoc" + "$ref": "#/definitions/bbb.searchResponseDoc" } }, "400": { @@ -195364,8 +224470,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -195382,24 +224488,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get 7NOW search-term suggestions", + "summary": "Search Better Business Bureau businesses", "tags": [ - "7NOW" + "BBB" ] } }, - "/abcau/article": { + "/bbc/article": { "get": { - "description": "Returns public ABC News Australia article metadata and body paragraphs from a canonical article URL.", - "operationId": "abcau-article", + "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 ABC News Australia article URL", + "description": "Canonical BBC News 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" + "x-example": "https://www.bbc.co.uk/news/articles/cd68q3wynnqo" } ], "produces": [ @@ -195409,7 +224515,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/bbc.articleResponseDoc" } }, "400": { @@ -195424,6 +224530,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -195436,24 +224548,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News Australia article content", + "summary": "Get BBC News article content", "tags": [ - "ABC News Australia" + "BBC" ] } }, - "/abcau/author": { + "/bbc/author": { "get": { - "description": "Returns an ABC News Australia author's byline metadata, biography, and recent articles from a canonical author URL.", - "operationId": "abcau-author", + "description": "Returns a BBC News correspondent's public profile: name, short bio, and their recent articles.", + "operationId": "bbc-author", "parameters": [ { - "description": "Canonical ABC News Australia author URL", + "description": "Canonical BBC News correspondent URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.abc.net.au/news/jane-doe/12345" + "x-example": "https://www.bbc.co.uk/news/correspondents/jonnydymond" } ], "produces": [ @@ -195463,7 +224575,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.abcauAuthorResponseDoc" + "$ref": "#/definitions/bbc.authorResponseDoc" } }, "400": { @@ -195478,6 +224590,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -195490,39 +224608,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get an ABC News Australia author profile", + "summary": "Get a BBC News correspondent's profile", "tags": [ - "ABC News Australia" + "BBC" ] } }, - "/abcau/headlines": { + "/bbc/headlines": { "get": { - "description": "Returns fresh headlines from one public ABC News Australia section.", - "operationId": "abcau-headlines", + "description": "Returns fresh headlines from a public BBC News RSS section. section defaults to world.", + "operationId": "bbc-headlines", "parameters": [ { - "description": "ABC News Australia section slug", + "description": "BBC News RSS section, defaults to world", "enum": [ - "justin", + "all", "world", + "uk", "politics", "business", - "sport", "health", - "entertainment", - "science", - "rural", - "analysis-and-opinion", - "indigenous", - "environment", - "backstory", - "lifestyle", - "australia" + "science_and_environment", + "technology", + "entertainment_and_arts" ], "in": "query", "name": "section", - "required": true, "type": "string" } ], @@ -195533,7 +224644,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/bbc.headlinesResponseDoc" } }, "400": { @@ -195542,6 +224653,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": { @@ -195554,16 +224677,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News Australia section headlines", + "summary": "Get BBC News section headlines", "tags": [ - "ABC News Australia" + "BBC" ] } }, - "/abcau/news": { + "/bbc/live": { "get": { - "description": "Returns fresh ABC News Australia top stories from its public RSS feed.", - "operationId": "abcau-news", + "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" ], @@ -195571,7 +224704,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/bbc.liveResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -195592,50 +224737,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News Australia top stories", - "tags": [ - "ABC News Australia" - ] - } - }, - "/abcau/sections": { - "get": { - "description": "Returns the public ABC News Australia section inventory used by the headlines endpoint.", - "operationId": "abcau-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get ABC News Australia sections", + "summary": "Get a BBC News live-page text snapshot", "tags": [ - "ABC News Australia" + "BBC" ] } }, - "/abcnews/article": { + "/bbc/search": { "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", + "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": "Canonical ABC News article URL", + "description": "Search query, up to 120 characters", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://abcnews.com/Politics/example-story/story?id=123456789" + "x-example": "climate" + }, + { + "description": "Results page, defaults to 1", + "in": "query", + "maximum": 10, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -195645,7 +224772,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/bbc.searchResponseDoc" } }, "400": { @@ -195660,6 +224787,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -195672,24 +224805,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News article content", + "summary": "Search public BBC pages", "tags": [ - "ABC News" + "BBC" ] } }, - "/abcnews/author": { + "/benzinga/article": { "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 -- unlike this repo's other news-author endpoints, ABC News only exposes that list through an internal endpoint disallowed for every crawler in abcnews.com's robots.txt (a generic \"Disallow: /proxy/*\" rule, not limited to AI-training bots), so it is out of scope for this endpoint.", - "operationId": "abcnews-author", + "description": "Returns metadata and anonymous body paragraphs from a canonical dated Benzinga editorial article URL.", + "operationId": "benzinga-article", "parameters": [ { - "description": "Canonical ABC News author URL", + "description": "Canonical dated Benzinga editorial article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://abcnews.com/author/benjamin_siegel" + "x-example": "https://www.benzinga.com/trading-ideas/movers/26/09/62057574/spacex-stock-rises-tuesday" } ], "produces": [ @@ -195699,7 +224832,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.abcNewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -195726,33 +224859,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get an ABC News author profile", + "summary": "Get a Benzinga article", "tags": [ - "ABC News" + "Benzinga" ] } }, - "/abcnews/headlines": { + "/benzinga/headlines": { "get": { - "description": "Returns fresh headlines from one ABC News section's public hub page.", - "operationId": "abcnews-headlines", + "description": "Returns public story cards from one verified Benzinga news section; section must come from benzinga_sections.", + "operationId": "benzinga-headlines", "parameters": [ { - "description": "ABC News section slug", + "description": "Benzinga editorial section slug", "enum": [ - "us", - "world", + "latest", + "technology-stocks", "politics", - "business", - "technology", - "entertainment", - "health", - "sports" + "health-care" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "latest" } ], "produces": [ @@ -195783,16 +224913,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News section headlines", + "summary": "Get Benzinga section headlines", "tags": [ - "ABC News" + "Benzinga" ] } }, - "/abcnews/news": { + "/benzinga/news": { "get": { - "description": "Returns fresh ABC News top stories from its public news sitemap feed.", - "operationId": "abcnews-news", + "description": "Returns current Benzinga stories and teaser summaries from its public RSS feed.", + "operationId": "benzinga-news", "produces": [ "application/json" ], @@ -195803,8 +224933,50 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "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" } @@ -195821,16 +224993,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News top stories", + "summary": "Search Benzinga article suggestions", "tags": [ - "ABC News" + "Benzinga" ] } }, - "/abcnews/sections": { + "/benzinga/sections": { "get": { - "description": "Returns the ABC News section inventory: the 8 core news sections accepted by abcnews-headlines.", - "operationId": "abcnews-sections", + "description": "Returns the four menu-verified Benzinga editorial sections accepted by benzinga_headlines.", + "operationId": "benzinga-sections", "produces": [ "application/json" ], @@ -195847,19 +225019,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News sections", + "summary": "List Benzinga news sections", "tags": [ - "ABC News" + "Benzinga" ] } }, - "/accor/amenities": { + "/bestbuy/brands": { "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 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" ], @@ -195867,7 +225039,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.amenitiesResponseDoc" + "$ref": "#/definitions/bestbuy.brandsResponseDoc" } }, "429": { @@ -195876,12 +225048,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -195894,19 +225060,19 @@ "ApiKeyAuth": [] } ], - "summary": "Accor amenity reference catalog", + "summary": "Get Best Buy's full brand directory", "tags": [ - "Accor" + "Best Buy" ] } }, - "/accor/brands": { + "/bestbuy/categories": { "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 Best Buy's top-level shopping departments (name, category id, url), sourced from the homepage's own category carousel. Each id is directly usable as bestbuy_category's category_id input.", + "operationId": "bestbuy-categories", "produces": [ "application/json" ], @@ -195914,7 +225080,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.brandsResponseDoc" + "$ref": "#/definitions/bestbuy.categoriesResponseDoc" } }, "429": { @@ -195923,12 +225089,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -195941,73 +225101,19 @@ "ApiKeyAuth": [] } ], - "summary": "Accor brand directory", + "summary": "Get Best Buy's top-level shopping departments", "tags": [ - "Accor" + "Best Buy" ] } }, - "/accor/catalog/hotels": { + "/bestbuy/categories/trending": { "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 - } - ], + "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' ~25 top-level departments. Each id is directly usable as bestbuy_category's category_id input.", + "operationId": "bestbuy-categories-trending", "produces": [ "application/json" ], @@ -196015,13 +225121,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.catalogResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/bestbuy.trendingCategoriesResponseDoc" } }, "429": { @@ -196030,12 +225130,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -196048,66 +225142,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Accor hotel catalog", + "summary": "Get Best Buy's fine-grained trending product-type categories", "tags": [ - "Accor" + "Best Buy" ] } }, - "/accor/destination/hotels": { + "/bestbuy/category": { "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 one page (up to 24) of one Best Buy category's normalized 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": "Destination level: world, continent, country, region, department, city, district, or place", - "enum": [ - "world", - "continent", - "country", - "region", - "department", - "city", - "district", - "place" - ], + "description": "Best Buy category id", "in": "query", - "name": "destination_type", + "name": "category_id", "required": true, - "type": "string" - }, - { - "description": "Destination page slug, e.g. hotels-dusseldorf-v1158. Required for every type except world.", - "in": "query", - "name": "slug", - "type": "string" + "type": "string", + "x-example": "pcmcat138500050001" }, { - "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" - ], + "description": "1-indexed page number, defaults to 1", "in": "query", - "name": "theme", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -196117,7 +225179,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.destinationResponseDoc" + "$ref": "#/definitions/bestbuy.categoryResponseDoc" } }, "400": { @@ -196126,14 +225188,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" } @@ -196150,27 +225212,27 @@ "ApiKeyAuth": [] } ], - "summary": "Accor hotels in a destination", + "summary": "Get a Best Buy category's product listing", "tags": [ - "Accor" + "Best Buy" ] } }, - "/accor/property": { + "/bestbuy/category/subcategories": { "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", + "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": "Four-character Accor hotel code", + "description": "Best Buy category id", "in": "query", - "name": "hotel_code", + "name": "category_id", "required": true, "type": "string", - "x-example": "A7L5" + "x-example": "pcmcat138500050001" } ], "produces": [ @@ -196180,7 +225242,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.propertyResponseDoc" + "$ref": "#/definitions/bestbuy.subcategoriesResponseDoc" } }, "400": { @@ -196195,12 +225257,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -196213,85 +225269,27 @@ "ApiKeyAuth": [] } ], - "summary": "Accor hotel metadata", + "summary": "Get a Best Buy category's own sibling/child categories", "tags": [ - "Accor" + "Best Buy" ] } }, - "/accor/search": { + "/bestbuy/product": { "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 one Best Buy product's normalized detail (name, brand, model, color, price, availability, rating, images, breadcrumbs), sourced from the product page's own schema.org Product structured-data block. sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs.", + "operationId": "bestbuy-product", "parameters": [ { - "description": "Destination or hotel query (at least two characters)", + "description": "Numeric Best Buy SKU", "in": "query", - "name": "query", + "name": "sku", "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 + "x-example": "6673590" } ], "produces": [ @@ -196301,7 +225299,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.searchResponseDoc" + "$ref": "#/definitions/bestbuy.productResponseDoc" } }, "400": { @@ -196316,12 +225314,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -196334,46 +225326,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Accor hotels", + "summary": "Get a Best Buy product's detail", "tags": [ - "Accor" + "Best Buy" ] } }, - "/accor/search/details": { + "/bestbuy/product/questions": { "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 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": "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": "Numeric Best Buy SKU", "in": "query", - "name": "id", + "name": "sku", "required": true, "type": "string", - "x-example": "ChIJdd4hrwug2EcRmSrV3Vo6llI" - }, - { - "description": "Optional locale", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "x-example": "6673590" } ], "produces": [ @@ -196383,7 +225356,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.detailsResponseDoc" + "$ref": "#/definitions/bestbuy.productQuestionsResponseDoc" } }, "400": { @@ -196398,12 +225371,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -196416,34 +225383,27 @@ "ApiKeyAuth": [] } ], - "summary": "Accor place coordinates and viewport", + "summary": "Get a Best Buy product's customer questions and answers", "tags": [ - "Accor" + "Best Buy" ] } }, - "/accor/search/suggest": { + "/bestbuy/product/related": { "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 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": "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", + "description": "Numeric Best Buy SKU", "in": "query", - "name": "language", + "name": "sku", + "required": true, "type": "string", - "x-example": "en" + "x-example": "6673590" } ], "produces": [ @@ -196453,7 +225413,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.suggestResponseDoc" + "$ref": "#/definitions/bestbuy.productRelatedResponseDoc" } }, "400": { @@ -196468,12 +225428,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -196486,27 +225440,27 @@ "ApiKeyAuth": [] } ], - "summary": "Accor destination and hotel search suggestions", + "summary": "Get a Best Buy product's related products", "tags": [ - "Accor" + "Best Buy" ] } }, - "/adidas/product": { + "/bestbuy/product/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 page 1 (up to 20) of one Best Buy product's normalized customer reviews (rating, title, text, author, posted date, tags such as Verified Purchaser, recommended flag, helpful/unhelpful counts), sourced from the product's dedicated reviews page. sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs.", + "operationId": "bestbuy-product-reviews", "parameters": [ { - "description": "Adidas SKU/product id, from a search result's products[].id field", + "description": "Numeric Best Buy SKU", "in": "query", - "name": "product_id", + "name": "sku", "required": true, "type": "string", - "x-example": "JI0397" + "x-example": "6673590" } ], "produces": [ @@ -196516,7 +225470,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.productResponseDoc" + "$ref": "#/definitions/bestbuy.productReviewsResponseDoc" } }, "400": { @@ -196525,12 +225479,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -196549,34 +225497,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Adidas product", + "summary": "Get a Best Buy product's customer reviews", "tags": [ - "Adidas" + "Best Buy" ] } }, - "/adidas/product/review-topics": { + "/bestbuy/search": { "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": "Returns one page (up to 24) of one Best Buy keyword search's normalized 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": "Adidas model number, from an adidas_search result's products[].model_number field", + "description": "Search keywords", "in": "query", - "name": "model_number", + "name": "q", "required": true, "type": "string", - "x-example": "SAMBAU2312" + "x-example": "laptop" }, { - "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": "1-indexed page number, defaults to 1", "in": "query", - "name": "locale", - "type": "string", - "x-example": "en_US" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -196586,7 +225534,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.reviewTopicsResponseDoc" + "$ref": "#/definitions/bestbuy.searchResponseDoc" } }, "400": { @@ -196619,55 +225567,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Adidas review topics for a product", + "summary": "Search Best Buy's product catalog", "tags": [ - "Adidas" + "Best Buy" ] } }, - "/adidas/product/reviews": { + "/bestbuy/stores": { "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 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": "Adidas model number, from an adidas_search result's products[].model_number field", + "description": "Two-letter state/territory code", "in": "query", - "name": "model_number", + "name": "state", "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 + "x-example": "il" }, { - "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": "City name", "in": "query", - "name": "topic", + "name": "city", + "required": true, "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 + "x-example": "Chicago" } ], "produces": [ @@ -196677,7 +225605,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.productReviewsResponseDoc" + "$ref": "#/definitions/bestbuy.storesResponseDoc" } }, "400": { @@ -196710,44 +225638,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get Adidas product reviews", + "summary": "Get Best Buy's physical stores in one city", "tags": [ - "Adidas" + "Best Buy" ] } }, - "/adidas/search": { + "/bigcommerce/category": { "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 normalized 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", + "description": "Returns one normalized 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": "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.", + "description": "Full public BigCommerce category page URL", "in": "query", - "name": "sort", + "name": "url", + "required": true, "type": "string", - "x-example": "price-low-to-high" + "x-example": "https://www.bulkapothecary.com/melt-and-pour-soap-bases/" }, { - "description": "One-based page number, defaults to 1", + "description": "1-indexed category page, defaults to 1", "in": "query", + "minimum": 1, "name": "page", "type": "integer", "x-example": 1 @@ -196760,7 +225676,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.searchResponseDoc" + "$ref": "#/definitions/bigcommerce.categoryResponseDoc" } }, "400": { @@ -196793,27 +225709,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search or browse Adidas products", + "summary": "Browse a BigCommerce storefront category", "tags": [ - "Adidas" + "BigCommerce" ] } }, - "/adidas/store": { + "/bigcommerce/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 normalized 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": "Adidas store id, from a stores response's stores[].id field", + "description": "Full public BigCommerce product page URL", "in": "query", - "name": "store_id", + "name": "url", "required": true, "type": "string", - "x-example": "9990021686" + "x-example": "https://www.bulkapothecary.com/goat-milk-sfic-all-natural-glycerin-melt-and-pour-soap-base/" } ], "produces": [ @@ -196823,7 +225739,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.storeDetailResponseDoc" + "$ref": "#/definitions/bigcommerce.productResponseDoc" } }, "400": { @@ -196856,42 +225772,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Adidas store", + "summary": "Get a BigCommerce storefront product", "tags": [ - "Adidas" + "BigCommerce" ] } }, - "/adidas/stores": { + "/bigcommerce/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": "Returns one normalized 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": "Latitude, -90 to 90", + "description": "Public BigCommerce storefront origin", "in": "query", - "name": "lat", + "name": "url", "required": true, - "type": "number", - "x-example": 40.75 + "type": "string", + "x-example": "https://www.bulkapothecary.com" }, { - "description": "Longitude, -180 to 180", + "description": "Search text", "in": "query", - "name": "lng", + "name": "q", "required": true, - "type": "number", - "x-example": -73.99 + "type": "string", + "x-example": "lavender" }, { - "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": "1-indexed search page, defaults to 1", "in": "query", + "minimum": 1, "name": "page", "type": "integer", - "x-example": 0 + "x-example": 1 } ], "produces": [ @@ -196901,7 +225818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.storesResponseDoc" + "$ref": "#/definitions/bigcommerce.searchResponseDoc" } }, "400": { @@ -196910,6 +225827,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -196928,29 +225851,19 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Adidas stores", + "summary": "Search a BigCommerce storefront", "tags": [ - "Adidas" + "BigCommerce" ] } }, - "/adidas/suggest": { + "/bilibili/anime-home": { "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" - } - ], + "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" ], @@ -196958,17 +225871,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.suggestResponseDoc" + "$ref": "#/definitions/bilibili.animeHomeResponseDoc" } }, - "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" } @@ -196985,40 +225898,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Adidas search suggestions", + "summary": "Get Bilibili anime home sections", "tags": [ - "Adidas" + "Bilibili" ] } }, - "/agoda/activities/search": { + "/bilibili/autocomplete": { "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. Credential-free public data from Agoda's own destination search.", - "operationId": "agoda-activities-search", + "description": "Returns Bilibili search-box query suggestions for partial text. An empty suggestion list is a valid response when nothing matches.", + "operationId": "bilibili-autocomplete", "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.", + "description": "Partial search text", "in": "query", - "name": "city", + "name": "q", + "required": true, "type": "string", - "x-example": "Bangkok" + "x-example": "原神" } ], "produces": [ @@ -197028,7 +225928,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.activitiesSearchResponseDoc" + "$ref": "#/definitions/bilibili.autocompleteResponseDoc" } }, "400": { @@ -197037,8 +225937,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -197061,29 +225961,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda activities", + "summary": "Get Bilibili search suggestions", "tags": [ - "Agoda" + "Bilibili" ] } }, - "/agoda/activities/{activity_id}": { + "/bilibili/guochuang-home": { "get": { "consumes": [ "application/json" ], - "description": "Returns full activity detail from Agoda: title, description, stated duration, categories, and content images. Credential-free public data from Agoda's own activity content source.", - "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" - } - ], + "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" ], @@ -197091,17 +225981,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.ActivityDetailResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/bilibili.guochuangHomeResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -197124,30 +226008,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Agoda activity detail", + "summary": "Get Bilibili Chinese-animation home sections", "tags": [ - "Agoda" + "Bilibili" ] } }, - "/agoda/flights/itinerary-amenities": { - "post": { + "/bilibili/must-watch": { + "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. Credential-free public data from Agoda's own flight content service.", - "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" - } - } - ], + "description": "Returns Bilibili's curated must-watch collection, separated into established classics and the latest additions.", + "operationId": "bilibili-must-watch", "produces": [ "application/json" ], @@ -197155,11 +226028,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.flightItineraryAmenitiesResponseDoc" + "$ref": "#/definitions/bilibili.mustWatchResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -197182,83 +226055,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Agoda flight segment amenities", + "summary": "Get Bilibili's curated must-watch videos", "tags": [ - "Agoda" + "Bilibili" ] } }, - "/agoda/flights/search": { + "/bilibili/popular": { "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. Credential-free public data from Agoda's own flight search.", - "operationId": "agoda-flights-search", + "description": "Returns Bilibili's current popular-video feed in upstream order. Pass next_cursor back as cursor to continue to the next batch.", + "operationId": "bilibili-popular", "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", + "description": "Upstream cursor from the previous response; defaults to 0", "in": "query", - "name": "infants", + "maximum": 10000000, + "minimum": 0, + "name": "cursor", "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": [ @@ -197268,7 +226086,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.flightSearchResponseDoc" + "$ref": "#/definitions/bilibili.popularResponseDoc" } }, "400": { @@ -197277,6 +226095,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -197295,29 +226119,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda one-way flights", + "summary": "Get current popular Bilibili videos", "tags": [ - "Agoda" + "Bilibili" ] } }, - "/agoda/flights/search-locations": { + "/bilibili/ranking": { "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. Credential-free public data from Agoda's own flight destination search.", - "operationId": "agoda-flights-search-locations", - "parameters": [ - { - "description": "Free-text city or airport name", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "Bangkok" - } - ], + "description": "Returns the current official all-site ranking with video engagement, category, and creator metadata in rank order.", + "operationId": "bilibili-ranking", "produces": [ "application/json" ], @@ -197325,11 +226139,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.flightLocationSearchResponseDoc" + "$ref": "#/definitions/bilibili.rankingResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -197352,47 +226166,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda flight destinations/airports", + "summary": "Get the current Bilibili all-site ranking", "tags": [ - "Agoda" + "Bilibili" ] } }, - "/agoda/homes/search": { + "/bilibili/vertical-home": { "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, drawn from the same city search as hotel search and filtered to non-hotel accommodation types. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel/home search.", - "operationId": "agoda-homes-search", + "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": "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.", + "description": "Vertical: documentary, movie, tv, variety", + "enum": [ + "documentary", + "movie", + "tv", + "variety" + ], "in": "query", - "name": "city", + "name": "category", + "required": true, "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 + "x-example": "documentary" } ], "produces": [ @@ -197402,7 +226202,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.homesSearchResponseDoc" + "$ref": "#/definitions/bilibili.verticalHomeResponseDoc" } }, "400": { @@ -197411,8 +226211,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -197435,47 +226235,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda Homes & Apartments by city", + "summary": "Get Bilibili documentary, movie, TV, or variety home sections", "tags": [ - "Agoda" + "Bilibili" ] } }, - "/agoda/hotels/search": { + "/bilibili/weekly": { "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. Credential-free public data from Agoda's own hotel search.", - "operationId": "agoda-hotels-search", + "description": "Returns one issue from Bilibili's weekly selected-video archive. Omit number to resolve and return the latest issue.", + "operationId": "bilibili-weekly", "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", + "description": "Positive issue number; omit for the latest issue", "in": "query", - "name": "limit", + "maximum": 1000000, + "minimum": 1, + "name": "number", "type": "integer", - "x-example": 10 + "x-example": 387 } ], "produces": [ @@ -197485,7 +226266,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.searchResponseDoc" + "$ref": "#/definitions/bilibili.weeklyResponseDoc" } }, "400": { @@ -197500,6 +226281,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -197518,27 +226305,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda hotels by city", + "summary": "Get a Bilibili weekly selected-video issue", "tags": [ - "Agoda" + "Bilibili" ] } }, - "/agoda/hotels/{property_id}": { + "/billboard/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). Credential-free public data from Agoda's own hotel content source.", - "operationId": "agoda-hotel-detail", + "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": "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 Billboard article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "10637" + "x-example": "https://www.billboard.com/music/latin/stray-kids-like-bts-younger-mexican-president-confirm-visit-1236346530/" } ], "produces": [ @@ -197548,7 +226332,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.DetailResponse" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -197563,12 +226347,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -197581,26 +226359,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Agoda hotel detail", + "summary": "Get Billboard article content", "tags": [ - "Agoda" + "Billboard" ] } }, - "/airbnb/host/{id}": { + "/billboard/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a normalized 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 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": "Host id (numeric)", - "in": "path", - "name": "id", + "description": "Canonical Billboard author URL", + "in": "query", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.billboard.com/author/gil-kaufman/" } ], "produces": [ @@ -197610,7 +226386,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.HostResponse" + "$ref": "#/definitions/publicnews.billboardAuthorResponseDoc" } }, "400": { @@ -197625,12 +226401,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -197643,32 +226413,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb host profile", + "summary": "Get a Billboard author profile", "tags": [ - "Airbnb" + "Billboard" ] } }, - "/airbnb/host/{id}/listings": { + "/billboard/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 headlines from one public Billboard section.", + "operationId": "billboard-headlines", "parameters": [ { - "description": "Host id (numeric)", - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "1-based page", + "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": "page", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "music" } ], "produces": [ @@ -197678,7 +226483,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.HostListingsResponse" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -197687,18 +226492,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": { @@ -197711,34 +226504,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb host listings", + "summary": "Get Billboard section headlines", "tags": [ - "Airbnb" + "Billboard" ] } }, - "/airbnb/host/{id}/reviews": { + "/billboard/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns reviews guests left for an Airbnb host, paginated, including the reviewer name and location.", - "operationId": "airbnb-host-reviews", - "parameters": [ - { - "description": "Host id (numeric)", - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" - } - ], + "description": "Returns fresh Billboard top stories from its public RSS feed.", + "operationId": "billboard-news", "produces": [ "application/json" ], @@ -197746,19 +226521,7 @@ "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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -197779,28 +226542,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb host reviews", + "summary": "Get Billboard top stories", "tags": [ - "Airbnb" + "Billboard" ] } }, - "/airbnb/room/{id}": { + "/billboard/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Airbnb public room details.", - "operationId": "airbnb-room", - "parameters": [ - { - "description": "Room id", - "in": "path", - "name": "id", - "required": true, - "type": "string" - } - ], + "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" ], @@ -197808,31 +226559,7 @@ "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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -197841,58 +226568,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb room", + "summary": "Get Billboard sections", "tags": [ - "Airbnb" + "Billboard" ] } }, - "/airbnb/room/{id}/calendar": { + "/billing/me": { "get": { "consumes": [ "application/json" ], - "description": "Returns public calendar month hints parsed from Airbnb room bootstrap data.", - "operationId": "airbnb-room-calendar", - "parameters": [ - { - "description": "Room id", - "in": "path", - "name": "id", - "required": true, - "type": "string" - } - ], + "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": "OK", - "schema": { - "$ref": "#/definitions/airbnb.CalendarResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Current billing state", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/billing.billingStateResponseDoc" } }, - "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" } @@ -197903,32 +226609,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb room calendar", + "summary": "Get current billing state", "tags": [ - "Airbnb" + "Billing" ] } }, - "/airbnb/room/{id}/reviews": { - "get": { + "/billing/me/checkout": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized Airbnb public review snippets.", - "operationId": "airbnb-room-reviews", + "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": "Room id", - "in": "path", - "name": "id", + "description": "Checkout request", + "in": "body", + "name": "request", "required": true, - "type": "string" - }, - { - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" + "schema": { + "$ref": "#/definitions/billing.stripeCheckoutRequestDoc" + } } ], "produces": [ @@ -197936,31 +226638,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Stripe checkout session", "schema": { - "$ref": "#/definitions/airbnb.ReviewsResponse" + "$ref": "#/definitions/billing.stripeSessionResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid request or plan", "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" } @@ -197971,202 +226667,99 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb room reviews", + "summary": "Create Stripe checkout session", "tags": [ - "Airbnb" + "Billing" ] } }, - "/airbnb/search": { + "/billing/me/events": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Airbnb public web search results.", - "operationId": "airbnb-search", + "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": "Location", - "in": "query", - "name": "location", - "required": true, - "type": "string" - }, - { - "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", + "description": "Maximum records to return. Defaults to 50 and clamps to 100.", "in": "query", - "name": "page", + "maximum": 100, + "minimum": 1, + "name": "limit", "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", + "description": "Created-at lower bound in RFC3339 format", "in": "query", - "name": "ne_lng", - "type": "number" + "name": "from", + "type": "string", + "x-example": "2026-04-01T00:00:00Z" }, { - "description": "Southwest latitude for bounded map search", + "description": "Created-at upper bound in RFC3339 format", "in": "query", - "name": "sw_lat", - "type": "number" + "name": "to", + "type": "string", + "x-example": "2026-04-16T00:00:00Z" }, { - "description": "Southwest longitude for bounded map search", + "description": "Normalized endpoint or API path", "in": "query", - "name": "sw_lng", - "type": "number" + "name": "endpoint", + "type": "string", + "x-example": "google/search" }, { - "description": "Map zoom for bounded map search", + "description": "Request id to inspect", "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" - } + "name": "request_id", + "type": "string", + "x-example": "req-1" }, - "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 public Arc RSS section feeds. Summaries are brief publisher teasers, not full article text.", - "operationId": "alcom-headlines", - "parameters": [ { - "description": "AL.com editorial section", + "description": "Billing event status", "enum": [ - "news", - "sports", - "life" + "reserved", + "charged", + "non_billable", + "failed" ], - "in": "query", - "name": "section", - "required": true, - "type": "string" - } - ], - "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": [ + "in": "query", + "name": "event_status", + "type": "string" + }, { - "ApiKeyAuth": [] + "description": "Filter billable or non-billable events", + "in": "query", + "name": "billable", + "type": "boolean" } ], - "summary": "Get AL.com section headlines", - "tags": [ - "AL.com" - ] - } - }, - "/alcom/news": { - "get": { - "description": "Returns current AL.com News stories from its public Arc RSS feed. Feed summaries are brief publisher teasers, not full article text.", - "operationId": "alcom-news", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Billing events", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/billing.billingEventsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Invalid query 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" } @@ -198177,28 +226770,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get AL.com top stories", + "summary": "List current user's billing events", "tags": [ - "AL.com" + "Billing" ] } }, - "/alcom/sections": { + "/billing/me/periods": { "get": { - "description": "Returns the three top-level editorial sections exposed in AL.com's site navigation and accepted by the headlines endpoint.", - "operationId": "alcom-sections", + "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": "OK", + "description": "Billing period ledgers", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/billing.billingPeriodLedgersResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -198209,24 +226821,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get AL.com editorial sections", + "summary": "List current user's billing period ledgers", "tags": [ - "AL.com" + "Billing" ] } }, - "/aljazeera/article": { + "/billing/me/periods/{period_key}": { "get": { - "description": "Returns a public Al Jazeera article's metadata and body paragraphs from a canonical article URL.", - "operationId": "aljazeera-article", + "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": "Canonical www.aljazeera.com article URL", - "in": "query", - "name": "url", + "description": "Billing period key in YYYY-MM format", + "in": "path", + "name": "period_key", "required": true, "type": "string", - "x-example": "https://www.aljazeera.com/news/2026/9/20/example-slug" + "x-example": "2026-04" } ], "produces": [ @@ -198234,31 +226849,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Billing period ledger", "schema": { - "$ref": "#/definitions/aljazeera.articleResponseDoc" + "$ref": "#/definitions/billing.billingPeriodLedgerResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid period key", "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" } @@ -198269,37 +226878,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Al Jazeera article content", + "summary": "Get current user's billing period ledger", "tags": [ - "Al Jazeera" + "Billing" ] } }, - "/aljazeera/author": { + "/billing/me/periods/{period_key}/statement": { "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 a customer-safe JSON statement for one billing period, combining the local 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. Internal repair errors and raw webhook audit details are not exposed.", + "operationId": "billing-me-period-statement", "parameters": [ { - "description": "Al Jazeera author slug", - "in": "query", - "name": "slug", + "description": "Billing period key in YYYY-MM format", + "in": "path", + "name": "period_key", + "required": true, "type": "string", - "x-example": "hakeem-najimdeen" + "x-example": "2026-04" }, { - "description": "Canonical https://www.aljazeera.com/author/ URL, as an alternative to slug", + "description": "Include recent billing events. Defaults to true.", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.aljazeera.com/author/hakeem-najimdeen" + "name": "include_events", + "type": "boolean" }, { - "description": "1-based page number of the author's article list; overrides any page embedded in url", + "description": "Maximum billing events to include. Defaults to 100 and clamps to 500.", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "maximum": 500, + "minimum": 1, + "name": "event_limit", + "type": "integer" } ], "produces": [ @@ -198307,31 +226920,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Billing period statement", "schema": { - "$ref": "#/definitions/aljazeera.authorResponseDoc" + "$ref": "#/definitions/billing.billingPeriodStatementResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid period key or 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" } @@ -198342,34 +226949,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Al Jazeera author's profile and recent articles", + "summary": "Get current user's billing period statement", "tags": [ - "Al Jazeera" + "Billing" ] } }, - "/aljazeera/categories": { + "/billing/me/periods/{period_key}/statement/download": { "get": { - "description": "Returns Al Jazeera's current public section navigation. Use a returned slug directly as the topic parameter on aljazeera-topic.", - "operationId": "aljazeera-categories", + "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": "OK", + "description": "Raw frozen customer statement JSON", "schema": { - "$ref": "#/definitions/aljazeera.categoriesResponseDoc" + "type": "string" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Invalid period key or open billing period", "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" } @@ -198380,34 +227006,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get Al Jazeera section navigation", + "summary": "Download current user's frozen billing period statement", "tags": [ - "Al Jazeera" + "Billing" ] } }, - "/aljazeera/headlines": { - "get": { - "description": "Returns fresh headlines from Al Jazeera's public, site-wide RSS feed.", - "operationId": "aljazeera-headlines", + "/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": "OK", + "description": "Stripe portal session", "schema": { - "$ref": "#/definitions/aljazeera.headlinesResponseDoc" + "$ref": "#/definitions/billing.stripeSessionResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Invalid request", "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" } @@ -198418,56 +227064,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Al Jazeera site-wide headlines", + "summary": "Create Stripe billing portal session", "tags": [ - "Al Jazeera" + "Billing" ] } }, - "/aljazeera/topic": { + "/billing/me/rejections": { "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" - } + "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": "OK", - "schema": { - "$ref": "#/definitions/aljazeera.topicResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Caller's own rejection tally", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/billing.myRejectionsResponseDoc" } }, - "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" } @@ -198478,33 +227105,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Al Jazeera section headlines", + "summary": "Caller's own blocked-request tally", "tags": [ - "Al Jazeera" + "Billing" ] } }, - "/allbirds/collections": { - "get": { + "/billing/me/subscription/change": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "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": "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": "Subscription change request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/billing.stripeSubscriptionChangeRequestDoc" + } } ], "produces": [ @@ -198512,25 +227134,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Subscription change result", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/billing.stripeSubscriptionChangeResultResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid plan, stale preview, or idempotency key", "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" } @@ -198541,73 +227163,43 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds collections", + "summary": "Apply a subscription plan change", "tags": [ - "Allbirds" + "Billing" ] } }, - "/allbirds/collections/{handle}/products": { - "get": { + "/billing/me/subscription/change/cancel": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 - } - ], + "description": "Releases the authenticated user's pending downgrade schedule and keeps the current plan active through renewal.", + "operationId": "billing-me-subscription-change-cancel", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Subscription change cancellation result", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/billing.stripeSubscriptionChangeResultResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid subscription state", "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" } @@ -198618,33 +227210,28 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds collection products", + "summary": "Cancel a scheduled subscription downgrade", "tags": [ - "Allbirds" + "Billing" ] } }, - "/allbirds/pages": { - "get": { + "/billing/me/subscription/preview": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Allbirds (https://www.allbirds.com). The storefront URL is fixed server-side.", - "operationId": "allbirds-pages", + "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": "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": "Subscription change preview request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/billing.stripeSubscriptionChangeRequestDoc" + } } ], "produces": [ @@ -198652,25 +227239,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Subscription change preview", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/billing.stripeSubscriptionChangePreviewResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid plan or subscription change", "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" } @@ -198681,27 +227268,58 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds static pages", + "summary": "Preview a subscription plan change", "tags": [ - "Allbirds" + "Billing" ] } }, - "/allbirds/pages/{handle}": { + "/bing/images": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one Allbirds (https://www.allbirds.com) page handle. The storefront URL is fixed server-side.", - "operationId": "allbirds-page", + "description": "Returns normalized Bing image search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Bing image HTML/async pages and return 503 when Bing serves a challenge page or unusable HTML.", + "operationId": "bing-images", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "page-handle" + "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": [ @@ -198711,29 +227329,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/bing.imagesResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "No results 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": "Bing upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -198744,33 +227368,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Allbirds static page", + "summary": "Search Bing image results", "tags": [ - "Allbirds" + "Bing" ] } }, - "/allbirds/products": { + "/bing/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 normalized Bing news search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Bing news HTML/async pages and return 503 when Bing serves a challenge page or unusable HTML.", + "operationId": "bing-news", "parameters": [ { - "description": "1-based page, defaults to 1", + "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": "Maximum products, defaults to 50 and supports up to 250", + "description": "Results per page; defaults to 10, clamped to 1..50", "in": "query", - "name": "limit", + "maximum": 50, + "minimum": 1, + "name": "count", "type": "integer", - "x-example": 50 + "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": [ @@ -198780,23 +227429,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/bing.newsResponseDoc" } }, "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": "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": "Bing upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -198807,27 +227468,58 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds products", + "summary": "Search Bing news results", "tags": [ - "Allbirds" + "Bing" ] } }, - "/allbirds/products/{handle}": { + "/bing/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 normalized 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. Results are fetched with a Chrome-impersonated request client and return 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 hedged 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": "Product handle", - "in": "path", - "name": "handle", + "description": "Search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "product-handle" + "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": [ @@ -198835,31 +227527,37 @@ ], "responses": { "200": { - "description": "OK", + "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/shopifybrands.productResponseDoc" + "$ref": "#/definitions/bing.searchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "No results 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": "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" } @@ -198870,45 +227568,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Allbirds product", + "summary": "Search Bing web results", "tags": [ - "Allbirds" + "Bing" ] } }, - "/allbirds/products/{handle}/recommendations": { + "/bing/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized recommended products for one Allbirds (https://www.allbirds.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "allbirds-product-recommendations", + "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.", + "operationId": "bing-suggest", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Search query prefix", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "openai" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Suggestions to return; defaults to 10, clamped to 1..12", "in": "query", - "name": "limit", + "maximum": 12, + "minimum": 1, + "name": "count", "type": "integer", "x-example": 10 }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Two-letter country code; defaults to us", "in": "query", - "name": "intent", + "name": "country", "type": "string", - "x-example": "related" + "x-example": "us" + }, + { + "description": "Bing UI language; defaults to en-us", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" } ], "produces": [ @@ -198918,29 +227621,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/bing.suggestResponseDoc" } }, "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" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Bing upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -198951,19 +227654,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds product recommendations", + "summary": "Suggest Bing search queries", "tags": [ - "Allbirds" + "Bing" ] } }, - "/allbirds/search/suggest": { + "/bing/videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Allbirds's (https://www.allbirds.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "allbirds-search-suggest", + "description": "Returns normalized Bing video search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Bing video HTML/async pages and return 503 when Bing serves a challenge page or unusable HTML.", + "operationId": "bing-videos", "parameters": [ { "description": "Search query", @@ -198971,21 +227674,38 @@ "name": "q", "required": true, "type": "string", - "x-example": "wool" + "x-example": "openai" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "description": "1-based page number; defaults to 1", "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Results per page; defaults to 10, clamped to 1..50", "in": "query", - "name": "limit", + "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": [ @@ -198995,23 +227715,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/bing.videosResponseDoc" } }, "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": "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": "Bing upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -199022,42 +227754,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Allbirds search suggestions", + "summary": "Search Bing video results", "tags": [ - "Allbirds" + "Bing" ] } }, - "/allbirds/sitemap/urls": { + "/birminghammail/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns capped URL entries from Allbirds's (https://www.allbirds.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "allbirds-sitemap-urls", + "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": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "Canonical Birmingham Mail article URL", "in": "query", - "name": "type", + "name": "url", + "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": "https://www.birminghammail.co.uk/news/midlands-news/birmingham-road-six-cars-towed-34668610" } ], "produces": [ @@ -199067,7 +227781,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -199076,6 +227790,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -199094,19 +227814,39 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds sitemap URLs", + "summary": "Get Birmingham Mail article content", "tags": [ - "Allbirds" + "Birmingham Mail" ] } }, - "/allbirds/sitemaps": { + "/birminghammail/author": { "get": { - "consumes": [ - "application/json" + "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" + } ], - "description": "Returns child sitemap URLs from Allbirds's (https://www.allbirds.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "allbirds-sitemaps", "produces": [ "application/json" ], @@ -199114,7 +227854,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" } }, "400": { @@ -199123,6 +227863,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -199141,19 +227887,51 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds sitemaps", + "summary": "Get a Birmingham Mail author profile", "tags": [ - "Allbirds" + "Birmingham Mail" ] } }, - "/allbirds/store": { + "/birminghammail/headlines": { "get": { - "consumes": [ - "application/json" + "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" + } ], - "description": "Returns normalized storefront metadata for Allbirds (https://www.allbirds.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "allbirds-store", "produces": [ "application/json" ], @@ -199161,7 +227939,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -199188,29 +227966,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Allbirds store metadata", + "summary": "Get Birmingham Mail section headlines", "tags": [ - "Allbirds" + "Birmingham Mail" ] } }, - "/alt/asset": { + "/birminghammail/news": { "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's own API does not expose one; see alt-sold-listings for per-grade sold prices on specific listings. Credential-free public data from Alt's own GraphQL API.", - "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" - } - ], + "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" ], @@ -199218,23 +227983,11 @@ "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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -199251,107 +228004,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get one card design's population report and recent sales", + "summary": "Get Birmingham Mail top stories", "tags": [ - "Alt" + "Birmingham Mail" ] } }, - "/alt/auctions": { + "/birminghammail/sections": { "get": { - "consumes": [ + "description": "Returns the public Birmingham Mail editorial section inventory used by birminghammail-headlines.", + "operationId": "birminghammail-sections", + "produces": [ "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: it always uses a search key scoped server-side to Alt's own live auction pool. Credential-free public data from Alt's own search backend. 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" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, + "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": "Results per page, default 24, max 100", + "description": "Canonical Bleacher Report article URL", "in": "query", - "name": "per_page", - "type": "integer" + "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": [ @@ -199361,7 +228057,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.auctionsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -199370,14 +228066,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" } @@ -199394,38 +228084,30 @@ "ApiKeyAuth": [] } ], - "summary": "Search Alt's own live 24/7 auctions", + "summary": "Get Bleacher Report article content", "tags": [ - "Alt" + "Bleacher Report" ] } }, - "/alt/card-search": { + "/bleacherreport/author": { "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. Credential-free public data from Alt's own search backend.", - "operationId": "alt-card-search", + "description": "Returns one Bleacher Report writer's public profile: name, role, biography, photo, and the latest stories listed on the page.", + "operationId": "bleacherreport-author", "parameters": [ { - "description": "Free-text search across card name, subject, brand, and variety", + "description": "Writer slug, e.g. scott-polacek", "in": "query", - "name": "q", + "name": "slug", "type": "string", - "x-example": "michael jordan" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "scott-polacek" }, { - "description": "Results per page, default 24, max 100", + "description": "Canonical bleacherreport.com/writers/ URL; alternative to slug", "in": "query", - "name": "per_page", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://bleacherreport.com/writers/scott-polacek" } ], "produces": [ @@ -199435,7 +228117,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.cardSearchResponseDoc" + "$ref": "#/definitions/publicnews.bleacherreportAuthorResponseDoc" } }, "400": { @@ -199444,14 +228126,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" } @@ -199468,19 +228144,58 @@ "ApiKeyAuth": [] } ], - "summary": "Search Alt's reference card-design catalog", + "summary": "Get a Bleacher Report writer profile", "tags": [ - "Alt" + "Bleacher Report" ] } }, - "/alt/categories": { + "/bleacherreport/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns current Bleacher Report headlines from one public league or league sub-hub page.", + "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" + } ], - "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 via a facets-only query 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. Credential-free public data from Alt's own search backend.", - "operationId": "alt-categories", "produces": [ "application/json" ], @@ -199488,11 +228203,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -199509,42 +228224,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Alt search filter values", + "summary": "Get Bleacher Report section headlines", "tags": [ - "Alt" + "Bleacher Report" ] } }, - "/alt/listing": { + "/bleacherreport/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "One listing's full public detail -- title, description, price/bid state, grading info, and images -- normalized across Alt's own native listings and its aggregated external listings. id and listing_type come from a prior alt-search/alt-auctions result. 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", - "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" - } - ], + "description": "Returns fresh Bleacher Report top sports stories from the public news sitemap.", + "operationId": "bleacherreport-news", "produces": [ "application/json" ], @@ -199552,23 +228241,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.listingResponseDoc" + "$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 Bleacher Report top stories", + "tags": [ + "Bleacher Report" + ] + } + }, + "/bleacherreport/sections": { + "get": { + "description": "Returns the public Bleacher Report league and league sub-hub sections accepted by the headlines endpoint.", + "operationId": "bleacherreport-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -199585,26 +228300,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Alt listing's full public detail", + "summary": "Get Bleacher Report sections", "tags": [ - "Alt" + "Bleacher Report" ] } }, - "/alt/market-trends": { + "/bloomberg/article": { "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. Credential-free public data from Alt's own GraphQL API.", - "operationId": "alt-market-trends", + "description": "Returns one public Bloomberg article's metadata and body paragraphs from a canonical article URL. Subscriber-only articles are not available.", + "operationId": "bloomberg-article", "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": "Canonical Bloomberg article URL", "in": "query", - "name": "category", + "name": "url", + "required": true, "type": "string", - "x-example": "BASKETBALL_CARDS" + "x-example": "https://www.bloomberg.com/news/articles/2026-09-20/example-slug" } ], "produces": [ @@ -199614,7 +228327,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.marketTrendsResponseDoc" + "$ref": "#/definitions/bloomberg.articleResponseDoc" } }, "400": { @@ -199623,8 +228336,20 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "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" } @@ -199641,134 +228366,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Alt's card-market price-trend index", + "summary": "Get a Bloomberg article's content", "tags": [ - "Alt" + "Bloomberg" ] } }, - "/alt/search": { + "/bloomberg/author": { "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. Credential-free public data from Alt's own search backend. See alt-categories for the accepted category/auction_house/grading_company/listing_type/sort values.", - "operationId": "alt-search", + "description": "Returns one public Bloomberg author's profile (name, title, bio) and their recent-content feed from a canonical author URL.", + "operationId": "bloomberg-author", "parameters": [ { - "description": "Free-text search across item name, subject, brand, and variety. Omit or pass * to browse everything.", + "description": "Canonical Bloomberg author URL", "in": "query", - "name": "q", + "name": "url", + "required": true, "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" + "x-example": "https://www.bloomberg.com/authors/AXSztklFffk/bernard-goyder" } ], "produces": [ @@ -199778,7 +228393,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.searchResponseDoc" + "$ref": "#/definitions/bloomberg.authorResponseDoc" } }, "400": { @@ -199787,14 +228402,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" } @@ -199811,108 +228426,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Alt's aggregated card marketplace", + "summary": "Get a Bloomberg author's profile", "tags": [ - "Alt" + "Bloomberg" ] } }, - "/alt/sold-listings": { + "/bloomberg/categories": { "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 auctions. Credential-free public data from Alt's own search backend. 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": "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": "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" ], @@ -199920,13 +228443,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.soldListingsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/bloomberg.categoriesResponseDoc" } }, "429": { @@ -199935,12 +228452,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -199953,39 +228464,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Alt's completed sales archive", + "summary": "List Bloomberg editorial categories", "tags": [ - "Alt" + "Bloomberg" ] } }, - "/alt/top-movers": { + "/bloomberg/headlines": { "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). Credential-free public data from Alt's own GraphQL API.", - "operationId": "alt-top-movers", + "description": "Returns Bloomberg story cards from one editorial section. Section must be a slug returned by /bloomberg/categories.", + "operationId": "bloomberg-headlines", "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.", + "description": "Section slug from /bloomberg/categories", "in": "query", - "name": "subject", + "name": "section", + "required": true, "type": "string", - "x-example": "Michael Jordan" - }, - { - "description": "Max results, default 10, max 50", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "markets" } ], "produces": [ @@ -199995,7 +228491,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.topMoversResponseDoc" + "$ref": "#/definitions/bloomberg.headlinesResponseDoc" } }, "400": { @@ -200004,8 +228500,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -200022,19 +228518,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Alt's biggest card-market price movers", + "summary": "Get the latest stories in a Bloomberg section", "tags": [ - "Alt" + "Bloomberg" ] } }, - "/amazon-jobs/categories": { + "/bloomberg/news": { "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 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" ], @@ -200042,7 +228535,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazonjobs.categoriesResponseDoc" + "$ref": "#/definitions/bloomberg.newsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -200063,29 +228562,16 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon Jobs category discovery", + "summary": "Get the latest Bloomberg stories", "tags": [ - "Amazon Jobs" + "Bloomberg" ] } }, - "/amazon-jobs/job": { + "/bloomberg/news-sitemaps": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Amazon.jobs posting by its numeric job id (the `id` field returned by search). Parsed from amazon.jobs's stable server-rendered job detail page — there is no separate JSON detail endpoint upstream.", - "operationId": "amazon-jobs-job", - "parameters": [ - { - "description": "Numeric Amazon job id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "10386857" - } - ], + "description": "Returns Bloomberg's public monthly news-sitemap index so callers can discover historical news feeds beyond the rolling latest feed.", + "operationId": "bloomberg-news-sitemaps", "produces": [ "application/json" ], @@ -200093,19 +228579,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/bloomberg.newsSitemapsResponseDoc" } }, "429": { @@ -200126,105 +228600,40 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon Jobs single posting", + "summary": "List Bloomberg monthly news sitemaps", "tags": [ - "Amazon Jobs" + "Bloomberg" ] } }, - "/amazon-jobs/search": { + "/bluesky/author-feed": { "get": { "consumes": [ "application/json" ], - "description": "Searches Amazon's public careers site (amazon.jobs) via its credential-free search JSON. Each result includes the full description and qualifications inline. `sort` accepts `relevant` (default, upstream 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 a page of a Bluesky account's posts, newest first, including text, engagement counts, and any attached images/link card/quoted post. Public data, sourced from the AT Protocol's public, credential-free AppView API.", + "operationId": "bluesky-author-feed", "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", + "description": "A handle (e.g. bsky.app) or DID", "in": "query", - "name": "country", + "name": "actor", + "required": true, "type": "string", - "x-example": "USA" - }, - { - "description": "Page number, 1-based", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "bsky.app" }, { - "description": "Results per page, max 100 (default 20)", + "description": "Page size, 1-100", "in": "query", "name": "limit", "type": "integer", - "x-example": 20 + "x-example": 25 }, { - "description": "Sort order", - "enum": [ - "relevant", - "recent" - ], + "description": "Pagination cursor from a previous response's cursor field", "in": "query", - "name": "sort", - "type": "string", - "x-example": "relevant" + "name": "cursor", + "type": "string" } ], "produces": [ @@ -200234,7 +228643,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazonjobs.searchResponseDoc" + "$ref": "#/definitions/bluesky.authorFeedResponseDoc" } }, "400": { @@ -200243,12 +228652,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": { @@ -200261,54 +228682,40 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon Jobs search", + "summary": "A Bluesky account's posts", "tags": [ - "Amazon Jobs" + "Bluesky" ] } }, - "/amazon/charts": { + "/bluesky/followers": { "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 a page of a Bluesky account's followers. Public data, sourced from the AT Protocol's public, credential-free AppView API.", + "operationId": "bluesky-followers", "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": "A handle (e.g. bsky.app) or DID", "in": "query", - "name": "department", + "name": "actor", "required": true, "type": "string", - "x-example": "electronics" + "x-example": "bsky.app" }, { - "description": "Numeric browse node id", + "description": "Page size, 1-100", "in": "query", - "name": "node", - "type": "string", - "x-example": "172541" + "name": "limit", + "type": "integer", + "x-example": 25 }, { - "description": "1-based page number", + "description": "Pagination cursor from a previous response's cursor field", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "cursor", + "type": "string" } ], "produces": [ @@ -200318,7 +228725,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.chartsResponseDoc" + "$ref": "#/definitions/bluesky.followersResponseDoc" } }, "400": { @@ -200357,46 +228764,40 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon product charts", + "summary": "A Bluesky account's followers", "tags": [ - "Amazon" + "Bluesky" ] } }, - "/amazon/charts/categories": { + "/bluesky/follows": { "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 a page of the accounts a Bluesky account follows. Public data, sourced from the AT Protocol's public, credential-free AppView API.", + "operationId": "bluesky-follows", "parameters": [ { - "description": "Chart type", - "enum": [ - "best_sellers", - "new_releases", - "most_wished_for" - ], + "description": "A handle (e.g. bsky.app) or DID", "in": "query", - "name": "chart", + "name": "actor", "required": true, "type": "string", - "x-example": "best_sellers" + "x-example": "bsky.app" }, { - "description": "Amazon department slug", + "description": "Page size, 1-100", "in": "query", - "name": "department", - "type": "string", - "x-example": "electronics" + "name": "limit", + "type": "integer", + "x-example": 25 }, { - "description": "Numeric browse node id (requires department)", + "description": "Pagination cursor from a previous response's cursor field", "in": "query", - "name": "node", - "type": "string", - "x-example": "172541" + "name": "cursor", + "type": "string" } ], "produces": [ @@ -200406,7 +228807,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.chartCategoriesResponseDoc" + "$ref": "#/definitions/bluesky.followsResponseDoc" } }, "400": { @@ -200445,46 +228846,36 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon chart categories", + "summary": "Accounts a Bluesky account follows", "tags": [ - "Amazon" + "Bluesky" ] } }, - "/amazon/product/{asin}": { + "/bluesky/post-likes": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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 public actors who liked a post, with an optional cursor for pagination.", + "operationId": "bluesky-post-likes", "parameters": [ { - "description": "Amazon ASIN", - "in": "path", - "name": "asin", + "description": "The post's at:// URI", + "in": "query", + "name": "uri", "required": true, "type": "string", - "x-example": "B0DGJ736JM" + "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" }, { - "default": "en_US", - "description": "Amazon language", - "enum": [ - "en_US" - ], + "default": 25, + "description": "Page size, 1-100", "in": "query", - "name": "language", - "type": "string" + "name": "limit", + "type": "integer" }, { - "default": "USD", - "description": "Amazon currency", - "enum": [ - "USD" - ], + "description": "Pagination cursor", "in": "query", - "name": "currency", + "name": "cursor", "type": "string" } ], @@ -200495,7 +228886,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.productResponseDoc" + "$ref": "#/definitions/bluesky.postActorsResponseDoc" } }, "400": { @@ -200534,41 +228925,37 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Amazon product details", + "summary": "List actors who liked a Bluesky post", "tags": [ - "Amazon" + "Bluesky" ] } }, - "/amazon/search": { + "/bluesky/post-quotes": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Amazon search result cards for `amazon.com`.", - "operationId": "amazon-search", + "description": "Returns public posts that quote the specified post, with an optional cursor for pagination.", + "operationId": "bluesky-post-quotes", "parameters": [ { - "description": "Search keyword", + "description": "The quoted post's at:// URI", "in": "query", - "name": "k", + "name": "uri", "required": true, "type": "string", - "x-example": "apple watch" + "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" }, { - "description": "Sort order", + "default": 25, + "description": "Page size, 1-100", "in": "query", - "name": "s", - "type": "string", - "x-example": "review-rank" + "name": "limit", + "type": "integer" }, { - "description": "1-based page number", + "description": "Pagination cursor", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "cursor", + "type": "string" } ], "produces": [ @@ -200578,7 +228965,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.searchResponseDoc" + "$ref": "#/definitions/bluesky.postQuotesResponseDoc" } }, "400": { @@ -200617,27 +229004,37 @@ "ApiKeyAuth": [] } ], - "summary": "Search Amazon products", + "summary": "List quotes of a Bluesky post", "tags": [ - "Amazon" + "Bluesky" ] } }, - "/amazon/suggest/{keyword}": { + "/bluesky/post-reposted-by": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns typeahead keyword suggestions from Amazon's public suggestion API for `amazon.com`.", - "operationId": "amazon-suggest", + "description": "Returns public actors who reposted a post, with an optional cursor for pagination.", + "operationId": "bluesky-post-reposted-by", "parameters": [ { - "description": "Suggestion prefix", - "in": "path", - "name": "keyword", + "description": "The post's at:// URI", + "in": "query", + "name": "uri", "required": true, "type": "string", - "x-example": "apple" + "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": [ @@ -200647,7 +229044,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.suggestResponseDoc" + "$ref": "#/definitions/bluesky.postActorsResponseDoc" } }, "400": { @@ -200686,24 +229083,34 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Amazon search suggestions", + "summary": "List actors who reposted a Bluesky post", "tags": [ - "Amazon" + "Bluesky" ] } }, - "/androidauthority/article": { + "/bluesky/post-thread": { "get": { - "description": "Returns public Android Authority article metadata and body paragraphs from a canonical article URL.", - "operationId": "androidauthority-article", + "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. Public data, sourced from the AT Protocol's public, credential-free AppView API.", + "operationId": "bluesky-post-thread", "parameters": [ { - "description": "Canonical Android Authority article URL", + "description": "The post's at:// URI, e.g. from an author-feed or search-actors result's post uri field", "in": "query", - "name": "url", + "name": "uri", "required": true, "type": "string", - "x-example": "https://www.androidauthority.com/gemini-live-avatar-3715280/" + "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": [ @@ -200713,7 +229120,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/bluesky.postThreadResponseDoc" } }, "400": { @@ -200728,6 +229135,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": { @@ -200740,69 +229159,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Authority article content", + "summary": "A Bluesky post and its reply tree", "tags": [ - "Android Authority" + "Bluesky" ] } }, - "/androidauthority/headlines": { + "/bluesky/posts": { "get": { - "description": "Returns fresh headlines from one public Android Authority section page.", - "operationId": "androidauthority-headlines", + "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": [ { - "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" - ], + "collectionFormat": "csv", + "description": "One or more at:// post URIs (1-25); repeat the parameter for multiple URIs", "in": "query", - "name": "section", + "items": { + "type": "string" + }, + "name": "uris", "required": true, - "type": "string" + "type": "array", + "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" } ], "produces": [ @@ -200812,7 +229190,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/bluesky.postsResponseDoc" } }, "400": { @@ -200821,6 +229199,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": { @@ -200833,16 +229223,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Authority section headlines", + "summary": "Look up Bluesky posts in a batch", "tags": [ - "Android Authority" + "Bluesky" ] } }, - "/androidauthority/news": { + "/bluesky/profile": { "get": { - "description": "Returns the latest Android Authority stories from the public site-wide feed.", - "operationId": "androidauthority-news", + "consumes": [ + "application/json" + ], + "description": "Returns a Bluesky account's public profile: display name, description, avatar/banner images, and follower/follows/posts counts. Public data, sourced from the AT Protocol's public, credential-free AppView API.", + "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" ], @@ -200850,7 +229253,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/bluesky.profileResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -200859,6 +229274,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -200871,16 +229292,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Authority top stories", + "summary": "A Bluesky account's full public profile", "tags": [ - "Android Authority" + "Bluesky" ] } }, - "/androidauthority/sections": { + "/bluesky/search-actors": { "get": { - "description": "Returns the public Android Authority section inventory accepted by the headlines endpoint.", - "operationId": "androidauthority-sections", + "consumes": [ + "application/json" + ], + "description": "Returns Bluesky accounts matching a query against display name, handle, and profile description. Public data, sourced from the AT Protocol's public, credential-free AppView API.", + "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" ], @@ -200888,7 +229335,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/bluesky.searchActorsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -200896,6 +229349,18 @@ "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": [ @@ -200903,33 +229368,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Authority sections", + "summary": "Search Bluesky accounts", "tags": [ - "Android Authority" + "Bluesky" ] } }, - "/anime/airing-schedule": { + "/bluesky/trending-topics": { "get": { "consumes": [ "application/json" ], - "description": "Returns upcoming anime episode broadcasts (episode number, air time, countdown, and the normalized title), soonest first, paginated. Credential-free public AniList data.", - "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" - } - ], + "description": "Returns Bluesky's current trending topics and suggested feeds, each with a link to its feed. Public data, sourced from the AT Protocol's public, credential-free AppView API. 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" ], @@ -200937,11 +229388,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.airingScheduleResponseDoc" + "$ref": "#/definitions/bluesky.trendingTopicsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -200964,27 +229415,72 @@ "ApiKeyAuth": [] } ], - "summary": "Upcoming anime airing schedule", + "summary": "Bluesky's current trending topics", "tags": [ - "Anime" + "Bluesky" ] } }, - "/anime/character/search": { + "/bonhams/auctions/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches anime and manga characters by name. Returns character summaries (name, native name, image, favourites), paginated. Credential-free public AniList data.", - "operationId": "anime-character-search", + "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. Credential-free public data from bonhams.com's own search API.", + "operationId": "bonhams-auction-search", "parameters": [ { - "description": "Search text", + "description": "Free-text search across auction title and department names", "in": "query", - "name": "query", - "required": true, + "name": "q", "type": "string", - "x-example": "Frieren" + "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", @@ -200993,7 +229489,7 @@ "type": "integer" }, { - "description": "Results per page, default 10, max 50", + "description": "Results per page, default 24, max 100", "in": "query", "name": "per_page", "type": "integer" @@ -201006,7 +229502,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.characterSearchResponseDoc" + "$ref": "#/definitions/bonhams.auctionSearchResponseDoc" } }, "400": { @@ -201033,27 +229529,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search anime & manga characters", + "summary": "Search Bonhams auctions", "tags": [ - "Anime" + "Bonhams" ] } }, - "/anime/character/{id}": { + "/bonhams/auctions/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized 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. Credential-free public AniList data.", - "operationId": "anime-character", + "description": "Returns one Bonhams auction's normalized 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. Credential-free public data from bonhams.com's own search API.", + "operationId": "bonhams-auction-detail", "parameters": [ { - "description": "AniList character id", + "description": "Bonhams auction id", "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "176754" + "x-example": "32001" } ], "produces": [ @@ -201063,7 +229559,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.characterResponseDoc" + "$ref": "#/definitions/bonhams.auctionDetailResponseDoc" } }, "400": { @@ -201096,85 +229592,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get an anime/manga character", + "summary": "Get a Bonhams auction's normalized facts", "tags": [ - "Anime" + "Bonhams" ] } }, - "/anime/rankings": { + "/bonhams/auctions/{id}/lots": { "get": { "consumes": [ "application/json" ], - "description": "Returns a filterable, sorted anime ranking. Credential-free public AniList data. Filter by season, year, format, genre, and status.", - "operationId": "anime-rankings", + "description": "Returns the normalized lot listing for one Bonhams auction, optionally filtered by department and/or a free-text query. Credential-free public data from bonhams.com's own search API.", + "operationId": "bonhams-auction-lots", "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": "Bonhams auction id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "32001" }, { - "description": "Genre filter, e.g. Fantasy.", + "description": "Free-text search across lot title, catalog description, and footnotes", "in": "query", - "name": "genre", - "type": "string" + "name": "q", + "type": "string", + "x-example": "candelabra" }, { - "description": "Status filter: FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED, HIATUS.", - "enum": [ - "FINISHED", - "RELEASING", - "NOT_YET_RELEASED", - "CANCELLED", - "HIATUS" - ], + "description": "Comma-separated department names (not a fixed enum -- varies per auction)", "in": "query", - "name": "status", - "type": "string" + "name": "department", + "type": "string", + "x-example": "Silver" }, { "description": "1-based page number, default 1", @@ -201183,7 +229635,7 @@ "type": "integer" }, { - "description": "Results per page, default 20, max 50", + "description": "Results per page, default 48, max 100", "in": "query", "name": "per_page", "type": "integer" @@ -201196,7 +229648,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.rankingsResponseDoc" + "$ref": "#/definitions/bonhams.auctionLotsResponseDoc" } }, "400": { @@ -201223,37 +229675,61 @@ "ApiKeyAuth": [] } ], - "summary": "Rank anime", + "summary": "List the lots in a Bonhams auction", "tags": [ - "Anime" + "Bonhams" ] } }, - "/anime/search": { + "/bonhams/lots/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches anime by free-text query. Credential-free public anime data from AniList. Returns normalized entries: titles, scores, popularity, format, status, season, genres, tags, and studios.", - "operationId": "anime-search", + "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. Credential-free public data from bonhams.com's own search API.", + "operationId": "bonhams-lot-search", "parameters": [ { - "description": "Search text", + "description": "Free-text search across lot title, catalog description, and footnotes", "in": "query", - "name": "query", - "required": true, + "name": "q", "type": "string", - "x-example": "Frieren" + "x-example": "Rolex Submariner" }, { - "description": "Ordering: SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC. Default SEARCH_MATCH.", + "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": [ - "SEARCH_MATCH", - "POPULARITY_DESC", - "SCORE_DESC", - "TRENDING_DESC", - "FAVOURITES_DESC", - "START_DATE_DESC" + "relevance", + "recency", + "price_high", + "price_low", + "lot_number" ], "in": "query", "name": "sort", @@ -201266,7 +229742,7 @@ "type": "integer" }, { - "description": "Results per page, default 10, max 50", + "description": "Results per page, default 48, max 100", "in": "query", "name": "per_page", "type": "integer" @@ -201279,7 +229755,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.searchResponseDoc" + "$ref": "#/definitions/bonhams.lotSearchResponseDoc" } }, "400": { @@ -201306,33 +229782,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search anime", + "summary": "Search Bonhams lots across every auction", "tags": [ - "Anime" + "Bonhams" ] } }, - "/anime/title/{id}": { + "/bonhams/lots/{auctionId}/{lotNumber}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized 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), scraped credential-free from the public MAL page. Credential-free public AniList data.", - "operationId": "anime-title", + "description": "Returns one Bonhams lot's normalized 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. Credential-free public data from bonhams.com's own search API.", + "operationId": "bonhams-lot-detail", "parameters": [ { - "description": "AniList anime id", + "description": "Bonhams auction id", "in": "path", - "name": "id", + "name": "auctionId", "required": true, "type": "string", - "x-example": "154587" + "x-example": "32001" }, { - "description": "Enrich with the MyAnimeList community score (adds one fetch; omitted when the title has no MAL id)", - "in": "query", - "name": "mal", - "type": "boolean" + "description": "Bonhams lot number", + "in": "path", + "name": "lotNumber", + "required": true, + "type": "string", + "x-example": "2" } ], "produces": [ @@ -201342,7 +229820,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.mediaResponseDoc" + "$ref": "#/definitions/bonhams.lotDetailResponseDoc" } }, "400": { @@ -201375,39 +229853,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an anime", + "summary": "Get a Bonhams lot's normalized facts", "tags": [ - "Anime" + "Bonhams" ] } }, - "/anime/title/{id}/characters": { + "/booking-attractions/detail": { "get": { "consumes": [ "application/json" ], - "description": "Returns an anime's cast (character name, native name, billed role, image, favourites), paginated. Credential-free public AniList data.", - "operationId": "anime-title-characters", + "description": "Returns a Booking.com attraction's detail page.", + "operationId": "booking-attractions-detail", "parameters": [ { - "description": "AniList anime id", - "in": "path", - "name": "id", + "description": "Attraction slug, from a prior attraction search result", + "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": "pre4ksvwxdrd-seine-river-sightseeing-cruise" } ], "produces": [ @@ -201417,7 +229883,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.charactersResponseDoc" + "$ref": "#/definitions/booking.bookingAttractionDetailResponseDoc" } }, "400": { @@ -201432,8 +229898,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -201450,39 +229916,41 @@ "ApiKeyAuth": [] } ], - "summary": "List an anime's characters", + "summary": "Booking.com attraction detail", "tags": [ - "Anime" + "Booking" ] } }, - "/anime/title/{id}/recommendations": { + "/booking-attractions/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns community-recommended titles for an anime, each with a recommendation rating and the full normalized media entry, paginated. Credential-free public AniList data.", - "operationId": "anime-title-recommendations", + "description": "Returns normalized guest reviews for a Booking.com attraction.", + "operationId": "booking-attractions-reviews", "parameters": [ { - "description": "AniList anime id", - "in": "path", - "name": "id", + "description": "Attraction product id, from a prior attraction search result", + "in": "query", + "name": "product_id", "required": true, "type": "string", - "x-example": "154587" + "x-example": "PRe4kSVWXdrD" }, { - "description": "1-based page number, default 1", + "description": "1-based result page, default 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Results per page, default 10, max 50", + "description": "Reviews per page, 1-50, default 10", "in": "query", - "name": "per_page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -201492,7 +229960,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.recommendationsResponseDoc" + "$ref": "#/definitions/booking.bookingAttractionReviewsResponseDoc" } }, "400": { @@ -201507,8 +229975,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -201525,39 +229993,70 @@ "ApiKeyAuth": [] } ], - "summary": "List an anime's recommendations", + "summary": "Booking.com attraction reviews", "tags": [ - "Anime" + "Booking" ] } }, - "/anime/title/{id}/staff": { + "/booking-attractions/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the people credited on an anime (name, production role, occupations, image), paginated. Credential-free public AniList data.", - "operationId": "anime-title-staff", + "description": "Returns normalized 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": "AniList anime id", - "in": "path", - "name": "id", + "description": "Destination name or city", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "154587" + "x-example": "Paris" }, { - "description": "1-based page number, default 1", + "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" + "type": "integer", + "x-example": 1 }, { - "description": "Results per page, default 10, max 50", + "description": "Results per page, 1-30, default 15", "in": "query", - "name": "per_page", - "type": "integer" + "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": [ @@ -201567,7 +230066,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.staffResponseDoc" + "$ref": "#/definitions/booking.bookingAttractionSearchResponseDoc" } }, "400": { @@ -201582,8 +230081,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -201600,30 +230099,51 @@ "ApiKeyAuth": [] } ], - "summary": "List an anime's staff", + "summary": "Search Booking.com attractions", "tags": [ - "Anime" + "Booking" ] } }, - "/apk-teardown/compare-ownership": { + "/booking-flights/autocomplete": { "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": "Returns Booking.com flight-search location suggestions (airports/cities) for a query string.", + "operationId": "booking-flights-autocomplete", "parameters": [ { - "description": "First job ID", + "description": "City or airport name/code to search", "in": "query", - "name": "job_id_a", + "name": "query", "required": true, - "type": "string" + "type": "string", + "x-example": "Chengdu" }, { - "description": "Second job ID", + "description": "Location role, default to", + "enum": [ + "to", + "from" + ], "in": "query", - "name": "job_id_b", - "required": true, + "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": [ @@ -201633,11 +230153,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/apkteardown.CompareOwnershipResponseDoc" + "$ref": "#/definitions/booking.bookingFlightAutocompleteResponseDoc" } }, "400": { - "description": "Missing job ids, or one/both jobs not found or not done", + "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" } @@ -201648,30 +230186,102 @@ "ApiKeyAuth": [] } ], - "summary": "Compare two apk-teardown jobs for evidence of common ownership", + "summary": "Booking.com flight autocomplete", "tags": [ - "AppInsights" + "Booking" ] } }, - "/apk-teardown/diff": { + "/booking-flights/search": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns normalized round-trip or one-way flight offers between two Booking.com flight-search locations.", + "operationId": "booking-flights-search", "parameters": [ { - "description": "First job ID", + "description": "Trip type, default ROUNDTRIP", + "enum": [ + "ROUNDTRIP", + "ONEWAY" + ], "in": "query", - "name": "job_id_a", - "required": true, + "name": "type", "type": "string" }, { - "description": "Second job ID", + "description": "Origin location id, e.g. SGN.AIRPORT, from a prior autocomplete result", "in": "query", - "name": "job_id_b", + "name": "from", "required": true, - "type": "string" + "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": [ @@ -201681,11 +230291,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/apkteardown.DiffResponseDoc" + "$ref": "#/definitions/booking.bookingFlightSearchResponseDoc" } }, "400": { - "description": "Missing job ids, or one/both jobs not found or not done", + "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" } @@ -201696,43 +230324,27 @@ "ApiKeyAuth": [] } ], - "summary": "Diff two completed apk-teardown jobs", + "summary": "Search Booking.com flights", "tags": [ - "AppInsights" + "Booking" ] } }, - "/apk-teardown/jobs": { - "post": { + "/booking/hotel-detail": { + "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": "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": "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": "Booking.com hotel id, from a prior search's property id", + "in": "query", + "name": "hotel_id", + "required": true, + "type": "integer", + "x-example": 2845972 } ], "produces": [ @@ -201742,29 +230354,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/apkteardown.JobSubmitResponseDoc" + "$ref": "#/definitions/booking.bookingHotelDetailResponseDoc" } }, "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "file_url could not be fetched", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -201775,23 +230387,70 @@ "ApiKeyAuth": [] } ], - "summary": "Submit an APK for static teardown analysis", + "summary": "Booking.com hotel detail", "tags": [ - "AppInsights" + "Booking" ] } }, - "/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", + "/booking/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized guest reviews for a Booking.com hotel, with an optional free-text search over review content.", + "operationId": "booking-reviews", "parameters": [ { - "description": "Job ID to delete", - "in": "path", - "name": "job_id", + "description": "Booking.com hotel id, from a prior search's property id", + "in": "query", + "name": "hotel_id", "required": true, - "type": "string" + "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": [ @@ -201801,17 +230460,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/booking.bookingReviewsResponseDoc" } }, "400": { - "description": "job_id is required", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal error deleting the job", + "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" } @@ -201822,21 +230493,71 @@ "ApiKeyAuth": [] } ], - "summary": "Delete an apk-teardown job", + "summary": "Booking.com hotel reviews", "tags": [ - "AppInsights" + "Booking" ] - }, + } + }, + "/booking/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": "Returns normalized Booking.com hotel search results for a destination and date range.", + "operationId": "booking-search", "parameters": [ { - "description": "Job ID returned by Submit", - "in": "path", - "name": "job_id", + "description": "Destination name or city", + "in": "query", + "name": "query", "required": true, - "type": "string" + "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": [ @@ -201846,23 +230567,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/apkteardown.JobStatusResponseDoc" + "$ref": "#/definitions/booking.bookingSearchResponseDoc" } }, "400": { - "description": "job_id is required", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Job not found or expired", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal error reading the job", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -201873,65 +230600,95 @@ "ApiKeyAuth": [] } ], - "summary": "Poll an apk-teardown job's status/result", + "summary": "Search Booking.com hotels", "tags": [ - "AppInsights" + "Booking" ] } }, - "/apk-teardown/timeline": { + "/boots/search": { "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", + "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": "Comma-separated list of 2+ completed job ids, any order", + "description": "Free-text product query; required unless category is supplied", "in": "query", - "name": "job_ids", - "required": true, - "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/apkteardown.TimelineResponseDoc" - } + "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" }, - "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 uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 2 credits for an HTTP-profile success and 10 credits when browser rendering is required.", - "operationId": "apnews-article", - "parameters": [ + "default": 48, + "description": "Results per page from 1 through 48", + "in": "query", + "name": "page_size", + "type": "integer" + }, { - "description": "Canonical AP News article URL", + "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": "url", - "required": true, - "type": "string", - "x-example": "https://apnews.com/article/example-article-id" + "name": "sort", + "type": "string" } ], "produces": [ @@ -201941,7 +230698,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/boots.searchResponseDoc" } }, "400": { @@ -201950,8 +230707,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -201968,24 +230725,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get AP News article content", + "summary": "Search Boots UK products and categories", "tags": [ - "AP News" + "Boots" ] } }, - "/apnews/author": { + "/boots/suggest": { "get": { - "description": "Returns an AP News author's byline metadata, biography, and recent articles from a canonical author URL. The service uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 1 credit for an HTTP-profile success and 5 credits when browser rendering is required.", - "operationId": "apnews-author", + "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": "Canonical AP News author URL", + "description": "Partial product query", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://apnews.com/author/lauran-neergaard" + "x-example": "vitamin c" } ], "produces": [ @@ -201995,7 +230752,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.apNewsAuthorResponseDoc" + "$ref": "#/definitions/boots.suggestResponseDoc" } }, "400": { @@ -202004,8 +230761,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -202022,16 +230779,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get an AP News author profile", + "summary": "Get Boots UK search-box suggestions", "tags": [ - "AP News" + "Boots" ] } }, - "/apnews/fact-check": { + "/bostonglobe/news": { "get": { - "description": "Returns current headlines from AP News' public Fact Check page. The service uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 1 credit for an HTTP-profile success and 5 credits when browser rendering is required.", - "operationId": "apnews-fact-check", + "description": "Returns recent Boston Globe story metadata and RSS summaries from its public Arc feed. The feed also carries content:encoded article prose, which this endpoint intentionally omits. Article bodies, sections, headlines-by-section, and author profiles are not exposed because the public contracts are not fully verified and some stories require a subscription.", + "operationId": "bostonglobe-news", "produces": [ "application/json" ], @@ -202039,7 +230796,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -202060,36 +230817,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get AP News fact checks", + "summary": "Get Boston Globe top stories", "tags": [ - "AP News" + "Boston Globe" ] } }, - "/apnews/headlines": { + "/boxofficemojo/brand": { "get": { - "description": "Returns AP News headlines from a public editorial hub. The service uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 1 credit for an HTTP-profile success and 5 credits when browser rendering is required.", - "operationId": "apnews-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized release rows from a public Box Office Mojo brand page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-brand", "parameters": [ { - "description": "AP News section slug", + "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": [ - "ap-top-news", - "us-news", - "world-news", - "politics", - "business", - "technology", - "science", - "health", - "sports", - "entertainment", - "lifestyle" + "grossToDate", + "maxNumTheaters", + "openingWeekendGross", + "openingNumTheaters", + "releaseDate" ], "in": "query", - "name": "section", - "required": true, + "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": [ @@ -202099,7 +230890,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" } }, "400": { @@ -202108,46 +230899,20 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "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 uses the configured production browser fleet when ordinary HTTP transport encounters AP's edge challenge; it does not bypass authentication or access controls. Billing is 1 credit for an HTTP-profile success and 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", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -202164,67 +230929,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get AP News top stories", - "tags": [ - "AP News" - ] - } - }, - "/apnews/sections": { - "get": { - "description": "Returns the AP News editorial hub inventory used by apnews-headlines.", - "operationId": "apnews-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get AP News sections", + "summary": "Box Office Mojo brand detail", "tags": [ - "AP News" + "Box Office Mojo" ] } }, - "/apple-books/audiobook-series/{id}": { + "/boxofficemojo/brands": { "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 normalized rows from Box Office Mojo's public brand chart.", + "operationId": "boxofficemojo-brands", "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", + "description": "Sort field", + "enum": [ + "totalGross", + "numReleases", + "grossToDate" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "sort", + "type": "string" }, { - "description": "Result language tag", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "sortDir", + "type": "string" } ], "produces": [ @@ -202234,29 +230972,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookSeriesResponseDoc" + "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Series 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" } @@ -202267,55 +231005,35 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an Apple Books audiobook series and its full audiobook list", + "summary": "Box Office Mojo brand chart", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/audiobook/search": { + "/boxofficemojo/calendar": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Apple Books audiobooks from Apple's public iTunes Search API.", - "operationId": "apple-books-audiobook-search", + "description": "Returns normalized grouped rows from Box Office Mojo's public domestic release schedule. Provide `year` and `month`.", + "operationId": "boxofficemojo-calendar", "parameters": [ { - "description": "Search term", + "description": "Calendar year, from 1921 through 2100", "in": "query", - "name": "term", + "name": "year", "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 + "x-example": 2026 }, { - "description": "Search page number (1-based)", + "description": "Calendar month, 1 through 12", "in": "query", - "name": "page", + "name": "month", + "required": true, "type": "integer", - "x-example": 1 + "x-example": 9 } ], "produces": [ @@ -202325,23 +231043,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookSearchResponseDoc" + "$ref": "#/definitions/boxofficemojo.calendarResponseDoc" } }, "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" } @@ -202352,41 +231076,26 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Books audiobooks", + "summary": "Box Office Mojo domestic release schedule", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/audiobook/{id}": { + "/boxofficemojo/calendar/changes": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized audiobook metadata from Apple Books' public catalog page, including narrator, duration, audio preview, and a cross-link to the ebook edition (when one exists).", - "operationId": "apple-books-audiobook", + "description": "Returns normalized grouped rows from Box Office Mojo's public domestic release-schedule changes page.", + "operationId": "boxofficemojo-calendar-changes", "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": "Changes page offset. Allowed values: 0, 30, 60, ... 780", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -202396,29 +231105,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookResponseDoc" + "$ref": "#/definitions/boxofficemojo.calendarChangesResponseDoc" } }, "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" } @@ -202429,55 +231138,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books audiobook details", + "summary": "Box Office Mojo domestic release schedule changes", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/audiobook/{id}/reviews": { + "/boxofficemojo/calendar/date": { "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 normalized release rows for one public Box Office Mojo domestic release-schedule date.", + "operationId": "boxofficemojo-calendar-date", "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": "Calendar date in YYYY-MM-DD format", "in": "query", - "name": "lang", + "name": "date", + "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": "2026-09-04" } ], "produces": [ @@ -202487,29 +231168,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookReviewsResponseDoc" + "$ref": "#/definitions/boxofficemojo.calendarDateResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Audiobook 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" } @@ -202520,41 +231207,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books audiobook customer reviews", + "summary": "Box Office Mojo domestic release schedule date", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/audiobook/{id}/similar": { + "/boxofficemojo/date/domestic": { "get": { "consumes": [ "application/json" ], - "description": "Returns the related audiobooks shown on the Apple Books catalog page.", - "operationId": "apple-books-audiobook-similar", + "description": "Returns normalized rows from Box Office Mojo's public domestic daily chart. Empty upstream daily pages return a typed not-found error rather than an empty success.", + "operationId": "boxofficemojo-date-domestic", "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": "Domestic box office date in YYYY-MM-DD format", "in": "query", - "name": "lang", + "name": "date", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "2025-12-25" } ], "produces": [ @@ -202564,29 +231237,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookSimilarResponseDoc" + "$ref": "#/definitions/boxofficemojo.domesticDateResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Audiobook 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" } @@ -202597,41 +231276,70 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve \"Customers Also Bought\" audiobooks", + "summary": "Box Office Mojo domestic daily box office", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/author/{id}": { + "/boxofficemojo/franchise": { "get": { "consumes": [ "application/json" ], - "description": "Returns author metadata and their full ebook (and audiobook, where available) bibliography from Apple Books' public catalog page.", - "operationId": "apple-books-author", + "description": "Returns normalized release rows from a public Box Office Mojo franchise page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-franchise", "parameters": [ { - "description": "Apple Books numeric author ID", - "in": "path", + "description": "Box Office Mojo franchise id", + "in": "query", "name": "id", - "required": true, "type": "string", - "x-example": "79595314" + "x-example": "fr541495045" }, { - "description": "Two-letter storefront country code", + "description": "Box Office Mojo franchise path", "in": "query", - "name": "country", + "name": "path", "type": "string", - "x-example": "us" + "x-example": "/franchise/fr541495045/" }, { - "description": "Result language tag", + "description": "Absolute https://www.boxofficemojo.com franchise URL", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en-us" + "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": [ @@ -202641,29 +231349,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.authorResponseDoc" + "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Author 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" } @@ -202674,41 +231388,40 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an Apple Books author's bibliography", + "summary": "Box Office Mojo franchise detail", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/book/{id}": { + "/boxofficemojo/franchises": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized book metadata from Apple Books' public catalog page, including ISBN, page count, publisher, audience, rating histogram, and series linkage.", - "operationId": "apple-books-book", + "description": "Returns normalized rows from Box Office Mojo's public franchise chart.", + "operationId": "boxofficemojo-franchises", "parameters": [ { - "description": "Apple Books numeric book ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1037193578" - }, - { - "description": "Two-letter storefront country code", + "description": "Sort field", + "enum": [ + "totalGross", + "numReleases", + "grossToDate" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "sort", + "type": "string" }, { - "description": "Result language tag", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "sortDir", + "type": "string" } ], "produces": [ @@ -202718,29 +231431,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.bookResponseDoc" + "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Book 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" } @@ -202751,55 +231464,70 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books book details", + "summary": "Box Office Mojo franchise chart", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/book/{id}/reviews": { + "/boxofficemojo/genre": { "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", + "description": "Returns normalized release rows from a public Box Office Mojo genre page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-genre", "parameters": [ { - "description": "Apple Books numeric book ID", - "in": "path", + "description": "Box Office Mojo genre id", + "in": "query", "name": "id", - "required": true, "type": "string", - "x-example": "1037193578" + "x-example": "sg3621777665" }, { - "description": "Two-letter storefront country code", + "description": "Box Office Mojo genre path", "in": "query", - "name": "country", + "name": "path", "type": "string", - "x-example": "us" + "x-example": "/genre/sg3621777665/" }, { - "description": "Result language tag", + "description": "Absolute https://www.boxofficemojo.com genre URL", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en-us" + "x-example": "https://www.boxofficemojo.com/genre/sg3621777665/" }, { - "description": "Review page number, default 1", + "description": "Sort field", + "enum": [ + "grossToDate", + "maxNumTheaters", + "openingWeekendGross", + "openingNumTheaters", + "releaseDate" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "sort", + "type": "string" }, { - "description": "Reviews per page, default 10, max 20", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "limit", + "name": "sortDir", + "type": "string" + }, + { + "description": "Row offset for pagination (page size 100)", + "in": "query", + "name": "offset", "type": "integer", - "x-example": 10 + "x-example": 0 } ], "produces": [ @@ -202809,29 +231537,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.reviewsResponseDoc" + "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" } }, "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" } @@ -202842,41 +231576,40 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books customer reviews", + "summary": "Box Office Mojo genre detail", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/book/{id}/similar": { + "/boxofficemojo/genres": { "get": { "consumes": [ "application/json" ], - "description": "Returns the related books shown on the Apple Books catalog page.", - "operationId": "apple-books-book-similar", + "description": "Returns normalized rows from Box Office Mojo's public genre chart.", + "operationId": "boxofficemojo-genres", "parameters": [ { - "description": "Apple Books numeric book ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1037193578" - }, - { - "description": "Two-letter storefront country code", + "description": "Sort field", + "enum": [ + "totalGross", + "numTitles", + "grossToDate" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "sort", + "type": "string" }, { - "description": "Result language tag", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "sortDir", + "type": "string" } ], "produces": [ @@ -202886,29 +231619,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.similarResponseDoc" + "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Book 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" } @@ -202919,51 +231652,37 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve \"Customers Also Bought\" books", + "summary": "Box Office Mojo genre chart", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/charts": { + "/boxofficemojo/lifetime-grosses": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Books chart rankings from Apple's public marketing-tools RSS JSON feed. Supported collections are `top-free` and `top-paid`.", - "operationId": "apple-books-charts", + "description": "Returns normalized rows from Box Office Mojo's credential-free lifetime gross chart. `area` values: `worldwide`, `domestic`.", + "operationId": "boxofficemojo-lifetime-grosses", "parameters": [ { - "description": "Chart collection. Allowed values: top-free, top-paid", + "description": "Chart area. Allowed values: worldwide, domestic", "enum": [ - "top-free", - "top-paid" + "worldwide", + "domestic" ], "in": "query", - "name": "collection", - "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 - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", + "name": "area", "type": "string", - "x-example": "us" + "x-example": "worldwide" }, { - "description": "Number of chart items to return", + "description": "Chart page offset. Allowed values: 0, 200, 400, 600, 800", "in": "query", - "name": "limit", + "name": "offset", "type": "integer", - "x-example": 50 + "x-example": 0 } ], "produces": [ @@ -202973,23 +231692,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.chartsResponseDoc" + "$ref": "#/definitions/boxofficemojo.lifetimeGrossesResponseDoc" } }, "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" } @@ -203000,55 +231725,40 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books chart rankings", + "summary": "Box Office Mojo lifetime gross chart", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/search": { + "/boxofficemojo/release": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Apple Books ebooks from Apple's public iTunes Search API.", - "operationId": "apple-books-search", + "description": "Returns normalized Box Office Mojo release summary fields and domestic daily rows from a public release page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-release", "parameters": [ { - "description": "Search term", + "description": "Box Office Mojo release id", "in": "query", - "name": "term", - "required": true, + "name": "id", "type": "string", - "x-example": "harry potter" + "x-example": "rl3389031937" }, { - "description": "Two-letter storefront country code", + "description": "Box Office Mojo release path", "in": "query", - "name": "country", + "name": "path", "type": "string", - "x-example": "us" + "x-example": "/release/rl3389031937/" }, { - "description": "Result language tag", + "description": "Absolute https://www.boxofficemojo.com release URL", "in": "query", - "name": "lang", + "name": "url", "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 + "x-example": "https://www.boxofficemojo.com/release/rl3389031937/" } ], "produces": [ @@ -203058,23 +231768,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.searchResponseDoc" + "$ref": "#/definitions/boxofficemojo.releaseResponseDoc" } }, "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" } @@ -203085,41 +231807,40 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Books titles", + "summary": "Box Office Mojo release detail", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-books/series/{id}": { + "/boxofficemojo/release-group": { "get": { "consumes": [ "application/json" ], - "description": "Returns series metadata and the full ordered list of books in the series from Apple Books' public catalog page.", - "operationId": "apple-books-series", + "description": "Returns normalized market release rows grouped by region from a public Box Office Mojo release-group page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-release-group", "parameters": [ { - "description": "Apple Books numeric series ID", - "in": "path", + "description": "Box Office Mojo release-group id", + "in": "query", "name": "id", - "required": true, "type": "string", - "x-example": "1044374793" + "x-example": "gr3486798341" }, { - "description": "Two-letter storefront country code", + "description": "Box Office Mojo release-group path", "in": "query", - "name": "country", + "name": "path", "type": "string", - "x-example": "us" + "x-example": "/releasegroup/gr3486798341/" }, { - "description": "Result language tag", + "description": "Absolute https://www.boxofficemojo.com release-group URL", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en-us" + "x-example": "https://www.boxofficemojo.com/releasegroup/gr3486798341/" } ], "produces": [ @@ -203129,29 +231850,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.seriesResponseDoc" + "$ref": "#/definitions/boxofficemojo.releaseGroupResponseDoc" } }, "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" } @@ -203162,27 +231889,40 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an Apple Books series and its full book list", + "summary": "Box Office Mojo release group detail", "tags": [ - "AppleBooks" + "Box Office Mojo" ] } }, - "/apple-jobs/job": { + "/boxofficemojo/showdown": { "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). Parsed from jobs.apple.com's server-rendered job detail page.", - "operationId": "apple-jobs-job", + "description": "Returns normalized release comparison metrics from a public Box Office Mojo showdown page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-showdown", "parameters": [ { - "description": "Apple job id", + "description": "Box Office Mojo showdown id", "in": "query", "name": "id", - "required": true, "type": "string", - "x-example": "200674676-0836" + "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": [ @@ -203192,7 +231932,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applejobs.jobResponseDoc" + "$ref": "#/definitions/boxofficemojo.showdownResponseDoc" } }, "400": { @@ -203213,6 +231953,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -203225,28 +231971,19 @@ "ApiKeyAuth": [] } ], - "summary": "Apple Jobs single posting", + "summary": "Box Office Mojo showdown detail", "tags": [ - "Apple Jobs" + "Box Office Mojo" ] } }, - "/apple-jobs/locations": { + "/boxofficemojo/showdowns": { "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 by the search backend). Apple exposes no bulk \"list everything\" API for this; its only source is its own location-filter typeahead, 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 no live upstream call required. With `q` supplied, this instead live-proxies Apple's own typeahead 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" - } - ], + "description": "Returns normalized comparison rows from Box Office Mojo's public showdowns page.", + "operationId": "boxofficemojo-showdowns", "produces": [ "application/json" ], @@ -203254,17 +231991,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applejobs.locationsResponseDoc" + "$ref": "#/definitions/boxofficemojo.showdownsResponseDoc" } }, - "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" } @@ -203281,41 +232018,40 @@ "ApiKeyAuth": [] } ], - "summary": "Apple Jobs location discovery", + "summary": "Box Office Mojo showdowns", "tags": [ - "Apple Jobs" + "Box Office Mojo" ] } }, - "/apple-jobs/search": { + "/boxofficemojo/title": { "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": "Returns normalized Box Office Mojo title release-group and market-gross tables from a public title page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-title", "parameters": [ { - "description": "Search query", + "description": "Box Office Mojo title id", "in": "query", - "name": "q", - "required": true, + "name": "id", "type": "string", - "x-example": "software engineer" + "x-example": "tt0499549" }, { - "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": "Box Office Mojo title path", "in": "query", - "name": "location", + "name": "path", "type": "string", - "x-example": "united-states-USA" + "x-example": "/title/tt0499549/" }, { - "description": "Page number, 1-based", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "description": "Absolute https://www.boxofficemojo.com title URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.boxofficemojo.com/title/tt0499549/" } ], "produces": [ @@ -203325,7 +232061,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applejobs.searchResponseDoc" + "$ref": "#/definitions/boxofficemojo.titleResponseDoc" } }, "400": { @@ -203334,12 +232070,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": { @@ -203352,64 +232100,35 @@ "ApiKeyAuth": [] } ], - "summary": "Apple Jobs search", + "summary": "Box Office Mojo title detail", "tags": [ - "Apple Jobs" + "Box Office Mojo" ] } }, - "/apple-maps/autocomplete": { + "/boxofficemojo/weekend/domestic": { "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 normalized rows from Box Office Mojo's public domestic weekend chart. Empty upstream weekend pages return a typed not-found error rather than an empty success.", + "operationId": "boxofficemojo-weekend-domestic", "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", + "description": "Domestic weekend year, from 1982 through 2100", "in": "query", - "name": "latitude", + "name": "year", "required": true, - "type": "number", - "x-example": 37.7749 + "type": "integer", + "x-example": 2025 }, { - "description": "Center longitude the suggestions are biased to", + "description": "Weekend number, 1 through 53", "in": "query", - "name": "longitude", + "name": "week", "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" + "type": "integer", + "x-example": 52 } ], "produces": [ @@ -203419,7 +232138,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.autocompleteResponseDoc" + "$ref": "#/definitions/boxofficemojo.domesticWeekendResponseDoc" } }, "400": { @@ -203428,6 +232147,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": { @@ -203440,56 +232177,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Apple Maps search suggestions for a partial query", + "summary": "Box Office Mojo domestic weekend box office", "tags": [ - "Apple Maps" + "Box Office Mojo" ] } }, - "/apple-maps/categories": { + "/boxofficemojo/weekend/domestic/by-distributor": { "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 normalized distributor rows from Box Office Mojo's public 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": "Center latitude", + "description": "Domestic weekend year, from 1982 through 2100", "in": "query", - "name": "latitude", + "name": "year", "required": true, - "type": "number", - "x-example": 37.7749 + "type": "integer", + "x-example": 2025 }, { - "description": "Center longitude", + "description": "Weekend number, 1 through 53", "in": "query", - "name": "longitude", + "name": "week", "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" + "type": "integer", + "x-example": 52 } ], "produces": [ @@ -203499,7 +232215,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.categoriesResponseDoc" + "$ref": "#/definitions/boxofficemojo.weekendDistributorResponseDoc" } }, "400": { @@ -203508,6 +232224,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": { @@ -203520,90 +232254,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Apple Maps browse categories for an area", + "summary": "Box Office Mojo domestic weekend by distributor", "tags": [ - "Apple Maps" + "Box Office Mojo" ] } }, - "/apple-maps/category-search": { + "/boxofficemojo/weekend/domestic/estimates": { "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 normalized estimate-vs-actual rows from Box Office Mojo's public 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": "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", + "description": "Domestic weekend year, from 1982 through 2100", "in": "query", - "name": "latitude", + "name": "year", "required": true, - "type": "number", - "x-example": 37.7749 + "type": "integer", + "x-example": 2025 }, { - "description": "Search center longitude", + "description": "Weekend number, 1 through 53", "in": "query", - "name": "longitude", + "name": "week", "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" + "x-example": 52 } ], "produces": [ @@ -203613,7 +232292,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.searchResponseDoc" + "$ref": "#/definitions/boxofficemojo.weekendEstimatesResponseDoc" } }, "400": { @@ -203622,6 +232301,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": { @@ -203634,124 +232331,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse one Apple Maps category near a coordinate", + "summary": "Box Office Mojo domestic weekend estimates", "tags": [ - "Apple Maps" + "Box Office Mojo" ] } }, - "/apple-maps/directions": { + "/boxofficemojo/year/domestic": { "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 normalized release rows from Box Office Mojo's public domestic yearly calendar-grosses chart.", + "operationId": "boxofficemojo-year-domestic", "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", + "description": "Domestic box office year, from 1977 through 2100", "in": "query", - "name": "destination_longitude", + "name": "year", "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" + "type": "integer", + "x-example": 2025 } ], "produces": [ @@ -203761,7 +232361,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.directionsResponseDoc" + "$ref": "#/definitions/boxofficemojo.domesticYearResponseDoc" } }, "400": { @@ -203770,8 +232370,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" } @@ -203788,69 +232394,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Apple Maps driving, walking, or cycling directions", + "summary": "Box Office Mojo domestic yearly box office", "tags": [ - "Apple Maps" + "Box Office Mojo" ] } }, - "/apple-maps/eta": { + "/boxofficemojo/year/worldwide": { "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": "Returns normalized release-group rows from Box Office Mojo's public worldwide yearly chart.", + "operationId": "boxofficemojo-year-worldwide", "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", + "description": "Box office year, from 1977 through 2100", "in": "query", - "name": "destination_longitude", + "name": "year", "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" + "type": "integer", + "x-example": 2025 } ], "produces": [ @@ -203860,7 +232424,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.etaResponseDoc" + "$ref": "#/definitions/boxofficemojo.worldwideYearResponseDoc" } }, "400": { @@ -203869,8 +232433,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" } @@ -203887,40 +232457,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Apple Maps travel-time estimates between two points", + "summary": "Box Office Mojo worldwide yearly box office", "tags": [ - "Apple Maps" + "Box Office Mojo" ] } }, - "/apple-maps/guides": { + "/brand/retrieve": { "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": "Fetches a domain's homepage and Web App Manifest and extracts a normalized brand profile (title, description, brand colors normalized to 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": "City id from /apple-maps/guides/cities. Omit for the Worldwide guides home.", + "description": "Domain to retrieve brand data for, e.g. context.dev", "in": "query", - "name": "city_id", + "name": "domain", + "required": true, "type": "string", - "x-example": "8077516530309122779" + "x-example": "context.dev" }, { - "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "description": "Accepted for compatibility; not applied in HTML-only mode", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "force_language", + "type": "string" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Optimize for speed by skipping schema.org and footer-link extraction", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "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": [ @@ -203930,7 +232511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesHomeResponseDoc" + "$ref": "#/definitions/brand.retrieveResponseDoc" } }, "400": { @@ -203945,6 +232526,18 @@ "$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": { @@ -203957,33 +232550,114 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Apple Guides home page worldwide or for one city", + "summary": "Retrieve brand data by domain", "tags": [ - "Apple Maps" + "Brand" ] } }, - "/apple-maps/guides/cities": { + "/brave/images": { "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", + "description": "Returns normalized Brave image search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Brave Search image HTML and return 503 when Brave serves a challenge page or unusable HTML.", + "operationId": "brave-images", "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.", + "description": "Search query", "in": "query", - "name": "lang", + "name": "q", + "required": true, "type": "string", - "x-example": "en-US" + "x-example": "openai" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "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" + "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": [ @@ -203993,17 +232667,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesCitiesResponseDoc" + "$ref": "#/definitions/brave.imagesResponseDoc" } }, "400": { - "description": "Bad Request", + "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": "Service Unavailable", + "description": "Brave upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -204014,41 +232706,142 @@ "ApiKeyAuth": [] } ], - "summary": "List the regions and cities Apple Guides cover", + "summary": "Search Brave image results", "tags": [ - "Apple Maps" + "Brave" ] } }, - "/apple-maps/guides/guide": { + "/brave/news": { "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 normalized Brave news search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Brave Search news HTML and return 503 when Brave serves a challenge page or unusable HTML.", + "operationId": "brave-news", "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": "Search query", "in": "query", - "name": "guide_id", + "name": "q", "required": true, "type": "string", - "x-example": "13100041759208417726" + "x-example": "openai" }, { - "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "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" + "x-example": "en-us" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Preset time filter: any, day, week, month, year, or custom", + "enum": [ + "any", + "day", + "week", + "month", + "year", + "custom" + ], "in": "query", - "name": "country", + "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": "US" + "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": [ @@ -204058,23 +232851,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guideResponseDoc" + "$ref": "#/definitions/brave.newsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "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": "Service Unavailable", + "description": "Brave upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -204085,41 +232890,133 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Apple Guide with its places", + "summary": "Search Brave news results", "tags": [ - "Apple Maps" + "Brave" ] } }, - "/apple-maps/guides/lookup": { + "/brave/search": { "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": "Returns normalized 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": "Comma-separated Apple guide ids, 1 to 20", + "description": "Search query", "in": "query", - "name": "guide_ids", + "name": "q", "required": true, "type": "string", - "x-example": "13100041759208417726,17954826775154719886" + "x-example": "openai" }, { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "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" + "x-example": "en-us" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Preset time filter: any, day, week, month, year, or custom", + "enum": [ + "any", + "day", + "week", + "month", + "year", + "custom" + ], "in": "query", - "name": "country", + "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": "US" + "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": [ @@ -204129,17 +233026,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesLookupResponseDoc" + "$ref": "#/definitions/brave.searchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "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" } @@ -204150,56 +233059,106 @@ "ApiKeyAuth": [] } ], - "summary": "Resolve up to 20 Apple Guide ids to guide summaries", + "summary": "Search Brave", "tags": [ - "Apple Maps" + "Brave" ] } }, - "/apple-maps/guides/nearby": { + "/brave/suggest": { "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 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.", + "operationId": "brave-suggest", "parameters": [ { - "description": "Latitude of the area", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Longitude of the area", + "description": "Search query prefix", "in": "query", - "name": "longitude", + "name": "q", "required": true, - "type": "number", - "x-example": -122.4194 + "type": "string", + "x-example": "openai" }, { - "description": "Viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", + "description": "Suggestions to return; defaults to 10, clamped to 1..12", "in": "query", - "name": "span", - "type": "number", - "x-example": 0.05 + "maximum": 12, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 }, { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "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": "lang", + "name": "country", "type": "string", - "x-example": "en-US" + "x-example": "us" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to 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": "country", + "name": "lang", "type": "string", - "x-example": "US" + "x-example": "en-us" } ], "produces": [ @@ -204209,17 +233168,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesNearbyResponseDoc" + "$ref": "#/definitions/brave.suggestResponseDoc" } }, "400": { - "description": "Bad Request", + "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": "Service Unavailable", + "description": "Brave upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -204230,48 +233201,142 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Apple Guides curated for the area around a coordinate", + "summary": "Suggest Brave search queries", "tags": [ - "Apple Maps" + "Brave" ] } }, - "/apple-maps/guides/publisher": { + "/brave/videos": { "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": "Returns normalized Brave video search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Brave Search video HTML and return 503 when Brave serves a challenge page or unusable HTML.", + "operationId": "brave-videos", "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", + "description": "Search query", "in": "query", - "name": "publisher_id", + "name": "q", "required": true, "type": "string", - "x-example": "1706564968711360917" + "x-example": "openai" }, { - "description": "Restrict to one city: an id from this publisher's own cities list", + "description": "Zero-based Brave result page; defaults to 0", "in": "query", - "name": "city_id", + "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": "18366846785603624515" + "x-example": "us" }, { - "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-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" + "x-example": "en-us" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Preset time filter: any, day, week, month, year, or custom", + "enum": [ + "any", + "day", + "week", + "month", + "year", + "custom" + ], "in": "query", - "name": "country", + "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": "US" + "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": [ @@ -204281,23 +233346,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.publisherResponseDoc" + "$ref": "#/definitions/brave.videosResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "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": "Service Unavailable", + "description": "Brave upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -204308,40 +233385,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Apple Guides publisher and its guides", + "summary": "Search Brave video results", "tags": [ - "Apple Maps" + "Brave" ] } }, - "/apple-maps/guides/publishers": { + "/breitbart/article": { "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 public Breitbart article metadata and body paragraphs from a canonical article URL.", + "operationId": "breitbart-article", "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": "Canonical Breitbart article URL", "in": "query", - "name": "country", + "name": "url", + "required": true, "type": "string", - "x-example": "US" + "x-example": "https://www.breitbart.com/politics/2026/09/22/example-story/" } ], "produces": [ @@ -204351,7 +233412,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesPublishersResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -204378,41 +233439,37 @@ "ApiKeyAuth": [] } ], - "summary": "List Apple Guides publishers worldwide or for one city", + "summary": "Get Breitbart article content", "tags": [ - "Apple Maps" + "Breitbart" ] } }, - "/apple-maps/place": { + "/breitbart/author": { "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": "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": "Apple place ID: external form (I594FECA0B369D14A) or numeric id from a search result", + "description": "Author slug, e.g. joshua-klein", "in": "query", - "name": "place_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "I594FECA0B369D14A" + "x-example": "joshua-klein" }, { - "description": "Display language as a BCP 47 tag, e.g. en-US, ja-JP, de-DE. Defaults to en-US.", + "description": "Canonical breitbart.com/author// URL, optionally with a /page// segment; alternative to slug", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en-US" + "x-example": "https://www.breitbart.com/author/joshua-klein/" }, { - "description": "Two-letter ISO 3166-1 country code selecting Apple's regional catalog. Defaults to US.", + "description": "1-based page of articles to return; defaults to 1", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -204422,7 +233479,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.placeResponseDoc" + "$ref": "#/definitions/publicnews.breitbartAuthorResponseDoc" } }, "400": { @@ -204449,41 +233506,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Apple Maps place's full detail", + "summary": "Get a Breitbart author profile", "tags": [ - "Apple Maps" + "Breitbart" ] } }, - "/apple-maps/place/photos": { + "/breitbart/headlines": { "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": "Returns fresh headlines from one public Breitbart section hub page.", + "operationId": "breitbart-headlines", "parameters": [ { - "description": "Apple place ID (external I... form or numeric id)", + "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": "place_id", + "name": "section", "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" + "x-example": "politics" } ], "produces": [ @@ -204493,7 +233556,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.placePhotosResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -204502,12 +233565,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -204520,43 +233577,16 @@ "ApiKeyAuth": [] } ], - "summary": "List every photo Apple Maps carries for a place", + "summary": "Get Breitbart section headlines", "tags": [ - "Apple Maps" + "Breitbart" ] } }, - "/apple-maps/places": { + "/breitbart/news": { "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" - } - ], + "description": "Returns fresh Breitbart top stories from its public RSS feed.", + "operationId": "breitbart-news", "produces": [ "application/json" ], @@ -204564,11 +233594,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.placesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -204585,49 +233615,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get full detail for up to 20 Apple Maps places in one call", + "summary": "Get Breitbart top stories", "tags": [ - "Apple Maps" + "Breitbart" ] } }, - "/apple-maps/reverse-geocode": { + "/breitbart/sections": { "get": { - "consumes": [ + "description": "Returns the live-verified public Breitbart editorial section inventory used by the headlines endpoint.", + "operationId": "breitbart-sections", + "produces": [ "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": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Latitude to reverse-geocode", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, + "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", + "parameters": [ { - "description": "Longitude to reverse-geocode", + "description": "Canonical Brisbane Times article URL", "in": "query", - "name": "longitude", + "name": "url", "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" + "x-example": "https://www.brisbanetimes.com.au/national/queensland/hospital-denies-gas-leak-forced-evacuation-surgery-delays-20260930-p611l9.html" } ], "produces": [ @@ -204637,7 +233668,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.reverseGeocodeResponseDoc" + "$ref": "#/definitions/publicnews.brisbanetimesArticleResponseDoc" } }, "400": { @@ -204664,90 +233695,24 @@ "ApiKeyAuth": [] } ], - "summary": "Reverse-geocode a coordinate with Apple Maps", + "summary": "Get Brisbane Times article content", "tags": [ - "Apple Maps" + "Brisbane Times" ] } }, - "/apple-maps/search": { + "/brisbanetimes/author": { "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": "Returns one public Brisbane Times `/by/-` profile with its name, biography, headshot, contact links, and recent story cards.", + "operationId": "brisbanetimes-author", "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": "Canonical Brisbane Times journalist URL", "in": "query", - "name": "longitude", + "name": "url", "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" + "x-example": "https://www.brisbanetimes.com.au/by/william-davis-p537k8" } ], "produces": [ @@ -204757,7 +233722,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.searchResponseDoc" + "$ref": "#/definitions/publicnews.brisbanetimesAuthorResponseDoc" } }, "400": { @@ -204766,6 +233731,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -204778,41 +233749,130 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Maps places near a coordinate", + "summary": "Get a Brisbane Times journalist profile", "tags": [ - "Apple Maps" + "Brisbane Times" ] } }, - "/apple-maps/transit-departures": { + "/brisbanetimes/headlines": { "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 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": "Apple place ID of a transit stop or station (external I... form or numeric id)", + "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": "place_id", + "name": "section", "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" + "x-example": "brisbane-news" } ], "produces": [ @@ -204822,7 +233882,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.transitDeparturesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -204831,12 +233891,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -204849,57 +233903,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a transit stop's lines and live departures from Apple Maps", + "summary": "Get Brisbane Times section or topic headlines", "tags": [ - "Apple Maps" + "Brisbane Times" ] } }, - "/apple-maps/venue/browse": { + "/brisbanetimes/news": { "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" - } - ], + "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" ], @@ -204907,17 +233920,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.venueBrowseResponseDoc" - } - }, - "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" } @@ -204934,43 +233941,55 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the stores and places inside a venue on Apple Maps", + "summary": "Get Brisbane Times top stories", "tags": [ - "Apple Maps" + "Brisbane Times" ] } }, - "/apple-podcasts/charts": { + "/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 Apple Podcasts show chart rankings from public iTunes RSS JSON feeds. Supported collections are `toppodcasts` and `topaudiopodcasts`.", - "operationId": "apple-podcasts-charts", + "description": "Returns normalized 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": "Chart collection", - "in": "query", - "name": "collection", - "type": "string", - "x-example": "toppodcasts" - }, - { - "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 collections, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", @@ -204984,23 +234003,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.chartsResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "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" } @@ -205011,54 +234030,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts chart rankings", + "summary": "List Brooklinen collections", "tags": [ - "ApplePodcasts" + "Brooklinen" ] } }, - "/apple-podcasts/charts/rankings": { + "/brooklinen/collections/{handle}/products": { "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": "Returns normalized 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": "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", + "description": "Collection handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "podcasts" + "x-example": "collection-handle" }, { - "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 products, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 24 + "x-example": 50 } ], "produces": [ @@ -205068,23 +234074,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.chartRankingsResponseDoc" + "$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" } @@ -205095,55 +234107,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts chart rankings by algorithm, type, and genre", + "summary": "List Brooklinen collection products", "tags": [ - "ApplePodcasts" + "Brooklinen" ] } }, - "/apple-podcasts/episodes/search": { + "/brooklinen/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Apple Podcasts episodes from Apple's public iTunes Search API.", - "operationId": "apple-podcasts-episodes-search", + "description": "Returns normalized static pages from Brooklinen (https://www.brooklinen.com). The storefront URL is fixed server-side.", + "operationId": "brooklinen-pages", "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", + "description": "1-based page, defaults to 1", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Number of episodes per page", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "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": [ @@ -205153,23 +234143,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.episodeSearchResponseDoc" + "$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" } @@ -205180,26 +234170,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Podcasts episodes", + "summary": "List Brooklinen static pages", "tags": [ - "ApplePodcasts" + "Brooklinen" ] } }, - "/apple-podcasts/new": { + "/brooklinen/pages/{handle}": { "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 normalized static page detail for one Brooklinen (https://www.brooklinen.com) page handle. The storefront URL is fixed server-side.", + "operationId": "brooklinen-page", "parameters": [ { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "us" + "x-example": "page-handle" } ], "produces": [ @@ -205209,17 +234200,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.newShelvesResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" + } + }, + "400": { + "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" } @@ -205230,55 +234233,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts curated \"New\" editorial shelves", + "summary": "Get a Brooklinen static page", "tags": [ - "ApplePodcasts" + "Brooklinen" ] } }, - "/apple-podcasts/search": { + "/brooklinen/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Apple Podcasts shows from Apple's public iTunes Search API.", - "operationId": "apple-podcasts-search", + "description": "Returns normalized products from Brooklinen's (https://www.brooklinen.com) public 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": "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", + "description": "1-based page, defaults to 1", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Number of shows per page", + "description": "Maximum products, defaults to 50 and supports up to 250", "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": [ @@ -205288,23 +234269,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "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" } @@ -205315,41 +234296,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Podcasts shows", + "summary": "List Brooklinen products", "tags": [ - "ApplePodcasts" + "Brooklinen" ] } }, - "/apple-podcasts/show/{id}": { + "/brooklinen/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized show metadata from Apple's public iTunes Lookup API.", - "operationId": "apple-podcasts-show", + "description": "Returns normalized 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": "Apple Podcasts show ID", + "description": "Product handle", "in": "path", - "name": "id", + "name": "handle", "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" + "x-example": "product-handle" } ], "produces": [ @@ -205359,29 +234326,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.showResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "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" } @@ -205392,48 +234359,45 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts show details", + "summary": "Get a Brooklinen product", "tags": [ - "ApplePodcasts" + "Brooklinen" ] } }, - "/apple-podcasts/show/{id}/episodes": { + "/brooklinen/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns a show and its public Apple Podcasts episodes from Apple's iTunes Lookup API.", - "operationId": "apple-podcasts-show-episodes", + "description": "Returns normalized recommended products for one Brooklinen (https://www.brooklinen.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "brooklinen-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" - }, - { - "description": "Number of episodes to return", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "related" } ], "produces": [ @@ -205443,29 +234407,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.showEpisodesResponseDoc" + "$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" } @@ -205476,41 +234440,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts show episodes", + "summary": "List Brooklinen product recommendations", "tags": [ - "ApplePodcasts" + "Brooklinen" ] } }, - "/apple-podcasts/show/{id}/related": { + "/brooklinen/search/suggest": { "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 products, collections, and query suggestions from Brooklinen's (https://www.brooklinen.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "brooklinen-search-suggest", "parameters": [ { - "description": "Apple Podcasts show ID", - "in": "path", - "name": "id", + "description": "Search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "173001861" + "x-example": "wool" }, { - "description": "Two-letter storefront country code", + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", "in": "query", - "name": "country", + "name": "types", "type": "string", - "x-example": "us" + "x-example": "product,collection,query" }, { - "description": "Number of related shows to return, default 20, max 50", + "description": "Maximum results per type, defaults to 10 and supports up to 20", "in": "query", "name": "limit", "type": "integer", - "x-example": 20 + "x-example": 10 } ], "produces": [ @@ -205520,29 +234484,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.relatedShowsResponseDoc" + "$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" } @@ -205553,61 +234511,42 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts \"You Might Also Like\" related shows", + "summary": "Get Brooklinen search suggestions", "tags": [ - "ApplePodcasts" + "Brooklinen" ] } }, - "/appstore/app": { + "/brooklinen/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized app metadata from the App Store lookup API. 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", + "description": "Returns capped URL entries from Brooklinen's (https://www.brooklinen.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "brooklinen-sitemap-urls", "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": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "enum": [ + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" + ], "in": "query", - "name": "lang", + "name": "type", "type": "string", - "x-example": "en-us" - }, - { - "default": false, - "description": "Include ratings histogram", - "in": "query", - "name": "ratings", - "type": "boolean" + "x-example": "products" }, { - "default": false, - "description": "Include the full device-platform compatibility list (adds one extra upstream fetch)", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "platforms", - "type": "boolean" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -205617,29 +234556,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.appDetailsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "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" } @@ -205650,19 +234583,19 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve full App Store app details", + "summary": "List Brooklinen sitemap URLs", "tags": [ - "AppStore" + "Brooklinen" ] } }, - "/appstore/categories": { + "/brooklinen/sitemaps": { "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 child sitemap URLs from Brooklinen's (https://www.brooklinen.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "brooklinen-sitemaps", "produces": [ "application/json" ], @@ -205670,17 +234603,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.categoriesResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + } + }, + "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" } @@ -205691,43 +234630,19 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store chart categories and collections", + "summary": "List Brooklinen sitemaps", "tags": [ - "AppStore" + "Brooklinen" ] } }, - "/appstore/developer/{dev_id}": { + "/brooklinen/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns App Store apps associated with a specific developer artist ID.", - "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" - } - ], + "description": "Returns normalized storefront metadata for Brooklinen (https://www.brooklinen.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "brooklinen-store", "produces": [ "application/json" ], @@ -205735,29 +234650,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.developerResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "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" } @@ -205768,59 +234677,26 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve apps by developer ID", + "summary": "Get Brooklinen store metadata", "tags": [ - "AppStore" + "Brooklinen" ] } }, - "/appstore/editorial": { + "/burberry/categories": { "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", + "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": "Apple device catalog", - "enum": [ - "iphone", - "ipad", - "mac", - "vision", - "watch", - "tv" - ], - "in": "query", - "name": "device", - "required": true, - "type": "string" - }, - { - "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", + "description": "Top-level department to filter to, e.g. Women, Men, Children -- omit for every department", "in": "query", - "name": "lang", + "name": "department", "type": "string", - "x-example": "en-us" + "x-example": "Women" } ], "produces": [ @@ -205830,29 +234706,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.editorialResponseDoc" + "$ref": "#/definitions/burberry.categoriesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "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" } @@ -205863,56 +234733,56 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an App Store device or Arcade editorial landing page", + "summary": "List Burberry categories", "tags": [ - "AppStore" + "Burberry" ] } }, - "/appstore/editorial/category": { + "/burberry/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", + "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": "Apple device catalog", - "enum": [ - "iphone", - "ipad", - "mac", - "vision", - "watch", - "tv" - ], + "description": "Site-relative category path -- see burberry-categories", "in": "query", - "name": "device", + "name": "category", "required": true, - "type": "string" + "type": "string", + "x-example": "/l/womens-clothing/new-arrivals/" }, { - "description": "Numeric App Store editorial page ID, discovered from appstore_editorial (same device)", + "default": 0, + "description": "Zero-based result offset, in increments of 20", "in": "query", - "name": "category_id", - "required": true, - "type": "string", - "x-example": "6503709728" + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" }, { - "description": "Two-letter storefront country code", + "default": "default", + "description": "Sort order", + "enum": [ + "default", + "price_asc", + "price_desc", + "newest" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "sort", + "type": "string" }, { - "description": "Result language tag", + "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": "lang", + "name": "facets", "type": "string", - "x-example": "en-us" + "x-example": "benefit:bags" } ], "produces": [ @@ -205922,29 +234792,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.editorialResponseDoc" + "$ref": "#/definitions/burberry.categoryResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Category page 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" } @@ -205955,61 +234825,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an App Store category-scoped editorial page", + "summary": "Browse a Burberry category", "tags": [ - "AppStore" + "Burberry" ] } }, - "/appstore/list": { + "/burberry/product": { "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": "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": "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", + "description": "Site-relative product path, from a search or category result's url field", "in": "query", - "name": "lang", + "name": "url", + "required": true, "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" + "x-example": "/check-cashmere-cardigan-p81336111" } ], "produces": [ @@ -206019,23 +234855,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.listResultsResponseDoc" + "$ref": "#/definitions/burberry.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" } @@ -206046,41 +234888,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store collection rankings", + "summary": "Get a Burberry product", "tags": [ - "AppStore" + "Burberry" ] } }, - "/appstore/privacy/{id}": { + "/burberry/related": { "get": { "consumes": [ "application/json" ], - "description": "Returns the app privacy cards shown on the App Store page, including data categories and purposes.", - "operationId": "appstore-privacy", + "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": "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": "Site-relative product path, from a search, category, or product result's url field", "in": "query", - "name": "lang", + "name": "url", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "/check-cashmere-cardigan-p81336111" } ], "produces": [ @@ -206090,29 +234918,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.privacyResponseDoc" + "$ref": "#/definitions/burberry.relatedResponseDoc" } }, "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" } @@ -206123,47 +234945,56 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store privacy disclosures", + "summary": "Get related Burberry products", "tags": [ - "AppStore" + "Burberry" ] } }, - "/appstore/ratings": { + "/burberry/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns total ratings count and the 1-5 star histogram shown on the App Store product page.", - "operationId": "appstore-ratings", + "description": "Searches Burberry's product catalog by keyword. Returns normalized 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": "App Store numeric track ID (digits only)", + "description": "Search keyword", "in": "query", - "name": "id", + "name": "query", + "required": true, "type": "string", - "x-example": "553834731" + "x-example": "trench" }, { - "description": "App Store bundle ID", + "default": 0, + "description": "Zero-based result offset, in increments of 20", "in": "query", - "name": "app_id", - "type": "string", - "x-example": "com.midasplayer.apps.candycrushsaga" + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" }, { - "description": "Two-letter storefront country code", + "default": "default", + "description": "Sort order", + "enum": [ + "default", + "price_asc", + "price_desc", + "newest" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "sort", + "type": "string" }, { - "description": "Result language tag", + "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": "lang", + "name": "facets", "type": "string", - "x-example": "en-us" + "x-example": "benefit:bags" } ], "produces": [ @@ -206173,29 +235004,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.ratingsResponseDoc" + "$ref": "#/definitions/burberry.searchResponseDoc" } }, "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" } @@ -206206,65 +235031,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store ratings histogram", + "summary": "Search Burberry products", "tags": [ - "AppStore" + "Burberry" ] } }, - "/appstore/reviews": { + "/burberry/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of customer reviews for an app. Provide either `id` (numeric track ID) or `app_id` (bundle ID).", - "operationId": "appstore-reviews", + "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": "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", + "description": "Partial search query", "in": "query", - "name": "lang", + "name": "query", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "trench" } ], "produces": [ @@ -206274,29 +235061,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.reviewsResponseDoc" + "$ref": "#/definitions/burberry.suggestResponseDoc" } }, "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", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -206307,74 +235088,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store reviews", + "summary": "Get Burberry search-box suggestions", "tags": [ - "AppStore" + "Burberry" ] } }, - "/appstore/search": { + "/burgerking/availability": { "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", + "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": "Search term", + "description": "Burger King's numeric store id, from /burgerking/locations", "in": "query", - "name": "term", + "name": "store_id", "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" + "x-example": "17871" }, { - "description": "Result language tag", + "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", "in": "query", - "name": "lang", + "name": "market", "type": "string", - "x-example": "en-us" - }, - { - "default": false, - "description": "Return only app IDs", - "in": "query", - "name": "ids_only", - "type": "boolean" + "x-example": "US" }, { - "default": "phone", - "description": "App Store catalog to search: phone, pad, mac", - "enum": [ - "phone", - "pad", - "mac" - ], + "description": "Include a multi-day forward schedule per channel (default false)", "in": "query", - "name": "platform", - "type": "string" + "name": "forecast", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -206384,23 +235132,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.searchResultsResponseDoc" + "$ref": "#/definitions/burgerking.availabilityResponseDoc" } }, "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" } @@ -206411,47 +235165,70 @@ "ApiKeyAuth": [] } ], - "summary": "Search the App Store", + "summary": "Get one Burger King restaurant's real-time fulfillment status", "tags": [ - "AppStore" + "Burger King" ] } }, - "/appstore/similar": { + "/burgerking/locations": { "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 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": "App Store numeric track ID (digits only)", + "description": "Search center latitude", "in": "query", - "name": "id", - "type": "string", - "x-example": "553834731" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7128 }, { - "description": "App Store bundle ID", + "description": "Search center longitude", "in": "query", - "name": "app_id", - "type": "string", - "x-example": "com.midasplayer.apps.candycrushsaga" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 }, { - "description": "Two-letter storefront country code", + "description": "Search radius in meters, 1-50000 (default 8000)", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "radius", + "type": "integer", + "x-example": 8000 }, { - "description": "Result language tag", + "description": "Maximum restaurants to return, 1-50 (default 20)", "in": "query", - "name": "lang", + "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": "en-us" + "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": [ @@ -206461,29 +235238,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.similarResponseDoc" + "$ref": "#/definitions/burgerking.locationsResponseDoc" } }, "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", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -206494,34 +235271,34 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve \"You Might Also Like\" apps", + "summary": "Find Burger King restaurants near a location", "tags": [ - "AppStore" + "Burger King" ] } }, - "/appstore/suggest/{term}": { + "/burgerking/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns suggested search terms for the given partial keyword.", - "operationId": "appstore-suggest", + "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": "Partial search term", - "in": "path", - "name": "term", + "description": "Burger King's numeric store id, from /burgerking/locations", + "in": "query", + "name": "store_id", "required": true, "type": "string", - "x-example": "panda" + "x-example": "17871" }, { - "description": "Two-letter storefront country code", + "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", "in": "query", - "name": "country", + "name": "market", "type": "string", - "x-example": "us" + "x-example": "US" } ], "produces": [ @@ -206531,23 +235308,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.suggestResponseDoc" + "$ref": "#/definitions/burgerking.menuResponseDoc" } }, "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" } @@ -206558,41 +235341,42 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store search suggestions", + "summary": "Get one Burger King restaurant's full priced menu", "tags": [ - "AppStore" + "Burger King" ] } }, - "/appstore/version-history/{id}": { + "/burgerking/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns the version history entries shown in the App Store \"What's New\" section.", - "operationId": "appstore-version-history", + "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": "App Store numeric track ID (digits only)", - "in": "path", - "name": "id", + "description": "Burger King's numeric store id, from /burgerking/locations", + "in": "query", + "name": "store_id", "required": true, "type": "string", - "x-example": "553834731" + "x-example": "17871" }, { - "description": "Two-letter storefront country code", + "description": "The item, combo, or picker id, from /burgerking/menu", "in": "query", - "name": "country", + "name": "item_id", + "required": true, "type": "string", - "x-example": "us" + "x-example": "item_26" }, { - "description": "Result language tag", + "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", "in": "query", - "name": "lang", + "name": "market", "type": "string", - "x-example": "en-us" + "x-example": "US" } ], "produces": [ @@ -206602,29 +235386,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.versionHistoryResponseDoc" + "$ref": "#/definitions/burgerking.productResponseDoc" } }, "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", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -206635,26 +235419,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store version history", + "summary": "Get one Burger King item, combo, or picker's full detail and customization tree", "tags": [ - "AppStore" + "Burger King" ] } }, - "/arbys/categories": { + "/businessinsider/article": { "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 public Business Insider article metadata and body paragraphs from a canonical article URL.", + "operationId": "businessinsider-article", "parameters": [ { - "description": "Optional. Store id to read the catalog from, default 0 (Arby's priceless national reference catalog).", + "description": "Canonical Business Insider article URL", "in": "query", - "name": "store_id", - "type": "integer", - "x-example": 0 + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.businessinsider.com/markets/example-2026-09-21" } ], "produces": [ @@ -206664,7 +235446,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/arbys.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -206673,8 +235455,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -206691,33 +235473,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Arby's menu categories", + "summary": "Get Business Insider article content", "tags": [ - "Arbys" + "Business Insider" ] } }, - "/arbys/directory": { + "/businessinsider/author": { "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 one Business Insider author's public profile: name, job title, bio, social accounts, and their recent articles.", + "operationId": "businessinsider-author", "parameters": [ { - "description": "Optional. Two-letter US state abbreviation. Omit to list every state.", + "description": "Author slug", "in": "query", - "name": "state", + "name": "slug", "type": "string", - "x-example": "OH" + "x-example": "peter-kafka" }, { - "description": "Optional. City name, requires state. Omit to list every city in the state.", + "description": "Canonical businessinsider.com/author/ URL; alternative to slug", "in": "query", - "name": "city", + "name": "url", "type": "string", - "x-example": "Youngstown" + "x-example": "https://www.businessinsider.com/author/peter-kafka" } ], "produces": [ @@ -206727,7 +235506,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/arbys.directoryResponseDoc" + "$ref": "#/definitions/publicnews.businessInsiderAuthorResponseDoc" } }, "400": { @@ -206736,8 +235515,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -206754,27 +235533,35 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Arby's US store directory by state and city", + "summary": "Get a Business Insider author profile", "tags": [ - "Arbys" + "Business Insider" ] } }, - "/arbys/location": { + "/businessinsider/headlines": { "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 fresh headlines from one public Business Insider section.", + "operationId": "businessinsider-headlines", "parameters": [ { - "description": "A real Arby's store id, e.g. one returned by GET /arbys/locations", + "description": "Business Insider section slug", + "enum": [ + "business", + "markets", + "technology", + "politics", + "strategy", + "finance", + "science", + "lifestyle", + "reviews" + ], "in": "query", - "name": "store_id", + "name": "section", "required": true, - "type": "integer", - "x-example": 8725 + "type": "string", + "x-example": "business" } ], "produces": [ @@ -206784,7 +235571,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/arbys.locationResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -206793,18 +235580,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": { @@ -206817,58 +235592,16 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Arby's restaurant by store id", + "summary": "Get Business Insider section headlines", "tags": [ - "Arbys" + "Business Insider" ] } }, - "/arbys/locations": { + "/businessinsider/news": { "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 - } - ], + "description": "Returns fresh Business Insider stories from the public RSS feed.", + "operationId": "businessinsider-news", "produces": [ "application/json" ], @@ -206876,19 +235609,7 @@ "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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -206903,36 +235624,16 @@ "ApiKeyAuth": [] } ], - "summary": "Find Arby's restaurants near a coordinate", + "summary": "Get Business Insider top stories", "tags": [ - "Arbys" + "Business Insider" ] } }, - "/arbys/menu": { + "/businessinsider/sections": { "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 - } - ], + "description": "Returns the public Business Insider editorial section inventory.", + "operationId": "businessinsider-sections", "produces": [ "application/json" ], @@ -206940,31 +235641,7 @@ "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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -206973,24 +235650,24 @@ "ApiKeyAuth": [] } ], - "summary": "List one Arby's menu category's items with full nutrition and price", + "summary": "Get Business Insider sections", "tags": [ - "Arbys" + "Business Insider" ] } }, - "/arstechnica/article": { + "/businessstandard/article": { "get": { - "description": "Returns public Ars Technica article metadata and body paragraphs from a canonical article URL. The service uses the configured production browser fleet when ordinary HTTP transport encounters Ars Technica's bot-verification challenge; it does not bypass authentication or access controls.", - "operationId": "arstechnica-article", + "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": "Canonical Ars Technica article URL", + "description": "Canonical Business Standard article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://arstechnica.com/gadgets/2026/09/example-story/" + "x-example": "https://www.business-standard.com/companies/news/example-article-slug-126092401169_1.html" } ], "produces": [ @@ -207009,6 +235686,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -207027,24 +235710,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Ars Technica article content", + "summary": "Get Business Standard article content", "tags": [ - "Ars Technica" + "Business Standard" ] } }, - "/arstechnica/author": { + "/businessstandard/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 uses the configured production browser fleet when ordinary HTTP transport encounters Ars Technica's bot-verification challenge; it does not bypass authentication or access controls.", - "operationId": "arstechnica-author", + "description": "Returns a Business Standard author's byline metadata, biography, social links, and recent stories from a canonical author profile URL.", + "operationId": "businessstandard-author", "parameters": [ { - "description": "Canonical Ars Technica contributor URL", + "description": "Canonical Business Standard author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://arstechnica.com/author/example-writer/" + "x-example": "https://www.business-standard.com/author/sharleen-dsouza" } ], "produces": [ @@ -207054,7 +235737,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.arstechnicaAuthorResponseDoc" + "$ref": "#/definitions/publicnews.businessstandardAuthorResponseDoc" } }, "400": { @@ -207081,40 +235764,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Ars Technica contributor profile", + "summary": "Get a Business Standard author profile", "tags": [ - "Ars Technica" + "Business Standard" ] } }, - "/arstechnica/headlines": { + "/businessstandard/headlines": { "get": { - "description": "Returns fresh headlines from one Ars Technica section's public RSS feed.", - "operationId": "arstechnica-headlines", + "description": "Returns fresh headlines from one public Business Standard section.", + "operationId": "businessstandard-headlines", "parameters": [ { - "description": "Ars Technica section slug", + "description": "Business Standard section slug", "enum": [ - "ai", - "apple", - "cars", - "culture", - "features", - "gadgets", - "gaming", + "latest-news", + "companies", + "economy", + "finance", + "opinion", + "markets", + "technology", + "specials", + "budget", + "elections", + "politics", + "education", "health", - "information-technology", - "reviews", - "science", - "security", - "space", - "staff", - "tech-policy" + "sports", + "entertainment", + "lifestyle", + "india-news", + "industry", + "cricket", + "book", + "world-news", + "external-affairs-defence-security", + "immigration", + "blueprint-defence-magazine", + "todays-paper" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "latest-news" } ], "produces": [ @@ -207145,16 +235839,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Ars Technica section headlines", + "summary": "Get Business Standard section headlines", "tags": [ - "Ars Technica" + "Business Standard" ] } }, - "/arstechnica/news": { + "/businessstandard/news": { "get": { - "description": "Returns fresh Ars Technica stories from its public RSS feed.", - "operationId": "arstechnica-news", + "description": "Returns fresh Business Standard (business-standard.com) top stories from its public home-page feed.", + "operationId": "businessstandard-news", "produces": [ "application/json" ], @@ -207183,16 +235877,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Ars Technica top stories", + "summary": "Get Business Standard top stories", "tags": [ - "Ars Technica" + "Business Standard" ] } }, - "/arstechnica/sections": { + "/businessstandard/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", + "description": "Returns the public Business Standard section inventory used by the headlines endpoint.", + "operationId": "businessstandard-sections", "produces": [ "application/json" ], @@ -207209,68 +235903,27 @@ "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. Credential-free public catalog data from api.audible.com.", - "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", + "summary": "Get Business Standard sections", "tags": [ - "Audible" + "Business Standard" ] } }, - "/audible/category/{id}": { + "/capterra/product": { "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. Credential-free public catalog data from api.audible.com.", - "operationId": "audible-category", + "description": "Returns a normalized Capterra product profile: name, description, category, and aggregate rating. Credential-free public Capterra data, rendered from the product page through proxied browser renderers.", + "operationId": "capterra-product", "parameters": [ { - "description": "Audible category id from GET /audible/categories", - "in": "path", - "name": "id", + "description": "Capterra product id (the numeric id in a /p/{id}/{slug}/ URL)", + "in": "query", + "name": "product_id", "required": true, "type": "string", - "x-example": "18580606011" + "x-example": "135003" } ], "produces": [ @@ -207280,7 +235933,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.categoryResponseDoc" + "$ref": "#/definitions/capterra.productResponseDoc" } }, "400": { @@ -207313,104 +235966,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Audible category node", + "summary": "Get a Capterra product", "tags": [ - "Audible" + "Capterra" ] } }, - "/audible/charts": { + "/capterra/product/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of an Audible chart — a ranked list with real chart position, price, and rating that has no equivalent on api.audible.com's public JSON API. This is an HTML scrape of audible.com/charts, a different, less stable source class than the rest of this family, though 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 a page of normalized Capterra reviews (author, headline, rating) plus the product's aggregate rating. Credential-free public Capterra data, rendered from the reviews page through proxied browser renderers.", + "operationId": "capterra-reviews", "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", + "description": "Capterra product id (the numeric id in a /p/{id}/{slug}/ URL)", "in": "query", - "name": "originals_only", - "type": "boolean" + "name": "product_id", + "required": true, + "type": "string", + "x-example": "135003" }, { - "description": "1-based result page, default 1, 20 results per page", + "description": "Page number (default 1)", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -207420,7 +236003,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.chartsResponseDoc" + "$ref": "#/definitions/capterra.reviewsResponseDoc" } }, "400": { @@ -207429,57 +236012,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "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 public ranked author chart. This is a people-shaped HTML surface and exposes only rank, author identity, image metadata when available, and a canonical author URI; author detail remains outside the credential-free public surface.", - "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", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -207496,31 +236036,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Audible's top-author chart", + "summary": "Get Capterra product reviews", "tags": [ - "Audible" + "Capterra" ] } }, - "/audible/list/{list}": { + "/capterra/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one of Audible's hand-curated \"Popular Lists\" pages, normalized into its themed shelves (heading + ordered ASINs). This is an HTML scrape of a marketing/editorial page (audible.com), not api.audible.com's JSON API — 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 — its layout has no consistent structure to parse.", - "operationId": "audible-editorial-list", + "description": "Returns Capterra search-result products (id, name, url, description, rating). Credential-free public Capterra data, rendered from the search page through proxied browser renderers. 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": "Editorial list slug", - "enum": [ - "audiobooks", - "booktok", - "podcasts" - ], - "in": "path", - "name": "list", + "description": "Search query", + "in": "query", + "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "slack" } ], "produces": [ @@ -207530,7 +236066,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.editorialListResponseDoc" + "$ref": "#/definitions/capterra.searchResponseDoc" } }, "400": { @@ -207557,27 +236093,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible curated editorial list", + "summary": "Search Capterra products", "tags": [ - "Audible" + "Capterra" ] } }, - "/audible/product/{asin}": { + "/carmax/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Audible audiobook: description, authors, narrators, series, category ladders, publisher, release date, runtime, language, sample audio URL, rating (overall/performance/story), and public list price. Credential-free public catalog data from api.audible.com.", - "operationId": "audible-product", + "description": "Searches CarMax for used car listings, returning normalized 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. Credential-free public data sourced from CarMax's own mobile-app search API.", + "operationId": "carmax-search", "parameters": [ { - "description": "Audible ASIN", - "in": "path", - "name": "asin", - "required": true, + "description": "CarMax make, e.g. honda, Toyota, BMW (case-insensitive)", + "in": "query", + "name": "make", "type": "string", - "x-example": "B08G9PRS1K" + "x-example": "honda" + }, + { + "description": "CarMax model, e.g. civic (case-insensitive). Does not require make", + "in": "query", + "name": "model", + "type": "string", + "x-example": "civic" + }, + { + "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": 1 } ], "produces": [ @@ -207587,7 +236185,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.productResponseDoc" + "$ref": "#/definitions/carmax.searchResponseDoc" } }, "400": { @@ -207596,12 +236194,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -207620,47 +236212,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible audiobook", + "summary": "Search CarMax vehicle listings", "tags": [ - "Audible" + "CarMax" ] } }, - "/audible/product/{asin}/related": { + "/carmax/search/suggestions": { "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 upstream similarity. Credential-free public catalog data from api.audible.com.", - "operationId": "audible-product-related", + "description": "Returns autocomplete suggestions for a partial search term (make/model/trim), typo-tolerant by default. Credential-free public data sourced from CarMax's own mobile-app API.", + "operationId": "carmax-search-suggestions", "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" - ], + "description": "Free-text partial search term to get autocomplete suggestions for", "in": "query", - "name": "similarity_type", + "name": "search", "required": true, - "type": "string" + "type": "string", + "x-example": "civ" }, { - "description": "Max results, default 10, max 50", + "description": "Disable fuzzy/typo-tolerant matching -- require an exact prefix match. Defaults to false", "in": "query", - "name": "limit", - "type": "integer" + "name": "exact_match", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -207670,7 +236249,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.relatedResponseDoc" + "$ref": "#/definitions/carmax.searchSuggestionsResponseDoc" } }, "400": { @@ -207697,41 +236276,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Audible titles related to an audiobook", + "summary": "Get CarMax search autocomplete suggestions", "tags": [ - "Audible" + "CarMax" ] } }, - "/audible/product/{asin}/reviews": { + "/carmax/shop-by-brand": { "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). Credential-free public catalog data from api.audible.com.", - "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" - } - ], + "description": "Returns CarMax's full make taxonomy for browsing by brand: every make, a display image, and CarMax's own display order. Credential-free public data sourced from CarMax's own mobile-app API.", + "operationId": "carmax-shop-by-brand", "produces": [ "application/json" ], @@ -207739,13 +236296,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.reviewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/carmax.shopByBrandResponseDoc" } }, "500": { @@ -207766,27 +236317,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible audiobook's customer reviews", + "summary": "Get CarMax's \"shop by brand\" make taxonomy", "tags": [ - "Audible" + "CarMax" ] } }, - "/audible/products": { + "/carmax/store/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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. Credential-free public catalog data from api.audible.com.", - "operationId": "audible-products", + "description": "Returns a normalized CarMax store: name, full address, phone numbers, coordinates, opening hours, and store-type flags (car buying center, microstore). Credential-free public data sourced from CarMax's own server-rendered store page.", + "operationId": "carmax-store", "parameters": [ { - "description": "Comma-separated Audible ASINs, up to 50", - "in": "query", - "name": "asins", + "description": "CarMax store id, the numeric path segment of a /stores/{id} URL", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "B08G9PRS1K,B002V1OF70" + "x-example": "7124" } ], "produces": [ @@ -207796,7 +236347,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.productsResponseDoc" + "$ref": "#/definitions/carmax.StoreResponse" } }, "400": { @@ -207805,6 +236356,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -207823,61 +236380,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get multiple Audible audiobooks in one call", + "summary": "Get CarMax store (physical location) detail", "tags": [ - "Audible" + "CarMax" ] } }, - "/audible/search": { + "/carmax/stores": { "get": { "consumes": [ "application/json" ], - "description": "Searches Audible's audiobook catalog by keyword, title, author, narrator, or category id. At least one filter is required. Credential-free public catalog data from api.audible.com.", - "operationId": "audible-search", + "description": "Searches CarMax's physical store locations by ZIP code or free-text keyword, returning normalized stores with full address, every published phone number, opening hours, and (for a ZIP-based search) live driving distance in miles. Credential-free public data sourced from CarMax's own mobile-app store-locator API.", + "operationId": "carmax-stores", "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", + "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": "category_id", - "type": "string" + "name": "zip", + "type": "string", + "x-example": "90210" }, { - "description": "Zero-based result page, default 0", + "description": "Free-text match against store name or city", "in": "query", - "name": "page", - "type": "integer" + "name": "keyword", + "type": "string", + "x-example": "Richmond" }, { - "description": "Max results, default 10, max 50", + "description": "Maximum number of stores to return, defaults to 10, capped at 300", "in": "query", - "name": "limit", - "type": "integer" + "name": "take", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -207887,7 +236423,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.searchResponseDoc" + "$ref": "#/definitions/carmax.storeSearchResponseDoc" } }, "400": { @@ -207914,27 +236450,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search Audible's catalog", + "summary": "Search CarMax store (physical location) locations", "tags": [ - "Audible" + "CarMax" ] } }, - "/audible/series/{asin}": { + "/carmax/vehicle/{stock_number}": { "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}. Credential-free public catalog data from api.audible.com.", - "operationId": "audible-series", + "description": "Returns a normalized 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. Credential-free public data sourced primarily from CarMax's own mobile-app API, backfilled with the website's server-rendered page for accident/owner history and warranty terms the mobile API doesn't expose.", + "operationId": "carmax-vehicle", "parameters": [ { - "description": "Audible series ASIN, from a product's series[].asin field", + "description": "CarMax stock number, the numeric path segment of a /car/{stock_number} URL", "in": "path", - "name": "asin", + "name": "stock_number", "required": true, "type": "string", - "x-example": "B006W3V2B0" + "x-example": "28187774" + }, + { + "description": "Optional CarMax store id for pricing/transfer-fee display context. Defaults to a fixed CarMax store when omitted", + "in": "query", + "name": "store_id", + "type": "string", + "x-example": "7124" } ], "produces": [ @@ -207944,7 +236487,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.seriesResponseDoc" + "$ref": "#/definitions/carmax.VehicleResponse" } }, "400": { @@ -207977,27 +236520,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible series' ordered book list", + "summary": "Get CarMax vehicle listing detail", "tags": [ - "Audible" + "CarMax" ] } }, - "/autotrader/dealer/{id}": { + "/carmax/vehicle/{stock_number}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Autotrader dealer profile (name, phone, address, rating, website) plus a first page of the dealer's own current inventory as normalized vehicle summaries and the dealer's total listing count. Credential-free public data sourced from Autotrader's own server-rendered dealer profile page.", - "operationId": "autotrader-dealer", + "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. Credential-free public data sourced from CarMax's own mobile-app API.", + "operationId": "carmax-vehicle-recommendations", "parameters": [ { - "description": "Autotrader dealer/owner id, the numeric path segment of a /car-dealers/{id} URL", + "description": "CarMax stock number to find similar vehicles for, the numeric path segment of a /car/{stock_number} URL", "in": "path", - "name": "id", + "name": "stock_number", "required": true, "type": "string", - "x-example": "64141623" + "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": "store_id", + "required": true, + "type": "string", + "x-example": "7124" } ], "produces": [ @@ -208007,7 +236558,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/autotrader.DealerResponse" + "$ref": "#/definitions/carmax.vehicleRecommendationsResponseDoc" } }, "400": { @@ -208016,12 +236567,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -208040,27 +236585,20 @@ "ApiKeyAuth": [] } ], - "summary": "Get Autotrader dealer profile", + "summary": "Get CarMax \"similar vehicles\" recommendations for a listing", "tags": [ - "Autotrader" + "CarMax" ] } }, - "/autotrader/search": { + "/carsdotcom/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches Autotrader for new and used car listings, returning normalized vehicle summaries (make, model, trim, year, mileage, pricing, images) plus the total matching count. Credential-free public data sourced from Autotrader's own server-rendered search page.", - "operationId": "autotrader-search", + "description": "Searches Cars.com for new and used car listings, returning normalized vehicle summaries (make, model, trim, year, mileage, exterior color, drivetrain, fuel type, pricing, seller, images) plus the total matching count. Credential-free public data sourced directly from Cars.com's own public search API.", + "operationId": "carsdotcom-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", @@ -208076,104 +236614,20 @@ "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", + "description": "Listing condition. Allowed values: new, used, cpo, all", "enum": [ "new", "used", - "certified", - "3p_cert" + "cpo", + "all" ], "in": "query", - "name": "condition", + "name": "stock_type", "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", + "description": "1-indexed result page, defaults to 1. Cars.com returns 24 results per page", "in": "query", "name": "page", "type": "integer", @@ -208187,7 +236641,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/autotrader.searchResponseDoc" + "$ref": "#/definitions/carsdotcom.searchResponseDoc" } }, "400": { @@ -208214,27 +236668,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Autotrader vehicle listings", + "summary": "Search Cars.com vehicle listings", "tags": [ - "Autotrader" + "Cars.com" ] } }, - "/autotrader/vehicle/{id}": { + "/carsdotcom/vehicle/{listing_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized 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). Credential-free public data sourced from Autotrader's own server-rendered vehicle detail page.", - "operationId": "autotrader-vehicle", + "description": "Returns a normalized 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. Credential-free public data sourced directly from Cars.com's own public GraphQL API.", + "operationId": "carsdotcom-vehicle", "parameters": [ { - "description": "Autotrader listing id, the numeric path segment of a /cars-for-sale/vehicle/{id} URL", + "description": "Cars.com listing id (a UUID), the path segment of a /vehicledetail/{listing_id}/ URL", "in": "path", - "name": "id", + "name": "listing_id", "required": true, "type": "string", - "x-example": "754822172" + "x-example": "a6ea5d6f-0395-4f9d-94d5-724c4d7414de" } ], "produces": [ @@ -208244,7 +236698,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/autotrader.VehicleResponse" + "$ref": "#/definitions/carsdotcom.VehicleResponse" } }, "400": { @@ -208277,24 +236731,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Autotrader vehicle listing detail", + "summary": "Get Cars.com vehicle listing detail", "tags": [ - "Autotrader" + "Cars.com" ] } }, - "/axios/article": { + "/cbc/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", + "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": "Canonical www.axios.com article URL", + "description": "Canonical CBC News or CBC Sports story URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.axios.com/2026/09/19/google-safety-incidents-testing-hacks" + "x-example": "https://www.cbc.ca/news/politics/does-calling-an-early-election-work-9.7355667" } ], "produces": [ @@ -208304,7 +236758,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/axios.articleResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -208313,24 +236767,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": { @@ -208343,16 +236785,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get Axios article content", + "summary": "Get CBC News article content", "tags": [ - "Axios" + "CBC News" ] } }, - "/axios/categories": { + "/cbc/author": { "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 one CBC journalist's public profile: name, job title, biography, photo, profile links, and their most recent articles.", + "operationId": "cbc-author", + "parameters": [ + { + "description": "Author slug, e.g. darren-major-1.4462710", + "in": "query", + "name": "slug", + "type": "string", + "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": [ "application/json" ], @@ -208360,11 +236818,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/axios.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.cbcAuthorResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -208381,24 +236845,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get Axios topic navigation", + "summary": "Get a CBC journalist profile", "tags": [ - "Axios" + "CBC News" ] } }, - "/axios/headlines": { + "/cbc/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", + "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": "Axios topic slug or topic/subtopic path", + "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": "topic", + "name": "section", "required": true, "type": "string", - "x-example": "technology" + "x-example": "world" } ], "produces": [ @@ -208408,7 +236909,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/axios.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -208417,18 +236918,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": { @@ -208441,19 +236930,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Axios topic headlines", + "summary": "Get CBC News section headlines", "tags": [ - "Axios" + "CBC News" ] } }, - "/balenciaga/categories": { + "/cbc/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Balenciaga's live storefront navigation/category taxonomy. Each categories[].path is the exact value accepted by balenciaga-category's path parameter.", - "operationId": "balenciaga-categories", + "description": "Returns fresh CBC News top stories from CBC's public Top Stories RSS feed. Live-updates pages are omitted.", + "operationId": "cbc-news", "produces": [ "application/json" ], @@ -208461,7 +236947,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -208482,60 +236968,50 @@ "ApiKeyAuth": [] } ], - "summary": "List Balenciaga categories", + "summary": "Get CBC News top stories", "tags": [ - "Balenciaga" + "CBC News" ] } }, - "/balenciaga/category": { + "/cbc/sections": { "get": { - "consumes": [ + "description": "Returns the CBC News sections accepted by the headlines endpoint: national desks, regional newsrooms, and CBC Sports feeds.", + "operationId": "cbc-sections", + "produces": [ "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 - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Products per page, defaults to 16, maximum 48", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 16 - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get CBC News sections", + "tags": [ + "CBC News" + ] + } + }, + "/cbr/article": { + "get": { + "description": "Returns public CBR article metadata and body paragraphs from a canonical article URL.", + "operationId": "cbr-article", + "parameters": [ { - "description": "Comma-separated exact facet filters; repeat a field for OR values, for example akeneo_macroColor:BLACK,akeneo_macroColor:WHITE", + "description": "Canonical CBR article URL", "in": "query", - "name": "filters", + "name": "url", + "required": true, "type": "string", - "x-example": "akeneo_macroColor:BLACK" + "x-example": "https://www.cbr.com/star-trek-2-release-date-confirmed-cover-reveal/" } ], "produces": [ @@ -208545,7 +237021,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.listingResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -208578,27 +237054,24 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Balenciaga category", + "summary": "Get CBR article content", "tags": [ - "Balenciaga" + "CBR" ] } }, - "/balenciaga/product": { + "/cbr/author": { "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 a CBR author's byline metadata, biography, social links, and recent articles from a canonical author URL.", + "operationId": "cbr-author", "parameters": [ { - "description": "Product URL from a Balenciaga listing", + "description": "Canonical CBR author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "/en-en/hourglass-avenue-top-handle-bag-small-black-A007IH2ACT21000.html" + "x-example": "https://www.cbr.com/author/john-dodge/" } ], "produces": [ @@ -208608,7 +237081,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.productResponseDoc" + "$ref": "#/definitions/publicnews.cbrAuthorResponseDoc" } }, "400": { @@ -208623,12 +237096,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -208641,27 +237108,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Balenciaga product", + "summary": "Get a CBR author profile", "tags": [ - "Balenciaga" + "CBR" ] } }, - "/balenciaga/product/variants": { + "/cbr/headlines": { "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 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": "Balenciaga product URL or Product-Variation URL", + "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": "url", + "name": "section", "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": "movies" } ], "produces": [ @@ -208671,7 +237165,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.productVariantsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -208680,12 +237174,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -208704,55 +237192,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Balenciaga product variations", + "summary": "Get CBR section headlines", "tags": [ - "Balenciaga" + "CBR" ] } }, - "/balenciaga/search": { + "/cbr/news": { "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" - } - ], + "description": "Returns fresh CBR top stories from its public RSS feed.", + "operationId": "cbr-news", "produces": [ "application/json" ], @@ -208760,19 +237209,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/publicnews.newsResponseDoc" } }, "429": { @@ -208793,19 +237230,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Balenciaga products", + "summary": "Get CBR top stories", "tags": [ - "Balenciaga" + "CBR" ] } }, - "/balenciaga/store-countries": { + "/cbr/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every country code accepted by balenciaga-stores, discovered from Balenciaga's own public store-locator form.", - "operationId": "balenciaga-store-countries", + "description": "Returns the public CBR RSS section inventory used by the headlines endpoint.", + "operationId": "cbr-sections", "produces": [ "application/json" ], @@ -208813,7 +237247,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.storeCountriesResponseDoc" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -208821,12 +237255,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -208834,61 +237262,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Balenciaga store-locator countries", + "summary": "Get CBR RSS sections", "tags": [ - "Balenciaga" + "CBR" ] } }, - "/balenciaga/stores": { + "/cbsnews/article": { "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 public CBS News article metadata and body paragraphs from a canonical article URL.", + "operationId": "cbsnews-article", "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" - ], + "description": "Canonical CBS News article URL", "in": "query", - "name": "country", + "name": "url", "required": true, "type": "string", - "x-example": "US" + "x-example": "https://www.cbsnews.com/news/example-article-slug/" } ], "produces": [ @@ -208898,7 +237289,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.storesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -208907,8 +237298,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -208925,24 +237316,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Balenciaga stores", + "summary": "Get CBS News article content", "tags": [ - "Balenciaga" + "CBS News" ] } }, - "/barrons/article": { + "/cbsnews/author": { "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 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": "Canonical Barron's article URL", + "description": "Canonical cbsnews.com/team/ author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.barrons.com/articles/nvidia-stock-price-meta-ai-chips-rally-11911927" + "x-example": "https://www.cbsnews.com/team/margaret-brennan/" } ], "produces": [ @@ -208952,7 +237343,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/barrons.articleResponseDoc" + "$ref": "#/definitions/publicnews.cbsNewsAuthorResponseDoc" } }, "400": { @@ -208961,24 +237352,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": { @@ -208991,32 +237370,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Barron's article's content", + "summary": "Get a CBS News author profile", "tags": [ - "Barrons" + "CBS News" ] } }, - "/barrons/headlines": { + "/cbsnews/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", + "description": "Returns fresh headlines from one public CBS News RSS section.", + "operationId": "cbsnews-headlines", "parameters": [ { - "description": "Barron's topic slug from /barrons/topics", + "description": "CBS News RSS section slug", + "enum": [ + "main", + "us", + "world", + "politics", + "moneywatch", + "health", + "entertainment", + "science", + "technology", + "space" + ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "technology" - }, - { - "description": "Results page", - "in": "query", - "maximum": 200, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "main" } ], "produces": [ @@ -209026,7 +237409,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/barrons.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -209035,18 +237418,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": { @@ -209059,16 +237430,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Barron's topic", + "summary": "Get CBS News section headlines", "tags": [ - "Barrons" + "CBS News" ] } }, - "/barrons/news": { + "/cbsnews/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", + "description": "Returns fresh CBS News top stories from its public RSS feed.", + "operationId": "cbsnews-news", "produces": [ "application/json" ], @@ -209076,7 +237447,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/barrons.newsResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -209097,16 +237468,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest Barron's stories", + "summary": "Get CBS News top stories", "tags": [ - "Barrons" + "CBS News" ] } }, - "/barrons/topics": { + "/cbsnews/sections": { "get": { - "description": "Lists every Barron's editorial topic accepted by /barrons/headlines' section parameter, with each topic's slug, display name, and landing-page URL.", - "operationId": "barrons-topics", + "description": "Returns the live-verified public CBS News RSS section inventory used by cbsnews-headlines.", + "operationId": "cbsnews-sections", "produces": [ "application/json" ], @@ -209114,19 +237485,7 @@ "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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -209135,27 +237494,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Barron's topics", + "summary": "Get CBS News sections", "tags": [ - "Barrons" + "CBS News" ] } }, - "/bbb/business": { + "/cbssports/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a normalized 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. Credential-free public Better Business Bureau data.", - "operationId": "bbb-business", + "description": "Returns public CBS Sports article metadata and body paragraphs from a canonical cbssports.com//news/ URL.", + "operationId": "cbssports-article", "parameters": [ { - "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", + "description": "Canonical CBS Sports article 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.cbssports.com/college-football/news/president-trump-attending-texas-tennessee/" } ], "produces": [ @@ -209165,7 +237521,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.businessResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -209180,8 +237536,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -209198,27 +237554,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau business profile", + "summary": "Get CBS Sports article content", "tags": [ - "BBB" + "CBS Sports" ] } }, - "/bbb/business/complaints": { + "/cbssports/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a business's BBB complaint history: total complaint count, complaints closed in the last 12 months, and per-complaint detail (date, type, status, narrative text, and any business response / customer answer thread). A business with no filed complaints returns total_complaints 0 and an empty complaints list -- this is a normal result, not an error. Credential-free public Better Business Bureau data.", - "operationId": "bbb-business-complaints", + "description": "Returns one CBS Sports writer's public profile: name, title, headshot, bio, X/Twitter link, and their recent articles.", + "operationId": "cbssports-author", "parameters": [ { - "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", + "description": "Writer slug, e.g. david-cobb", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "david-cobb" + }, + { + "description": "Canonical cbssports.com/writers// URL; alternative to slug", "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.cbssports.com/writers/david-cobb/" } ], "produces": [ @@ -209228,7 +237587,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.complaintsResponseDoc" + "$ref": "#/definitions/publicnews.cbsSportsAuthorResponseDoc" } }, "400": { @@ -209243,8 +237602,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -209261,27 +237620,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau business's complaint history", + "summary": "Get a CBS Sports writer profile", "tags": [ - "BBB" + "CBS Sports" ] } }, - "/bbb/business/more-info": { + "/cbssports/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a business's full per-factor \"Reasons for Rating\" list and full service-area list, from the separate BBB business profile /more-info sub-page. The bbb-business endpoint's own rating_reasons field is read from the main profile page and typically holds only one generic boilerplate bullet regardless of actual rating; this endpoint fetches 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. Credential-free public Better Business Bureau data.", - "operationId": "bbb-business-more-info", + "description": "Returns fresh headlines from one public CBS Sports per-sport RSS feed.", + "operationId": "cbssports-headlines", "parameters": [ { - "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", + "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": "url", + "name": "section", "required": true, "type": "string", - "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" + "x-example": "nfl" } ], "produces": [ @@ -209291,7 +237670,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.moreInfoResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -209300,14 +237679,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" } @@ -209324,35 +237697,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau business's full rating reasons and service area", + "summary": "Get CBS Sports section headlines", "tags": [ - "BBB" + "CBS Sports" ] } }, - "/bbb/business/reviews": { + "/cbssports/news": { "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. Credential-free public Better Business Bureau data. Unlike the other bbb-business-* endpoints, this one is fetched with browser impersonation rather than plain direct HTTP -- see the family's maintenance note for why.", - "operationId": "bbb-business-reviews", - "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": "Result page (10 per page), default 1", - "in": "query", - "name": "page", - "type": "integer" - } - ], + "description": "Returns fresh CBS Sports top stories from its public headlines RSS feed.", + "operationId": "cbssports-news", "produces": [ "application/json" ], @@ -209360,17 +237714,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.reviewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -209387,35 +237735,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau business's customer reviews", + "summary": "Get CBS Sports top stories", "tags": [ - "BBB" + "CBS Sports" ] } }, - "/bbb/category": { + "/cbssports/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Browses bbb.org businesses by category and location directly, without a free-text search query. Returns the same normalized business-result shape as bbb-search. Credential-free public Better Business Bureau data.", - "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": "Returns the live-verified public CBS Sports per-sport RSS feed inventory used by cbssports-headlines.", + "operationId": "cbssports-sections", "produces": [ "application/json" ], @@ -209423,25 +237752,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.categoryResponseDoc" - } - }, - "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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -209450,119 +237761,40 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Better Business Bureau category", + "summary": "Get CBS Sports sections", "tags": [ - "BBB" + "CBS Sports" ] } }, - "/bbb/scamtracker/search": { + "/chewy/brands": { "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. Omit every filter to browse the most-recent-first feed. Credential-free public Better Business Bureau data. 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", + "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 (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", + "description": "Page number, 1-based (default 1).", "in": "query", - "name": "min_dollars_lost", + "name": "page", "type": "integer", - "x-example": 500000 + "x-example": 1 }, { - "description": "Optional maximum reported dollar loss. Must be set together with min_dollars_lost", + "description": "Brands per page, 1 to 500 (default 100).", "in": "query", - "name": "max_dollars_lost", + "name": "limit", "type": "integer", - "x-example": 1000000 + "x-example": 100 }, { - "description": "Result page (10 per page), default 1", + "description": "Return only the brand with this exact name, case-insensitive. Exact match, not a search.", "in": "query", - "name": "page", - "type": "integer" + "name": "name", + "type": "string", + "x-example": "ACANA" } ], "produces": [ @@ -209572,7 +237804,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbscamtracker.searchResponseDoc" + "$ref": "#/definitions/chewy.brandsResponseDoc" } }, "400": { @@ -209581,8 +237813,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -209599,31 +237831,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Better Business Bureau Scam Tracker reports", + "summary": "List Chewy's brand directory", "tags": [ - "BBB" + "Chewy" ] } }, - "/bbb/scamtracker/state-stats": { + "/chewy/categories": { "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. This calls the same JSON API the BBB Scam Tracker heatmap dashboard's own frontend uses -- not an HTML scrape. Credential-free public Better Business Bureau data.", - "operationId": "bbb-scamtracker-state-stats", + "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": "Aggregation window, default 90", - "enum": [ - "30", - "90", - "365", - "all" - ], + "description": "Chewy category group id to expand, e.g. 332 for Dog Food. Omit for the full top-level department tree.", "in": "query", - "name": "period", - "type": "string" + "name": "group_id", + "type": "string", + "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": [ @@ -209633,7 +237867,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbscamtracker.stateStatsResponseDoc" + "$ref": "#/definitions/chewy.categoriesResponseDoc" } }, "400": { @@ -209642,8 +237876,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -209660,27 +237894,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get Better Business Bureau Scam Tracker state/province aggregate stats", + "summary": "Browse Chewy's category taxonomy tree", "tags": [ - "BBB" + "Chewy" ] } }, - "/bbb/scamtracker/{id}": { + "/chewy/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized 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. Credential-free public Better Business Bureau data.", - "operationId": "bbb-scamtracker-detail", + "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": "BBB Scam Tracker report id, from a bbb-scamtracker-search result's id or url", - "in": "path", - "name": "id", + "description": "Chewy's numeric category id, e.g. \\", + "in": "query", + "name": "group_id", "required": true, "type": "string", - "x-example": "1397968" + "x-example": "294" + }, + { + "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" + }, + { + "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": [ @@ -209690,7 +237965,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbscamtracker.detailResponseDoc" + "$ref": "#/definitions/chewy.categoryResponseDoc" } }, "400": { @@ -209705,8 +237980,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -209723,41 +237998,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau Scam Tracker report", + "summary": "Browse a Chewy category listing", "tags": [ - "BBB" + "Chewy" ] } }, - "/bbb/search": { + "/chewy/facets": { "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. Credential-free public Better Business Bureau data.", - "operationId": "bbb-search", + "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": "Business name or category/service keyword", + "description": "Chewy's numeric category id, e.g. \\", "in": "query", - "name": "query", - "required": true, + "name": "group_id", "type": "string", - "x-example": "plumber" + "x-example": "294" }, { - "description": "City and state (e.g. 'Austin, TX') or a ZIP code", + "description": "Free-text search keywords to return refinement options for, e.g. \\", "in": "query", - "name": "location", - "required": true, + "name": "q", "type": "string", - "x-example": "Austin, TX" + "x-example": "salmon dog food" }, { - "description": "Result page, default 1", + "collectionFormat": "csv", + "description": "Repeatable, up to 10. Each value is \\", "in": "query", - "name": "page", - "type": "integer" + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "brand_facet:ACANA" } ], "produces": [ @@ -209767,7 +238045,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.searchResponseDoc" + "$ref": "#/definitions/chewy.facetsResponseDoc" } }, "400": { @@ -209776,8 +238054,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" } @@ -209794,24 +238078,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Better Business Bureau businesses", + "summary": "List a Chewy category or search's refinement options", "tags": [ - "BBB" + "Chewy" ] } }, - "/bbc/article": { + "/chewy/gtin-lookup": { "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", + "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 BBC News 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.bbc.co.uk/news/articles/cd68q3wynnqo" + "x-example": "192268541316" } ], "produces": [ @@ -209821,7 +238108,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.articleResponseDoc" + "$ref": "#/definitions/chewy.gtinLookupResponseDoc" } }, "400": { @@ -209830,12 +238117,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -209854,24 +238135,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get BBC News article content", + "summary": "Resolve Chewy GTIN/UPC barcodes to part numbers", "tags": [ - "BBC" + "Chewy" ] } }, - "/bbc/author": { + "/chewy/inventory": { "get": { - "description": "Returns a BBC News correspondent's public profile: name, short bio, and their recent articles.", - "operationId": "bbc-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": "Canonical BBC News correspondent URL", + "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.bbc.co.uk/news/correspondents/jonnydymond" + "x-example": "101143,52448" } ], "produces": [ @@ -209881,7 +238165,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.authorResponseDoc" + "$ref": "#/definitions/chewy.inventoryResponseDoc" } }, "400": { @@ -209914,33 +238198,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a BBC News correspondent's profile", + "summary": "Look up live warehouse inventory for a batch of Chewy products", "tags": [ - "BBC" + "Chewy" ] } }, - "/bbc/headlines": { + "/chewy/item-attributes": { "get": { - "description": "Returns fresh headlines from a public BBC News RSS section. section defaults to world.", - "operationId": "bbc-headlines", + "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": "BBC News RSS section, defaults to world", + "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": [ - "all", - "world", - "uk", - "politics", - "business", - "health", - "science_and_environment", - "technology", - "entertainment_and_arts" + "DEFINING", + "STANDARD", + "EXTENDED", + "HIDDEN" ], "in": "query", - "name": "section", - "type": "string" + "name": "group", + "type": "string", + "x-example": "STANDARD" } ], "produces": [ @@ -209950,7 +238241,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.headlinesResponseDoc" + "$ref": "#/definitions/chewy.itemAttributesResponseDoc" } }, "400": { @@ -209983,24 +238274,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get BBC News section headlines", + "summary": "Look up a batch of Chewy products' structured attributes and handling flags", "tags": [ - "BBC" + "Chewy" ] } }, - "/bbc/live": { + "/chewy/product": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns one Chewy product's full normalized 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": "Canonical BBC News live URL", + "description": "Numeric id from a chewy.com PDP URL", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.bbc.co.uk/news/live/c6y8mjmnpxv0t" + "x-example": "185468" } ], "produces": [ @@ -210010,7 +238304,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.liveResponseDoc" + "$ref": "#/definitions/chewy.productResponseDoc" } }, "400": { @@ -210043,32 +238337,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get a BBC News live-page text snapshot", + "summary": "Get a Chewy product's detail", "tags": [ - "BBC" + "Chewy" ] } }, - "/bbc/search": { + "/chewy/product-questions": { "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", + "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", "parameters": [ { - "description": "Search query, up to 120 characters", + "description": "The numeric id from a chewy.com PDP URL, e.g. \\", "in": "query", - "name": "q", + "name": "id", "required": true, "type": "string", - "x-example": "climate" + "x-example": "767806" }, { - "description": "Results page, defaults to 1", + "description": "Page number, 1-based (default 1).", "in": "query", - "maximum": 10, - "minimum": 1, "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 + }, + { + "description": "Questions per page, 1 to 50 (default 20).", + "in": "query", + "name": "limit", + "type": "integer", + "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": [ @@ -210078,7 +238388,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.searchResponseDoc" + "$ref": "#/definitions/chewy.questionsResponseDoc" } }, "400": { @@ -210111,19 +238421,69 @@ "ApiKeyAuth": [] } ], - "summary": "Search public BBC pages", + "summary": "List a Chewy product's customer questions and answers, paginated", "tags": [ - "BBC" + "Chewy" ] } }, - "/bestbuy/brands": { + "/chewy/product-reviews": { "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 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": "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": "Reviews per page, 1 to 50 (default 20).", + "in": "query", + "name": "limit", + "type": "integer", + "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": [ "application/json" ], @@ -210131,49 +238491,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.brandsResponseDoc" + "$ref": "#/definitions/chewy.reviewsResponseDoc" } }, - "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 Best Buy's full brand directory", - "tags": [ - "Best Buy" - ] - } - }, - "/bestbuy/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Best Buy's top-level shopping departments (name, category id, url), sourced from the homepage's own category carousel. Each id is directly usable as bestbuy_category's category_id input.", - "operationId": "bestbuy-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/bestbuy.categoriesResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -210193,19 +238524,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Best Buy's top-level shopping departments", + "summary": "List a Chewy product's customer reviews, paginated", "tags": [ - "Best Buy" + "Chewy" ] } }, - "/bestbuy/categories/trending": { + "/chewy/products": { "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' ~25 top-level departments. Each id is directly usable as bestbuy_category's category_id input.", - "operationId": "bestbuy-categories-trending", + "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": "Comma-separated Chewy part numbers, up to 20", + "in": "query", + "name": "part_numbers", + "required": true, + "type": "string", + "x-example": "52448,767758" + } + ], "produces": [ "application/json" ], @@ -210213,7 +238554,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.trendingCategoriesResponseDoc" + "$ref": "#/definitions/chewy.productsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -210234,34 +238581,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get Best Buy's fine-grained trending product-type categories", + "summary": "Get a batch of Chewy products' lightweight summaries", "tags": [ - "Best Buy" + "Chewy" ] } }, - "/bestbuy/category": { + "/chewy/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (up to 24) of one Best Buy category's normalized 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 page of a Chewy keyword search's normalized 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": "Best Buy category id", + "description": "Free-text search keywords", "in": "query", - "name": "category_id", + "name": "q", "required": true, "type": "string", - "x-example": "pcmcat138500050001" + "x-example": "salmon dog food" }, { - "description": "1-indexed page number, defaults to 1", + "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": [ @@ -210271,7 +238645,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.categoryResponseDoc" + "$ref": "#/definitions/chewy.searchResponseDoc" } }, "400": { @@ -210280,12 +238654,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -210304,27 +238672,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy category's product listing", + "summary": "Search Chewy by keyword", "tags": [ - "Best Buy" + "Chewy" ] } }, - "/bestbuy/category/subcategories": { + "/chewy/suggest": { "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 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": "Best Buy category id", + "description": "Partial search text, e.g. \\", "in": "query", - "name": "category_id", - "required": true, + "name": "term", "type": "string", - "x-example": "pcmcat138500050001" + "x-example": "salmon dog" } ], "produces": [ @@ -210334,7 +238701,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.subcategoriesResponseDoc" + "$ref": "#/definitions/chewy.suggestResponseDoc" } }, "400": { @@ -210361,27 +238728,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy category's own sibling/child categories", + "summary": "Chewy search-box typeahead suggestions", "tags": [ - "Best Buy" + "Chewy" ] } }, - "/bestbuy/product": { + "/chewy/variants": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Best Buy product's normalized detail (name, brand, model, color, price, availability, rating, images, breadcrumbs), sourced from the product page's own schema.org Product structured-data block. sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs.", - "operationId": "bestbuy-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": "Numeric Best Buy SKU", + "description": "The numeric id from a chewy.com PDP URL, e.g. \\", "in": "query", - "name": "sku", + "name": "id", "required": true, "type": "string", - "x-example": "6673590" + "x-example": "185468" } ], "produces": [ @@ -210391,7 +238758,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.productResponseDoc" + "$ref": "#/definitions/chewy.variantsResponseDoc" } }, "400": { @@ -210400,6 +238767,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -210418,27 +238791,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy product's detail", + "summary": "List every size/flavor variant of a Chewy product", "tags": [ - "Best Buy" + "Chewy" ] } }, - "/bestbuy/product/questions": { + "/chicagotribune/article": { "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 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": "Numeric Best Buy SKU", + "description": "Canonical Chicago Tribune article URL", "in": "query", - "name": "sku", + "name": "url", "required": true, "type": "string", - "x-example": "6673590" + "x-example": "https://www.chicagotribune.com/2026/09/24/gov-jb-pritzker-illinois-lawmakers-data-centers/" } ], "produces": [ @@ -210448,7 +238818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.productQuestionsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -210457,8 +238827,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -210475,27 +238845,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy product's customer questions and answers", + "summary": "Get Chicago Tribune article content", "tags": [ - "Best Buy" + "Chicago Tribune" ] } }, - "/bestbuy/product/related": { + "/chicagotribune/author": { "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", + "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": "Numeric Best Buy SKU", + "description": "Author slug, e.g. olivia-olander", "in": "query", - "name": "sku", - "required": true, + "name": "slug", "type": "string", - "x-example": "6673590" + "x-example": "olivia-olander" + }, + { + "description": "Canonical chicagotribune.com/author// URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.chicagotribune.com/author/olivia-olander/" } ], "produces": [ @@ -210505,7 +238878,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.productRelatedResponseDoc" + "$ref": "#/definitions/publicnews.chicagoTribuneAuthorResponseDoc" } }, "400": { @@ -210514,8 +238887,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -210532,27 +238905,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy product's related products", + "summary": "Get a Chicago Tribune author profile", "tags": [ - "Best Buy" + "Chicago Tribune" ] } }, - "/bestbuy/product/reviews": { + "/chicagotribune/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns page 1 (up to 20) of one Best Buy product's normalized customer reviews (rating, title, text, author, posted date, tags such as Verified Purchaser, recommended flag, helpful/unhelpful counts), sourced from the product's dedicated reviews page. sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs.", - "operationId": "bestbuy-product-reviews", + "description": "Returns fresh headlines from one public Chicago Tribune section page.", + "operationId": "chicagotribune-headlines", "parameters": [ { - "description": "Numeric Best Buy SKU", + "description": "Chicago Tribune section slug", + "enum": [ + "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": "sku", + "name": "section", "required": true, "type": "string", - "x-example": "6673590" + "x-example": "news" } ], "produces": [ @@ -210562,7 +238994,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.productReviewsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -210571,11 +239003,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Chicago Tribune section headlines", + "tags": [ + "Chicago Tribune" + ] + } + }, + "/chicagotribune/news": { + "get": { + "description": "Returns the current Chicago Tribune top stories from the public homepage.", + "operationId": "chicagotribune-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -210589,34 +239047,88 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy product's customer reviews", + "summary": "Get Chicago Tribune top stories", "tags": [ - "Best Buy" + "Chicago Tribune" ] } }, - "/bestbuy/search": { + "/chicagotribune/sections": { + "get": { + "description": "Returns the public Chicago Tribune editorial section inventory.", + "operationId": "chicagotribune-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Chicago Tribune sections", + "tags": [ + "Chicago Tribune" + ] + } + }, + "/chick-fil-a/content": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (up to 24) of one Best Buy keyword search's normalized 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 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": "Search keywords", + "description": "Which corpus. One of press-room, story, page, legal, downloadable-asset.", + "enum": [ + "press-room", + "story", + "page", + "legal", + "downloadable-asset" + ], "in": "query", - "name": "q", + "name": "type", "required": true, "type": "string", - "x-example": "laptop" + "x-example": "press-room" }, { - "description": "1-indexed page number, defaults to 1", + "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": [ @@ -210626,7 +239138,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.searchResponseDoc" + "$ref": "#/definitions/chickfila.contentResponseDoc" } }, "400": { @@ -210659,35 +239171,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search Best Buy's product catalog", + "summary": "Browse Chick-fil-A press releases, legal documents and press-kit assets", "tags": [ - "Best Buy" + "Chick-fil-A" ] } }, - "/bestbuy/stores": { + "/chick-fil-a/content-taxonomy": { "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 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": "Two-letter state/territory code", + "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" + ], "in": "query", - "name": "state", + "name": "taxonomy", "required": true, "type": "string", - "x-example": "il" + "x-example": "press_category" }, { - "description": "City name", + "description": "1-based page number (default 1)", "in": "query", - "name": "city", - "required": true, - "type": "string", - "x-example": "Chicago" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Terms per page, 1-100 (default 20)", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -210697,7 +239224,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.storesResponseDoc" + "$ref": "#/definitions/chickfila.contentTaxonomyResponseDoc" } }, "400": { @@ -210730,35 +239257,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Best Buy's physical stores in one city", + "summary": "List the category and tag vocabularies Chick-fil-A classifies its content under", "tags": [ - "Best Buy" + "Chick-fil-A" ] } }, - "/bigcommerce/category": { + "/chick-fil-a/faq": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized 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": "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": "Full public BigCommerce category page URL", + "description": "Free-text filter over question and answer text. Results are relevance-ranked when present.", "in": "query", - "name": "url", - "required": true, + "name": "search", "type": "string", - "x-example": "https://www.bulkapothecary.com/melt-and-pour-soap-bases/" + "x-example": "delivery" }, { - "description": "1-indexed category page, defaults to 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", - "minimum": 1, "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 } ], "produces": [ @@ -210768,7 +239307,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bigcommerce.categoryResponseDoc" + "$ref": "#/definitions/chickfila.faqResponseDoc" } }, "400": { @@ -210801,27 +239340,33 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a BigCommerce storefront category", + "summary": "Browse Chick-fil-A customer FAQs", "tags": [ - "BigCommerce" + "Chick-fil-A" ] } }, - "/bigcommerce/product": { + "/chick-fil-a/location": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 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": "Full public BigCommerce product page URL", + "description": "Numeric WordPress post id. Supply either id or slug, not both.", "in": "query", - "name": "url", - "required": true, + "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": "https://www.bulkapothecary.com/goat-milk-sfic-all-natural-glycerin-melt-and-pour-soap-base/" + "x-example": "branson-food-truck" } ], "produces": [ @@ -210831,7 +239376,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bigcommerce.productResponseDoc" + "$ref": "#/definitions/chickfila.locationResponseDoc" } }, "400": { @@ -210864,43 +239409,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a BigCommerce storefront product", + "summary": "Get one Chick-fil-A restaurant's address and hours", "tags": [ - "BigCommerce" + "Chick-fil-A" ] } }, - "/bigcommerce/search": { + "/chick-fil-a/locations": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized 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 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": "Public BigCommerce storefront origin", + "description": "Free-text filter over restaurant names. Results are relevance-ranked when present.", "in": "query", - "name": "url", - "required": true, + "name": "search", "type": "string", - "x-example": "https://www.bulkapothecary.com" + "x-example": "branson" }, { - "description": "Search text", + "description": "1-based page number (default 1)", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "lavender" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "1-indexed search page, defaults to 1", + "description": "Restaurants per page, 1-100 (default 20)", "in": "query", - "minimum": 1, - "name": "page", + "name": "per_page", "type": "integer", - "x-example": 1 + "x-example": 20 } ], "produces": [ @@ -210910,7 +239452,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bigcommerce.searchResponseDoc" + "$ref": "#/definitions/chickfila.locationsResponseDoc" } }, "400": { @@ -210943,19 +239485,70 @@ "ApiKeyAuth": [] } ], - "summary": "Search a BigCommerce storefront", + "summary": "Browse Chick-fil-A restaurant locations", "tags": [ - "BigCommerce" + "Chick-fil-A" ] } }, - "/bilibili/anime-home": { + "/chick-fil-a/menu": { "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", + "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": "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", + "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": [ "application/json" ], @@ -210963,17 +239556,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.animeHomeResponseDoc" + "$ref": "#/definitions/chickfila.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" } @@ -210990,27 +239589,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili anime home sections", + "summary": "Browse the Chick-fil-A menu", "tags": [ - "Bilibili" + "Chick-fil-A" ] } }, - "/bilibili/autocomplete": { + "/chick-fil-a/menu-item": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bilibili search-box query suggestions for partial text. An empty suggestion list is a valid response when nothing matches.", - "operationId": "bilibili-autocomplete", + "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": "Partial search text", + "description": "Numeric WordPress post id. Supply either id or slug, not both.", "in": "query", - "name": "q", - "required": true, + "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", + "name": "slug", "type": "string", - "x-example": "原神" + "x-example": "chick-fil-a-filet" } ], "produces": [ @@ -211020,7 +239625,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.autocompleteResponseDoc" + "$ref": "#/definitions/chickfila.menuItemResponseDoc" } }, "400": { @@ -211029,14 +239634,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" } @@ -211053,19 +239658,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili search suggestions", + "summary": "Get one Chick-fil-A menu item", "tags": [ - "Bilibili" + "Chick-fil-A" ] } }, - "/bilibili/guochuang-home": { + "/chick-fil-a/menu-taxonomy": { "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", + "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": "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", + "required": true, + "type": "string", + "x-example": "menu_taxonomy" + }, + { + "description": "1-based page number (default 1)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Terms per page, 1-100 (default 20)", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 100 + } + ], "produces": [ "application/json" ], @@ -211073,55 +239708,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.guochuangHomeResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/chickfila.menuTaxonomyResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "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 Bilibili Chinese-animation home sections", - "tags": [ - "Bilibili" - ] - } - }, - "/bilibili/must-watch": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Bilibili's curated must-watch collection, separated into established classics and the latest additions.", - "operationId": "bilibili-must-watch", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/bilibili.mustWatchResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -211129,12 +239729,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -211147,28 +239741,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili's curated must-watch videos", + "summary": "List one Chick-fil-A menu taxonomy's terms", "tags": [ - "Bilibili" + "Chick-fil-A" ] } }, - "/bilibili/popular": { + "/chipotle/ingredients": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bilibili's current popular-video feed in upstream order. Pass next_cursor back as cursor to continue to the next batch.", - "operationId": "bilibili-popular", + "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": "Upstream cursor from the previous response; defaults to 0", + "description": "Ordering surface. One of web, web-mobile. Default web-mobile.", + "enum": [ + "web", + "web-mobile" + ], "in": "query", - "maximum": 10000000, - "minimum": 0, - "name": "cursor", - "type": "integer", - "x-example": 0 + "name": "channel", + "type": "string", + "x-example": "web-mobile" + }, + { + "description": "Country catalog. One of US, CA. Default US.", + "enum": [ + "US", + "CA" + ], + "in": "query", + "name": "region", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -211178,7 +239785,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.popularResponseDoc" + "$ref": "#/definitions/chipotle.ingredientsResponseDoc" } }, "400": { @@ -211193,12 +239800,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -211211,19 +239812,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get current popular Bilibili videos", + "summary": "Get Chipotle's ingredient content catalog", "tags": [ - "Bilibili" + "Chipotle" ] } }, - "/bilibili/ranking": { + "/chipotle/meals": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current official all-site ranking with video engagement, category, and creator metadata in rank order.", - "operationId": "bilibili-ranking", + "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" ], @@ -211231,7 +239832,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.rankingResponseDoc" + "$ref": "#/definitions/chipotle.mealsResponseDoc" } }, "429": { @@ -211240,12 +239841,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -211258,35 +239853,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get the current Bilibili all-site ranking", + "summary": "Get Chipotle's preset meal definitions", "tags": [ - "Bilibili" + "Chipotle" ] } }, - "/bilibili/vertical-home": { + "/chipotle/menu": { "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" - } - ], + "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" ], @@ -211294,13 +239873,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.verticalHomeResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/chipotle.nationalMenuResponseDoc" } }, "429": { @@ -211309,12 +239882,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -211327,28 +239894,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili documentary, movie, TV, or variety home sections", + "summary": "Get Chipotle's national menu catalog", "tags": [ - "Bilibili" + "Chipotle" ] } }, - "/bilibili/weekly": { + "/chipotle/menu/metadata": { "get": { "consumes": [ "application/json" ], - "description": "Returns one issue from Bilibili's weekly selected-video archive. Omit number to resolve and return the latest issue.", - "operationId": "bilibili-weekly", + "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": "Positive issue number; omit for the latest issue", + "description": "Ordering surface. One of web, web-mobile. Default web-mobile.", + "enum": [ + "web", + "web-mobile" + ], "in": "query", - "maximum": 1000000, - "minimum": 1, - "name": "number", - "type": "integer", - "x-example": 387 + "name": "channel", + "type": "string", + "x-example": "web-mobile" + }, + { + "description": "Country catalog. One of US, CA. Default US.", + "enum": [ + "US", + "CA" + ], + "in": "query", + "name": "region", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -211358,7 +239938,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.weeklyResponseDoc" + "$ref": "#/definitions/chipotle.menuMetadataResponseDoc" } }, "400": { @@ -211367,24 +239947,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": { @@ -211397,24 +239965,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bilibili weekly selected-video issue", + "summary": "Get Chipotle's menu presentation metadata", "tags": [ - "Bilibili" + "Chipotle" ] } }, - "/billboard/article": { + "/chipotle/restaurant": { "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", + "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", "parameters": [ { - "description": "Canonical Billboard article URL", + "description": "Chipotle's numeric restaurant id", "in": "query", - "name": "url", + "name": "restaurant_number", "required": true, "type": "string", - "x-example": "https://www.billboard.com/music/latin/stray-kids-like-bts-younger-mexican-president-confirm-visit-1236346530/" + "x-example": "3982" } ], "produces": [ @@ -211424,7 +239995,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/chipotle.restaurantResponseDoc" } }, "400": { @@ -211439,6 +240010,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -211451,24 +240028,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get Billboard article content", + "summary": "Get one Chipotle restaurant", "tags": [ - "Billboard" + "Chipotle" ] } }, - "/billboard/author": { + "/chipotle/restaurant/meals": { "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", + "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": "Canonical Billboard author URL", + "description": "Chipotle's numeric restaurant id, from /chipotle/restaurants", "in": "query", - "name": "url", + "name": "restaurant_number", "required": true, "type": "string", - "x-example": "https://www.billboard.com/author/gil-kaufman/" + "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" } ], "produces": [ @@ -211478,7 +240070,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.billboardAuthorResponseDoc" + "$ref": "#/definitions/chipotle.restaurantMealsResponseDoc" } }, "400": { @@ -211493,6 +240085,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -211505,66 +240103,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Billboard author profile", + "summary": "List one Chipotle restaurant's preset meals with prices", "tags": [ - "Billboard" + "Chipotle" ] } }, - "/billboard/headlines": { + "/chipotle/restaurant/menu": { "get": { - "description": "Returns fresh headlines from one public Billboard section.", - "operationId": "billboard-headlines", + "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", "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" - ], + { + "description": "Chipotle's numeric restaurant id", "in": "query", - "name": "section", + "name": "restaurant_number", "required": true, - "type": "string" + "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 } ], "produces": [ @@ -211574,7 +240140,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/chipotle.restaurantMenuResponseDoc" } }, "400": { @@ -211583,6 +240149,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": { @@ -211595,16 +240173,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get Billboard section headlines", + "summary": "Get one Chipotle restaurant's menu with prices", "tags": [ - "Billboard" + "Chipotle" ] } }, - "/billboard/news": { + "/chipotle/restaurants": { "get": { - "description": "Returns fresh Billboard top stories from its public RSS feed.", - "operationId": "billboard-news", + "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", + "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", + "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 + } + ], "produces": [ "application/json" ], @@ -211612,7 +240232,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/chipotle.restaurantsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -211633,63 +240265,31 @@ "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", + "summary": "Find Chipotle restaurants near a location", "tags": [ - "Billboard" + "Chipotle" ] } }, - "/billing/me": { + "/chromewebstore/categories": { "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", + "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": "Current billing state", - "schema": { - "$ref": "#/definitions/billing.billingStateResponseDoc" - } - }, - "401": { - "description": "Authentication required", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/chromewebstore.categoriesResponseDoc" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -211700,28 +240300,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get current billing state", + "summary": "List Chrome Web Store categories and collections", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/checkout": { - "post": { + "/chromewebstore/category": { + "get": { "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", + "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": "Checkout request", - "in": "body", - "name": "request", + "description": "Category slug under extensions", + "in": "query", + "name": "category", "required": true, - "schema": { - "$ref": "#/definitions/billing.stripeCheckoutRequestDoc" - } + "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", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -211729,25 +240349,25 @@ ], "responses": { "200": { - "description": "Stripe checkout session", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSessionResponseDoc" + "$ref": "#/definitions/chromewebstore.listResponseDoc" } }, "400": { - "description": "Invalid request or plan", + "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" } @@ -211758,73 +240378,52 @@ "ApiKeyAuth": [] } ], - "summary": "Create Stripe checkout session", + "summary": "List items in a Chrome Web Store category", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/events": { + "/chromewebstore/charts": { "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", + "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": "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", + "default": "popular", + "description": "Top chart to list", + "enum": [ + "trending", + "popular", + "notable" + ], "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-01T00:00:00Z" + "name": "chart", + "type": "string" }, { - "description": "Created-at upper bound in RFC3339 format", + "description": "Maximum number of items", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-04-16T00:00:00Z" + "name": "num", + "type": "integer", + "x-example": 50 }, { - "description": "Normalized endpoint or API path", + "description": "Two-letter storefront country code", "in": "query", - "name": "endpoint", + "name": "country", "type": "string", - "x-example": "google/search" + "x-example": "us" }, { - "description": "Request id to inspect", + "description": "Two-letter language code", "in": "query", - "name": "request_id", + "name": "lang", "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" + "x-example": "en" } ], "produces": [ @@ -211832,25 +240431,25 @@ ], "responses": { "200": { - "description": "Billing events", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingEventsResponseDoc" + "$ref": "#/definitions/chromewebstore.listResponseDoc" } }, "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", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -211861,27 +240460,48 @@ "ApiKeyAuth": [] } ], - "summary": "List current user's billing events", + "summary": "List a Chrome Web Store top chart", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/periods": { + "/chromewebstore/collection": { "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 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": "Maximum periods to return. Defaults to 12 and clamps to 24.", + "description": "Curated collection slug", "in": "query", - "maximum": 24, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "collection", + "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" } ], "produces": [ @@ -211889,19 +240509,25 @@ ], "responses": { "200": { - "description": "Billing period ledgers", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingPeriodLedgersResponseDoc" + "$ref": "#/definitions/chromewebstore.listResponseDoc" } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", + "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" } @@ -211912,27 +240538,48 @@ "ApiKeyAuth": [] } ], - "summary": "List current user's billing period ledgers", + "summary": "List items in a curated Chrome Web Store collection", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/periods/{period_key}": { + "/chromewebstore/developer": { "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", + "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": "Billing period key in YYYY-MM format", - "in": "path", - "name": "period_key", + "description": "Chrome Web Store publisher id (u + 32 hex chars)", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "2026-04" + "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": [ @@ -211940,25 +240587,31 @@ ], "responses": { "200": { - "description": "Billing period ledger", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingPeriodLedgerResponseDoc" + "$ref": "#/definitions/chromewebstore.developerResponseDoc" } }, "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" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -211969,41 +240622,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get current user's billing period ledger", + "summary": "Retrieve a Chrome Web Store publisher and their items", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/periods/{period_key}/statement": { + "/chromewebstore/item": { "get": { "consumes": [ "application/json" ], - "description": "Returns a customer-safe JSON statement for one billing period, combining the local 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. Internal repair errors and raw webhook audit details are not exposed.", - "operationId": "billing-me-period-statement", + "description": "Returns normalized 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": "Billing period key in YYYY-MM format", - "in": "path", - "name": "period_key", + "description": "Chrome Web Store item id (32-character extension/theme id)", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "2026-04" + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" }, { - "description": "Include recent billing events. Defaults to true.", + "description": "Two-letter storefront country code", "in": "query", - "name": "include_events", - "type": "boolean" + "name": "country", + "type": "string", + "x-example": "us" }, { - "description": "Maximum billing events to include. Defaults to 100 and clamps to 500.", + "description": "Two-letter language code", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "event_limit", - "type": "integer" + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -212011,25 +240664,31 @@ ], "responses": { "200": { - "description": "Billing period statement", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingPeriodStatementResponseDoc" + "$ref": "#/definitions/chromewebstore.itemResponseDoc" } }, "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" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -212040,27 +240699,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get current user's billing period statement", + "summary": "Retrieve Chrome Web Store item details", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/periods/{period_key}/statement/download": { + "/chromewebstore/permissions": { "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 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": "Billing period key in YYYY-MM format", - "in": "path", - "name": "period_key", + "description": "Chrome Web Store item id (32-character extension id)", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "2026-04" + "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": [ @@ -212068,25 +240741,31 @@ ], "responses": { "200": { - "description": "Raw frozen customer statement JSON", + "description": "OK", "schema": { - "type": "string" + "$ref": "#/definitions/chromewebstore.permissionsResponseDoc" } }, "400": { - "description": "Invalid period key or open billing period", + "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" } @@ -212097,28 +240776,41 @@ "ApiKeyAuth": [] } ], - "summary": "Download current user's frozen billing period statement", + "summary": "Retrieve a Chrome Web Store item's declared permissions", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/portal": { - "post": { + "/chromewebstore/privacy": { + "get": { "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", + "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": "Portal request", - "in": "body", - "name": "request", + "description": "Chrome Web Store item id (32-character extension/theme id)", + "in": "query", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/billing.stripePortalRequestDoc" - } + "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": [ @@ -212126,66 +240818,31 @@ ], "responses": { "200": { - "description": "Stripe portal session", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSessionResponseDoc" + "$ref": "#/definitions/chromewebstore.privacyResponseDoc" } }, "400": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Authentication required", + "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": "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -212196,28 +240853,59 @@ "ApiKeyAuth": [] } ], - "summary": "Caller's own blocked-request tally", + "summary": "Retrieve a Chrome Web Store item's privacy disclosures", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/subscription/change": { - "post": { + "/chromewebstore/reviews": { + "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 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": "Subscription change request", - "in": "body", - "name": "request", + "description": "Chrome Web Store item id (32-character extension/theme id)", + "in": "query", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangeRequestDoc" - } + "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" } ], "produces": [ @@ -212225,25 +240913,31 @@ ], "responses": { "200": { - "description": "Subscription change result", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangeResultResponseDoc" + "$ref": "#/definitions/chromewebstore.reviewsResponseDoc" } }, "400": { - "description": "Invalid plan, stale preview, or idempotency key", + "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" } @@ -212254,43 +240948,74 @@ "ApiKeyAuth": [] } ], - "summary": "Apply a subscription plan change", + "summary": "Retrieve Chrome Web Store item reviews", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/subscription/change/cancel": { - "post": { + "/chromewebstore/search": { + "get": { "consumes": [ "application/json" ], - "description": "Releases the authenticated user's pending downgrade schedule and keeps the current plan active through renewal.", - "operationId": "billing-me-subscription-change-cancel", + "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": "Search keyword", + "in": "query", + "name": "term", + "required": true, + "type": "string", + "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": [ "application/json" ], "responses": { "200": { - "description": "Subscription change cancellation result", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangeResultResponseDoc" + "$ref": "#/definitions/chromewebstore.searchResponseDoc" } }, "400": { - "description": "Invalid subscription state", + "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" } @@ -212301,28 +241026,41 @@ "ApiKeyAuth": [] } ], - "summary": "Cancel a scheduled subscription downgrade", + "summary": "Search Chrome Web Store items", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/billing/me/subscription/preview": { - "post": { + "/chromewebstore/similar": { + "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": "Returns the related-items shelf the store renders on an item's detail page. Defaults: `country=us`, `lang=en`.", + "operationId": "chromewebstore-similar", "parameters": [ { - "description": "Subscription change preview request", - "in": "body", - "name": "request", + "description": "Chrome Web Store item id (32-character extension/theme id)", + "in": "query", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangeRequestDoc" - } + "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": [ @@ -212330,25 +241068,31 @@ ], "responses": { "200": { - "description": "Subscription change preview", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangePreviewResponseDoc" + "$ref": "#/definitions/chromewebstore.similarResponseDoc" } }, "400": { - "description": "Invalid plan or subscription change", + "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" } @@ -212359,58 +241103,48 @@ "ApiKeyAuth": [] } ], - "summary": "Preview a subscription plan change", + "summary": "Retrieve related Chrome Web Store items", "tags": [ - "Billing" + "ChromeWebStore" ] } }, - "/bing/images": { + "/chromewebstore/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Bing image search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Bing image HTML/async pages and return 503 when Bing serves a challenge page or unusable HTML.", - "operationId": "bing-images", + "description": "Returns item-name suggestions for a search prefix, drawn from the top store-search results. Defaults: `num=8`, `country=us`, `lang=en`.", + "operationId": "chromewebstore-suggest", "parameters": [ { - "description": "Search query", + "description": "Search prefix to autocomplete", "in": "query", - "name": "q", + "name": "term", "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 + "x-example": "ad blo" }, { - "description": "Results per page; defaults to 10, clamped to 1..50", + "description": "Maximum number of suggestions", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", + "name": "num", "type": "integer", - "x-example": 10 + "x-example": 8 }, { - "description": "Two-letter country code; defaults to us", + "description": "Two-letter storefront country code", "in": "query", "name": "country", "type": "string", "x-example": "us" }, { - "description": "Bing UI language; defaults to en-us", + "description": "Two-letter language code", "in": "query", "name": "lang", "type": "string", - "x-example": "en-us" + "x-example": "en" } ], "produces": [ @@ -212420,35 +241154,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bing.imagesResponseDoc" + "$ref": "#/definitions/chromewebstore.suggestResponseDoc" } }, "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" } @@ -212459,58 +241181,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bing image results", + "summary": "Suggest Chrome Web Store search terms", "tags": [ - "Bing" + "ChromeWebStore" ] } }, - "/bing/news": { + "/chrono24/autocomplete": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Bing news search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Bing news HTML/async pages and return 503 when Bing serves a challenge page or unusable HTML.", - "operationId": "bing-news", + "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": "Search query", + "description": "Partial search text, e.g. \\", "in": "query", - "name": "q", + "name": "query", "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" + "x-example": "submar" } ], "produces": [ @@ -212520,35 +241211,64 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bing.newsResponseDoc" + "$ref": "#/definitions/chrono24.autocompleteResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "No results found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Chrono24 search-box suggestions", + "tags": [ + "Chrono24" + ] + } + }, + "/chrono24/brands": { + "get": { + "consumes": [ + "application/json" + ], + "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/chrono24.brandsResponseDoc" + } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Bing upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -212559,58 +241279,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bing news results", + "summary": "List Chrono24 watch brands", "tags": [ - "Bing" + "Chrono24" ] } }, - "/bing/search": { + "/chrono24/dealer": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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. Results are fetched with a Chrome-impersonated request client and return 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 hedged 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": "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": "Search query", + "description": "Dealer slug from a listing's seller link", "in": "query", - "name": "q", + "name": "slug", "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" + "x-example": "thetimelords" } ], "produces": [ @@ -212618,37 +241307,31 @@ ], "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/chrono24.dealerResponseDoc" } }, "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", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "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": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -212659,50 +241342,66 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bing web results", + "summary": "Get a Chrono24 dealer's storefront", "tags": [ - "Bing" + "Chrono24" ] } }, - "/bing/suggest": { + "/chrono24/dealer/reviews": { "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.", - "operationId": "bing-suggest", + "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": "Search query prefix", + "description": "Dealer slug from a listing's seller link", "in": "query", - "name": "q", + "name": "slug", "required": true, "type": "string", - "x-example": "openai" + "x-example": "thetimelords" }, { - "description": "Suggestions to return; defaults to 10, clamped to 1..12", + "default": 1, + "description": "One-based result page", "in": "query", - "maximum": 12, "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "page", + "type": "integer" }, { - "description": "Two-letter country code; defaults to us", + "default": 10, + "description": "Reviews per page, 1-50", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "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" }, { - "description": "Bing UI language; defaults to en-us", + "default": "relevance", + "description": "Result order. One of: relevance, newest, with_recommendation, without_recommendation", + "enum": [ + "relevance", + "newest", + "with_recommendation", + "without_recommendation" + ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "sort", + "type": "string" } ], "produces": [ @@ -212712,29 +241411,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bing.suggestResponseDoc" + "$ref": "#/definitions/chrono24.dealerReviewsResponseDoc" } }, "400": { - "description": "Missing or invalid query 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": "Bing upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -212745,58 +241444,38 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Bing search queries", + "summary": "Get a Chrono24 dealer's buyer reviews", "tags": [ - "Bing" + "Chrono24" ] } }, - "/bing/videos": { + "/chrono24/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Bing video search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Bing video HTML/async pages and return 503 when Bing serves a challenge page or unusable HTML.", - "operationId": "bing-videos", + "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": "Search query", + "description": "Filter to list values for", + "enum": [ + "condition", + "usedOrNew", + "caseMaterial", + "dialColor", + "braceletMaterial", + "movementType", + "gender", + "watchType", + "stockInfo" + ], "in": "query", - "name": "q", + "name": "group", "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" + "x-example": "condition" } ], "produces": [ @@ -212806,35 +241485,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bing.videosResponseDoc" + "$ref": "#/definitions/chrono24.facetsResponseDoc" } }, "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", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Bing upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -212845,24 +241512,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bing video results", + "summary": "Get a Chrono24 search filter's accepted values", "tags": [ - "Bing" + "Chrono24" ] } }, - "/birminghammail/article": { + "/chrono24/listing": { "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": "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": "Canonical Birmingham Mail article URL", + "description": "Listing URL or path from a chrono24-search result's url field", "in": "query", - "name": "url", + "name": "path", "required": true, "type": "string", - "x-example": "https://www.birminghammail.co.uk/news/midlands-news/birmingham-road-six-cars-towed-34668610" + "x-example": "https://www.chrono24.com/rolex/datejust-36--id40700313.htm" } ], "produces": [ @@ -212872,7 +241542,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/chrono24.listingResponseDoc" } }, "400": { @@ -212887,8 +241557,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -212905,37 +241575,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Birmingham Mail article content", + "summary": "Get a Chrono24 watch listing's detail", "tags": [ - "Birmingham Mail" + "Chrono24" ] } }, - "/birminghammail/author": { + "/chrono24/models": { "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": "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": "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", + "description": "Brand slug from chrono24-brands", "in": "query", - "name": "url", + "name": "brand", + "required": true, "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" + "x-example": "rolex" } ], "produces": [ @@ -212945,7 +241605,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" + "$ref": "#/definitions/chrono24.modelsResponseDoc" } }, "400": { @@ -212954,14 +241614,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" } @@ -212978,47 +241632,231 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Birmingham Mail author profile", + "summary": "List Chrono24 models for a brand", "tags": [ - "Birmingham Mail" + "Chrono24" ] } }, - "/birminghammail/headlines": { + "/chrono24/search": { "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": "Searches Chrono24's luxury-watch marketplace by free-text keyword, or browses one brand's (optionally narrowed to one model's) current listings, returning normalized 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": "Birmingham Mail section slug", + "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": [ - "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" + "relevance", + "price_asc", + "price_desc", + "newest", + "popularity" ], "in": "query", - "name": "section", - "required": true, + "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" } ], @@ -213029,7 +241867,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/chrono24.searchResponseDoc" } }, "400": { @@ -213038,8 +241876,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -213056,16 +241894,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Birmingham Mail section headlines", + "summary": "Search Chrono24 watch listings", "tags": [ - "Birmingham Mail" + "Chrono24" ] } }, - "/birminghammail/news": { + "/clevelandcom/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", + "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" ], @@ -213094,50 +241932,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Birmingham Mail top stories", - "tags": [ - "Birmingham Mail" - ] - } - }, - "/birminghammail/sections": { - "get": { - "description": "Returns the public Birmingham Mail editorial section inventory used by birminghammail-headlines.", - "operationId": "birminghammail-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Birmingham Mail sections", + "summary": "Get Cleveland.com top stories", "tags": [ - "Birmingham Mail" + "Cleveland.com" ] } }, - "/bleacherreport/article": { + "/cna/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", + "description": "Returns public CNA article metadata and body paragraphs from a canonical article URL.", + "operationId": "cna-article", "parameters": [ { - "description": "Canonical Bleacher Report article URL", + "description": "Canonical CNA 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" + "x-example": "https://www.channelnewsasia.com/singapore/national-arts-council-nac-seeks-operator-new-1000-seat-tanglin-theatre-6408051" } ], "produces": [ @@ -213174,30 +241986,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bleacher Report article content", + "summary": "Get CNA article content", "tags": [ - "Bleacher Report" + "CNA" ] } }, - "/bleacherreport/author": { + "/cna/author": { "get": { - "description": "Returns one Bleacher Report writer's public profile: name, role, biography, photo, and the latest stories listed on the page.", - "operationId": "bleacherreport-author", + "description": "Returns one CNA correspondent's or contributor's public profile: name, job title, biography, contact email, and their recent bylined articles.", + "operationId": "cna-author", "parameters": [ { - "description": "Writer slug, e.g. scott-polacek", + "description": "Author slug, e.g. aqil-haziq-mahmud", "in": "query", "name": "slug", "type": "string", - "x-example": "scott-polacek" + "x-example": "aqil-haziq-mahmud" }, { - "description": "Canonical bleacherreport.com/writers/ URL; alternative to slug", + "description": "Canonical channelnewsasia.com/author/ URL; alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://bleacherreport.com/writers/scott-polacek" + "x-example": "https://www.channelnewsasia.com/author/aqil-haziq-mahmud" } ], "produces": [ @@ -213207,7 +242019,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.bleacherreportAuthorResponseDoc" + "$ref": "#/definitions/publicnews.cnaAuthorResponseDoc" } }, "400": { @@ -213234,55 +242046,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bleacher Report writer profile", + "summary": "Get a CNA author profile", "tags": [ - "Bleacher Report" + "CNA" ] } }, - "/bleacherreport/headlines": { + "/cna/headlines": { "get": { - "description": "Returns current Bleacher Report headlines from one public league or league sub-hub page.", - "operationId": "bleacherreport-headlines", + "description": "Returns fresh headlines from one public CNA section.", + "operationId": "cna-headlines", "parameters": [ { - "description": "Bleacher Report section slug", + "description": "CNA 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" + "asia", + "business", + "singapore", + "sport", + "world" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "asia" } ], "produces": [ @@ -213313,16 +242101,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bleacher Report section headlines", + "summary": "Get CNA section headlines", "tags": [ - "Bleacher Report" + "CNA" ] } }, - "/bleacherreport/news": { + "/cna/news": { "get": { - "description": "Returns fresh Bleacher Report top sports stories from the public news sitemap.", - "operationId": "bleacherreport-news", + "description": "Returns fresh CNA (Channel NewsAsia) top stories from its public RSS feed.", + "operationId": "cna-news", "produces": [ "application/json" ], @@ -213333,12 +242121,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -213351,16 +242133,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bleacher Report top stories", + "summary": "Get CNA top stories", "tags": [ - "Bleacher Report" + "CNA" ] } }, - "/bleacherreport/sections": { + "/cna/sections": { "get": { - "description": "Returns the public Bleacher Report league and league sub-hub sections accepted by the headlines endpoint.", - "operationId": "bleacherreport-sections", + "description": "Returns the public CNA editorial section inventory used by the headlines endpoint.", + "operationId": "cna-sections", "produces": [ "application/json" ], @@ -213370,18 +242152,6 @@ "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": [ @@ -213389,24 +242159,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bleacher Report sections", + "summary": "Get CNA sections", "tags": [ - "Bleacher Report" + "CNA" ] } }, - "/bloomberg/article": { + "/cnbc/article": { "get": { - "description": "Returns one public Bloomberg article's metadata and body paragraphs from a canonical article URL. Subscriber-only articles are not available.", - "operationId": "bloomberg-article", + "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": "Canonical Bloomberg article URL", + "description": "Canonical cnbc.com article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.bloomberg.com/news/articles/2026-09-20/example-slug" + "x-example": "https://www.cnbc.com/2026/09/21/iran-us-oil-prices-crude-saudi-arabia-.html" } ], "produces": [ @@ -213416,7 +242186,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.articleResponseDoc" + "$ref": "#/definitions/cnbc.articleResponseDoc" } }, "400": { @@ -213425,12 +242195,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -213443,6 +242207,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -213455,24 +242225,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bloomberg article's content", + "summary": "CNBC article content", "tags": [ - "Bloomberg" + "CNBC" ] } }, - "/bloomberg/author": { + "/cnbc/author": { "get": { - "description": "Returns one public Bloomberg author's profile (name, title, bio) and their recent-content feed from a canonical author URL.", - "operationId": "bloomberg-author", + "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": "Canonical Bloomberg author URL", + "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", - "required": true, "type": "string", - "x-example": "https://www.bloomberg.com/authors/AXSztklFffk/bernard-goyder" + "x-example": "https://www.cnbc.com/jeff-cox/" } ], "produces": [ @@ -213482,7 +242258,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.authorResponseDoc" + "$ref": "#/definitions/cnbc.authorResponseDoc" } }, "400": { @@ -213503,6 +242279,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -213515,16 +242297,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bloomberg author's profile", + "summary": "CNBC author profile", "tags": [ - "Bloomberg" + "CNBC" ] } }, - "/bloomberg/categories": { + "/cnbc/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", + "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" ], @@ -213532,7 +242314,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.categoriesResponseDoc" + "$ref": "#/definitions/cnbc.categoriesResponseDoc" } }, "429": { @@ -213541,6 +242323,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -213553,19 +242341,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Bloomberg editorial categories", + "summary": "CNBC editorial sections", "tags": [ - "Bloomberg" + "CNBC" ] } }, - "/bloomberg/headlines": { + "/cnbc/headlines": { "get": { - "description": "Returns Bloomberg story cards from one editorial section. Section must be a slug returned by /bloomberg/categories.", - "operationId": "bloomberg-headlines", + "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": "Section slug from /bloomberg/categories", + "description": "Public CNBC editorial section slug from /cnbc/categories", "in": "query", "name": "section", "required": true, @@ -213580,7 +242368,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.headlinesResponseDoc" + "$ref": "#/definitions/cnbc.headlinesResponseDoc" } }, "400": { @@ -213595,6 +242383,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -213607,16 +242401,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Bloomberg section", + "summary": "CNBC section headlines", "tags": [ - "Bloomberg" + "CNBC" ] } }, - "/bloomberg/news": { + "/cnet/article": { "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", + "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": "Canonical CNET article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.cnet.com/tech/mobile/meta-connect-new-glasses-muse-ai-hearing-assistance-ray-bans-more/" + } + ], "produces": [ "application/json" ], @@ -213624,7 +242428,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.newsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -213633,46 +242437,8 @@ "$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": "Returns Bloomberg's public monthly news-sitemap index so callers can discover historical news feeds beyond the rolling latest feed.", - "operationId": "bloomberg-news-sitemaps", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/bloomberg.newsSitemapsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -213689,40 +242455,37 @@ "ApiKeyAuth": [] } ], - "summary": "List Bloomberg monthly news sitemaps", + "summary": "Get CNET article content", "tags": [ - "Bloomberg" + "CNET" ] } }, - "/bluesky/author-feed": { + "/cnet/author": { "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. Public data, sourced from the AT Protocol's public, credential-free AppView API.", - "operationId": "bluesky-author-feed", + "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": "A handle (e.g. bsky.app) or DID", + "description": "Author slug, e.g. scottstein8", "in": "query", - "name": "actor", - "required": true, + "name": "slug", "type": "string", - "x-example": "bsky.app" + "x-example": "scottstein8" }, { - "description": "Page size, 1-100", + "description": "Canonical cnet.com/profiles/ URL, optionally with a /page// segment; alternative to slug", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "name": "url", + "type": "string", + "x-example": "https://www.cnet.com/profiles/scottstein8/" }, { - "description": "Pagination cursor from a previous response's cursor field", + "default": 1, + "description": "1-based page number; overrides any page number in url", "in": "query", - "name": "cursor", - "type": "string" + "name": "page", + "type": "integer" } ], "produces": [ @@ -213732,7 +242495,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.authorFeedResponseDoc" + "$ref": "#/definitions/publicnews.cnetAuthorResponseDoc" } }, "400": { @@ -213747,18 +242510,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": { @@ -213771,40 +242522,77 @@ "ApiKeyAuth": [] } ], - "summary": "A Bluesky account's posts", + "summary": "Get a CNET author profile", "tags": [ - "Bluesky" + "CNET" ] } }, - "/bluesky/followers": { + "/cnet/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of a Bluesky account's followers. Public data, sourced from the AT Protocol's public, credential-free AppView API.", - "operationId": "bluesky-followers", + "description": "Returns fresh CNET headlines from one public topic feed.", + "operationId": "cnet-headlines", "parameters": [ { - "description": "A handle (e.g. bsky.app) or DID", + "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": "actor", + "name": "section", "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" + "x-example": "ai" } ], "produces": [ @@ -213814,7 +242602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.followersResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -213823,24 +242611,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": { @@ -213853,42 +242623,16 @@ "ApiKeyAuth": [] } ], - "summary": "A Bluesky account's followers", + "summary": "Get CNET section headlines", "tags": [ - "Bluesky" + "CNET" ] } }, - "/bluesky/follows": { + "/cnet/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of the accounts a Bluesky account follows. Public data, sourced from the AT Protocol's public, credential-free AppView API.", - "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" - } - ], + "description": "Returns fresh CNET top stories from the public news feed.", + "operationId": "cnet-news", "produces": [ "application/json" ], @@ -213896,19 +242640,7 @@ "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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -213917,12 +242649,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -213935,38 +242661,16 @@ "ApiKeyAuth": [] } ], - "summary": "Accounts a Bluesky account follows", + "summary": "Get CNET top stories", "tags": [ - "Bluesky" + "CNET" ] } }, - "/bluesky/post-likes": { + "/cnet/sections": { "get": { - "description": "Returns public actors who liked a post, with an optional cursor for pagination.", - "operationId": "bluesky-post-likes", - "parameters": [ - { - "description": "The post's at:// URI", - "in": "query", - "name": "uri", - "required": true, - "type": "string" - }, - { - "default": 25, - "description": "Page size, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "string" - } - ], + "description": "Returns the public CNET topic taxonomy accepted by the headlines endpoint.", + "operationId": "cnet-sections", "produces": [ "application/json" ], @@ -213974,37 +242678,7 @@ "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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -214013,36 +242687,27 @@ "ApiKeyAuth": [] } ], - "summary": "List actors who liked a Bluesky post", + "summary": "Get CNET sections", "tags": [ - "Bluesky" + "CNET" ] } }, - "/bluesky/post-quotes": { + "/cnn/article": { "get": { - "description": "Returns public posts that quote the specified post, with an optional cursor for pagination.", - "operationId": "bluesky-post-quotes", + "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", "parameters": [ { - "description": "The quoted post's at:// URI", + "description": "Canonical cnn.com article URL", "in": "query", - "name": "uri", + "name": "url", "required": true, - "type": "string" - }, - { - "default": 25, - "description": "Page size, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "string" + "type": "string", + "x-example": "https://www.cnn.com/2026/08/19/africa/kenya-helicopter-crash-latam-intl" } ], "produces": [ @@ -214052,7 +242717,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postQuotesResponseDoc" + "$ref": "#/definitions/cnn.articleResponseDoc" } }, "400": { @@ -214091,36 +242756,33 @@ "ApiKeyAuth": [] } ], - "summary": "List quotes of a Bluesky post", + "summary": "CNN article content", "tags": [ - "Bluesky" + "CNN" ] } }, - "/bluesky/post-reposted-by": { + "/cnn/author": { "get": { - "description": "Returns public actors who reposted a post, with an optional cursor for pagination.", - "operationId": "bluesky-post-reposted-by", + "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", "parameters": [ { - "description": "The post's at:// URI", - "in": "query", - "name": "uri", - "required": true, - "type": "string" - }, - { - "default": 25, - "description": "Page size, 1-100", + "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": "limit", - "type": "integer" + "name": "slug", + "type": "string", + "x-example": "jake-tapper-profile" }, { - "description": "Pagination cursor", + "description": "Canonical cnn.com/profiles/ URL, as an alternative to slug", "in": "query", - "name": "cursor", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.cnn.com/profiles/jake-tapper-profile" } ], "produces": [ @@ -214130,7 +242792,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postActorsResponseDoc" + "$ref": "#/definitions/cnn.authorResponseDoc" } }, "400": { @@ -214169,34 +242831,41 @@ "ApiKeyAuth": [] } ], - "summary": "List actors who reposted a Bluesky post", + "summary": "CNN profile page", "tags": [ - "Bluesky" + "CNN" ] } }, - "/bluesky/post-thread": { + "/cnn/headlines": { "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. Public data, sourced from the AT Protocol's public, credential-free AppView API.", - "operationId": "bluesky-post-thread", + "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": "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", + "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": "depth", - "type": "integer", - "x-example": 6 + "name": "section", + "type": "string" } ], "produces": [ @@ -214206,7 +242875,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postThreadResponseDoc" + "$ref": "#/definitions/cnn.headlinesResponseDoc" } }, "400": { @@ -214215,12 +242884,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -214245,27 +242908,27 @@ "ApiKeyAuth": [] } ], - "summary": "A Bluesky post and its reply tree", + "summary": "CNN section headlines", "tags": [ - "Bluesky" + "CNN" ] } }, - "/bluesky/posts": { + "/cnn/live-story": { "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": "Returns a CNN live story's title, description, update time, and chronological post updates. Provide a canonical cnn.com live-news URL.", + "operationId": "cnn-live-story", "parameters": [ { - "collectionFormat": "csv", - "description": "One or more at:// post URIs (1-25); repeat the parameter for multiple URIs", + "description": "Canonical cnn.com live-news URL", "in": "query", - "items": { - "type": "string" - }, - "name": "uris", + "name": "url", "required": true, - "type": "array" + "type": "string", + "x-example": "https://www.cnn.com/2026/08/26/world/live-news/iran-war-trump" } ], "produces": [ @@ -214275,7 +242938,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postsResponseDoc" + "$ref": "#/definitions/cnn.liveStoryResponseDoc" } }, "400": { @@ -214284,6 +242947,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -214308,27 +242977,96 @@ "ApiKeyAuth": [] } ], - "summary": "Look up Bluesky posts in a batch", + "summary": "CNN live story updates", "tags": [ - "Bluesky" + "CNN" ] } }, - "/bluesky/profile": { + "/coingecko/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Bluesky account's public profile: display name, description, avatar/banner images, and follower/follows/posts counts. Public data, sourced from the AT Protocol's public, credential-free AppView API.", - "operationId": "bluesky-profile", + "description": "Returns normalized CoinGecko category rows from the public categories page. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-categories", "parameters": [ { - "description": "A handle (e.g. bsky.app) or DID (e.g. did:plc:z72i7hdynmk6r22z27h6tvur)", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "actor", - "required": true, - "type": "string", - "x-example": "bsky.app" + "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": [ @@ -214338,7 +243076,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.profileResponseDoc" + "$ref": "#/definitions/coingecko.categoriesResponseDoc" } }, "400": { @@ -214347,18 +243085,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": { @@ -214377,39 +243103,109 @@ "ApiKeyAuth": [] } ], - "summary": "A Bluesky account's full public profile", + "summary": "CoinGecko categories", "tags": [ - "Bluesky" + "CoinGecko" ] } }, - "/bluesky/search-actors": { + "/coingecko/category/{slug}/coins": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bluesky accounts matching a query against display name, handle, and profile description. Public data, sourced from the AT Protocol's public, credential-free AppView API.", - "operationId": "bluesky-search-actors", + "description": "Returns normalized coin rows from a CoinGecko public category page. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-category-coins", "parameters": [ { - "description": "Search text", - "in": "query", - "name": "q", + "description": "CoinGecko category slug such as stablecoins", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "news" + "x-example": "stablecoins" }, { - "description": "Page size, 1-100", + "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", - "x-example": 25 + "type": "integer" }, { - "description": "Pagination cursor from a previous response's cursor field", + "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": "cursor", + "name": "vs_currency", "type": "string" } ], @@ -214420,7 +243216,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.searchActorsResponseDoc" + "$ref": "#/definitions/coingecko.categoryCoinsResponseDoc" } }, "400": { @@ -214429,8 +243225,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -214453,19 +243249,98 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bluesky accounts", + "summary": "CoinGecko category coins", "tags": [ - "Bluesky" + "CoinGecko" ] } }, - "/bluesky/trending-topics": { + "/coingecko/chains": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bluesky's current trending topics and suggested feeds, each with a link to its feed. Public data, sourced from the AT Protocol's public, credential-free AppView API. This surface is less stable than the rest of this family -- Bluesky may change its shape without notice.", - "operationId": "bluesky-trending-topics", + "description": "Returns normalized chain rows from the CoinGecko public website chains table. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-chains", + "parameters": [ + { + "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": [ "application/json" ], @@ -214473,11 +243348,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.trendingTopicsResponseDoc" + "$ref": "#/definitions/coingecko.chainsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -214500,84 +243375,104 @@ "ApiKeyAuth": [] } ], - "summary": "Bluesky's current trending topics", + "summary": "CoinGecko chains", "tags": [ - "Bluesky" + "CoinGecko" ] } }, - "/bonhams/auctions/search": { + "/coingecko/chains/{id}": { "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. Credential-free public data from bonhams.com's own search API.", - "operationId": "bonhams-auction-search", + "description": "Returns normalized sections from a CoinGecko public chain detail page. Sections are omitted when not present. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-chain", "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", + "description": "CoinGecko chain id such as ethereum", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "September 2026" + "x-example": "ethereum" }, { - "description": "Comma-separated auction types", - "enum": [ - "ONLINE", - "PUBLIC", - "EXHIBITION", - "OTHER" - ], + "description": "Rows per section to return, default 20, max 100", "in": "query", - "name": "auction_type", - "type": "string", - "x-example": "ONLINE" + "name": "limit", + "type": "integer" }, { - "description": "Filters by bidding/completion status, default upcoming", + "description": "Quote currency", "enum": [ - "upcoming", - "past", - "all" + "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": "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" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -214587,7 +243482,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.auctionSearchResponseDoc" + "$ref": "#/definitions/coingecko.chainDetailResponseDoc" } }, "400": { @@ -214596,6 +243491,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -214614,27 +243515,98 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bonhams auctions", + "summary": "CoinGecko chain detail", "tags": [ - "Bonhams" + "CoinGecko" ] } }, - "/bonhams/auctions/{id}": { + "/coingecko/coin/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Bonhams auction's normalized 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. Credential-free public data from bonhams.com's own search API.", - "operationId": "bonhams-auction-detail", + "description": "Returns normalized 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": "Bonhams auction id", + "description": "CoinGecko coin id such as bitcoin", "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "32001" + "x-example": "bitcoin" + }, + { + "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": [ @@ -214644,7 +243616,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.auctionDetailResponseDoc" + "$ref": "#/definitions/coingecko.coinResponseDoc" } }, "400": { @@ -214677,53 +243649,114 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bonhams auction's normalized facts", + "summary": "CoinGecko coin profile", "tags": [ - "Bonhams" + "CoinGecko" ] } }, - "/bonhams/auctions/{id}/lots": { + "/coingecko/coin/{id}/analysis": { "get": { "consumes": [ "application/json" ], - "description": "Returns the normalized lot listing for one Bonhams auction, optionally filtered by department and/or a free-text query. Credential-free public data from bonhams.com's own search API.", - "operationId": "bonhams-auction-lots", + "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": "Bonhams auction id", + "description": "CoinGecko coin id such as bitcoin", "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" + "x-example": "bitcoin" }, { - "description": "Comma-separated department names (not a fixed enum -- varies per auction)", + "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": "department", - "type": "string", - "x-example": "Silver" + "name": "vs_currency", + "type": "string" }, { - "description": "1-based page number, default 1", + "description": "Chart range", + "enum": [ + "24h", + "max" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "range", + "type": "string" }, { - "description": "Results per page, default 48, max 100", + "description": "Fetch optional CoinGecko chart annotations", "in": "query", - "name": "per_page", - "type": "integer" + "name": "include_annotations", + "type": "boolean" } ], "produces": [ @@ -214733,7 +243766,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.auctionLotsResponseDoc" + "$ref": "#/definitions/coingecko.analysisResponseDoc" } }, "400": { @@ -214742,6 +243775,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -214760,77 +243799,104 @@ "ApiKeyAuth": [] } ], - "summary": "List the lots in a Bonhams auction", + "summary": "CoinGecko coin chart analysis", "tags": [ - "Bonhams" + "CoinGecko" ] } }, - "/bonhams/lots/search": { + "/coingecko/exchange/{id}": { "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. Credential-free public data from bonhams.com's own search API.", - "operationId": "bonhams-lot-search", + "description": "Returns normalized profile stats and market rows from a CoinGecko public exchange page. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-exchange", "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", + "description": "CoinGecko exchange id such as binance", + "in": "path", + "name": "id", + "required": true, "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" + "x-example": "binance" }, { - "description": "Maximum estimate, in GBP (converted from each lot's own sale currency), inclusive. Omit or 0 for no maximum.", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "max_price_gbp", - "type": "number" + "name": "limit", + "type": "integer" }, { - "description": "Result order. Default: Typesense relevance ranking when q is set, otherwise recency (most recently active sale date first).", + "description": "Quote currency", "enum": [ - "relevance", - "recency", - "price_high", - "price_low", - "lot_number" + "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", + "name": "vs_currency", "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": [ @@ -214840,7 +243906,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.lotSearchResponseDoc" + "$ref": "#/definitions/coingecko.exchangeDetailResponseDoc" } }, "400": { @@ -214849,6 +243915,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -214867,35 +243939,114 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bonhams lots across every auction", + "summary": "CoinGecko exchange detail", "tags": [ - "Bonhams" + "CoinGecko" ] } }, - "/bonhams/lots/{auctionId}/{lotNumber}": { + "/coingecko/exchanges": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Bonhams lot's normalized 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. Credential-free public data from bonhams.com's own search API.", - "operationId": "bonhams-lot-detail", + "description": "Returns normalized exchange rows from CoinGecko public website exchange tables. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-exchanges", "parameters": [ { - "description": "Bonhams auction id", - "in": "path", - "name": "auctionId", - "required": true, - "type": "string", - "x-example": "32001" + "description": "Exchange table kind, default spot", + "enum": [ + "spot", + "dex", + "derivatives", + "perp_dex" + ], + "in": "query", + "name": "kind", + "type": "string" }, { - "description": "Bonhams lot number", - "in": "path", - "name": "lotNumber", - "required": true, - "type": "string", - "x-example": "2" + "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": [ @@ -214905,7 +244056,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.lotDetailResponseDoc" + "$ref": "#/definitions/coingecko.exchangesResponseDoc" } }, "400": { @@ -214914,12 +244065,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -214938,27 +244083,96 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bonhams lot's normalized facts", + "summary": "CoinGecko exchanges", "tags": [ - "Bonhams" + "CoinGecko" ] } }, - "/booking-attractions/detail": { + "/coingecko/gainers-losers": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Booking.com attraction's detail page.", - "operationId": "booking-attractions-detail", + "description": "Returns normalized rows from CoinGecko's public crypto gainers and losers table. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-gainers-losers", "parameters": [ { - "description": "Attraction slug, from a prior attraction search result", + "description": "Rows per section to return, default 20, max 100", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "pre4ksvwxdrd-seine-river-sightseeing-cruise" + "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": [ @@ -214968,7 +244182,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingAttractionDetailResponseDoc" + "$ref": "#/definitions/coingecko.gainersLosersResponseDoc" } }, "400": { @@ -214977,14 +244191,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" } @@ -215001,43 +244209,19 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com attraction detail", + "summary": "CoinGecko crypto gainers and losers", "tags": [ - "Booking" + "CoinGecko" ] } }, - "/booking-attractions/reviews": { + "/coingecko/global": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized guest reviews for a Booking.com attraction.", - "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 - } - ], + "description": "Returns normalized global market metrics from CoinGecko's public charts page.", + "operationId": "coingecko-global", "produces": [ "application/json" ], @@ -215045,7 +244229,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingAttractionReviewsResponseDoc" + "$ref": "#/definitions/coingecko.globalResponseDoc" } }, "400": { @@ -215054,14 +244238,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" } @@ -215078,70 +244256,52 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com attraction reviews", + "summary": "CoinGecko global market snapshot", "tags": [ - "Booking" + "CoinGecko" ] } }, - "/booking-attractions/search": { + "/coingecko/global/charts": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "Returns normalized global chart series from public CoinGecko website JSON endpoints.", + "operationId": "coingecko-global-charts", "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", + "description": "Chart kind, default total_market_cap", + "enum": [ + "total_market_cap", + "bitcoin_dominance", + "altcoin_market_cap", + "defi_market_cap" + ], "in": "query", - "name": "end_date", - "type": "string", - "x-example": "2026-09-15" + "name": "kind", + "type": "string" }, { - "description": "1-based result page, default 1", + "description": "Chart range, default 90d", + "enum": [ + "24h", + "7d", + "14d", + "30d", + "90d", + "1y", + "max" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "range", + "type": "string" }, { - "description": "Results per page, 1-30, default 15", + "description": "Rows per series to return, default 120, max 500", "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" + "type": "integer" } ], "produces": [ @@ -215151,7 +244311,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingAttractionSearchResponseDoc" + "$ref": "#/definitions/coingecko.globalChartsResponseDoc" } }, "400": { @@ -215160,14 +244320,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" } @@ -215184,51 +244338,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search Booking.com attractions", + "summary": "CoinGecko global chart series", "tags": [ - "Booking" + "CoinGecko" ] } }, - "/booking-flights/autocomplete": { + "/coingecko/learn/articles": { "get": { "consumes": [ "application/json" ], - "description": "Returns Booking.com flight-search location suggestions (airports/cities) for a query string.", - "operationId": "booking-flights-autocomplete", + "description": "Returns normalized article cards from CoinGecko Learn public pages.", + "operationId": "coingecko-learn-articles", "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", + "description": "Learn category, default all", "enum": [ - "to", - "from" + "all", + "latest", + "airdrop-guides", + "coins-and-tokens", + "guides", + "wallets-and-bridges", + "api", + "reviews" ], "in": "query", - "name": "type", + "name": "category", "type": "string" }, { - "description": "Optional origin location code, biases results by proximity", - "in": "query", - "name": "origin", - "type": "string", - "x-example": "SGN" - }, - { - "description": "Origin location type", + "description": "Rows to return, default 20, max 50", "in": "query", - "name": "origin_type", - "type": "string", - "x-example": "AIRPORT" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -215238,7 +244382,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingFlightAutocompleteResponseDoc" + "$ref": "#/definitions/coingecko.learnArticlesResponseDoc" } }, "400": { @@ -215247,14 +244391,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" } @@ -215271,102 +244409,102 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com flight autocomplete", + "summary": "CoinGecko Learn articles", "tags": [ - "Booking" + "CoinGecko" ] } }, - "/booking-flights/search": { + "/coingecko/markets": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized round-trip or one-way flight offers between two Booking.com flight-search locations.", - "operationId": "booking-flights-search", + "description": "Returns normalized cryptocurrency market rows from CoinGecko public pages. This endpoint supports the documented `vs_currency` enum and is not intended for real-time trading.", + "operationId": "coingecko-markets", "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", + "description": "Page number, default 1", "in": "query", - "name": "children", - "type": "integer", - "x-example": 0 + "name": "page", + "type": "integer" }, { - "description": "Cabin class, default ECONOMY", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "cabin_class", - "type": "string", - "x-example": "ECONOMY" + "name": "limit", + "type": "integer" }, { - "description": "Result sort order, default BEST", + "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": "sort", - "type": "string", - "x-example": "BEST" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -215376,7 +244514,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingFlightSearchResponseDoc" + "$ref": "#/definitions/coingecko.marketsResponseDoc" } }, "400": { @@ -215391,8 +244529,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -215409,27 +244547,102 @@ "ApiKeyAuth": [] } ], - "summary": "Search Booking.com flights", + "summary": "CoinGecko markets", "tags": [ - "Booking" + "CoinGecko" ] } }, - "/booking/hotel-detail": { + "/coingecko/new-coins": { "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 normalized rows from CoinGecko's public new cryptocurrencies table. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-new-coins", "parameters": [ { - "description": "Booking.com hotel id, from a prior search's property id", + "description": "Page number, default 1", "in": "query", - "name": "hotel_id", - "required": true, - "type": "integer", - "x-example": 2845972 + "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": [ @@ -215439,7 +244652,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingHotelDetailResponseDoc" + "$ref": "#/definitions/coingecko.newCoinsResponseDoc" } }, "400": { @@ -215448,14 +244661,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" } @@ -215472,70 +244679,25 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com hotel detail", + "summary": "CoinGecko new cryptocurrencies", "tags": [ - "Booking" + "CoinGecko" ] } }, - "/booking/reviews": { + "/coingecko/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized guest reviews for a Booking.com hotel, with an optional free-text search over review content.", - "operationId": "booking-reviews", + "description": "Returns normalized article cards from CoinGecko's public news page.", + "operationId": "coingecko-news", "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", + "description": "Rows to return, default 20, max 50", "in": "query", "name": "limit", - "type": "integer", - "x-example": 10 + "type": "integer" } ], "produces": [ @@ -215545,7 +244707,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingReviewsResponseDoc" + "$ref": "#/definitions/coingecko.newsResponseDoc" } }, "400": { @@ -215554,14 +244716,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" } @@ -215578,71 +244734,110 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com hotel reviews", + "summary": "CoinGecko news cards", "tags": [ - "Booking" + "CoinGecko" ] } }, - "/booking/search": { + "/coingecko/nft/category/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Booking.com hotel search results for a destination and date range.", - "operationId": "booking-search", + "description": "Returns normalized NFT collection rows from a CoinGecko public NFT category page. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-nft-category", "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", + "description": "CoinGecko NFT category slug such as metaverse", + "in": "path", + "name": "slug", "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 + "x-example": "metaverse" }, { - "description": "Number of rooms, 1-8, default 1", + "description": "Page number, default 1", "in": "query", - "name": "rooms", - "type": "integer", - "x-example": 1 + "name": "page", + "type": "integer" }, { - "description": "Number of children, 0-9", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "children", - "type": "integer", - "x-example": 0 + "name": "limit", + "type": "integer" }, { - "description": "1-based result page, default 1", + "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": [ @@ -215652,7 +244847,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingSearchResponseDoc" + "$ref": "#/definitions/coingecko.nftCategoryResponseDoc" } }, "400": { @@ -215667,8 +244862,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -215685,195 +244880,104 @@ "ApiKeyAuth": [] } ], - "summary": "Search Booking.com hotels", + "summary": "CoinGecko NFT category", "tags": [ - "Booking" + "CoinGecko" ] } }, - "/boots/search": { + "/coingecko/nfts": { "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": "Returns normalized NFT collection rows from the CoinGecko public website NFT table. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-nfts", "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", + "description": "Page number, default 1", "in": "query", "name": "page", "type": "integer" }, { - "default": 48, - "description": "Results per page from 1 through 48", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "page_size", + "name": "limit", "type": "integer" }, { - "default": "relevance", - "description": "Sort: relevance, price_low_to_high, price_high_to_low, top_rated, best_seller, or newest", + "description": "Quote currency", "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": [] + "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" } ], - "summary": "Get Boots UK search-box suggestions", - "tags": [ - "Boots" - ] - } - }, - "/bostonglobe/news": { - "get": { - "description": "Returns recent Boston Globe story metadata and RSS summaries from its public Arc feed. The feed also carries content:encoded article prose, which this endpoint intentionally omits. Article bodies, sections, headlines-by-section, and author profiles are not exposed because the public contracts are not fully verified and some stories require a subscription.", - "operationId": "bostonglobe-news", "produces": [ "application/json" ], @@ -215881,11 +244985,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/coingecko.nftsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -215902,70 +245012,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Boston Globe top stories", + "summary": "CoinGecko NFT collections", "tags": [ - "Boston Globe" + "CoinGecko" ] } }, - "/boxofficemojo/brand": { + "/coingecko/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized release rows from a public Box Office Mojo brand page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-brand", + "description": "Returns normalized CoinGecko search sections from the public website search JSON. Empty valid searches return empty arrays.", + "operationId": "coingecko-search", "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", + "description": "Search query", "in": "query", - "name": "url", + "name": "q", + "required": true, "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" + "x-example": "bitcoin" }, { - "description": "Row offset for pagination (page size 100)", + "description": "Rows per section to return, default 10, max 50", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "limit", + "type": "integer" } ], "produces": [ @@ -215975,7 +245048,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" + "$ref": "#/definitions/coingecko.searchResponseDoc" } }, "400": { @@ -215984,18 +245057,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": { @@ -216014,40 +245075,25 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo brand detail", + "summary": "CoinGecko discovery search", "tags": [ - "Box Office Mojo" + "CoinGecko" ] } }, - "/boxofficemojo/brands": { + "/coingecko/token-unlocks": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from Box Office Mojo's public brand chart.", - "operationId": "boxofficemojo-brands", + "description": "Returns normalized rows from CoinGecko's public incoming token unlocks page.", + "operationId": "coingecko-token-unlocks", "parameters": [ { - "description": "Sort field", - "enum": [ - "totalGross", - "numReleases", - "grossToDate" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "sortDir", - "type": "string" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -216057,7 +245103,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" + "$ref": "#/definitions/coingecko.tokenUnlocksResponseDoc" } }, "400": { @@ -216066,12 +245112,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -216090,35 +245130,122 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo brand chart", + "summary": "CoinGecko incoming token unlocks", "tags": [ - "Box Office Mojo" + "CoinGecko" ] } }, - "/boxofficemojo/calendar": { + "/coingecko/treasuries": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized grouped rows from Box Office Mojo's public domestic release schedule. Provide `year` and `month`.", - "operationId": "boxofficemojo-calendar", + "description": "Returns normalized entity rows from CoinGecko's public crypto treasuries tables. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-treasuries", "parameters": [ { - "description": "Calendar year, from 1921 through 2100", + "description": "Treasury asset filter, default all", + "enum": [ + "all", + "bitcoin", + "ethereum", + "solana", + "bnb", + "xrp", + "tron" + ], "in": "query", - "name": "year", - "required": true, - "type": "integer", - "x-example": 2026 + "name": "asset", + "type": "string" }, { - "description": "Calendar month, 1 through 12", + "description": "Treasury holder type filter, default all", + "enum": [ + "all", + "companies", + "governments" + ], "in": "query", - "name": "month", - "required": true, - "type": "integer", - "x-example": 9 + "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" } ], "produces": [ @@ -216128,7 +245255,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.calendarResponseDoc" + "$ref": "#/definitions/coingecko.treasuriesResponseDoc" } }, "400": { @@ -216137,12 +245264,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -216161,26 +245282,96 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic release schedule", + "summary": "CoinGecko crypto treasuries", "tags": [ - "Box Office Mojo" + "CoinGecko" ] } }, - "/boxofficemojo/calendar/changes": { + "/coingecko/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized grouped rows from Box Office Mojo's public domestic release-schedule changes page.", - "operationId": "boxofficemojo-calendar-changes", + "description": "Returns deduped trending coins and categories from the public CoinGecko highlights page. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-trending", "parameters": [ { - "description": "Changes page offset. Allowed values: 0, 30, 60, ... 780", + "description": "Rows per section to return, default 20, max 50", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "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": [ @@ -216190,7 +245381,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.calendarChangesResponseDoc" + "$ref": "#/definitions/coingecko.trendingResponseDoc" } }, "400": { @@ -216199,12 +245390,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -216223,27 +245408,33 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic release schedule changes", + "summary": "CoinGecko trending highlights", "tags": [ - "Box Office Mojo" + "CoinGecko" ] } }, - "/boxofficemojo/calendar/date": { + "/colehaan/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized release rows for one public Box Office Mojo domestic release-schedule date.", - "operationId": "boxofficemojo-calendar-date", + "description": "Returns normalized 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": "Calendar date in YYYY-MM-DD format", + "description": "1-based page, defaults to 1", "in": "query", - "name": "date", - "required": true, - "type": "string", - "x-example": "2026-09-04" + "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": [ @@ -216253,7 +245444,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.calendarDateResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -216262,24 +245453,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": { @@ -216292,27 +245471,41 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic release schedule date", + "summary": "List Cole Haan collections", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/date/domestic": { + "/colehaan/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from Box Office Mojo's public domestic daily chart. Empty upstream daily pages return a typed not-found error rather than an empty success.", - "operationId": "boxofficemojo-date-domestic", + "description": "Returns normalized 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": "Domestic box office date in YYYY-MM-DD format", - "in": "query", - "name": "date", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "2025-12-25" + "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": [ @@ -216322,7 +245515,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.domesticDateResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -216343,12 +245536,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -216361,70 +245548,33 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic daily box office", + "summary": "List Cole Haan collection products", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/franchise": { + "/colehaan/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized release rows from a public Box Office Mojo franchise page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-franchise", + "description": "Returns normalized static pages from Cole Haan (https://www.colehaan.com). The storefront URL is fixed server-side.", + "operationId": "colehaan-pages", "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" - ], + "description": "1-based page, defaults to 1", "in": "query", - "name": "sortDir", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Row offset for pagination (page size 100)", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "offset", + "name": "limit", "type": "integer", - "x-example": 0 + "x-example": 50 } ], "produces": [ @@ -216434,7 +245584,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -216443,24 +245593,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": { @@ -216473,40 +245611,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo franchise detail", + "summary": "List Cole Haan static pages", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/franchises": { + "/colehaan/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from Box Office Mojo's public franchise chart.", - "operationId": "boxofficemojo-franchises", + "description": "Returns normalized static page detail for one Cole Haan (https://www.colehaan.com) page handle. The storefront URL is fixed server-side.", + "operationId": "colehaan-page", "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" + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "page-handle" } ], "produces": [ @@ -216516,7 +245641,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -216525,14 +245650,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" } @@ -216549,70 +245674,33 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo franchise chart", + "summary": "Get a Cole Haan static page", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/genre": { + "/colehaan/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized release rows from a public Box Office Mojo genre page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-genre", + "description": "Returns normalized products from Cole Haan's (https://www.colehaan.com) public 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": "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" - ], + "description": "1-based page, defaults to 1", "in": "query", - "name": "sortDir", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Row offset for pagination (page size 100)", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "offset", + "name": "limit", "type": "integer", - "x-example": 0 + "x-example": 50 } ], "produces": [ @@ -216622,7 +245710,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -216631,24 +245719,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": { @@ -216661,40 +245737,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo genre detail", + "summary": "List Cole Haan products", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/genres": { + "/colehaan/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from Box Office Mojo's public genre chart.", - "operationId": "boxofficemojo-genres", + "description": "Returns normalized 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": "Sort field", - "enum": [ - "totalGross", - "numTitles", - "grossToDate" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sortDir", - "type": "string" + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "product-handle" } ], "produces": [ @@ -216704,7 +245767,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -216713,14 +245776,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" } @@ -216737,37 +245800,45 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo genre chart", + "summary": "Get a Cole Haan product", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/lifetime-grosses": { + "/colehaan/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from Box Office Mojo's credential-free lifetime gross chart. `area` values: `worldwide`, `domestic`.", - "operationId": "boxofficemojo-lifetime-grosses", + "description": "Returns normalized recommended products for one Cole Haan (https://www.colehaan.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "colehaan-product-recommendations", "parameters": [ { - "description": "Chart area. Allowed values: worldwide, domestic", - "enum": [ - "worldwide", - "domestic" - ], - "in": "query", - "name": "area", + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "worldwide" + "x-example": "product-handle" }, { - "description": "Chart page offset. Allowed values: 0, 200, 400, 600, 800", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "offset", + "name": "limit", "type": "integer", - "x-example": 0 + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], + "in": "query", + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -216777,7 +245848,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.lifetimeGrossesResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -216786,14 +245857,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" } @@ -216810,40 +245881,41 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo lifetime gross chart", + "summary": "List Cole Haan product recommendations", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/release": { + "/colehaan/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Box Office Mojo release summary fields and domestic daily rows from a public release page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-release", + "description": "Returns products, collections, and query suggestions from Cole Haan's (https://www.colehaan.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "colehaan-search-suggest", "parameters": [ { - "description": "Box Office Mojo release id", + "description": "Search query", "in": "query", - "name": "id", + "name": "q", + "required": true, "type": "string", - "x-example": "rl3389031937" + "x-example": "wool" }, { - "description": "Box Office Mojo release path", + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", "in": "query", - "name": "path", + "name": "types", "type": "string", - "x-example": "/release/rl3389031937/" + "x-example": "product,collection,query" }, { - "description": "Absolute https://www.boxofficemojo.com release URL", + "description": "Maximum results per type, defaults to 10 and supports up to 20", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.boxofficemojo.com/release/rl3389031937/" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -216853,7 +245925,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.releaseResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -216862,24 +245934,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": { @@ -216892,40 +245952,42 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo release detail", + "summary": "Get Cole Haan search suggestions", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/release-group": { + "/colehaan/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized market release rows grouped by region from a public Box Office Mojo release-group page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-release-group", + "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": "Box Office Mojo release-group id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "gr3486798341" - }, - { - "description": "Box Office Mojo release-group path", + "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": "path", + "name": "type", "type": "string", - "x-example": "/releasegroup/gr3486798341/" + "x-example": "products" }, { - "description": "Absolute https://www.boxofficemojo.com release-group URL", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.boxofficemojo.com/releasegroup/gr3486798341/" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -216935,7 +245997,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.releaseGroupResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -216944,24 +246006,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": { @@ -216974,42 +246024,19 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo release group detail", + "summary": "List Cole Haan sitemap URLs", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/showdown": { + "/colehaan/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized release comparison metrics from a public 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/" - } - ], + "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" ], @@ -217017,7 +246044,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.showdownResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -217026,24 +246053,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": { @@ -217056,19 +246071,19 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo showdown detail", + "summary": "List Cole Haan sitemaps", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/showdowns": { + "/colehaan/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized comparison rows from Box Office Mojo's public showdowns page.", - "operationId": "boxofficemojo-showdowns", + "description": "Returns normalized storefront metadata for Cole Haan (https://www.colehaan.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "colehaan-store", "produces": [ "application/json" ], @@ -217076,17 +246091,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.showdownsResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, - "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" } @@ -217103,40 +246118,24 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo showdowns", + "summary": "Get Cole Haan store metadata", "tags": [ - "Box Office Mojo" + "Cole Haan" ] } }, - "/boxofficemojo/title": { + "/collider/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Box Office Mojo title release-group and market-gross tables from a public title page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-title", + "description": "Returns public Collider article metadata and body paragraphs from a canonical article URL.", + "operationId": "collider-article", "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", + "description": "Canonical Collider article URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.boxofficemojo.com/title/tt0499549/" + "x-example": "https://collider.com/saw-new-movie-mike-p-nelson-director/" } ], "produces": [ @@ -217146,7 +246145,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.titleResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -217167,12 +246166,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -217185,35 +246178,24 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo title detail", + "summary": "Get Collider article content", "tags": [ - "Box Office Mojo" + "Collider" ] } }, - "/boxofficemojo/weekend/domestic": { + "/collider/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized rows from Box Office Mojo's public domestic weekend chart. Empty upstream weekend pages return a typed not-found error rather than an empty success.", - "operationId": "boxofficemojo-weekend-domestic", + "description": "Returns a Collider author's byline metadata, biography, social links, and recent articles from a canonical author URL.", + "operationId": "collider-author", "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", + "description": "Canonical Collider author URL", "in": "query", - "name": "week", + "name": "url", "required": true, - "type": "integer", - "x-example": 52 + "type": "string", + "x-example": "https://collider.com/author/hannah-hunt/" } ], "produces": [ @@ -217223,7 +246205,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.domesticWeekendResponseDoc" + "$ref": "#/definitions/publicnews.colliderAuthorResponseDoc" } }, "400": { @@ -217238,18 +246220,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": { @@ -217262,35 +246232,74 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic weekend box office", + "summary": "Get a Collider author profile", "tags": [ - "Box Office Mojo" + "Collider" ] } }, - "/boxofficemojo/weekend/domestic/by-distributor": { + "/collider/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized distributor rows from Box Office Mojo's public 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 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": "Domestic weekend year, from 1982 through 2100", - "in": "query", - "name": "year", - "required": true, - "type": "integer", - "x-example": 2025 - }, - { - "description": "Weekend number, 1 through 53", + "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": "week", + "name": "section", "required": true, - "type": "integer", - "x-example": 52 + "type": "string", + "x-example": "movie-tv-news" } ], "produces": [ @@ -217300,7 +246309,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.weekendDistributorResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -217309,24 +246318,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": { @@ -217339,37 +246336,16 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic weekend by distributor", + "summary": "Get Collider section headlines", "tags": [ - "Box Office Mojo" + "Collider" ] } }, - "/boxofficemojo/weekend/domestic/estimates": { + "/collider/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized estimate-vs-actual rows from Box Office Mojo's public 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 - } - ], + "description": "Returns fresh Collider top stories from its public RSS feed.", + "operationId": "collider-news", "produces": [ "application/json" ], @@ -217377,19 +246353,7 @@ "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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -217398,12 +246362,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -217416,29 +246374,16 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic weekend estimates", + "summary": "Get Collider top stories", "tags": [ - "Box Office Mojo" + "Collider" ] } }, - "/boxofficemojo/year/domestic": { + "/collider/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized release rows from Box Office Mojo's public domestic yearly calendar-grosses chart.", - "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 - } - ], + "description": "Returns the public Collider RSS section inventory used by the headlines endpoint.", + "operationId": "collider-sections", "produces": [ "application/json" ], @@ -217446,13 +246391,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.domesticYearResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -217460,18 +246399,6 @@ "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": [ @@ -217479,29 +246406,19 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic yearly box office", + "summary": "Get Collider RSS sections", "tags": [ - "Box Office Mojo" + "Collider" ] } }, - "/boxofficemojo/year/worldwide": { + "/comc/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized release-group rows from Box Office Mojo's public worldwide yearly chart.", - "operationId": "boxofficemojo-year-worldwide", - "parameters": [ - { - "description": "Box office year, from 1977 through 2100", - "in": "query", - "name": "year", - "required": true, - "type": "integer", - "x-example": 2025 - } - ], + "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" ], @@ -217509,13 +246426,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.worldwideYearResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/comc.categoriesResponseDoc" } }, "429": { @@ -217524,12 +246435,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -217542,50 +246447,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo worldwide yearly box office", + "summary": "List COMC categories", "tags": [ - "Box Office Mojo" + "COMC" ] } }, - "/brand/retrieve": { + "/comc/listing": { "get": { "consumes": [ "application/json" ], - "description": "Fetches a domain's homepage and Web App Manifest and extracts a normalized brand profile (title, description, brand colors normalized to 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 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": "Domain to retrieve brand data for, e.g. context.dev", + "description": "Required. The handle from a comc_search result (or the equivalent comc.com card URL path).", "in": "query", - "name": "domain", + "name": "handle", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "Cards/Football/2021/Panini_Absolute_-_Base_-_Red/36/Josh_Allen/17779360" } ], "produces": [ @@ -217595,7 +246477,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brand.retrieveResponseDoc" + "$ref": "#/definitions/comc.listingResponseDoc" } }, "400": { @@ -217604,18 +246486,6 @@ "$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": { @@ -217634,114 +246504,106 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve brand data by domain", + "summary": "Get COMC card listing detail", "tags": [ - "Brand" + "COMC" ] } }, - "/brave/images": { + "/comc/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Brave image search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Brave Search image HTML and return 503 when Brave serves a challenge page or unusable HTML.", - "operationId": "brave-images", + "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": "Search query", + "description": "Optional. One of comc_categories' slug values. Omit to search all categories.", "in": "query", - "name": "q", - "required": true, + "name": "category", "type": "string", - "x-example": "openai" + "x-example": "Baseball" }, { - "description": "Zero-based Brave result page; defaults to 0", + "description": "Optional free-text search query.", "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "query", + "type": "string", + "x-example": "mike trout" }, { - "description": "Results to return; defaults to 10, clamped to 1..50", + "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", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "sort", + "type": "string", + "x-example": "r" }, { - "description": "Brave result country; defaults to us", + "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).", "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" + "aUngraded", + "aGraded", + "aAftermarketAuto", + "aAfterAutoGraded" ], "in": "query", - "name": "country", + "name": "condition", "type": "string", - "x-example": "us" + "x-example": "aGraded" }, { - "description": "Brave UI language; defaults to en-us", + "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": [ - "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" + 6, + 8, + 10, + 12, + 14, + 15, + 16, + 18, + 20, + 24, + 30, + 40, + 50, + 64, + 100 ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "page_size", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -217751,35 +246613,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.imagesResponseDoc" + "$ref": "#/definitions/comc.searchResponseDoc" } }, "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", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Brave upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -217790,142 +246640,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Brave image results", + "summary": "Search COMC card listings", "tags": [ - "Brave" + "COMC" ] } }, - "/brave/news": { + "/congress/report": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Brave news search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Brave Search news HTML and return 503 when Brave serves a challenge page or unusable HTML.", - "operationId": "brave-news", + "description": "Fetch a single disclosure report by its filing_url (as returned by", + "operationId": "congress-report", "parameters": [ { - "description": "Search query", + "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": "q", + "name": "url", "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" + "x-example": "https://efdsearch.senate.gov/search/view/annual/cc198326-0f50-4f47-8b03-a5c6440f400f/" } ], "produces": [ @@ -217935,35 +246670,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.newsResponseDoc" + "$ref": "#/definitions/congress.reportResponseDoc" } }, "400": { - "description": "Missing or invalid query", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "No results found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Brave upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -217974,275 +246703,346 @@ "ApiKeyAuth": [] } ], - "summary": "Search Brave news results", + "summary": "Fetch and parse a congressional disclosure report", "tags": [ - "Brave" + "Congress" ] } }, - "/brave/search": { + "/congress/stock-disclosures": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "Search public congressional stock disclosure filings (House or Senate)", + "operationId": "congress-stock-disclosures", "parameters": [ { - "description": "Search query", + "description": "Chamber filter. Allowed values: house, senate.", + "enum": [ + "house", + "senate" + ], "in": "query", - "name": "q", - "required": true, + "name": "chamber", "type": "string", - "x-example": "openai" + "x-example": "house" }, { - "description": "Zero-based Brave result page", + "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", - "minimum": 0, - "name": "offset", - "type": "integer", - "x-example": 1 + "name": "member", + "type": "string" }, { - "description": "Brave result country; defaults to us", + "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", + "type": "string", + "x-example": "Warren" + }, + { + "description": "Deprecated unsupported parameter; any non-empty value returns a validation error and the parameter is planned for removal.", + "in": "query", + "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": [ - "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" + "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": "country", + "name": "state", "type": "string", - "x-example": "us" + "x-example": "CA" }, { - "description": "Brave UI language; defaults to en-us", + "description": "Senator state filter (Senate only, 2-letter code).", "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" + "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": "lang", + "name": "senator_state", "type": "string", - "x-example": "en-us" + "x-example": "MA" }, { - "description": "Preset time filter: any, day, week, month, year, or custom", + "description": "Candidate state filter (Senate only, 2-letter code).", "enum": [ - "any", - "day", - "week", - "month", - "year", - "custom" + "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": "time_range", + "name": "candidate_state", + "type": "string", + "x-example": "TX" + }, + { + "description": "House district filter (House only).", + "in": "query", + "name": "district", "type": "string" }, { - "description": "Custom start date in YYYY-MM-DD; requires date_to", + "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": "date_from", + "name": "filer_type", "type": "string", - "x-example": "2026-03-01" + "x-example": "candidate" }, { - "description": "Custom end date in YYYY-MM-DD; requires date_from", + "description": "House candidate-search election year filter (requires filer_type=candidate).", "in": "query", - "name": "date_to", + "name": "election_year", "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" - } + "x-example": "2024" }, - "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.", - "operationId": "brave-suggest", - "parameters": [ { - "description": "Search query prefix", + "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": "q", - "required": true, + "name": "report_type", "type": "string", - "x-example": "openai" + "x-example": "annual,periodic_transaction" }, { - "description": "Suggestions to return; defaults to 10, clamped to 1..12", + "description": "Minimum filing date. House accepts YYYY. Senate accepts YYYY or MM/DD/YYYY and defaults to 2012 when omitted.", "in": "query", - "maximum": 12, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "from", + "type": "string", + "x-example": "01/01/2024" }, { - "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": "Maximum filing date. House accepts YYYY. Senate accepts YYYY or MM/DD/YYYY.", "in": "query", - "name": "country", + "name": "to", "type": "string", - "x-example": "us" + "x-example": "12/31/2024" }, { - "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": "Sort key. Allowed values: name_asc, name_desc, office_asc, office_desc, filing_year_asc, filing_year_desc.", + "enum": [ + "name_asc", + "name_desc", + "office_asc", + "office_desc", + "filing_year_asc", + "filing_year_desc" ], "in": "query", - "name": "lang", + "name": "sort", "type": "string", - "x-example": "en-us" + "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", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -218252,29 +247052,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.suggestResponseDoc" + "$ref": "#/definitions/congress.stockDisclosuresResponseDoc" } }, "400": { - "description": "Missing or invalid query", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Brave upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -218285,142 +247079,28 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Brave search queries", + "summary": "Search congressional stock-disclosure filings", "tags": [ - "Brave" + "Congress" ] } }, - "/brave/videos": { - "get": { + "/contact": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized Brave video search results for a query string. Locale defaults to country=us and lang=en-us. Results are fetched from public Brave Search video HTML and return 503 when Brave serves a challenge page or unusable HTML.", - "operationId": "brave-videos", + "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 query", - "in": "query", - "name": "q", + "description": "Website URL payload", + "in": "body", + "name": "option", "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" + "schema": { + "$ref": "#/definitions/contact.ContactRequest" + } } ], "produces": [ @@ -218430,17 +247110,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.videosResponseDoc" + "$ref": "#/definitions/contact.contactResponseDoc" } }, "400": { - "description": "Missing or invalid query", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No results found", + "description": "Invalid input or missing URL", "schema": { "$ref": "#/definitions/app.Response" } @@ -218452,13 +247126,7 @@ } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Brave upstream request failed", + "description": "Internal server error during contact extraction", "schema": { "$ref": "#/definitions/app.Response" } @@ -218469,24 +247137,26 @@ "ApiKeyAuth": [] } ], - "summary": "Search Brave video results", + "summary": "Contact API — emails, socials and phones for a website", "tags": [ - "Brave" + "Web" ] } }, - "/breitbart/article": { + "/costco/categories": { "get": { - "description": "Returns public Breitbart article metadata and body paragraphs from a canonical article URL.", - "operationId": "breitbart-article", + "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", "parameters": [ { - "description": "Canonical Breitbart article URL", + "description": "Search text to scope the returned categories to, e.g. \\", "in": "query", - "name": "url", - "required": true, + "name": "query", "type": "string", - "x-example": "https://www.breitbart.com/politics/2026/09/22/example-story/" + "x-example": "refrigerator" } ], "produces": [ @@ -218496,17 +247166,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/costco.categoriesResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -218523,37 +247187,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Breitbart article content", + "summary": "Get Costco category facets", "tags": [ - "Breitbart" + "Costco" ] } }, - "/breitbart/author": { + "/costco/product/{id}": { "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": "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": "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", + "description": "Costco product id, e.g. from a search result's id field or a product page URL's \\", + "in": "path", + "name": "id", + "required": true, "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 + "x-example": "4000103922" } ], "produces": [ @@ -218563,7 +247217,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.breitbartAuthorResponseDoc" + "$ref": "#/definitions/costco.productResponseDoc" } }, "400": { @@ -218578,6 +247232,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -218590,46 +247250,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Breitbart author profile", + "summary": "Get a Costco product's detail", "tags": [ - "Breitbart" + "Costco" ] } }, - "/breitbart/headlines": { + "/costco/product/{id}/availability": { "get": { - "description": "Returns fresh headlines from one public Breitbart section hub page.", - "operationId": "breitbart-headlines", + "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", "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" - ], + "description": "Costco product id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1942114" + }, + { + "description": "US destination ZIP code", "in": "query", - "name": "section", + "name": "postal_code", "required": true, - "type": "string" + "type": "string", + "x-example": "98101" + }, + { + "description": "US destination two-letter state code", + "in": "query", + "name": "state", + "required": true, + "type": "string", + "x-example": "WA" } ], "produces": [ @@ -218639,7 +247296,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/costco.productAvailabilityResponseDoc" } }, "400": { @@ -218648,6 +247305,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -218660,16 +247323,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Breitbart section headlines", + "summary": "Get a Costco product's delivery estimate", "tags": [ - "Breitbart" + "Costco" ] } }, - "/breitbart/news": { + "/costco/product/{id}/reviews": { "get": { - "description": "Returns fresh Breitbart top stories from its public RSS feed.", - "operationId": "breitbart-news", + "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", + "parameters": [ + { + "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": [ "application/json" ], @@ -218677,45 +247353,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/costco.productReviewsResponseDoc" } }, - "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" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Breitbart top stories", - "tags": [ - "Breitbart" - ] - } - }, - "/breitbart/sections": { - "get": { - "description": "Returns the live-verified public Breitbart editorial section inventory used by the headlines endpoint.", - "operationId": "breitbart-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "503": { + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/app.Response" } } }, @@ -218724,33 +247380,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Breitbart sections", + "summary": "Get a Costco product's reviews", "tags": [ - "Breitbart" + "Costco" ] } }, - "/brooklinen/collections": { + "/costco/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 public Costco products matching a text query and/or a category slug: title, brand, model, image, and rating for each result. Public data sourced from Costco's own search backend.", + "operationId": "costco-search", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Search text", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "query", + "type": "string", + "x-example": "refrigerator" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Costco category slug, e.g. the last path segment of a category page URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "category", + "type": "string", + "x-example": "refrigerators" } ], "produces": [ @@ -218760,7 +247416,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/costco.searchResponseDoc" } }, "400": { @@ -218769,8 +247425,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -218787,41 +247443,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen collections", + "summary": "Search Costco products", "tags": [ - "Brooklinen" + "Costco" ] } }, - "/brooklinen/collections/{handle}/products": { + "/costco/warehouses": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "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": "Collection handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "collection-handle" - }, - { - "description": "1-based page, defaults to 1", + "description": "Latitude", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "latitude", + "required": true, + "type": "number", + "x-example": 47.565 }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Longitude", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.329 } ], "produces": [ @@ -218831,7 +247481,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/costco.warehousesResponseDoc" } }, "400": { @@ -218840,14 +247490,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" } @@ -218864,33 +247508,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen collection products", + "summary": "Find nearby Costco warehouses", "tags": [ - "Brooklinen" + "Costco" ] } }, - "/brooklinen/pages": { + "/courtlistener/courts": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Brooklinen (https://www.brooklinen.com). The storefront URL is fixed server-side.", - "operationId": "brooklinen-pages", + "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": "1-based page, defaults to 1", + "description": "CourtListener court identifier", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "court_id", + "type": "string", + "x-example": "scotus" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "default": 1, + "description": "Directory page, 1-indexed", "in": "query", - "name": "limit", + "minimum": 1, + "name": "page", "type": "integer", - "x-example": 50 + "x-example": 1 } ], "produces": [ @@ -218900,7 +247546,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/courtlistener.courtsResponseDoc" } }, "400": { @@ -218915,6 +247561,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -218927,27 +247579,34 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen static pages", + "summary": "Browse CourtListener courts", "tags": [ - "Brooklinen" + "CourtListener" ] } }, - "/brooklinen/pages/{handle}": { + "/courtlistener/people": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one Brooklinen (https://www.brooklinen.com) page handle. The storefront URL is fixed server-side.", - "operationId": "brooklinen-page", + "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": "Page handle", - "in": "path", - "name": "handle", - "required": true, + "description": "CourtListener person identifier", + "in": "query", + "minimum": 1, + "name": "person_id", + "type": "integer", + "x-example": 123 + }, + { + "description": "Cursor from a prior response's next_cursor field", + "in": "query", + "name": "cursor", "type": "string", - "x-example": "page-handle" + "x-example": "cD0yMDI2LTA4LTI3KzAwJTNBMDAlM0EwMC4wMDAwMDAlMkIwMCUzQTAw" } ], "produces": [ @@ -218957,7 +247616,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/courtlistener.peopleResponseDoc" } }, "400": { @@ -218978,6 +247637,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -218990,33 +247655,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Brooklinen static page", + "summary": "Browse CourtListener judicial people", "tags": [ - "Brooklinen" + "CourtListener" ] } }, - "/brooklinen/products": { + "/courtlistener/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from Brooklinen's (https://www.brooklinen.com) public 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 CourtListener's public opinion-search index by text and returns normalized opinion-result metadata with a cursor for the next page. The endpoint uses CourtListener's anonymous public search data and does not retrieve authenticated opinion detail, dockets, judges, alerts, or account data.", + "operationId": "courtlistener-search", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Opinion search text", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "q", + "required": true, + "type": "string", + "x-example": "\"qualified immunity\"" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Cursor from a prior response's next_cursor field", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "cursor", + "type": "string", + "x-example": "cD0yMDI2LTA4LTI3KzAwJTNBMDAlM0EwMC4wMDAwMDAlMkIwMCUzQTAw" } ], "produces": [ @@ -219026,7 +247692,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/courtlistener.searchResponseDoc" } }, "400": { @@ -219041,6 +247707,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -219053,29 +247725,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen products", + "summary": "Search CourtListener opinions", "tags": [ - "Brooklinen" + "CourtListener" ] } }, - "/brooklinen/products/{handle}": { + "/cricinfo/calendar": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "product-handle" - } - ], + "description": "Returns the dated international match calendar currently published by Cricinfo. It includes match-day names and the associated series labels.", + "operationId": "cricinfo-calendar", "produces": [ "application/json" ], @@ -219083,19 +247742,7 @@ "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" + "$ref": "#/definitions/cricinfo.calendarResponseDoc" } }, "429": { @@ -219116,45 +247763,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Brooklinen product", + "summary": "Get the Cricinfo international calendar", "tags": [ - "Brooklinen" + "Cricinfo" ] } }, - "/brooklinen/products/{handle}/recommendations": { + "/cricinfo/commentary": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized recommended products for one Brooklinen (https://www.brooklinen.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "brooklinen-product-recommendations", + "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": "Product handle", - "in": "path", - "name": "handle", + "description": "Canonical Cricinfo full-scorecard or live-score URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "product-handle" + "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" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Maximum commentary entries returned, from 1 to 100", "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": 50 } ], "produces": [ @@ -219164,7 +247797,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/cricinfo.commentaryResponseDoc" } }, "400": { @@ -219197,41 +247830,23 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen product recommendations", + "summary": "Get Cricinfo match commentary", "tags": [ - "Brooklinen" + "Cricinfo" ] } }, - "/brooklinen/search/suggest": { + "/cricinfo/grounds": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from Brooklinen's (https://www.brooklinen.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "brooklinen-search-suggest", + "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": "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": "Maximum featured grounds returned, from 1 to 100", "in": "query", "name": "limit", "type": "integer", - "x-example": 10 + "x-example": 20 } ], "produces": [ @@ -219241,7 +247856,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/cricinfo.groundsResponseDoc" } }, "400": { @@ -219268,44 +247883,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Brooklinen search suggestions", + "summary": "List Cricinfo grounds", "tags": [ - "Brooklinen" + "Cricinfo" ] } }, - "/brooklinen/sitemap/urls": { + "/cricinfo/live": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns capped URL entries from Brooklinen's (https://www.brooklinen.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "brooklinen-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 current public live-score feed, including live, upcoming, and recently completed match cards with their canonical scorecard URLs.", + "operationId": "cricinfo-live-matches", "produces": [ "application/json" ], @@ -219313,13 +247900,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricinfo.liveMatchesResponseDoc" } }, "429": { @@ -219340,19 +247921,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen sitemap URLs", + "summary": "Get Cricinfo live matches", "tags": [ - "Brooklinen" + "Cricinfo" ] } }, - "/brooklinen/sitemaps": { + "/cricinfo/match": { "get": { - "consumes": [ - "application/json" + "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": "Canonical Cricinfo full-scorecard or live-cricket-score URL", + "in": "query", + "name": "url", + "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" + } ], - "description": "Returns child sitemap URLs from Brooklinen's (https://www.brooklinen.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "brooklinen-sitemaps", "produces": [ "application/json" ], @@ -219360,7 +247948,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/cricinfo.matchResponseDoc" } }, "400": { @@ -219369,6 +247957,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -219387,19 +247981,25 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen sitemaps", + "summary": "Get a Cricinfo match scorecard", "tags": [ - "Brooklinen" + "Cricinfo" ] } }, - "/brooklinen/store": { + "/cricinfo/news": { "get": { - "consumes": [ - "application/json" + "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": "Maximum stories returned, from 1 to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } ], - "description": "Returns normalized storefront metadata for Brooklinen (https://www.brooklinen.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "brooklinen-store", "produces": [ "application/json" ], @@ -219407,7 +248007,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/cricinfo.newsResponseDoc" } }, "400": { @@ -219434,26 +248034,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get Brooklinen store metadata", + "summary": "Get latest Cricinfo news", "tags": [ - "Brooklinen" + "Cricinfo" ] } }, - "/burberry/categories": { + "/cricinfo/photos": { "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 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": "Top-level department to filter to, e.g. Women, Men, Children -- omit for every department", + "description": "Maximum photos returned, from 1 to 100", "in": "query", - "name": "department", - "type": "string", - "x-example": "Women" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -219463,7 +248060,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.categoriesResponseDoc" + "$ref": "#/definitions/cricinfo.photosResponseDoc" } }, "400": { @@ -219490,56 +248087,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Burberry categories", + "summary": "Get latest Cricinfo photos", "tags": [ - "Burberry" + "Cricinfo" ] } }, - "/burberry/category": { + "/cricinfo/rankings": { "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 ICC rankings (team or player) from a Cricinfo rankings page. `url` must be a canonical `https://www.cricinfo.com/rankings/...` URL.", + "operationId": "cricinfo-rankings", "parameters": [ { - "description": "Site-relative category path -- see burberry-categories", + "description": "Canonical Cricinfo rankings URL", "in": "query", - "name": "category", + "name": "url", "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" + "x-example": "https://www.cricinfo.com/rankings/content/page/211271.html" } ], "produces": [ @@ -219549,7 +248114,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.categoryResponseDoc" + "$ref": "#/definitions/cricinfo.rankingsResponseDoc" } }, "400": { @@ -219582,27 +248147,70 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Burberry category", + "summary": "Get ICC rankings from Cricinfo", "tags": [ - "Burberry" + "Cricinfo" ] } }, - "/burberry/product": { + "/cricinfo/records": { "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 bounded normalized table from a public 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": "Site-relative product path, from a search or category result's url field", + "description": "Relative Statsguru record path", "in": "query", - "name": "url", + "name": "record", "required": true, "type": "string", - "x-example": "/check-cashmere-cardigan-p81336111" + "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": [ @@ -219612,7 +248220,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.productResponseDoc" + "$ref": "#/definitions/cricinfo.recordsResponseDoc" } }, "400": { @@ -219645,29 +248253,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Burberry product", + "summary": "Get a Cricinfo record table", "tags": [ - "Burberry" + "Cricinfo" ] } }, - "/burberry/related": { + "/cricinfo/records/index": { "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", - "parameters": [ - { - "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": "/check-cashmere-cardigan-p81336111" - } - ], + "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" ], @@ -219675,13 +248270,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.relatedResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricinfo.recordsIndexResponseDoc" } }, "429": { @@ -219702,58 +248291,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get related Burberry products", + "summary": "List Cricinfo records catalog", "tags": [ - "Burberry" + "Cricinfo" ] } }, - "/burberry/search": { + "/cricinfo/rss": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Burberry's product catalog by keyword. Returns normalized 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": "Returns a normalized public 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": "Search keyword", + "description": "Official Cricinfo RSS feed URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "trench" + "x-example": "https://www.cricinfo.com/rss/content/feeds/news/0.xml" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/cricinfo.rssResponseDoc" + } }, - { - "default": 0, - "description": "Zero-based result offset, in increments of 20", - "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "offset", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "default", - "description": "Sort order", - "enum": [ - "default", - "price_asc", - "price_desc", - "newest" - ], - "in": "query", - "name": "sort", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "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" + "ApiKeyAuth": [] } ], + "summary": "Read a Cricinfo RSS feed", + "tags": [ + "Cricinfo" + ] + } + }, + "/cricinfo/scores": { + "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": [ "application/json" ], @@ -219761,13 +248362,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricinfo.scoresResponseDoc" } }, "429": { @@ -219788,27 +248383,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Burberry products", + "summary": "Get current Cricinfo match scores", "tags": [ - "Burberry" + "Cricinfo" ] } }, - "/burberry/suggest": { + "/cricinfo/series": { "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 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": "Partial search query", + "description": "Slug-and-ID portion of a canonical series URL", "in": "query", - "name": "query", + "name": "series_id", "required": true, "type": "string", - "x-example": "trench" + "x-example": "indian-premier-league-2024-1410320" } ], "produces": [ @@ -219818,7 +248410,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.suggestResponseDoc" + "$ref": "#/definitions/cricinfo.seriesResponseDoc" } }, "400": { @@ -219827,6 +248419,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -219845,41 +248443,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Burberry search-box suggestions", + "summary": "Get a Cricinfo series schedule and standings", "tags": [ - "Burberry" + "Cricinfo" ] } }, - "/burgerking/availability": { + "/cricinfo/squads": { "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": "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": "Burger King's numeric store id, from /burgerking/locations", + "description": "Canonical Cricinfo team profile URL", "in": "query", - "name": "store_id", + "name": "url", "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 + "x-example": "https://www.cricinfo.com/team/india-6" } ], "produces": [ @@ -219889,7 +248470,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burgerking.availabilityResponseDoc" + "$ref": "#/definitions/cricinfo.squadsResponseDoc" } }, "400": { @@ -219922,70 +248503,153 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Burger King restaurant's real-time fulfillment status", + "summary": "Get a Cricinfo team squad", "tags": [ - "Burger King" + "Cricinfo" ] } }, - "/burgerking/locations": { + "/cricinfo/stats": { "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 a bounded normalized 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": "Search center latitude", + "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": "latitude", + "name": "class", "required": true, - "type": "number", - "x-example": 40.7128 + "type": "integer", + "x-example": 1 }, { - "description": "Search center longitude", + "description": "Statsguru statistic family", + "enum": [ + "batting", + "bowling", + "fielding", + "allround", + "fow", + "team", + "official", + "aggregate" + ], "in": "query", - "name": "longitude", + "name": "type", "required": true, - "type": "number", - "x-example": -74.006 + "type": "string", + "x-example": "batting" }, { - "description": "Search radius in meters, 1-50000 (default 8000)", + "description": "Numeric Cricinfo player identifier", "in": "query", - "name": "radius", - "type": "integer", - "x-example": 8000 + "name": "player", + "type": "string", + "x-example": "45789" }, { - "description": "Maximum restaurants to return, 1-50 (default 20)", + "description": "Numeric Cricinfo team identifier", "in": "query", - "name": "max_results", - "type": "integer", - "x-example": 20 + "name": "team", + "type": "string", + "x-example": "6" }, { - "description": "RBI market to search, one of `US`, `CA` (default `US`)", + "description": "Numeric opposition team identifier", "in": "query", - "name": "market", + "name": "opposition", "type": "string", - "x-example": "US" + "x-example": "2" }, { - "description": "Include each restaurant's live per-channel open/closed status (default false)", + "description": "Numeric host-country identifier", "in": "query", - "name": "include_availability", - "type": "boolean", - "x-example": false + "name": "host", + "type": "string", + "x-example": "6" }, { - "description": "Restrict to restaurants that actually deliver to this coordinate, a genuine delivery-zone match distinct from the has_delivery flag (default false)", + "description": "Numeric ground identifier", "in": "query", - "name": "delivery_only", + "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": false + "x-example": true + }, + { + "description": "Maximum rows returned, from 1 to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -219995,7 +248659,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burgerking.locationsResponseDoc" + "$ref": "#/definitions/cricinfo.statsResponseDoc" } }, "400": { @@ -220004,12 +248668,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -220028,34 +248686,24 @@ "ApiKeyAuth": [] } ], - "summary": "Find Burger King restaurants near a location", + "summary": "Query Cricinfo Statsguru", "tags": [ - "Burger King" + "Cricinfo" ] } }, - "/burgerking/menu": { + "/cricinfo/story": { "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 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": "Burger King's numeric store id, from /burgerking/locations", + "description": "Canonical Cricinfo story, report, preview, or live-blog URL", "in": "query", - "name": "store_id", + "name": "url", "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": "https://www.cricinfo.com/story/lutho-sipamla-ruled-out-of-namibia-tri-series-with-hamstring-injury-1552225" } ], "produces": [ @@ -220065,7 +248713,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burgerking.menuResponseDoc" + "$ref": "#/definitions/cricinfo.storyResponseDoc" } }, "400": { @@ -220098,42 +248746,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Burger King restaurant's full priced menu", + "summary": "Get a Cricinfo story", "tags": [ - "Burger King" + "Cricinfo" ] } }, - "/burgerking/product": { + "/cricinfo/team": { "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 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": "Burger King's numeric store id, from /burgerking/locations", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "17871" - }, - { - "description": "The item, combo, or picker id, from /burgerking/menu", + "description": "Canonical Cricinfo team profile URL", "in": "query", - "name": "item_id", + "name": "url", "required": true, "type": "string", - "x-example": "item_26" - }, - { - "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", - "in": "query", - "name": "market", - "type": "string", - "x-example": "US" + "x-example": "https://www.cricinfo.com/team/india-6" } ], "produces": [ @@ -220143,7 +248773,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burgerking.productResponseDoc" + "$ref": "#/definitions/cricinfo.teamProfileResponseDoc" } }, "400": { @@ -220176,24 +248806,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Burger King item, combo, or picker's full detail and customization tree", + "summary": "Get a Cricinfo team profile", "tags": [ - "Burger King" + "Cricinfo" ] } }, - "/businessinsider/article": { + "/cricinfo/team/schedule": { "get": { - "description": "Returns public Business Insider article metadata and body paragraphs from a canonical article URL.", - "operationId": "businessinsider-article", + "description": "Returns a team's recent fixtures and results from its dedicated page. `url` must be a canonical `https://www.cricinfo.com/team/...` URL.", + "operationId": "cricinfo-team-schedule", "parameters": [ { - "description": "Canonical Business Insider article URL", + "description": "Canonical Cricinfo team URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.businessinsider.com/markets/example-2026-09-21" + "x-example": "https://www.cricinfo.com/team/india-6" } ], "produces": [ @@ -220203,7 +248833,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/cricinfo.teamScheduleResponseDoc" } }, "400": { @@ -220218,6 +248848,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -220230,32 +248866,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Insider article content", + "summary": "Get a Cricinfo team match schedule", "tags": [ - "Business Insider" + "Cricinfo" ] } }, - "/businessinsider/author": { + "/cricinfo/teams": { "get": { - "description": "Returns one Business Insider author's public profile: name, job title, bio, social accounts, and their recent articles.", - "operationId": "businessinsider-author", - "parameters": [ - { - "description": "Author slug", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "peter-kafka" - }, - { - "description": "Canonical businessinsider.com/author/ URL; alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.businessinsider.com/author/peter-kafka" - } - ], + "description": "Returns Cricinfo's grouped public team directory, including international, domestic, and franchise team identities.", + "operationId": "cricinfo-teams", "produces": [ "application/json" ], @@ -220263,17 +248883,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.businessInsiderAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricinfo.teamsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -220290,34 +248904,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Business Insider author profile", + "summary": "List Cricinfo teams", "tags": [ - "Business Insider" + "Cricinfo" ] } }, - "/businessinsider/headlines": { + "/cricinfo/venue": { "get": { - "description": "Returns fresh headlines from one public Business Insider section.", - "operationId": "businessinsider-headlines", + "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": "Business Insider section slug", - "enum": [ - "business", - "markets", - "technology", - "politics", - "strategy", - "finance", - "science", - "lifestyle", - "reviews" - ], + "description": "Canonical Cricinfo cricket-ground URL", "in": "query", - "name": "section", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.cricinfo.com/cricket-grounds/wankhede-stadium-mumbai-58324" } ], "produces": [ @@ -220327,7 +248931,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/cricinfo.venueResponseDoc" } }, "400": { @@ -220336,6 +248940,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": { @@ -220348,16 +248964,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Insider section headlines", + "summary": "Get a Cricinfo cricket-ground profile", "tags": [ - "Business Insider" + "Cricinfo" ] } }, - "/businessinsider/news": { + "/cricinfo/venue/matches": { "get": { - "description": "Returns fresh Business Insider stories from the public RSS feed.", - "operationId": "businessinsider-news", + "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 Cricinfo cricket-ground URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.cricinfo.com/cricket-grounds/wankhede-stadium-mumbai-58324" + } + ], "produces": [ "application/json" ], @@ -220365,7 +248991,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/cricinfo.venueMatchesResponseDoc" + } + }, + "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": { @@ -220380,16 +249024,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Insider top stories", + "summary": "Get matches at a Cricinfo venue", "tags": [ - "Business Insider" + "Cricinfo" ] } }, - "/businessinsider/sections": { + "/cricinfo/videos": { "get": { - "description": "Returns the public Business Insider editorial section inventory.", - "operationId": "businessinsider-sections", + "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": "Maximum videos returned, from 1 to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], "produces": [ "application/json" ], @@ -220397,7 +249050,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/cricinfo.videosResponseDoc" + } + }, + "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" } } }, @@ -220406,24 +249077,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Insider sections", + "summary": "Get Cricinfo videos", "tags": [ - "Business Insider" + "Cricinfo" ] } }, - "/businessstandard/article": { + "/ctvnews/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": "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 Business Standard article URL", + "description": "Canonical CTV News article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.business-standard.com/companies/news/example-article-slug-126092401169_1.html" + "x-example": "https://www.ctvnews.ca/toronto/article/example-article-slug/" } ], "produces": [ @@ -220442,12 +249113,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -220466,24 +249131,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Standard article content", + "summary": "Get CTV News article content", "tags": [ - "Business Standard" + "CTV News" ] } }, - "/businessstandard/author": { + "/ctvnews/author": { "get": { - "description": "Returns a Business Standard author's byline metadata, biography, social links, and recent stories from a canonical author profile URL.", - "operationId": "businessstandard-author", + "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": "Canonical Business Standard author URL", + "description": "Canonical CTV News author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.business-standard.com/author/sharleen-dsouza" + "x-example": "https://www.ctvnews.ca/about-us/team/the-associated-press/" } ], "produces": [ @@ -220493,7 +249158,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.businessstandardAuthorResponseDoc" + "$ref": "#/definitions/publicnews.ctvnewsAuthorResponseDoc" } }, "400": { @@ -220520,50 +249185,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Business Standard author profile", + "summary": "Get a CTV News author profile", "tags": [ - "Business Standard" + "CTV News" ] } }, - "/businessstandard/headlines": { + "/ctvnews/headlines": { "get": { - "description": "Returns fresh headlines from one public Business Standard section.", - "operationId": "businessstandard-headlines", + "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": "Business Standard section slug", + "description": "CTV News section slug", "enum": [ - "latest-news", - "companies", - "economy", - "finance", - "opinion", - "markets", - "technology", - "specials", - "budget", - "elections", + "canada", "politics", - "education", + "world", + "business", "health", - "sports", "entertainment", "lifestyle", - "india-news", - "industry", - "cricket", - "book", - "world-news", - "external-affairs-defence-security", - "immigration", - "blueprint-defence-magazine", - "todays-paper" + "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" + "type": "string", + "x-example": "canada" } ], "produces": [ @@ -220594,16 +249262,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Standard section headlines", + "summary": "Get CTV News section headlines", "tags": [ - "Business Standard" + "CTV News" ] } }, - "/businessstandard/news": { + "/ctvnews/news": { "get": { - "description": "Returns fresh Business Standard (business-standard.com) top stories from its public home-page feed.", - "operationId": "businessstandard-news", + "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" ], @@ -220632,16 +249300,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Standard top stories", + "summary": "Get CTV News top stories", "tags": [ - "Business Standard" + "CTV News" ] } }, - "/businessstandard/sections": { + "/ctvnews/sections": { "get": { - "description": "Returns the public Business Standard section inventory used by the headlines endpoint.", - "operationId": "businessstandard-sections", + "description": "Returns the public CTV News section inventory (national topic sections and local newsroom sections) used by the headlines endpoint.", + "operationId": "ctvnews-sections", "produces": [ "application/json" ], @@ -220658,27 +249326,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Standard sections", + "summary": "Get CTV News sections", "tags": [ - "Business Standard" + "CTV News" ] } }, - "/capterra/product": { + "/culvers/calendar": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Capterra product profile: name, description, category, and aggregate rating. Credential-free public Capterra data, rendered from the product page through proxied browser renderers.", - "operationId": "capterra-product", + "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": "Capterra product id (the numeric id in a /p/{id}/{slug}/ URL)", + "description": "Restaurant slug from /culvers/directory", "in": "query", - "name": "product_id", + "name": "slug", "required": true, "type": "string", - "x-example": "135003" + "x-example": "waunakee" } ], "produces": [ @@ -220688,7 +249356,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/capterra.productResponseDoc" + "$ref": "#/definitions/culvers.calendarResponseDoc" } }, "400": { @@ -220703,8 +249371,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -220721,36 +249389,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Capterra product", + "summary": "Get one Culver's restaurant's flavor-of-the-day and daily soup schedule", "tags": [ - "Capterra" + "Culvers" ] } }, - "/capterra/product/reviews": { + "/culvers/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of normalized Capterra reviews (author, headline, rating) plus the product's aggregate rating. Credential-free public Capterra data, rendered from the reviews page through proxied browser renderers.", - "operationId": "capterra-reviews", - "parameters": [ - { - "description": "Capterra product id (the numeric id in a /p/{id}/{slug}/ URL)", - "in": "query", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "135003" - }, - { - "description": "Page number (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - } - ], + "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" ], @@ -220758,23 +249409,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/capterra.reviewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/culvers.categoriesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -220791,27 +249430,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Capterra product reviews", + "summary": "List Culver's national menu categories", "tags": [ - "Capterra" + "Culvers" ] } }, - "/capterra/search": { + "/culvers/directory": { "get": { "consumes": [ "application/json" ], - "description": "Returns Capterra search-result products (id, name, url, description, rating). Credential-free public Capterra data, rendered from the search page through proxied browser renderers. 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 page of Culver's own restaurant-URL sitemap (~1,121 restaurants). Each entry's slug is the value GET /culvers/store takes.", + "operationId": "culvers-directory", "parameters": [ { - "description": "Search query", + "description": "Optional. 1-based page, default 1.", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "slack" + "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": [ @@ -220821,17 +249466,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/capterra.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/culvers.directoryResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -220848,89 +249487,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Capterra products", + "summary": "Browse Culver's restaurant-URL index", "tags": [ - "Capterra" + "Culvers" ] } }, - "/carmax/search": { + "/culvers/flavor": { "get": { "consumes": [ "application/json" ], - "description": "Searches CarMax for used car listings, returning normalized 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. Credential-free public data sourced from CarMax's own mobile-app search API.", - "operationId": "carmax-search", + "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": "CarMax make, e.g. honda, Toyota, BMW (case-insensitive)", - "in": "query", - "name": "make", - "type": "string", - "x-example": "honda" - }, - { - "description": "CarMax model, e.g. civic (case-insensitive). Does not require make", - "in": "query", - "name": "model", - "type": "string", - "x-example": "civic" - }, - { - "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", + "description": "Flavor slug from /culvers/calendar or /culvers/store", "in": "query", - "name": "sort", + "name": "slug", + "required": true, "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": 1 + "x-example": "chocolate-covered-strawberry" } ], "produces": [ @@ -220940,7 +249517,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.searchResponseDoc" + "$ref": "#/definitions/culvers.flavorResponseDoc" } }, "400": { @@ -220949,8 +249526,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" } @@ -220967,34 +249550,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search CarMax vehicle listings", + "summary": "Get one Culver's Fresh Frozen Custard flavor's detail", "tags": [ - "CarMax" + "Culvers" ] } }, - "/carmax/search/suggestions": { + "/culvers/item": { "get": { "consumes": [ "application/json" ], - "description": "Returns autocomplete suggestions for a partial search term (make/model/trim), typo-tolerant by default. Credential-free public data sourced from CarMax's own mobile-app API.", - "operationId": "carmax-search-suggestions", + "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": "Free-text partial search term to get autocomplete suggestions for", + "description": "Category slug from /culvers/categories", "in": "query", - "name": "search", + "name": "category", "required": true, "type": "string", - "x-example": "civ" + "x-example": "butterburgers" }, { - "description": "Disable fuzzy/typo-tolerant matching -- require an exact prefix match. Defaults to false", + "description": "Item slug from /culvers/menu", "in": "query", - "name": "exact_match", - "type": "boolean", - "x-example": false + "name": "item", + "required": true, + "type": "string", + "x-example": "butterburger-cheese" } ], "produces": [ @@ -221004,7 +249588,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.searchSuggestionsResponseDoc" + "$ref": "#/definitions/culvers.itemResponseDoc" } }, "400": { @@ -221013,49 +249597,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "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. Credential-free public data sourced from CarMax's own mobile-app API.", - "operationId": "carmax-shop-by-brand", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/carmax.shopByBrandResponseDoc" - } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -221072,27 +249621,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CarMax's \"shop by brand\" make taxonomy", + "summary": "Look up one Culver's menu item's full detail", "tags": [ - "CarMax" + "Culvers" ] } }, - "/carmax/store/{id}": { + "/culvers/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized CarMax store: name, full address, phone numbers, coordinates, opening hours, and store-type flags (car buying center, microstore). Credential-free public data sourced from CarMax's own server-rendered store page.", - "operationId": "carmax-store", + "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 client-side, and no credential-free per-restaurant pricing source was found; see GET /culvers/item for full modifier/topping detail.", + "operationId": "culvers-menu", "parameters": [ { - "description": "CarMax store id, the numeric path segment of a /stores/{id} URL", - "in": "path", - "name": "id", + "description": "Category slug from /culvers/categories", + "in": "query", + "name": "category", "required": true, "type": "string", - "x-example": "7124" + "x-example": "butterburgers" } ], "produces": [ @@ -221102,7 +249651,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.StoreResponse" + "$ref": "#/definitions/culvers.menuResponseDoc" } }, "400": { @@ -221117,8 +249666,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -221135,40 +249684,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CarMax store (physical location) detail", + "summary": "List one Culver's menu category's items", "tags": [ - "CarMax" + "Culvers" ] } }, - "/carmax/stores": { + "/culvers/store": { "get": { "consumes": [ "application/json" ], - "description": "Searches CarMax's physical store locations by ZIP code or free-text keyword, returning normalized stores with full address, every published phone number, opening hours, and (for a ZIP-based search) live driving distance in miles. Credential-free public data sourced from CarMax's own mobile-app store-locator API.", - "operationId": "carmax-stores", + "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": "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", + "description": "Restaurant slug from /culvers/directory", "in": "query", - "name": "keyword", + "name": "slug", + "required": true, "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 + "x-example": "ann-arbor-mi-lohr-rd" } ], "produces": [ @@ -221178,7 +249714,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.storeSearchResponseDoc" + "$ref": "#/definitions/culvers.storeResponseDoc" } }, "400": { @@ -221187,8 +249723,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" } @@ -221205,36 +249747,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search CarMax store (physical location) locations", + "summary": "Look up one Culver's restaurant by its directory slug", "tags": [ - "CarMax" + "Culvers" ] } }, - "/carmax/vehicle/{stock_number}": { + "/cvs/brands": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized 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. Credential-free public data sourced primarily from CarMax's own mobile-app API, backfilled with the website's server-rendered page for accident/owner history and warranty terms the mobile API doesn't expose.", - "operationId": "carmax-vehicle", - "parameters": [ - { - "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": "28187774" - }, - { - "description": "Optional CarMax store id for pricing/transfer-fee display context. Defaults to a fixed CarMax store when omitted", - "in": "query", - "name": "store_id", - "type": "string", - "x-example": "7124" - } - ], + "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" ], @@ -221242,23 +249767,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.VehicleResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cvs.brandsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -221275,37 +249788,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get CarMax vehicle listing detail", + "summary": "CVS brand directory", "tags": [ - "CarMax" + "CVS" ] } }, - "/carmax/vehicle/{stock_number}/recommendations": { + "/cvs/categories": { "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. Credential-free public data sourced from CarMax's own mobile-app API.", - "operationId": "carmax-vehicle-recommendations", - "parameters": [ - { - "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": "store_id", - "required": true, - "type": "string", - "x-example": "7124" - } - ], + "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" ], @@ -221313,17 +249808,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.vehicleRecommendationsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cvs.categoriesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -221340,53 +249829,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get CarMax \"similar vehicles\" recommendations for a listing", + "summary": "CVS category taxonomy", "tags": [ - "CarMax" + "CVS" ] } }, - "/carsdotcom/search": { + "/cvs/category": { "get": { "consumes": [ "application/json" ], - "description": "Searches Cars.com for new and used car listings, returning normalized vehicle summaries (make, model, trim, year, mileage, exterior color, drivetrain, fuel type, pricing, seller, images) plus the total matching count. Credential-free public data sourced directly from Cars.com's own public search API.", - "operationId": "carsdotcom-search", + "description": "Returns one page of a CVS.com OTC (over-the-counter) retail category, subcategory, or brand page's product grid: normalized 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/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", + "operationId": "cvs-category", "parameters": [ { - "description": "5-digit US ZIP code to search around", + "description": "CVS category, subcategory, or brand-page URL path, optionally with a /q/{value}/{typeCode} facet-filter suffix, e.g. \\", "in": "query", - "name": "zip", + "name": "path", + "required": true, "type": "string", - "x-example": "90210" + "x-example": "beauty" }, { - "description": "Search radius in miles around zip", + "description": "1-indexed page number, default 1", "in": "query", - "name": "radius", + "name": "page", "type": "integer", - "x-example": 50 + "x-example": 1 }, { - "description": "Listing condition. Allowed values: new, used, cpo, all", + "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": [ - "new", - "used", - "cpo", - "all" + "pa", + "pd", + "tr", + "rc", + "az", + "za" ], "in": "query", - "name": "stock_type", + "name": "sort", "type": "string", - "x-example": "used" - }, - { - "description": "1-indexed result page, defaults to 1. Cars.com returns 24 results per page", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "pa" } ], "produces": [ @@ -221396,7 +249881,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carsdotcom.searchResponseDoc" + "$ref": "#/definitions/cvs.categoryResponseDoc" } }, "400": { @@ -221405,8 +249890,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -221423,27 +249908,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Cars.com vehicle listings", + "summary": "Browse a CVS OTC category page", "tags": [ - "Cars.com" + "CVS" ] } }, - "/carsdotcom/vehicle/{listing_id}": { + "/cvs/product-ingredients/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized 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. Credential-free public data sourced directly from Cars.com's own public GraphQL API.", - "operationId": "carsdotcom-vehicle", + "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": "Cars.com listing id (a UUID), the path segment of a /vehicledetail/{listing_id}/ URL", + "description": "CVS product page URL slug, e.g. \\", "in": "path", - "name": "listing_id", + "name": "slug", "required": true, "type": "string", - "x-example": "a6ea5d6f-0395-4f9d-94d5-724c4d7414de" + "x-example": "e-l-f-16hr-camo-concealer-prodid-2370023" } ], "produces": [ @@ -221453,7 +249938,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carsdotcom.VehicleResponse" + "$ref": "#/definitions/cvs.productIngredientsResponseDoc" } }, "400": { @@ -221468,8 +249953,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -221486,24 +249971,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cars.com vehicle listing detail", + "summary": "CVS OTC product ingredients", "tags": [ - "Cars.com" + "CVS" ] } }, - "/cbc/article": { + "/cvs/product/{slug}": { "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": "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": "Canonical CBC News or CBC Sports story URL", - "in": "query", - "name": "url", + "description": "CVS product page URL slug, e.g. \\", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.cbc.ca/news/politics/does-calling-an-early-election-work-9.7355667" + "x-example": "safe-home-premium-radon-test-kit-prodid-945948" } ], "produces": [ @@ -221513,7 +250001,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/cvs.productResponseDoc" } }, "400": { @@ -221528,6 +250016,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -221540,30 +250034,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBC News article content", + "summary": "CVS OTC product detail", "tags": [ - "CBC News" + "CVS" ] } }, - "/cbc/author": { + "/cvs/search": { "get": { - "description": "Returns one CBC journalist's public profile: name, job title, biography, photo, profile links, and their most recent articles.", - "operationId": "cbc-author", + "consumes": [ + "application/json" + ], + "description": "Performs a keyword search across CVS.com's non-prescription retail/OTC catalog and returns one page of results: normalized 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. This is the same product-search backend cvs-category reads, just reached by keyword instead of by category/brand path. 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/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", + "operationId": "cvs-search", "parameters": [ { - "description": "Author slug, e.g. darren-major-1.4462710", + "description": "Search keyword or phrase", "in": "query", - "name": "slug", + "name": "q", + "required": true, "type": "string", - "x-example": "darren-major-1.4462710" + "x-example": "ibuprofen" }, { - "description": "Canonical https://www.cbc.ca/author/ URL; alternative to slug", + "description": "1-indexed page number, default 1", "in": "query", - "name": "url", + "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": "https://www.cbc.ca/author/darren-major-1.4462710" + "x-example": "pa" } ], "produces": [ @@ -221573,7 +250086,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cbcAuthorResponseDoc" + "$ref": "#/definitions/cvs.categoryResponseDoc" } }, "400": { @@ -221582,8 +250095,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -221600,59 +250113,74 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CBC journalist profile", + "summary": "Search CVS OTC products by keyword", "tags": [ - "CBC News" + "CVS" ] } }, - "/cbc/headlines": { + "/cvs/store-locator": { "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 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": "CBC section slug", + "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. \\", + "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": [ - "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" + "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": "section", - "required": true, + "name": "service", "type": "string" } ], @@ -221663,7 +250191,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/cvs.storesResponseDoc" } }, "400": { @@ -221672,37 +250200,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "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 from CBC's public Top Stories RSS feed. 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", @@ -221722,50 +250224,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBC News top stories", - "tags": [ - "CBC News" - ] - } - }, - "/cbc/sections": { - "get": { - "description": "Returns the CBC News sections accepted by the headlines endpoint: national desks, regional newsrooms, and CBC Sports feeds.", - "operationId": "cbc-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CBC News sections", + "summary": "CVS store locator", "tags": [ - "CBC News" + "CVS" ] } }, - "/cbr/article": { + "/dailycaller/article": { "get": { - "description": "Returns public CBR article metadata and body paragraphs from a canonical article URL.", - "operationId": "cbr-article", + "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": "Canonical CBR article URL", + "description": "Canonical The Daily Caller article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.cbr.com/star-trek-2-release-date-confirmed-cover-reveal/" + "x-example": "https://dailycaller.com/2026/09/23/example-article-slug" } ], "produces": [ @@ -221790,12 +250266,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -221808,24 +250278,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBR article content", + "summary": "Get The Daily Caller article content", "tags": [ - "CBR" + "The Daily Caller" ] } }, - "/cbr/author": { + "/dailycaller/author": { "get": { - "description": "Returns a CBR author's byline metadata, biography, social links, and recent articles from a canonical author URL.", - "operationId": "cbr-author", + "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 CBR author URL", + "description": "Canonical The Daily Caller author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.cbr.com/author/john-dodge/" + "x-example": "https://dailycaller.com/author/EmilyKopp/" } ], "produces": [ @@ -221835,7 +250305,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cbrAuthorResponseDoc" + "$ref": "#/definitions/publicnews.dailycallerAuthorResponseDoc" } }, "400": { @@ -221862,53 +250332,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CBR author profile", + "summary": "Get a The Daily Caller author profile", "tags": [ - "CBR" + "The Daily Caller" ] } }, - "/cbr/headlines": { + "/dailycaller/headlines": { "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", + "description": "Returns the newest headlines listed on one public The Daily Caller section page.", + "operationId": "dailycaller-headlines", "parameters": [ { - "description": "CBR RSS section slug", + "description": "The Daily Caller 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" + "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": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "politics" } ], "produces": [ @@ -221927,12 +250392,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -221945,16 +250404,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBR section headlines", + "summary": "Get The Daily Caller section headlines", "tags": [ - "CBR" + "The Daily Caller" ] } }, - "/cbr/news": { + "/dailycaller/news": { "get": { - "description": "Returns fresh CBR top stories from its public RSS feed.", - "operationId": "cbr-news", + "description": "Returns fresh The Daily Caller top stories from its public RSS feed.", + "operationId": "dailycaller-news", "produces": [ "application/json" ], @@ -221983,16 +250442,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBR top stories", + "summary": "Get The Daily Caller top stories", "tags": [ - "CBR" + "The Daily Caller" ] } }, - "/cbr/sections": { + "/dailycaller/sections": { "get": { - "description": "Returns the public CBR RSS section inventory used by the headlines endpoint.", - "operationId": "cbr-sections", + "description": "Returns the live-verified The Daily Caller section inventory used by the headlines endpoint.", + "operationId": "dailycaller-sections", "produces": [ "application/json" ], @@ -222002,12 +250461,6 @@ "schema": { "$ref": "#/definitions/publicnews.sectionsResponseDoc" } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -222015,24 +250468,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBR RSS sections", + "summary": "Get The Daily Caller sections", "tags": [ - "CBR" + "The Daily Caller" ] } }, - "/cbsnews/article": { + "/dailyexpress/article": { "get": { - "description": "Returns public CBS News article metadata and body paragraphs from a canonical article URL.", - "operationId": "cbsnews-article", + "description": "Returns public Daily Express article metadata and body paragraphs from a canonical article URL.", + "operationId": "dailyexpress-article", "parameters": [ { - "description": "Canonical CBS News article URL", + "description": "Canonical Daily Express article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.cbsnews.com/news/example-article-slug/" + "x-example": "https://www.express.co.uk/news/123456/example" } ], "produces": [ @@ -222069,24 +250522,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS News article content", + "summary": "Get Daily Express article content", "tags": [ - "CBS News" + "Daily Express" ] } }, - "/cbsnews/author": { + "/dailyexpress/author": { "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", + "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 cbsnews.com/team/ author URL", + "description": "Canonical Daily Express journalist URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.cbsnews.com/team/margaret-brennan/" + "x-example": "https://www.express.co.uk/journalist/123944/Rebecca-Russell" } ], "produces": [ @@ -222096,7 +250549,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cbsNewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.dailyExpressAuthorResponseDoc" } }, "400": { @@ -222123,35 +250576,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CBS News author profile", + "summary": "Get a Daily Express journalist profile", "tags": [ - "CBS News" + "Daily Express" ] } }, - "/cbsnews/headlines": { + "/dailyexpress/headlines": { "get": { - "description": "Returns fresh headlines from one public CBS News RSS section.", - "operationId": "cbsnews-headlines", + "description": "Returns fresh headlines from one public Daily Express RSS section.", + "operationId": "dailyexpress-headlines", "parameters": [ { - "description": "CBS News RSS section slug", + "description": "Daily Express section slug", "enum": [ - "main", - "us", + "news", + "uk", "world", "politics", - "moneywatch", - "health", - "entertainment", + "royal", + "us", + "weather", "science", - "technology", - "space" + "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", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -222182,16 +250655,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS News section headlines", + "summary": "Get Daily Express section headlines", "tags": [ - "CBS News" + "Daily Express" ] } }, - "/cbsnews/news": { + "/dailyexpress/news": { "get": { - "description": "Returns fresh CBS News top stories from its public RSS feed.", - "operationId": "cbsnews-news", + "description": "Returns fresh Daily Express stories from the public News RSS feed.", + "operationId": "dailyexpress-news", "produces": [ "application/json" ], @@ -222202,12 +250675,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -222220,16 +250687,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS News top stories", + "summary": "Get Daily Express top stories", "tags": [ - "CBS News" + "Daily Express" ] } }, - "/cbsnews/sections": { + "/dailyexpress/sections": { "get": { - "description": "Returns the live-verified public CBS News RSS section inventory used by cbsnews-headlines.", - "operationId": "cbsnews-sections", + "description": "Returns the live public Daily Express RSS section inventory.", + "operationId": "dailyexpress-sections", "produces": [ "application/json" ], @@ -222246,24 +250713,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS News sections", + "summary": "Get Daily Express sections", "tags": [ - "CBS News" + "Daily Express" ] } }, - "/cbssports/article": { + "/dailykos/article": { "get": { - "description": "Returns public CBS Sports article metadata and body paragraphs from a canonical cbssports.com//news/ URL.", - "operationId": "cbssports-article", + "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 CBS Sports article URL", + "description": "Canonical Daily Kos staff /news/ article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.cbssports.com/college-football/news/president-trump-attending-texas-tennessee/" + "x-example": "https://www.dailykos.com/stories/2026/9/28/800104871/news/yet-another-fbi-co-babysitter-bids-the-bureau-bye-bye/" } ], "produces": [ @@ -222288,78 +250755,6 @@ "$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 CBS Sports article content", - "tags": [ - "CBS Sports" - ] - } - }, - "/cbssports/author": { - "get": { - "description": "Returns one CBS Sports writer's public profile: name, title, headshot, bio, X/Twitter link, and their recent articles.", - "operationId": "cbssports-author", - "parameters": [ - { - "description": "Writer slug, e.g. david-cobb", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "david-cobb" - }, - { - "description": "Canonical cbssports.com/writers// URL; alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.cbssports.com/writers/david-cobb/" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.cbsSportsAuthorResponseDoc" - } - }, - "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": { @@ -222372,46 +250767,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CBS Sports writer profile", + "summary": "Get a Daily Kos staff article", "tags": [ - "CBS Sports" + "Daily Kos" ] } }, - "/cbssports/headlines": { + "/dailykos/headlines": { "get": { - "description": "Returns fresh headlines from one public CBS Sports per-sport RSS feed.", - "operationId": "cbssports-headlines", + "description": "Returns current stories from one verified Daily Kos category feed. Use dailykos-sections to discover the complete accepted category set.", + "operationId": "dailykos-headlines", "parameters": [ { - "description": "CBS Sports section slug", + "description": "Daily Kos category 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" + "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", "required": true, - "type": "string" + "type": "string", + "x-example": "announcements" } ], "produces": [ @@ -222430,12 +250829,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -222448,16 +250841,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS Sports section headlines", + "summary": "Get Daily Kos category headlines", "tags": [ - "CBS Sports" + "Daily Kos" ] } }, - "/cbssports/news": { + "/dailykos/news": { "get": { - "description": "Returns fresh CBS Sports top stories from its public headlines RSS feed.", - "operationId": "cbssports-news", + "description": "Returns current staff-authored Daily Kos stories from its public RSS feed.", + "operationId": "dailykos-news", "produces": [ "application/json" ], @@ -222468,12 +250861,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -222486,16 +250873,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS Sports top stories", + "summary": "Get Daily Kos top stories", "tags": [ - "CBS Sports" + "Daily Kos" ] } }, - "/cbssports/sections": { + "/dailykos/sections": { "get": { - "description": "Returns the live-verified public CBS Sports per-sport RSS feed inventory used by cbssports-headlines.", - "operationId": "cbssports-sections", + "description": "Returns the 24 live-verified public WordPress categories accepted by dailykos-headlines.", + "operationId": "dailykos-sections", "produces": [ "application/json" ], @@ -222512,40 +250899,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS Sports sections", + "summary": "List Daily Kos categories", "tags": [ - "CBS Sports" + "Daily Kos" ] } }, - "/chewy/brands": { + "/dailymail/article": { "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 public Daily Mail article metadata and body paragraphs from a canonical article URL.", + "operationId": "dailymail-article", "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.", + "description": "Canonical Daily Mail article URL", "in": "query", - "name": "name", + "name": "url", + "required": true, "type": "string", - "x-example": "ACANA" + "x-example": "https://www.dailymail.co.uk/news/article-1234567/example.html" } ], "produces": [ @@ -222555,7 +250926,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.brandsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -222564,8 +250935,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -222582,33 +250953,31 @@ "ApiKeyAuth": [] } ], - "summary": "List Chewy's brand directory", + "summary": "Get Daily Mail article content", "tags": [ - "Chewy" + "Daily Mail" ] } }, - "/chewy/categories": { + "/dailymail/author": { "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": "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": "Chewy category group id to expand, e.g. 332 for Dog Food. Omit for the full top-level department tree.", + "description": "Canonical dailymail.com/profile-/.html URL", "in": "query", - "name": "group_id", + "name": "url", + "required": true, "type": "string", - "x-example": "332" + "x-example": "https://www.dailymail.com/profile-1021/charliespiering.html" }, { - "description": "How many levels of subcategories to expand, 1 to 3 (default 2)", + "description": "1-based page of articles to return; defaults to 1", "in": "query", - "name": "depth", + "name": "page", "type": "integer", - "x-example": 2 + "x-example": 1 } ], "produces": [ @@ -222618,7 +250987,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.dailyMailAuthorResponseDoc" } }, "400": { @@ -222627,8 +250996,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -222645,68 +251014,38 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Chewy's category taxonomy tree", + "summary": "Get a Daily Mail author profile", "tags": [ - "Chewy" + "Daily Mail" ] } }, - "/chewy/category": { + "/dailymail/headlines": { "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 fresh headlines from one public Daily Mail RSS section.", + "operationId": "dailymail-headlines", "parameters": [ { - "description": "Chewy's numeric category id, e.g. \\", - "in": "query", - "name": "group_id", - "required": true, - "type": "string", - "x-example": "294" - }, - { - "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.", + "description": "Daily Mail RSS section slug", "enum": [ - "byRelevance", - "byNewest", - "byPopularity", - "byLowestPrice", - "byHighestPrice", - "byRating", - "byRatingCount" + "home", + "news", + "sport", + "tvshowbiz", + "health", + "femail", + "travel", + "sciencetech", + "money", + "debate", + "us", + "australia" ], "in": "query", - "name": "sort", + "name": "section", + "required": true, "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 + "x-example": "home" } ], "produces": [ @@ -222716,7 +251055,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.categoryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -222725,11 +251064,37 @@ "$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 fresh Daily Mail top stories from its public RSS feed.", + "operationId": "dailymail-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -222749,44 +251114,50 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Chewy category listing", + "summary": "Get Daily Mail top stories", "tags": [ - "Chewy" + "Daily Mail" ] } }, - "/chewy/facets": { + "/dailymail/sections": { "get": { - "consumes": [ + "description": "Returns the live-verified public Daily Mail RSS section inventory.", + "operationId": "dailymail-sections", + "produces": [ "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", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Chewy's numeric category id, e.g. \\", - "in": "query", - "name": "group_id", - "type": "string", - "x-example": "294" - }, + "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": "Free-text search keywords to return refinement options for, e.g. \\", + "description": "Canonical Daily Maverick article or opinionista URL", "in": "query", - "name": "q", + "name": "url", + "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": "https://www.dailymaverick.co.za/article/2026-09-29-nmb-flying-squad-get-two-cars-and-a-promise-of-more/" } ], "produces": [ @@ -222796,7 +251167,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.facetsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -222829,27 +251200,77 @@ "ApiKeyAuth": [] } ], - "summary": "List a Chewy category or search's refinement options", + "summary": "Get a Daily Maverick article", "tags": [ - "Chewy" + "Daily Maverick" ] } }, - "/chewy/gtin-lookup": { + "/dailymaverick/headlines": { "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 up to 21 current article cards from the public category JSON endpoint. Use dailymaverick-sections to discover valid slugs.", + "operationId": "dailymaverick-headlines", "parameters": [ { - "description": "Comma-separated GTIN/UPC barcodes, up to 20", + "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": "gtins", + "name": "section", "required": true, "type": "string", - "x-example": "192268541316" + "x-example": "2019-elections" } ], "produces": [ @@ -222859,7 +251280,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.gtinLookupResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -222886,29 +251307,16 @@ "ApiKeyAuth": [] } ], - "summary": "Resolve Chewy GTIN/UPC barcodes to part numbers", + "summary": "Get headlines from one Daily Maverick section", "tags": [ - "Chewy" + "Daily Maverick" ] } }, - "/chewy/inventory": { + "/dailymaverick/news": { "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", - "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": "101143,52448" - } - ], + "description": "Returns current article and opinionista links from Daily Maverick's public news sitemap.", + "operationId": "dailymaverick-news", "produces": [ "application/json" ], @@ -222916,19 +251324,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.inventoryResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -222949,42 +251345,16 @@ "ApiKeyAuth": [] } ], - "summary": "Look up live warehouse inventory for a batch of Chewy products", + "summary": "Get current Daily Maverick stories", "tags": [ - "Chewy" + "Daily Maverick" ] } - }, - "/chewy/item-attributes": { - "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", - "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" - } - ], + }, + "/dailymaverick/sections": { + "get": { + "description": "Lists all 51 live-verified article-bearing categories accepted by dailymaverick-headlines.", + "operationId": "dailymaverick-sections", "produces": [ "application/json" ], @@ -222992,19 +251362,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.itemAttributesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -223025,27 +251383,24 @@ "ApiKeyAuth": [] } ], - "summary": "Look up a batch of Chewy products' structured attributes and handling flags", + "summary": "List Daily Maverick sections", "tags": [ - "Chewy" + "Daily Maverick" ] } }, - "/chewy/product": { + "/dailyrecord/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Chewy product's full normalized 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 public Daily Record article metadata and body paragraphs from a canonical article URL.", + "operationId": "dailyrecord-article", "parameters": [ { - "description": "Numeric id from a chewy.com PDP URL", + "description": "Canonical Daily Record article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "185468" + "x-example": "https://www.dailyrecord.co.uk/news/scottish-news/example-37685844" } ], "produces": [ @@ -223055,7 +251410,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.productResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -223070,12 +251425,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -223088,48 +251437,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chewy product's detail", + "summary": "Get Daily Record article content", "tags": [ - "Chewy" + "Daily Record" ] } }, - "/chewy/product-questions": { + "/dailyrecord/author": { "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": "Returns one Daily Record author's public profile: name, job title, bio, email, X/Twitter handle, and their recent articles.", + "operationId": "dailyrecord-author", "parameters": [ { - "description": "The numeric id from a chewy.com PDP URL, e.g. \\", + "description": "Author slug, e.g. paul-hutcheon", "in": "query", - "name": "id", - "required": true, + "name": "slug", "type": "string", - "x-example": "767806" - }, - { - "description": "Page number, 1-based (default 1).", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Questions per page, 1 to 50 (default 20).", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "paul-hutcheon" }, { - "description": "Answers to return per question, 1 to 20 (default 10). Each question also reports answers_total.", + "description": "Canonical dailyrecord.co.uk/authors// URL; alternative to slug", "in": "query", - "name": "answer_limit", - "type": "integer", - "x-example": 10 + "name": "url", + "type": "string", + "x-example": "https://www.dailyrecord.co.uk/authors/paul-hutcheon/" } ], "produces": [ @@ -223139,7 +251470,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.questionsResponseDoc" + "$ref": "#/definitions/publicnews.dailyRecordAuthorResponseDoc" } }, "400": { @@ -223154,12 +251485,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -223172,67 +251497,36 @@ "ApiKeyAuth": [] } ], - "summary": "List a Chewy product's customer questions and answers, paginated", + "summary": "Get a Daily Record author profile", "tags": [ - "Chewy" + "Daily Record" ] } }, - "/chewy/product-reviews": { + "/dailyrecord/headlines": { "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 fresh headlines from one public Daily Record section.", + "operationId": "dailyrecord-headlines", "parameters": [ { - "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": "Reviews per page, 1 to 50 (default 20).", - "in": "query", - "name": "limit", - "type": "integer", - "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.", + "description": "Daily Record section slug", "enum": [ - "POSITIVE", - "NEGATIVE" + "news", + "scotland", + "uk-world-news", + "sport", + "football", + "showbiz", + "lifestyle", + "money", + "travel", + "in-your-area" ], "in": "query", - "name": "filter", + "name": "section", + "required": true, "type": "string", - "x-example": "POSITIVE" + "x-example": "news" } ], "produces": [ @@ -223242,7 +251536,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.reviewsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -223251,16 +251545,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 Daily Record section headlines", + "tags": [ + "Daily Record" + ] + } + }, + "/dailyrecord/news": { + "get": { + "description": "Returns fresh Daily Record stories from the public News RSS feed.", + "operationId": "dailyrecord-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -223275,27 +251589,50 @@ "ApiKeyAuth": [] } ], - "summary": "List a Chewy product's customer reviews, paginated", + "summary": "Get Daily Record top stories", "tags": [ - "Chewy" + "Daily Record" ] } }, - "/chewy/products": { + "/dailyrecord/sections": { "get": { - "consumes": [ + "description": "Returns the public Daily Record editorial section inventory.", + "operationId": "dailyrecord-sections", + "produces": [ "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", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "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": "Comma-separated Chewy part numbers, up to 20", + "description": "Canonical Daily Star (UK) article URL", "in": "query", - "name": "part_numbers", + "name": "url", "required": true, "type": "string", - "x-example": "52448,767758" + "x-example": "https://www.dailystar.co.uk/tv/wayne-rooney-opens-up-weight-37700309" } ], "produces": [ @@ -223305,7 +251642,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.productsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -223314,6 +251651,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -223332,61 +251675,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a batch of Chewy products' lightweight summaries", + "summary": "Get Daily Star (UK) article content", "tags": [ - "Chewy" + "Daily Star UK" ] } }, - "/chewy/search": { + "/dailystaruk/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a Chewy keyword search's normalized 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": "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": "Free-text search keywords", + "description": "Author slug, e.g. edward-easton", "in": "query", - "name": "q", - "required": true, + "name": "slug", "type": "string", - "x-example": "salmon dog food" - }, - { - "description": "Page number, 36 products per page (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "edward-easton" }, { - "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" - ], + "description": "Canonical dailystar.co.uk/authors// URL; alternative to slug", "in": "query", - "name": "sort", + "name": "url", "type": "string", - "x-example": "byRating" + "x-example": "https://www.dailystar.co.uk/authors/edward-easton/" }, { - "collectionFormat": "csv", - "description": "Repeatable, up to 10. Each value is \\", + "default": 1, + "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "brand_facet:ACANA" + "name": "page", + "type": "integer" } ], "produces": [ @@ -223396,7 +251715,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.searchResponseDoc" + "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" } }, "400": { @@ -223405,6 +251724,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -223423,26 +251748,64 @@ "ApiKeyAuth": [] } ], - "summary": "Search Chewy by keyword", + "summary": "Get a Daily Star (UK) author profile", "tags": [ - "Chewy" + "Daily Star UK" ] } }, - "/chewy/suggest": { + "/dailystaruk/headlines": { "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 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": "Partial search text, e.g. \\", + "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", - "name": "term", + "name": "section", + "required": true, "type": "string", - "x-example": "salmon dog" + "x-example": "news" } ], "produces": [ @@ -223452,7 +251815,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.suggestResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -223479,29 +251842,16 @@ "ApiKeyAuth": [] } ], - "summary": "Chewy search-box typeahead suggestions", + "summary": "Get Daily Star (UK) section headlines", "tags": [ - "Chewy" + "Daily Star UK" ] } }, - "/chewy/variants": { + "/dailystaruk/news": { "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", - "parameters": [ - { - "description": "The numeric id from a chewy.com PDP URL, e.g. \\", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "185468" - } - ], + "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" ], @@ -223509,19 +251859,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.variantsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -223542,24 +251880,50 @@ "ApiKeyAuth": [] } ], - "summary": "List every size/flavor variant of a Chewy product", + "summary": "Get Daily Star (UK) top stories", "tags": [ - "Chewy" + "Daily Star UK" ] } }, - "/chicagotribune/article": { + "/dailystaruk/sections": { "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 public Daily Star (UK) editorial section inventory used by dailystaruk-headlines.", + "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": "Canonical Chicago Tribune article URL", + "description": "Daily Wire 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://www.dailywire.com/news/example-article-slug" } ], "produces": [ @@ -223596,30 +251960,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chicago Tribune article content", + "summary": "Get Daily Wire article content", "tags": [ - "Chicago Tribune" + "DailyWire" ] } }, - "/chicagotribune/author": { + "/dailywire/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 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": "Author slug, e.g. olivia-olander", + "description": "Author slug, e.g. brent-scher", "in": "query", "name": "slug", "type": "string", - "x-example": "olivia-olander" + "x-example": "brent-scher" }, { - "description": "Canonical chicagotribune.com/author// URL; alternative to slug", + "description": "Canonical dailywire.com/author/ URL; alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.chicagotribune.com/author/olivia-olander/" + "x-example": "https://www.dailywire.com/author/brent-scher" } ], "produces": [ @@ -223629,7 +251993,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.chicagoTribuneAuthorResponseDoc" + "$ref": "#/definitions/publicnews.dailyWireAuthorResponseDoc" } }, "400": { @@ -223656,85 +252020,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chicago Tribune author profile", + "summary": "Get a Daily Wire author profile", "tags": [ - "Chicago Tribune" + "DailyWire" ] } }, - "/chicagotribune/headlines": { + "/dailywire/headlines": { "get": { - "description": "Returns fresh headlines from one public Chicago Tribune section page.", - "operationId": "chicagotribune-headlines", + "description": "Returns current Daily Wire headlines for one content-vertical section, sourced from the site's own homepage feed.", + "operationId": "dailywire-headlines", "parameters": [ { - "description": "Chicago Tribune section slug", + "description": "Daily Wire section slug", "enum": [ "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", + "dw-opinion", + "analysis", + "news-and-commentary", + "news-and-analysis", + "exclusive", "entertainment", - "home-garden", - "movies", - "music-concerts", - "restaurants-food-drink", - "theater", - "travel", - "tv-streaming", - "fitness", - "advice", - "best-reviews" + "original", + "upstream", + "sports", + "mi-x-dw" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -223765,16 +252082,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chicago Tribune section headlines", + "summary": "Get Daily Wire section headlines", "tags": [ - "Chicago Tribune" + "DailyWire" ] } }, - "/chicagotribune/news": { + "/dailywire/news": { "get": { - "description": "Returns the current Chicago Tribune top stories from the public homepage.", - "operationId": "chicagotribune-news", + "description": "Returns fresh Daily Wire top stories from its public RSS feed.", + "operationId": "dailywire-news", "produces": [ "application/json" ], @@ -223785,6 +252102,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -223797,16 +252120,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chicago Tribune top stories", + "summary": "Get Daily Wire top stories", "tags": [ - "Chicago Tribune" + "DailyWire" ] } }, - "/chicagotribune/sections": { + "/dailywire/sections": { "get": { - "description": "Returns the public Chicago Tribune editorial section inventory.", - "operationId": "chicagotribune-sections", + "description": "Returns the live-sampled public Daily Wire content-vertical inventory used by the headlines endpoint.", + "operationId": "dailywire-sections", "produces": [ "application/json" ], @@ -223823,62 +252146,144 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chicago Tribune sections", + "summary": "Get Daily Wire content-vertical sections", "tags": [ - "Chicago Tribune" + "DailyWire" ] } }, - "/chick-fil-a/content": { + "/datasets": { "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": "Lists available read-only scraped datasets and the capabilities supported by each dataset.", + "operationId": "datasets-list", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/datasets.listResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List stored scraped datasets", + "tags": [ + "Datasets" + ] + } + }, + "/datasets/airbnb-markets/facets": { + "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). The `admin1`, `locality`, `room_type`, `property_type` and `amenities` facets stay empty until their enrichment coverage is high enough to be reliable. group_by enum: `country`, `market`, `admin1`, `locality`, `room_type`, `property_type`.", + "operationId": "datasets-airbnb-markets-facets", "parameters": [ { - "description": "Which corpus. One of press-room, story, page, legal, downloadable-asset.", + "description": "Facet enum: country, market, currency, superhost, guest_favorite, rating_band, review_band, admin1, locality, room_type, property_type, amenities", "enum": [ - "press-room", - "story", - "page", - "legal", - "downloadable-asset" + "country", + "market", + "currency", + "superhost", + "guest_favorite", + "rating_band", + "review_band", + "admin1", + "locality", + "room_type", + "property_type", + "amenities" ], "in": "query", - "name": "type", + "name": "facet", "required": true, "type": "string", - "x-example": "press-room" + "x-example": "country" }, { - "description": "Free-text filter. Results are relevance-ranked when present; otherwise newest first.", + "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": "search", - "type": "string", - "x-example": "community" + "name": "group_by", + "type": "string" }, { - "description": "1-based page number (default 1)", + "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. FR", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "country", + "type": "string" }, { - "description": "Entries per page, 1-100 (default 20)", + "description": "Exact metro-market filter, max 128 characters", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "name": "market", + "type": "string" }, { - "description": "Include the full article body (default false -- bodies are large)", + "description": "Count only Superhost listings", "in": "query", - "name": "include_body", - "type": "boolean", - "x-example": false + "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": [ @@ -223888,7 +252293,64 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.contentResponseDoc" + "$ref": "#/definitions/datasets.airbnbMarketsFacetResponseDoc" + } + }, + "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": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Facet the Airbnb markets dataset", + "tags": [ + "Datasets" + ] + } + }, + "/datasets/airbnb-markets/items/{country}": { + "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" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/datasets.airbnbMarketResponseDoc" } }, "400": { @@ -223909,8 +252371,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -223921,50 +252383,79 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Chick-fil-A press releases, legal documents and press-kit assets", + "summary": "Get an Airbnb market from the dataset", "tags": [ - "Chick-fil-A" + "Datasets" ] } }, - "/chick-fil-a/content-taxonomy": { + "/datasets/airbnb-markets/nearby": { "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 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": "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": "Center latitude, from -90 through 90", "in": "query", - "name": "taxonomy", + "name": "lat", "required": true, - "type": "string", - "x-example": "press_category" + "type": "number", + "x-example": 40.7484257 }, { - "description": "1-based page number (default 1)", + "description": "Center longitude, from -180 through 180", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 }, { - "description": "Terms per page, 1-100 (default 20)", + "description": "Search radius in meters, from 1 through 50000", "in": "query", - "name": "per_page", + "name": "radius_m", + "required": true, "type": "integer", - "x-example": 100 + "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" } ], "produces": [ @@ -223974,7 +252465,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.contentTaxonomyResponseDoc" + "$ref": "#/definitions/datasets.airbnbMarketsNearbyResponseDoc" } }, "400": { @@ -223983,8 +252474,137 @@ "$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" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Airbnb market density near a coordinate", + "tags": [ + "Datasets" + ] + } + }, + "/datasets/airbnb-markets/search": { + "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). `admin1`, `locality`, `room_type` and `property_type` are enrichment-derived and stay empty until their coverage is high enough to be reliable. 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`.", + "operationId": "datasets-airbnb-markets-search", + "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", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/datasets.airbnbMarketsSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -223995,8 +252615,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -224004,50 +252624,79 @@ }, "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "List the category and tag vocabularies Chick-fil-A classifies its content under", - "tags": [ - "Chick-fil-A" - ] - } - }, - "/chick-fil-a/faq": { - "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", - "parameters": [ + "ApiKeyAuth": [] + } + ], + "summary": "Search the Airbnb markets dataset", + "tags": [ + "Datasets" + ] + } + }, + "/datasets/apple-podcasts-shows/facets": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns terms aggregation counts for the Apple Podcasts shows dataset. Facet enum: `genre`, `genre_id`, `country`, `content_advisory_rating`, `run_id`.", + "operationId": "datasets-apple-podcasts-shows-facets", + "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", + "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": "Free-text filter over question and answer text. Results are relevance-ranked when present.", + "description": "Exact Apple Podcasts genre id filter, max 128 characters", "in": "query", - "name": "search", - "type": "string", - "x-example": "delivery" + "name": "genre_id", + "type": "string" }, { - "description": "Comma-separated faq_category term ids, up to 20, from any prior response's categories[].id", + "description": "Exact storefront country filter, max 128 characters", "in": "query", - "name": "category", - "type": "string", - "x-example": "58" + "name": "country", + "type": "string" }, { - "description": "1-based page number (default 1)", + "description": "Exact explicitness filter, max 128 characters", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "explicitness", + "type": "string" }, { - "description": "Entries per page, 1-100 (default 20)", + "description": "Exact crawl run-id filter, max 128 characters", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum episode count (track_count), 0 or greater", + "in": "query", + "name": "min_track_count", + "type": "integer" } ], "produces": [ @@ -224057,7 +252706,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.faqResponseDoc" + "$ref": "#/definitions/datasets.applePodcastsShowsFacetResponseDoc" } }, "400": { @@ -224066,20 +252715,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" } @@ -224090,33 +252733,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Chick-fil-A customer FAQs", + "summary": "Facet Apple Podcasts shows dataset", "tags": [ - "Chick-fil-A" + "Datasets" ] } }, - "/chick-fil-a/location": { + "/datasets/apple-podcasts-shows/items/{id}": { "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 one crawled Apple Podcasts show record by id from dataset id enum value `apple-podcasts-shows`.", + "operationId": "datasets-apple-podcasts-shows-item", "parameters": [ { - "description": "Numeric WordPress post id. Supply either id or slug, not both.", - "in": "query", + "description": "Apple Podcasts numeric show id (e.g. 173001861)", + "in": "path", "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", + "required": true, "type": "string", - "x-example": "branson-food-truck" + "x-example": "173001861" } ], "produces": [ @@ -224126,7 +252763,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.locationResponseDoc" + "$ref": "#/definitions/datasets.applePodcastsShowResponseDoc" } }, "400": { @@ -224147,8 +252784,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -224159,40 +252796,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Chick-fil-A restaurant's address and hours", + "summary": "Get an Apple Podcasts show from dataset", "tags": [ - "Chick-fil-A" + "Datasets" ] } }, - "/chick-fil-a/locations": { + "/datasets/apple-podcasts-shows/search": { "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": "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`.", + "operationId": "datasets-apple-podcasts-shows-search", "parameters": [ { - "description": "Free-text filter over restaurant names. Results are relevance-ranked when present.", + "description": "Full-text query over show title and artist name, max 256 characters", "in": "query", - "name": "search", - "type": "string", - "x-example": "branson" + "name": "q", + "type": "string" }, { - "description": "1-based page number (default 1)", + "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", - "x-example": 1 + "type": "integer" }, { - "description": "Restaurants per page, 1-100 (default 20)", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -224202,7 +252885,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.locationsResponseDoc" + "$ref": "#/definitions/datasets.applePodcastsShowsSearchResponseDoc" } }, "400": { @@ -224211,20 +252894,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" } @@ -224235,68 +252912,106 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Chick-fil-A restaurant locations", + "summary": "Search Apple Podcasts shows dataset", "tags": [ - "Chick-fil-A" + "Datasets" ] } }, - "/chick-fil-a/menu": { + "/datasets/apps-charts/search": { "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": "Searches daily top-chart snapshots scraped from the iOS App Store and Google Play, stored in a search index (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`.", + "operationId": "datasets-apps-charts-search", "parameters": [ { - "description": "Free-text filter over item names. Results are relevance-ranked when present.", + "description": "Full-text query over chart-entry title and developer, max 256 characters", "in": "query", - "name": "search", - "type": "string", - "x-example": "nuggets" + "name": "q", + "type": "string" }, { - "description": "Comma-separated menu_taxonomy term ids (menu section, e.g. Breakfast, Beverages), up to 20", + "description": "Store enum: ios, android", + "enum": [ + "ios", + "android" + ], "in": "query", - "name": "menu_taxonomy", - "type": "string", - "x-example": "265" + "name": "store", + "type": "string" }, { - "description": "Comma-separated menu_item_type term ids (ITEM, ITEM_GROUPING, MODIFIER), up to 20", + "description": "Chart enum: top_free, top_paid, top_grossing, new", + "enum": [ + "top_free", + "top_paid", + "top_grossing", + "new" + ], "in": "query", - "name": "menu_item_type", - "type": "string", - "x-example": "431" + "name": "chart_type", + "type": "string" }, { - "description": "Comma-separated menu_item_group term ids (the grouping a variant belongs to), up to 20", + "description": "Apple device-platform filter, iOS charts only; see platform enum above", "in": "query", - "name": "menu_item_group", - "type": "string", - "x-example": "899" + "name": "platform", + "type": "string" }, { - "description": "Comma-separated nutrition_table_menu term ids (published nutrition-table grouping), up to 20", + "description": "Raw store collection id filter (e.g. topgrossingapplications, GROSSING), max 128 characters", "in": "query", - "name": "nutrition_table_menu", - "type": "string", - "x-example": "368" + "name": "collection", + "type": "string" }, { - "description": "1-based page number (default 1)", + "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", - "x-example": 1 + "type": "integer" }, { - "description": "Items per page, 1-100 (default 20)", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -224306,7 +253021,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.menuResponseDoc" + "$ref": "#/definitions/datasets.chartsSearchResponseDoc" } }, "400": { @@ -224315,20 +253030,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" } @@ -224339,33 +253048,77 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Chick-fil-A menu", + "summary": "Search the app-charts dataset", "tags": [ - "Chick-fil-A" + "Datasets" ] } }, - "/chick-fil-a/menu-item": { + "/datasets/apps-reviews/search": { "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": "Searches user reviews scraped from the iOS App Store and Google Play, stored in a search index (one document per review). Store enum: `ios`, `android`. Sort enum: `recent`, `score_desc`, `score_asc`, `helpful_desc`.", + "operationId": "datasets-apps-reviews-search", "parameters": [ { - "description": "Numeric WordPress post id. Supply either id or slug, not both.", + "description": "Full-text query over review text, title and author, max 256 characters", "in": "query", - "name": "id", - "type": "integer", - "x-example": 10613 + "name": "q", + "type": "string" }, { - "description": "Item slug, e.g. from a listing response. Supply either id or slug, not both.", + "description": "Store enum: ios, android", + "enum": [ + "ios", + "android" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "chick-fil-a-filet" + "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": [ @@ -224375,7 +253128,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.menuItemResponseDoc" + "$ref": "#/definitions/datasets.reviewsSearchResponseDoc" } }, "400": { @@ -224384,20 +253137,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" } @@ -224408,47 +253155,108 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Chick-fil-A menu item", + "summary": "Search the app-reviews dataset", "tags": [ - "Chick-fil-A" + "Datasets" ] } }, - "/chick-fil-a/menu-taxonomy": { + "/datasets/apps/search": { "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": "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`.", + "operationId": "datasets-apps-search", "parameters": [ { - "description": "Which taxonomy to list. One of menu_taxonomy, menu_item_type, menu_item_group, nutrition_table_menu.", + "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": [ - "menu_taxonomy", - "menu_item_type", - "menu_item_group", - "nutrition_table_menu" + "ios", + "android", + "both" ], "in": "query", - "name": "taxonomy", - "required": true, - "type": "string", - "x-example": "menu_taxonomy" + "name": "store", + "type": "string" }, { - "description": "1-based page number (default 1)", + "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", - "x-example": 1 + "type": "integer" }, { - "description": "Terms per page, 1-100 (default 20)", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 100 + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -224458,7 +253266,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.menuTaxonomyResponseDoc" + "$ref": "#/definitions/datasets.appsSearchResponseDoc" } }, "400": { @@ -224467,20 +253275,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" } @@ -224491,41 +253293,99 @@ "ApiKeyAuth": [] } ], - "summary": "List one Chick-fil-A menu taxonomy's terms", + "summary": "Search the apps-intelligence dataset", "tags": [ - "Chick-fil-A" + "Datasets" ] } }, - "/chipotle/ingredients": { + "/datasets/bbb-businesses/facets": { "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": "Returns distribution counts over the BBB businesses index (dataset id enum value `bbb-businesses`), honoring the same filters as search. Facet enum: `category`, `state`, `city`, `rating`, `accredited`, `entity_type`, `run_id`.", + "operationId": "datasets-bbb-businesses-facets", "parameters": [ { - "description": "Ordering surface. One of web, web-mobile. Default web-mobile.", + "description": "Facet enum: category, state, city, rating, accredited, entity_type, run_id", "enum": [ - "web", - "web-mobile" + "category", + "state", + "city", + "rating", + "accredited", + "entity_type", + "run_id" ], "in": "query", - "name": "channel", + "name": "facet", + "required": true, "type": "string", - "x-example": "web-mobile" + "x-example": "category" }, { - "description": "Country catalog. One of US, CA. Default US.", + "description": "Full-text match on the business name/category, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact category filter", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact 2-letter state/province filter", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact city 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": [ - "US", - "CA" + "A+", + "A", + "A-", + "B+", + "B", + "B-", + "C+", + "C", + "C-", + "D+", + "D", + "D-", + "F" ], "in": "query", - "name": "region", - "type": "string", - "x-example": "US" + "name": "rating", + "type": "string" + }, + { + "description": "Accreditation filter", + "in": "query", + "name": "accredited", + "type": "boolean" + }, + { + "description": "Exact entity-type filter", + "in": "query", + "name": "entity_type", + "type": "string" + }, + { + "description": "Exact crawl run id filter", + "in": "query", + "name": "run_id", + "type": "string" } ], "produces": [ @@ -224535,7 +253395,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.ingredientsResponseDoc" + "$ref": "#/definitions/datasets.bbbBusinessesFacetResponseDoc" } }, "400": { @@ -224550,8 +253410,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -224562,19 +253422,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chipotle's ingredient content catalog", + "summary": "Facet the BBB businesses dataset", "tags": [ - "Chipotle" + "Datasets" ] } }, - "/chipotle/meals": { + "/datasets/bbb-businesses/items/{id}": { "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": "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": "Business id (the - slug from the profile URL), e.g. 0825-1000223803", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "0825-1000223803" + } + ], "produces": [ "application/json" ], @@ -224582,7 +253452,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.mealsResponseDoc" + "$ref": "#/definitions/datasets.bbbBusinessResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -224591,8 +253473,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -224603,19 +253485,116 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chipotle's preset meal definitions", + "summary": "Get a business from the BBB businesses dataset", "tags": [ - "Chipotle" + "Datasets" ] } }, - "/chipotle/menu": { + "/datasets/bbb-businesses/search": { "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", + "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`. sort enum: `relevance`, `rating_desc`, `rating_asc`, `accredited_first`, `name_asc`, `years_in_business_desc`.", + "operationId": "datasets-bbb-businesses-search", + "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. Use the values returned by facets?facet=category", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact 2-letter state/province filter, parsed from the profile URL, e.g. tx", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact city filter, parsed from the profile URL", + "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", + "in": "query", + "name": "accredited", + "type": "boolean" + }, + { + "description": "Exact entity-type filter, e.g. Limited Liability Company (LLC)", + "in": "query", + "name": "entity_type", + "type": "string" + }, + { + "description": "Exact crawl run id filter", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Sort enum: relevance, rating_desc, rating_asc, accredited_first, name_asc, years_in_business_desc", + "enum": [ + "relevance", + "rating_desc", + "rating_asc", + "accredited_first", + "name_asc", + "years_in_business_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" ], @@ -224623,7 +253602,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.nationalMenuResponseDoc" + "$ref": "#/definitions/datasets.bbbBusinessesSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -224632,8 +253617,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -224644,41 +253629,134 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chipotle's national menu catalog", + "summary": "Search the BBB businesses dataset", "tags": [ - "Chipotle" + "Datasets" ] } }, - "/chipotle/menu/metadata": { + "/datasets/boxofficemojo/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 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": "Ordering surface. One of web, web-mobile. Default web-mobile.", + "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": [ - "web", - "web-mobile" + "gross_band", + "years_active", + "lifetime_year", + "franchise_names", + "brand_names", + "genre_names", + "hydrated", + "is_billion_dollar", + "in_lifetime_top_1000_ww" ], "in": "query", - "name": "channel", + "name": "facet", + "required": true, "type": "string", - "x-example": "web-mobile" + "x-example": "gross_band" }, { - "description": "Country catalog. One of US, CA. Default US.", - "enum": [ - "US", - "CA" - ], + "description": "Full-text query, max 256 characters", "in": "query", - "name": "region", - "type": "string", - "x-example": "US" + "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": [ @@ -224688,7 +253766,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.menuMetadataResponseDoc" + "$ref": "#/definitions/datasets.boxOfficeMojoFacetResponseDoc" } }, "400": { @@ -224703,8 +253781,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -224715,27 +253793,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chipotle's menu presentation metadata", + "summary": "Facet the Box Office Mojo dataset", "tags": [ - "Chipotle" + "Datasets" ] } }, - "/chipotle/restaurant": { + "/datasets/boxofficemojo/items/{title_id}": { "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 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": "Chipotle's numeric restaurant id", - "in": "query", - "name": "restaurant_number", + "description": "Title id (IMDb tt… id), e.g. tt0499549", + "in": "path", + "name": "title_id", "required": true, "type": "string", - "x-example": "3982" + "x-example": "tt0499549" } ], "produces": [ @@ -224745,7 +253823,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.restaurantResponseDoc" + "$ref": "#/definitions/datasets.boxOfficeMojoItemResponseDoc" } }, "400": { @@ -224766,8 +253844,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -224778,39 +253856,150 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Chipotle restaurant", + "summary": "Get a Box Office Mojo title from the dataset", "tags": [ - "Chipotle" + "Datasets" ] } }, - "/chipotle/restaurant/meals": { + "/datasets/boxofficemojo/search": { "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", + "description": "Searches theatrical box-office records from public Box Office Mojo charts and title pages, stored in a search index. 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`.", + "operationId": "datasets-boxofficemojo-search", "parameters": [ { - "description": "Chipotle's numeric restaurant id, from /chipotle/restaurants", + "description": "Full-text query over title and taxonomy names, max 256 characters", "in": "query", - "name": "restaurant_number", - "required": true, - "type": "string", - "x-example": "3982" + "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": "Filter to one meal family. One of BuildYourOwn, HighProtein, Influencer.", + "description": "Sort enum: relevance, worldwide_desc, domestic_desc, peak_worldwide_desc, lifetime_rank_asc, year_desc, year_asc", "enum": [ - "BuildYourOwn", - "HighProtein", - "Influencer" + "relevance", + "worldwide_desc", + "domestic_desc", + "peak_worldwide_desc", + "lifetime_rank_asc", + "year_desc", + "year_asc" ], "in": "query", - "name": "meal_type", - "type": "string", - "x-example": "HighProtein" + "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": [ @@ -224820,7 +254009,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.restaurantMealsResponseDoc" + "$ref": "#/definitions/datasets.boxOfficeMojoSearchResponseDoc" } }, "400": { @@ -224829,20 +254018,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" } @@ -224853,34 +254036,38 @@ "ApiKeyAuth": [] } ], - "summary": "List one Chipotle restaurant's preset meals with prices", + "summary": "Search the Box Office Mojo dataset", "tags": [ - "Chipotle" + "Datasets" ] } }, - "/chipotle/restaurant/menu": { + "/datasets/chrome-extensions/changes": { "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 recent change observations. Change type enum: `users`, `rating`, `rating_count`, `version`, `developer`, `permissions`, `privacy`, `status`.", + "operationId": "datasets-chrome-extensions-changes", "parameters": [ { - "description": "Chipotle's numeric restaurant id", + "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": "restaurant_number", - "required": true, - "type": "string", - "x-example": "3982" + "name": "change_type", + "type": "string" }, { - "description": "Include items the restaurant currently has unavailable (default false)", + "description": "Maximum observations, default 100, max 500", "in": "query", - "name": "include_unavailable", - "type": "boolean", - "x-example": true + "name": "limit", + "type": "integer" } ], "produces": [ @@ -224890,7 +254077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.restaurantMenuResponseDoc" + "$ref": "#/definitions/datasets.chromeExtensionChangesResponseDoc" } }, "400": { @@ -224899,20 +254086,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" } @@ -224923,56 +254104,141 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Chipotle restaurant's menu with prices", + "summary": "Get recent Chrome Web Store item changes", "tags": [ - "Chipotle" + "Datasets" ] } }, - "/chipotle/restaurants": { + "/datasets/chrome-extensions/facets": { "get": { - "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": "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": "Search center latitude", + "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" + ], "in": "query", - "name": "latitude", + "name": "facet", "required": true, - "type": "number", - "x-example": 34.0522 + "type": "string", + "x-example": "item_type" }, { - "description": "Search center longitude", + "description": "Full-text query", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -118.2437 + "name": "q", + "type": "string" }, { - "description": "Search radius in meters, 1-80000 (default 8000)", + "description": "Item type enum: extension, theme, app, unknown", + "enum": [ + "extension", + "theme", + "app", + "unknown" + ], "in": "query", - "name": "radius", - "type": "integer", - "x-example": 8000 + "name": "item_type", + "type": "string" }, { - "description": "Restaurants per page, 1-50 (default 10)", + "description": "Exact category", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 10 + "name": "category", + "type": "string" }, { - "description": "0-based page index (default 0)", + "description": "Exact developer", "in": "query", - "name": "page", - "type": "integer", - "x-example": 0 + "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", + "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": [ @@ -224982,7 +254248,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.restaurantsResponseDoc" + "$ref": "#/definitions/datasets.chromeExtensionFacetResponseDoc" } }, "400": { @@ -224991,20 +254257,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" } @@ -225015,19 +254275,44 @@ "ApiKeyAuth": [] } ], - "summary": "Find Chipotle restaurants near a location", + "summary": "Facet the Chrome Web Store dataset", "tags": [ - "Chipotle" + "Datasets" ] } }, - "/chromewebstore/categories": { + "/datasets/chrome-extensions/history/{id}": { "get": { - "consumes": [ - "application/json" + "description": "Returns chronological change-only observations for a Chrome Web Store item.", + "operationId": "datasets-chrome-extensions-history", + "parameters": [ + { + "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": "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" + } ], - "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" ], @@ -225035,7 +254320,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.categoriesResponseDoc" + "$ref": "#/definitions/datasets.chromeExtensionHistoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { @@ -225050,48 +254347,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Chrome Web Store categories and collections", + "summary": "Get Chrome Web Store item history", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/category": { + "/datasets/chrome-extensions/items/{id}": { "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 one stored extension, theme or legacy app snapshot by its 32-character Chrome Web Store id.", + "operationId": "datasets-chrome-extensions-item", "parameters": [ { - "description": "Category slug under extensions", - "in": "query", - "name": "category", + "description": "Chrome Web Store item id", + "in": "path", + "name": "id", "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", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" } ], "produces": [ @@ -225101,7 +254374,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.listResponseDoc" + "$ref": "#/definitions/datasets.chromeExtensionItemResponseDoc" } }, "400": { @@ -225110,6 +254383,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -225128,52 +254407,33 @@ "ApiKeyAuth": [] } ], - "summary": "List items in a Chrome Web Store category", + "summary": "Get a Chrome Web Store dataset item", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/charts": { + "/datasets/chrome-extensions/metrics": { "get": { - "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": "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": [ { - "default": "popular", - "description": "Top chart to list", + "description": "Recent-change window enum: 7, 30, 90; default 30", "enum": [ - "trending", - "popular", - "notable" + 7, + 30, + 90 ], "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" + "name": "days", + "type": "integer" }, { - "description": "Two-letter language code", + "description": "Top category and permission buckets, default 10, min 5, max 25", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -225183,7 +254443,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.listResponseDoc" + "$ref": "#/definitions/datasets.chromeExtensionMetricsResponseDoc" } }, "400": { @@ -225210,48 +254470,134 @@ "ApiKeyAuth": [] } ], - "summary": "List a Chrome Web Store top chart", + "summary": "Get Chrome Web Store dataset metrics", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/collection": { + "/datasets/chrome-extensions/search": { "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": "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`.", + "operationId": "datasets-chrome-extensions-search", "parameters": [ { - "description": "Curated collection slug", + "description": "Full-text query, max 256 characters", "in": "query", - "name": "collection", - "required": true, - "type": "string", - "x-example": "editors_picks_extensions" + "name": "q", + "type": "string" }, { - "description": "Maximum number of items", + "description": "Item type enum: extension, theme, app, unknown", + "enum": [ + "extension", + "theme", + "app", + "unknown" + ], "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 + "name": "item_type", + "type": "string" }, { - "description": "Two-letter storefront country code", + "description": "Exact Chrome Web Store category", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "category", + "type": "string" }, { - "description": "Two-letter language code", + "description": "Exact displayed developer name", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "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", + "enum": [ + 2, + 3 + ], + "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" + }, + { + "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" + }, + { + "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": [ @@ -225261,7 +254607,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.listResponseDoc" + "$ref": "#/definitions/datasets.chromeExtensionsSearchResponseDoc" } }, "400": { @@ -225288,48 +254634,120 @@ "ApiKeyAuth": [] } ], - "summary": "List items in a curated Chrome Web Store collection", + "summary": "Search the Chrome Web Store dataset", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/developer": { + "/datasets/chrome-extensions/trending": { "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 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`.", + "operationId": "datasets-chrome-extensions-trending", "parameters": [ { - "description": "Chrome Web Store publisher id (u + 32 hex chars)", + "description": "Full-text query", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "u63f06aecfdc45d32c13ccc24f56c3d2d" + "name": "q", + "type": "string" }, { - "description": "Maximum number of items", + "description": "Item type enum: extension, theme, app, unknown", + "enum": [ + "extension", + "theme", + "app", + "unknown" + ], "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 + "name": "item_type", + "type": "string" }, { - "description": "Two-letter storefront country code", + "description": "Exact category", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "category", + "type": "string" }, { - "description": "Two-letter language code", + "description": "Exact developer", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "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", + "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" } ], "produces": [ @@ -225339,7 +254757,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.developerResponseDoc" + "$ref": "#/definitions/datasets.chromeExtensionsSearchResponseDoc" } }, "400": { @@ -225348,12 +254766,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -225372,41 +254784,98 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a Chrome Web Store publisher and their items", + "summary": "Get trending Chrome Web Store items", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/item": { + "/datasets/creators/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "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.", + "operationId": "datasets-creators-search", "parameters": [ { - "description": "Chrome Web Store item id (32-character extension/theme id)", + "description": "Full-text query over handle, nickname and bio, max 256 characters", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + "name": "q", + "type": "string" }, { - "description": "Two-letter storefront country code", + "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", - "x-example": "us" + "type": "string" }, { - "description": "Two-letter language code", + "description": "Filter by verified badge; true keeps only verified creators", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "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": [ + "followers_desc", + "engagement_desc", + "engagement_qualified_desc", + "likes_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": [ @@ -225416,7 +254885,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.itemResponseDoc" + "$ref": "#/definitions/datasets.creatorsSearchResponseDoc" } }, "400": { @@ -225425,12 +254894,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -225449,41 +254912,72 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Chrome Web Store item details", + "summary": "Search the TikTok creators dataset", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/permissions": { + "/datasets/doordash-stores/facets": { "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": "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": "Chrome Web Store item id (32-character extension id)", + "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": "id", + "name": "facet", "required": true, "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + "x-example": "country" }, { - "description": "Two-letter storefront country code", + "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", - "x-example": "us" + "type": "string" }, { - "description": "Two-letter language code", + "description": "State/region code filter", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "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": [ @@ -225493,7 +254987,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.permissionsResponseDoc" + "$ref": "#/definitions/datasets.doorDashStoresFacetResponseDoc" } }, "400": { @@ -225502,12 +254996,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -225526,41 +255014,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a Chrome Web Store item's declared permissions", + "summary": "Facet stored DoorDash stores", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/privacy": { + "/datasets/doordash-stores/items/{store_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 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": "Chrome Web Store item id (32-character extension/theme id)", - "in": "query", - "name": "id", + "description": "DoorDash store id (digits only), e.g. 297068", + "in": "path", + "name": "store_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": "297068" } ], "produces": [ @@ -225570,7 +255044,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.privacyResponseDoc" + "$ref": "#/definitions/datasets.doorDashStoreResponseDoc" } }, "400": { @@ -225603,59 +255077,89 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a Chrome Web Store item's privacy disclosures", + "summary": "Get a stored DoorDash store", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/reviews": { + "/datasets/doordash-stores/nearby": { "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 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.", + "operationId": "datasets-doordash-stores-nearby", "parameters": [ { - "description": "Chrome Web Store item id (32-character extension/theme id)", + "description": "Center latitude, from -90 through 90", "in": "query", - "name": "id", + "name": "lat", "required": true, - "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + "type": "number", + "x-example": 40.7484257 }, { - "description": "Maximum number of reviews", + "description": "Center longitude, from -180 through 180", "in": "query", - "name": "num", + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 + }, + { + "description": "Search radius in meters, 1 through 50000", + "in": "query", + "name": "radius_m", + "required": true, "type": "integer", - "x-example": 100 + "x-example": 5000 }, { - "default": "recent", - "description": "Review sort order", + "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": [ - "recent", - "helpful" + "offset", + "cursor" ], "in": "query", - "name": "sort", + "name": "pagination", "type": "string" }, { - "description": "Two-letter storefront country code", + "description": "Opaque continuation token returned in next_cursor; use with pagination=cursor and the same location and filters", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "cursor", + "type": "string" }, { - "description": "Two-letter language code", + "description": "Offset page number, defaults to 1; ignored by cursor pagination except page=1 to start", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "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": [ @@ -225665,7 +255169,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.reviewsResponseDoc" + "$ref": "#/definitions/datasets.doorDashStoresSearchResponseDoc" } }, "400": { @@ -225674,12 +255178,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -225698,48 +255196,131 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Chrome Web Store item reviews", + "summary": "Find nearby stored DoorDash stores", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/search": { + "/datasets/doordash-stores/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 DoorDash merchant-location directory (dataset id `doordash-stores`), built by grid-tiling the anonymous guest Explore feed and hydrating every discovered store. Identity and marketplace fields (name, marketplace tags, price range, ratings, DashPass eligibility) come from Explore; contact, address, and coordinates come from the hydration pass, so a store that has not been hydrated yet can appear without them. `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: Explore caps at 40 stores per call with no pagination, so the census saturates a tile rather than draining it. 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.", + "operationId": "datasets-doordash-stores-search", "parameters": [ { - "description": "Search keyword", + "description": "Full-text search over store name, address, city, and marketplace tags, max 256 characters", "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "vpn" + "name": "q", + "type": "string" }, { - "description": "Maximum number of results", + "description": "ISO-3166-1 alpha-2 country filter, e.g. US, CA", "in": "query", - "name": "num", - "type": "integer", - "x-example": 30 + "name": "country", + "type": "string" }, { - "description": "Two-letter storefront country code", + "description": "State/region code filter, e.g. CA", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "state", + "type": "string" }, { - "description": "Two-letter language code", + "description": "Exact city filter", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "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" } ], "produces": [ @@ -225749,7 +255330,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.searchResponseDoc" + "$ref": "#/definitions/datasets.doorDashStoresSearchResponseDoc" } }, "400": { @@ -225776,125 +255357,144 @@ "ApiKeyAuth": [] } ], - "summary": "Search Chrome Web Store items", + "summary": "Search the DoorDash store directory", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chromewebstore/similar": { + "/datasets/facebook-pages/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns the related-items shelf the store renders on an item's detail page. Defaults: `country=us`, `lang=en`.", - "operationId": "chromewebstore-similar", + "description": "Returns terms aggregation counts for the Facebook Pages dataset. Facet enum: `category`, `discovery_source`.", + "operationId": "datasets-facebook-pages-facets", "parameters": [ { - "description": "Chrome Web Store item id (32-character extension/theme id)", + "description": "Facet values per response, default 50, maximum 200", "in": "query", - "name": "id", + "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" + ], + "in": "query", + "name": "facet", "required": true, "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + "x-example": "category" }, { - "description": "Two-letter storefront country code", + "description": "Full-text query over title and address, max 256 characters", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "q", + "type": "string" }, { - "description": "Two-letter language code", + "description": "Exact Facebook Page id filter, max 128 characters", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/chromewebstore.similarResponseDoc" - } + "name": "page_id", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact Page username/identifier filter (case-insensitive), max 128 characters", + "in": "query", + "name": "identifier", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact Page category filter (case-insensitive), max 128 characters", + "in": "query", + "name": "category", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "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" }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Retrieve related Chrome Web Store items", - "tags": [ - "ChromeWebStore" - ] - } - }, - "/chromewebstore/suggest": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns item-name suggestions for a search prefix, drawn from the top store-search results. Defaults: `num=8`, `country=us`, `lang=en`.", - "operationId": "chromewebstore-suggest", - "parameters": [ + "description": "Filter by a linked website", + "in": "query", + "name": "has_website", + "type": "boolean" + }, { - "description": "Search prefix to autocomplete", + "description": "Filter by a public contact email", "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "ad blo" + "name": "has_email", + "type": "boolean" }, { - "description": "Maximum number of suggestions", + "description": "Filter by at least one public phone number", "in": "query", - "name": "num", - "type": "integer", - "x-example": 8 + "name": "has_phone", + "type": "boolean" }, { - "description": "Two-letter storefront country code", + "description": "Filter by a public WhatsApp contact", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "has_whatsapp", + "type": "boolean" }, { - "description": "Two-letter language code", + "description": "Minimum Page like count", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "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" } ], "produces": [ @@ -225904,7 +255504,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.suggestResponseDoc" + "$ref": "#/definitions/datasets.facebookPagesFacetResponseDoc" } }, "400": { @@ -225931,27 +255531,27 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Chrome Web Store search terms", + "summary": "Facet the Facebook Pages dataset", "tags": [ - "ChromeWebStore" + "Datasets" ] } }, - "/chrono24/autocomplete": { + "/datasets/facebook-pages/items/{page_id}": { "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 one Facebook Page record by page id from dataset id enum value `facebook-pages`.", + "operationId": "datasets-facebook-pages-item", "parameters": [ { - "description": "Partial search text, e.g. \\", - "in": "query", - "name": "query", + "description": "Facebook Page id, max 128 characters", + "in": "path", + "name": "page_id", "required": true, "type": "string", - "x-example": "submar" + "x-example": "100067013529598" } ], "produces": [ @@ -225961,7 +255561,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.autocompleteResponseDoc" + "$ref": "#/definitions/datasets.facebookPageResponseDoc" } }, "400": { @@ -225970,58 +255570,23 @@ "$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" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Chrono24 search-box suggestions", - "tags": [ - "Chrono24" - ] - } - }, - "/chrono24/brands": { - "get": { - "consumes": [ - "application/json" - ], - "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" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/chrono24.brandsResponseDoc" - } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -226029,129 +255594,122 @@ "ApiKeyAuth": [] } ], - "summary": "List Chrono24 watch brands", + "summary": "Get a Facebook Page from the dataset", "tags": [ - "Chrono24" + "Datasets" ] } }, - "/chrono24/dealer": { + "/datasets/facebook-pages/search": { "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": "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`.", + "operationId": "datasets-facebook-pages-search", "parameters": [ { - "description": "Dealer slug from a listing's seller link", + "description": "Full-text query over title and address, max 256 characters", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "thetimelords" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/chrono24.dealerResponseDoc" - } + "name": "q", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact Facebook Page id filter, max 128 characters", + "in": "query", + "name": "page_id", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact Page username/identifier filter (case-insensitive), max 128 characters", + "in": "query", + "name": "identifier", + "type": "string" }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact Page category filter (case-insensitive), max 128 characters", + "in": "query", + "name": "category", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Chrono24 dealer's storefront", - "tags": [ - "Chrono24" - ] - } - }, - "/chrono24/dealer/reviews": { - "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", - "parameters": [ + "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": "Dealer slug from a listing's seller link", + "description": "Filter by a linked website", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "thetimelords" + "name": "has_website", + "type": "boolean" }, { - "default": 1, - "description": "One-based result page", + "description": "Filter by a public contact email", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "name": "has_email", + "type": "boolean" }, { - "default": 10, - "description": "Reviews per page, 1-50", + "description": "Filter by at least one public phone number", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page_size", + "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" }, { - "default": 0, - "description": "Keep only reviews rating the dealer at least this many stars, 0-5. 0 returns every review", + "description": "Maximum Page like count", "in": "query", - "maximum": 5, - "minimum": 0, - "name": "min_stars", + "name": "max_likes", "type": "integer" }, { - "default": "relevance", - "description": "Result order. One of: relevance, newest, with_recommendation, without_recommendation", + "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", - "newest", - "with_recommendation", - "without_recommendation" + "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", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -226161,7 +255719,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.dealerReviewsResponseDoc" + "$ref": "#/definitions/datasets.facebookPagesSearchResponseDoc" } }, "400": { @@ -226170,8 +255728,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -226181,12 +255739,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -226194,36 +255746,228 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrono24 dealer's buyer reviews", + "summary": "Search the Facebook Pages dataset", "tags": [ - "Chrono24" + "Datasets" ] } }, - "/chrono24/facets": { + "/datasets/github-users/facets": { "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 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": "Filter to list values for", + "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": [ - "condition", - "usedOrNew", - "caseMaterial", - "dialColor", - "braceletMaterial", - "movementType", - "gender", - "watchType", - "stockInfo" + "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": "group", + "name": "facet", "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" + }, + { + "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" } ], @@ -226234,7 +255978,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.facetsResponseDoc" + "$ref": "#/definitions/datasets.githubUsersFacetResponseDoc" } }, "400": { @@ -226243,14 +255987,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" } @@ -226261,27 +256005,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrono24 search filter's accepted values", + "summary": "Facet the GitHub users dataset", "tags": [ - "Chrono24" + "Datasets" ] } }, - "/chrono24/listing": { + "/datasets/github-users/items/{login}": { "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 one enriched GitHub user record by login from dataset id enum value `github-users`.", + "operationId": "datasets-github-users-item", "parameters": [ { - "description": "Listing URL or path from a chrono24-search result's url field", - "in": "query", - "name": "path", + "description": "GitHub login, max 128 characters", + "in": "path", + "name": "login", "required": true, "type": "string", - "x-example": "https://www.chrono24.com/rolex/datejust-36--id40700313.htm" + "x-example": "claude" } ], "produces": [ @@ -226291,7 +256035,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.listingResponseDoc" + "$ref": "#/definitions/datasets.githubUserResponseDoc" } }, "400": { @@ -226306,14 +256050,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" } @@ -226324,27 +256068,80 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrono24 watch listing's detail", + "summary": "Get a GitHub user from the dataset", "tags": [ - "Chrono24" + "Datasets" ] } }, - "/chrono24/models": { + "/datasets/github-users/nearby": { "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": "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`.", + "operationId": "datasets-github-users-nearby", "parameters": [ { - "description": "Brand slug from chrono24-brands", + "description": "Latitude", "in": "query", - "name": "brand", + "name": "lat", "required": true, - "type": "string", - "x-example": "rolex" + "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": [ @@ -226354,7 +256151,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.modelsResponseDoc" + "$ref": "#/definitions/datasets.githubUsersSearchResponseDoc" } }, "400": { @@ -226363,14 +256160,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" } @@ -226381,232 +256178,214 @@ "ApiKeyAuth": [] } ], - "summary": "List Chrono24 models for a brand", + "summary": "Search nearby GitHub users", "tags": [ - "Chrono24" + "Datasets" ] } }, - "/chrono24/search": { + "/datasets/github-users/search": { "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 normalized 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", + "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`.", + "operationId": "datasets-github-users-search", "parameters": [ { - "description": "Free-text keyword search, e.g. \\", + "description": "Full-text query over login, name, company, bio and location, max 256 characters", "in": "query", - "name": "query", - "type": "string", - "x-example": "rolex submariner" + "name": "q", + "type": "string" }, { - "description": "Brand slug from chrono24-brands. At least one of query or brand is required", + "description": "Exact login filter, max 128 characters", "in": "query", - "name": "brand", - "type": "string", - "x-example": "rolex" + "name": "login", + "type": "string" }, { - "description": "Model slug from chrono24-models (requires brand)", + "description": "Exact normalized-company filter, max 128 characters", "in": "query", - "name": "model", - "type": "string", - "x-example": "submariner--mod1" + "name": "company", + "type": "string" }, { - "default": "relevance", - "description": "Result order. One of: relevance, price_asc, price_desc, newest, popularity", + "description": "Follower-tier enum: nano, micro, mid, macro, mega", "enum": [ - "relevance", - "price_asc", - "price_desc", - "newest", - "popularity" + "nano", + "micro", + "mid", + "macro", + "mega" ], "in": "query", - "name": "sort", + "name": "influence_tier", "type": "string" }, { - "default": 1, - "description": "One-based result page", + "description": "Exact geocoded country filter, max 128 characters", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "name": "country", + "type": "string" }, { - "description": "Results per page. Chrono24's own UI offers 30, 60 or 120; defaults to Chrono24's own default", + "description": "Exact ISO country-code filter, max 128 characters", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 60 + "name": "country_code", + "type": "string" }, { - "description": "Advanced-search filter, values from chrono24-facets group=condition", - "enum": [ - "new", - "like_new_unworn", - "very_good", - "good", - "fair", - "incomplete", - "no_details" - ], + "description": "Exact geocoded state filter, max 128 characters", "in": "query", - "name": "condition", + "name": "state", "type": "string" }, { - "description": "Advanced-search filter, values from chrono24-facets group=usedOrNew", - "enum": [ - "new", - "used", - "no_details" - ], + "description": "Exact geocoded city filter, max 128 characters", "in": "query", - "name": "used_or_new", + "name": "city", "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" - ], + "description": "Interest-domain tag filter (e.g. ml-ai, web, devops), max 128 characters", "in": "query", - "name": "case_material", + "name": "domain", "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" - ], + "description": "Filter by public email presence", "in": "query", - "name": "dial_color", - "type": "string" + "name": "has_email", + "type": "boolean" }, { - "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" - ], + "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": "bracelet_material", - "type": "string" + "name": "lon", + "type": "number" }, { - "description": "Advanced-search filter, values from chrono24-facets group=movementType", - "enum": [ - "automatic", - "manual_winding", - "quartz", - "solar", - "smartwatch", - "no_details" - ], + "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", "in": "query", - "name": "movement_type", - "type": "string" + "name": "radius_m", + "type": "integer" }, { - "description": "Advanced-search filter, values from chrono24-facets group=gender", + "description": "Sort enum: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc", "enum": [ - "mens_unisex", - "womens" + "relevance", + "rank_score_desc", + "followers_desc", + "account_age_desc", + "account_age_asc", + "distance_asc" ], "in": "query", - "name": "gender", + "name": "sort", "type": "string" }, { - "description": "Advanced-search filter, values from chrono24-facets group=watchType", - "enum": [ - "watches", - "parts_accessories" - ], + "description": "Page number, defaults to 1", "in": "query", - "name": "watch_type", - "type": "string" + "name": "page", + "type": "integer" }, { - "description": "Advanced-search filter, values from chrono24-facets group=stockInfo", - "enum": [ - "in_stock", - "on_order", - "on_request" - ], + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "stock_info", - "type": "string" + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -226616,7 +256395,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.searchResponseDoc" + "$ref": "#/definitions/datasets.githubUsersSearchResponseDoc" } }, "400": { @@ -226625,52 +256404,14 @@ "$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 Chrono24 watch listings", - "tags": [ - "Chrono24" - ] - } - }, - "/clevelandcom/news": { - "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", - "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" } @@ -226681,144 +256422,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cleveland.com top stories", + "summary": "Search the GitHub users dataset", "tags": [ - "Cleveland.com" + "Datasets" ] } }, - "/cna/article": { + "/datasets/goodreads-authors/facets": { "get": { - "description": "Returns public CNA article metadata and body paragraphs from a canonical article URL.", - "operationId": "cna-article", + "consumes": [ + "application/json" + ], + "description": "Returns terms aggregation counts for the Goodreads authors dataset. Facet enum: `genres`, `run_id`.", + "operationId": "datasets-goodreads-authors-facets", "parameters": [ { - "description": "Canonical CNA article URL", + "description": "Facet enum: genres, run_id", + "enum": [ + "genres", + "run_id" + ], "in": "query", - "name": "url", + "name": "facet", "required": true, "type": "string", - "x-example": "https://www.channelnewsasia.com/singapore/national-arts-council-nac-seeks-operator-new-1000-seat-tanglin-theatre-6408051" - } - ], - "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": "genres" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CNA article content", - "tags": [ - "CNA" - ] - } - }, - "/cna/author": { - "get": { - "description": "Returns one CNA correspondent's or contributor's public profile: name, job title, biography, contact email, and their recent bylined articles.", - "operationId": "cna-author", - "parameters": [ { - "description": "Author slug, e.g. aqil-haziq-mahmud", + "description": "Full-text query over name, about and genres, max 256 characters", "in": "query", - "name": "slug", - "type": "string", - "x-example": "aqil-haziq-mahmud" + "name": "q", + "type": "string" }, { - "description": "Canonical channelnewsasia.com/author/ URL; alternative to slug", + "description": "Exact author name filter, max 128 characters", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.channelnewsasia.com/author/aqil-haziq-mahmud" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.cnaAuthorResponseDoc" - } + "name": "name", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact genre filter, max 128 characters", + "in": "query", + "name": "genre", + "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" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a CNA author profile", - "tags": [ - "CNA" - ] - } - }, - "/cna/headlines": { - "get": { - "description": "Returns fresh headlines from one public CNA section.", - "operationId": "cna-headlines", - "parameters": [ + "description": "Minimum average rating, 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, { - "description": "CNA section slug", - "enum": [ - "asia", - "business", - "singapore", - "sport", - "world" - ], + "description": "Minimum number of ratings", "in": "query", - "name": "section", - "required": true, - "type": "string" + "name": "min_ratings_count", + "type": "integer" } ], "produces": [ @@ -226828,7 +256492,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.goodreadsAuthorsFacetResponseDoc" } }, "400": { @@ -226837,40 +256501,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CNA section headlines", - "tags": [ - "CNA" - ] - } - }, - "/cna/news": { - "get": { - "description": "Returns fresh CNA (Channel NewsAsia) top stories from its public RSS feed.", - "operationId": "cna-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -226881,50 +256519,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNA top stories", + "summary": "Facet Goodreads authors dataset", "tags": [ - "CNA" + "Datasets" ] } }, - "/cna/sections": { + "/datasets/goodreads-authors/items/{id}": { "get": { - "description": "Returns the public CNA editorial section inventory used by the headlines endpoint.", - "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 one crawled Goodreads author profile record by id from dataset id enum value `goodreads-authors`.", + "operationId": "datasets-goodreads-authors-item", "parameters": [ { - "description": "Canonical cnbc.com article URL", - "in": "query", - "name": "url", + "description": "Goodreads author id, e.g. 153394", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.cnbc.com/2026/09/21/iran-us-oil-prices-crude-saudi-arabia-.html" + "x-example": "153394" } ], "produces": [ @@ -226934,7 +256549,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnbc.articleResponseDoc" + "$ref": "#/definitions/datasets.goodreadsAuthorResponseDoc" } }, "400": { @@ -226960,12 +256575,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -226973,30 +256582,79 @@ "ApiKeyAuth": [] } ], - "summary": "CNBC article content", + "summary": "Get a Goodreads author from dataset", "tags": [ - "CNBC" + "Datasets" ] } }, - "/cnbc/author": { + "/datasets/goodreads-authors/search": { "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": "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`.", + "operationId": "datasets-goodreads-authors-search", "parameters": [ { - "description": "CNBC author slug, e.g. jeff-cox", + "description": "Full-text query over name, about and genres, max 256 characters", "in": "query", - "name": "slug", - "type": "string", - "x-example": "jeff-cox" + "name": "q", + "type": "string" }, { - "description": "Canonical https://www.cnbc.com// author page URL, as an alternative to slug", + "description": "Exact author name filter, max 128 characters", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.cnbc.com/jeff-cox/" + "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", + "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": [ @@ -227006,7 +256664,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnbc.authorResponseDoc" + "$ref": "#/definitions/datasets.goodreadsAuthorsSearchResponseDoc" } }, "400": { @@ -227015,12 +256673,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -227032,12 +256684,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -227045,68 +256691,140 @@ "ApiKeyAuth": [] } ], - "summary": "CNBC author profile", + "summary": "Search Goodreads authors dataset", "tags": [ - "CNBC" + "Datasets" ] } }, - "/cnbc/categories": { + "/datasets/goodreads-books/facets": { "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", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/cnbc.categoriesResponseDoc" - } + "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": "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", + "name": "facet", + "required": true, + "type": "string", + "x-example": "genres" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Full-text query over title, author and description, max 256 characters", + "in": "query", + "name": "q", + "type": "string" }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact genre filter, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "CNBC editorial sections", - "tags": [ - "CNBC" - ] - } - }, - "/cnbc/headlines": { - "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", - "parameters": [ + "description": "Exact format filter, max 128 characters", + "in": "query", + "name": "format", + "type": "string" + }, { - "description": "Public CNBC editorial section slug from /cnbc/categories", + "description": "Exact language filter, max 128 characters", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "markets" + "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": "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": [ @@ -227116,7 +256834,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnbc.headlinesResponseDoc" + "$ref": "#/definitions/datasets.goodreadsBooksFacetResponseDoc" } }, "400": { @@ -227136,12 +256854,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -227149,24 +256861,27 @@ "ApiKeyAuth": [] } ], - "summary": "CNBC section headlines", + "summary": "Facet Goodreads books dataset", "tags": [ - "CNBC" + "Datasets" ] } }, - "/cnet/article": { + "/datasets/goodreads-books/items/{id}": { "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 crawled Goodreads book record by id from dataset id enum value `goodreads-books`.", + "operationId": "datasets-goodreads-books-item", "parameters": [ { - "description": "Canonical CNET article URL", - "in": "query", - "name": "url", + "description": "Goodreads book id, e.g. 2767052", + "in": "path", + "name": "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": "2767052" } ], "produces": [ @@ -227176,7 +256891,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.goodreadsBookResponseDoc" } }, "400": { @@ -227191,8 +256906,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" } @@ -227203,37 +256924,149 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNET article content", + "summary": "Get a Goodreads book from dataset", "tags": [ - "CNET" + "Datasets" ] } }, - "/cnet/author": { + "/datasets/goodreads-books/search": { "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": "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`.", + "operationId": "datasets-goodreads-books-search", "parameters": [ { - "description": "Author slug, e.g. scottstein8", + "description": "Full-text query over title, author and description, max 256 characters", "in": "query", - "name": "slug", - "type": "string", - "x-example": "scottstein8" + "name": "q", + "type": "string" }, { - "description": "Canonical cnet.com/profiles/ URL, optionally with a /page// segment; alternative to slug", + "description": "Exact genre filter (e.g. Fantasy, Romance, Nonfiction), max 128 characters", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.cnet.com/profiles/scottstein8/" + "name": "genre", + "type": "string" }, { - "default": 1, - "description": "1-based page number; overrides any page number in url", + "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", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -227243,7 +257076,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cnetAuthorResponseDoc" + "$ref": "#/definitions/datasets.goodreadsBooksSearchResponseDoc" } }, "400": { @@ -227252,14 +257085,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" } @@ -227270,75 +257103,158 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CNET author profile", + "summary": "Search Goodreads books dataset", "tags": [ - "CNET" + "Datasets" ] } }, - "/cnet/headlines": { + "/datasets/google-map-businesses/facets": { "get": { - "description": "Returns fresh CNET headlines from one public topic feed.", - "operationId": "cnet-headlines", + "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 the matching ISO 3166-2 codes (e.g. `ES-MD`, `FR-59`) and are the stable cross-country grouping key. Rows not yet resolved carry no code and are absent from the code facets.", + "operationId": "datasets-google-map-businesses-facets", "parameters": [ { - "description": "CNET topic slug", + "description": "Facet enum: category, country, state, state_code, county, county_code, city, town, website_status", "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" + "category", + "country", + "state", + "state_code", + "county", + "county_code", + "city", + "town", + "website_status" ], "in": "query", - "name": "section", + "name": "facet", "required": true, + "type": "string", + "x-example": "category" + }, + { + "description": "Full-text business search query, max 256 characters", + "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. US-CA or FR-HDF, max 128 characters; use facet=state_code to discover values", + "in": "query", + "name": "state_code", + "type": "string" + }, + { + "description": "Exact ISO 3166-2 county/district code filter, e.g. FR-59 or IT-RM, max 128 characters; use facet=county_code to discover 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", + "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" } ], @@ -227349,7 +257265,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.googleMapBusinessesFacetResponseDoc" } }, "400": { @@ -227358,46 +257274,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CNET section headlines", - "tags": [ - "CNET" - ] - } - }, - "/cnet/news": { - "get": { - "description": "Returns fresh CNET top stories from the public news feed.", - "operationId": "cnet-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" } @@ -227408,16 +257292,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNET top stories", + "summary": "Facet stored Google Maps businesses", "tags": [ - "CNET" + "Datasets" ] } }, - "/cnet/sections": { + "/datasets/google-map-businesses/items/{place_id}": { "get": { - "description": "Returns the public CNET topic taxonomy accepted by the headlines endpoint.", - "operationId": "cnet-sections", + "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", + "parameters": [ + { + "description": "Google Place ID, max 256 characters", + "in": "path", + "name": "place_id", + "required": true, + "type": "string", + "x-example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ" + } + ], "produces": [ "application/json" ], @@ -227425,7 +257322,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/datasets.googleMapBusinessResponseDoc" + } + }, + "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" } } }, @@ -227434,27 +257355,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNET sections", + "summary": "Get a stored Google Maps business", "tags": [ - "CNET" + "Datasets" ] } }, - "/cnn/article": { + "/datasets/google-map-businesses/nearby": { "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": "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.", + "operationId": "datasets-google-map-businesses-nearby", "parameters": [ { - "description": "Canonical cnn.com article URL", + "description": "Latitude", "in": "query", - "name": "url", + "name": "lat", "required": true, - "type": "string", - "x-example": "https://www.cnn.com/2026/08/19/africa/kenya-helicopter-crash-latam-intl" + "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": "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": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -227464,7 +257431,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnn.articleResponseDoc" + "$ref": "#/definitions/datasets.googleMapBusinessesSearchResponseDoc" } }, "400": { @@ -227473,12 +257440,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -227490,12 +257451,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -227503,33 +257458,152 @@ "ApiKeyAuth": [] } ], - "summary": "CNN article content", + "summary": "Search nearby stored Google Maps businesses", "tags": [ - "CNN" + "Datasets" ] } }, - "/cnn/author": { + "/datasets/google-map-businesses/search": { "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": "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.", + "operationId": "datasets-google-map-businesses-search", "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": "Full-text business search query, max 256 characters", "in": "query", - "name": "slug", - "type": "string", - "x-example": "jake-tapper-profile" + "name": "q", + "type": "string" }, { - "description": "Canonical cnn.com/profiles/ URL, as an alternative to slug", + "description": "Exact locale-specific Google Maps category label; use the category facet to discover values, max 128 characters", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.cnn.com/profiles/jake-tapper-profile" + "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. US-CA or FR-HDF, max 128 characters; use facet=state_code to discover values", + "in": "query", + "name": "state_code", + "type": "string" + }, + { + "description": "Exact ISO 3166-2 county/district code filter, e.g. FR-59 or IT-RM, max 128 characters; use facet=county_code to discover 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", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -227539,7 +257613,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnn.authorResponseDoc" + "$ref": "#/definitions/datasets.googleMapBusinessesSearchResponseDoc" } }, "400": { @@ -227548,12 +257622,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -227565,12 +257633,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -227578,41 +257640,170 @@ "ApiKeyAuth": [] } ], - "summary": "CNN profile page", + "summary": "Search stored Google Maps businesses", "tags": [ - "CNN" + "Datasets" ] } }, - "/cnn/headlines": { + "/datasets/housing-markets/facets": { "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": "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": [ { - "default": "world", - "description": "CNN section. Allowed values: world, us, politics, business, health, entertainment, style, travel, sports, science, climate, weather, opinion. Default world.", + "description": "Facet enum: region_type, state_code, property_type, parent_metro, parent_metro_code, income_vintage, is_latest, period_begin", "enum": [ - "world", - "us", - "politics", - "business", - "health", - "entertainment", - "style", - "travel", - "sports", - "science", - "climate", - "weather", - "opinion" + "region_type", + "state_code", + "property_type", + "parent_metro", + "parent_metro_code", + "income_vintage", + "is_latest", + "period_begin" ], "in": "query", - "name": "section", + "name": "facet", + "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" + }, + { + "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": [ @@ -227622,7 +257813,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnn.headlinesResponseDoc" + "$ref": "#/definitions/datasets.housingMarketsFacetResponseDoc" } }, "400": { @@ -227642,12 +257833,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -227655,27 +257840,60 @@ "ApiKeyAuth": [] } ], - "summary": "CNN section headlines", + "summary": "Facet the US housing markets dataset", "tags": [ - "CNN" + "Datasets" ] } }, - "/cnn/live-story": { + "/datasets/housing-markets/items/{region_type}/{table_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a CNN live story's title, description, update time, and chronological post updates. Provide a canonical cnn.com live-news URL.", - "operationId": "cnn-live-story", + "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": "Canonical cnn.com live-news URL", - "in": "query", - "name": "url", + "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": "https://www.cnn.com/2026/08/26/world/live-news/iran-war-trump" + "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", + "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": [ @@ -227685,7 +257903,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnn.liveStoryResponseDoc" + "$ref": "#/definitions/datasets.housingMarketItemResponseDoc" } }, "400": { @@ -227711,12 +257929,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -227724,96 +257936,186 @@ "ApiKeyAuth": [] } ], - "summary": "CNN live story updates", + "summary": "Get a US housing market record from the dataset", "tags": [ - "CNN" + "Datasets" ] } }, - "/coingecko/categories": { + "/datasets/housing-markets/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized CoinGecko category rows from the public categories page. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-categories", + "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.", + "operationId": "datasets-housing-markets-search", "parameters": [ { - "description": "Rows to return, default 100, max 100", + "description": "Full-text query over region name and city, max 256 characters", "in": "query", - "name": "limit", + "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": "Quote currency", + "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": [ - "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" + "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": "vs_currency", + "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": [ @@ -227823,7 +258125,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.categoriesResponseDoc" + "$ref": "#/definitions/datasets.housingMarketsSearchResponseDoc" } }, "400": { @@ -227832,14 +258134,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" } @@ -227850,109 +258152,158 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko categories", + "summary": "Search the US housing markets dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/category/{slug}/coins": { + "/datasets/instagram-users/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized coin rows from a CoinGecko public category page. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-category-coins", + "description": "Returns terms aggregation counts for the Instagram users dataset. Facet enum: `is_verified`, `is_business_account`, `has_bio`, `has_external_url`, `category_name`, `source_tier`.", + "operationId": "datasets-instagram-users-facets", "parameters": [ { - "description": "CoinGecko category slug such as stablecoins", - "in": "path", - "name": "slug", + "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" + ], + "in": "query", + "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": "Page number, default 1", + "description": "Exact username filter (case-insensitive), max 128 characters", "in": "query", - "name": "page", + "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": "Rows to return, default 100, max 100", + "description": "Maximum follower count", "in": "query", - "name": "limit", + "name": "max_followers", "type": "integer" }, { - "description": "Quote currency", + "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": [ - "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" + "relevance", + "followers_desc", + "followers_asc", + "crawled_at_desc", + "crawled_at_asc", + "created_at_desc", + "created_at_asc" ], "in": "query", - "name": "vs_currency", + "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": [ @@ -227962,7 +258313,64 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.categoryCoinsResponseDoc" + "$ref": "#/definitions/datasets.instagramUsersFacetResponseDoc" + } + }, + "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": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Facet the Instagram users dataset", + "tags": [ + "Datasets" + ] + } + }, + "/datasets/instagram-users/items/{username}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Instagram user record by username from dataset id enum value `instagram-users`.", + "operationId": "datasets-instagram-users-item", + "parameters": [ + { + "description": "Instagram username, with or without a leading @, max 128 characters", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "instagram" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/datasets.instagramUserResponseDoc" } }, "400": { @@ -227977,14 +258385,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" } @@ -227995,96 +258403,142 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko category coins", + "summary": "Get an Instagram user from the dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/chains": { + "/datasets/instagram-users/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized chain rows from the CoinGecko public website chains table. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-chains", + "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`.", + "operationId": "datasets-instagram-users-search", "parameters": [ { - "description": "Rows to return, default 100, max 100", + "description": "Full-text query over username, full_name and biography, max 256 characters", "in": "query", - "name": "limit", + "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": "Quote currency", + "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": [ - "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" + "relevance", + "followers_desc", + "followers_asc", + "crawled_at_desc", + "crawled_at_asc", + "created_at_desc", + "created_at_asc" ], "in": "query", - "name": "vs_currency", + "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": [ @@ -228094,7 +258548,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.chainsResponseDoc" + "$ref": "#/definitions/datasets.instagramUsersSearchResponseDoc" } }, "400": { @@ -228103,14 +258557,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" } @@ -228121,103 +258575,103 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko chains", + "summary": "Search the Instagram users dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/chains/{id}": { + "/datasets/jobs/companies": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized sections from a CoinGecko public chain detail page. Sections are omitted when not present. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-chain", + "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`.", + "operationId": "datasets-jobs-companies", "parameters": [ { - "description": "CoinGecko chain id such as ethereum", - "in": "path", - "name": "id", - "required": true, + "description": "Match on company name / domain", + "in": "query", + "name": "q", "type": "string" }, { - "description": "Rows per section to return, default 20, max 100", + "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": "limit", + "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": "Quote currency", + "description": "Keep companies with recent certified DOL LCA filings (default false)", + "in": "query", + "name": "sponsors_visa", + "type": "boolean" + }, + { + "description": "Sort enum: open_desc, company_asc, crawled_desc", "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" + "open_desc", + "company_asc", + "crawled_desc" ], "in": "query", - "name": "vs_currency", + "name": "sort", "type": "string" + }, + { + "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": [ @@ -228227,7 +258681,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.chainDetailResponseDoc" + "$ref": "#/definitions/datasets.jobsCompaniesResponseDoc" } }, "400": { @@ -228236,23 +258690,11 @@ "$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": [ @@ -228260,97 +258702,27 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko chain detail", + "summary": "Find which companies are hiring", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/coin/{id}": { + "/datasets/jobs/companies/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 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": "CoinGecko coin id such as bitcoin", + "description": "Dataset board id", "in": "path", "name": "id", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "icims:062ad50e489784f8d225" } ], "produces": [ @@ -228360,7 +258732,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.coinResponseDoc" + "$ref": "#/definitions/datasets.jobsItemResponseDoc" } }, "400": { @@ -228380,12 +258752,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -228393,113 +258759,25 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko coin profile", + "summary": "Get a single company by board id", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/coin/{id}/analysis": { + "/datasets/jobs/facets": { "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": "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": "CoinGecko coin id such as bitcoin", - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "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": "Chart range", - "enum": [ - "24h", - "max" - ], - "in": "query", - "name": "range", - "type": "string" - }, - { - "description": "Fetch optional CoinGecko chart annotations", + "description": "Buckets per facet, default 20, max 100", "in": "query", - "name": "include_annotations", - "type": "boolean" + "name": "size", + "type": "integer" } ], "produces": [ @@ -228509,7 +258787,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.analysisResponseDoc" + "$ref": "#/definitions/datasets.jobsFacetResponseDoc" } }, "400": { @@ -228518,23 +258796,11 @@ "$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": [ @@ -228542,103 +258808,27 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko coin chart analysis", + "summary": "Facet the jobs dataset (hiring market aggregates)", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/exchange/{id}": { + "/datasets/jobs/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized profile stats and market rows from a CoinGecko public exchange page. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-exchange", + "description": "Returns one crawled job posting by its dataset posting id. Returns 404 when absent.", + "operationId": "datasets-jobs-item", "parameters": [ { - "description": "CoinGecko exchange id such as binance", + "description": "Dataset posting id", "in": "path", "name": "id", "required": true, - "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" + "type": "string", + "x-example": "personio:8e850ee0967201fc1bf3:364429bb4364f43b" } ], "produces": [ @@ -228648,7 +258838,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.exchangeDetailResponseDoc" + "$ref": "#/definitions/datasets.jobsItemResponseDoc" } }, "400": { @@ -228668,12 +258858,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -228681,114 +258865,88 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko exchange detail", + "summary": "Get a single posting from the jobs dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/exchanges": { + "/datasets/jobs/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized exchange rows from CoinGecko public website exchange tables. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-exchanges", + "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`.", + "operationId": "datasets-jobs-nearby", "parameters": [ { - "description": "Exchange table kind, default spot", + "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": [ - "spot", - "dex", - "derivatives", - "perp_dex" + "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": "kind", + "name": "provider", "type": "string" }, { - "description": "Page number, default 1", + "description": "Include closed/filled roles (default false)", "in": "query", - "name": "page", - "type": "integer" + "name": "include_closed", + "type": "boolean" }, { - "description": "Rows to return, default 100, max 100", + "description": "Page number, default 1", "in": "query", - "name": "limit", + "name": "page", "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" - ], + "description": "Page size, default 20, max 100", "in": "query", - "name": "vs_currency", - "type": "string" + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -228798,7 +258956,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.exchangesResponseDoc" + "$ref": "#/definitions/datasets.jobsSearchResponseDoc" } }, "400": { @@ -228812,12 +258970,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -228825,96 +258977,166 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko exchanges", + "summary": "Find postings near a coordinate", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/gainers-losers": { + "/datasets/jobs/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from CoinGecko's public crypto gainers and losers table. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-gainers-losers", + "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`.", + "operationId": "datasets-jobs-search", "parameters": [ { - "description": "Rows per section to return, default 20, max 100", + "description": "Full-text over title, company, description", "in": "query", - "name": "limit", - "type": "integer" + "name": "q", + "type": "string" }, { - "description": "Quote currency", + "description": "Company name match", + "in": "query", + "name": "company", + "type": "string" + }, + { + "description": "Provider filter", "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" + "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)", + "in": "query", + "name": "remote", + "type": "boolean" + }, + { + "description": "Workplace type filter", + "enum": [ + "onsite", + "hybrid", + "remote" + ], + "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" + }, + { + "description": "Sort enum: relevance, posted_desc, company_asc", + "enum": [ + "relevance", + "posted_desc", + "company_asc" ], "in": "query", - "name": "vs_currency", + "name": "sort", "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": [ @@ -228924,7 +259146,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.gainersLosersResponseDoc" + "$ref": "#/definitions/datasets.jobsSearchResponseDoc" } }, "400": { @@ -228938,12 +259160,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -228951,19 +259167,161 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko crypto gainers and losers", + "summary": "Search the jobs dataset (all companies' live postings)", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/global": { + "/datasets/journalists/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized global market metrics from CoinGecko's public charts page.", - "operationId": "coingecko-global", + "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" + }, + { + "description": "Minimum outreach-readiness score, from 0 to 100", + "in": "query", + "name": "min_outreach_readiness", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -228971,7 +259329,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.globalResponseDoc" + "$ref": "#/definitions/datasets.journalistsFacetResponseDoc" } }, "400": { @@ -228980,14 +259338,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" } @@ -228998,52 +259356,35 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko global market snapshot", + "summary": "Facet the journalists dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/global/charts": { + "/datasets/journalists/items/{outlet}/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized global chart series from public CoinGecko website JSON endpoints.", - "operationId": "coingecko-global-charts", + "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": "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": "Chart range, default 90d", - "enum": [ - "24h", - "7d", - "14d", - "30d", - "90d", - "1y", - "max" - ], - "in": "query", - "name": "range", - "type": "string" + "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": "Rows per series to return, default 120, max 500", - "in": "query", - "name": "limit", - "type": "integer" + "description": "Journalist slug within the outlet, e.g. zack-whittaker", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "zack-whittaker" } ], "produces": [ @@ -229053,7 +259394,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.globalChartsResponseDoc" + "$ref": "#/definitions/datasets.journalistsItemResponseDoc" } }, "400": { @@ -229062,14 +259403,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" } @@ -229080,40 +259427,165 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko global chart series", + "summary": "Get a journalist from the journalists dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/learn/articles": { + "/datasets/journalists/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized article cards from CoinGecko Learn public pages.", - "operationId": "coingecko-learn-articles", + "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`.", + "operationId": "datasets-journalists-search", "parameters": [ { - "description": "Learn category, default all", + "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": [ - "all", - "latest", - "airdrop-guides", - "coins-and-tokens", - "guides", - "wallets-and-bridges", - "api", - "reviews" + "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": "category", + "name": "vertical", "type": "string" }, { - "description": "Rows to return, default 20, max 50", + "description": "Exact topic filter, e.g. security, stablecoins. Use the values returned by facets?facet=topic", "in": "query", - "name": "limit", + "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" } ], @@ -229124,7 +259596,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.learnArticlesResponseDoc" + "$ref": "#/definitions/datasets.journalistsSearchResponseDoc" } }, "400": { @@ -229133,14 +259605,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" } @@ -229151,102 +259623,96 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko Learn articles", + "summary": "Search the journalists dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/markets": { + "/datasets/numbeo-cities/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized cryptocurrency market rows from CoinGecko public pages. This endpoint supports the documented `vs_currency` enum and is not intended for real-time trading.", - "operationId": "coingecko-markets", + "description": "Returns terms aggregation counts for the Numbeo cities dataset. Facet enum: `country`.", + "operationId": "datasets-numbeo-cities-facets", "parameters": [ { - "description": "Page number, default 1", + "description": "Facet enum: country", + "enum": [ + "country" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "facet", + "required": true, + "type": "string", + "x-example": "country" }, { - "description": "Rows to return, default 100, max 100", + "description": "Full-text query over the city name, max 256 characters", "in": "query", - "name": "limit", - "type": "integer" + "name": "q", + "type": "string" }, { - "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": "Exact country filter, max 128 characters", "in": "query", - "name": "vs_currency", + "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": [ @@ -229256,7 +259722,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.marketsResponseDoc" + "$ref": "#/definitions/datasets.numbeoCitiesFacetResponseDoc" } }, "400": { @@ -229265,8 +259731,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -229276,12 +259742,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -229289,102 +259749,27 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko markets", + "summary": "Facet the Numbeo cities dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/new-coins": { + "/datasets/numbeo-cities/items/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from CoinGecko's public new cryptocurrencies table. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-new-coins", + "description": "Returns one composite Numbeo city record by city slug from dataset id enum value `numbeo-cities`.", + "operationId": "datasets-numbeo-cities-item", "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": "Numbeo city slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "Los-Angeles" } ], "produces": [ @@ -229394,7 +259779,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.newCoinsResponseDoc" + "$ref": "#/definitions/datasets.numbeoCityResponseDoc" } }, "400": { @@ -229403,14 +259788,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" } @@ -229421,24 +259812,113 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko new cryptocurrencies", + "summary": "Get a Numbeo city from the dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/news": { + "/datasets/numbeo-cities/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized article cards from CoinGecko's public news page.", - "operationId": "coingecko-news", + "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`.", + "operationId": "datasets-numbeo-cities-search", "parameters": [ { - "description": "Rows to return, default 20, max 50", + "description": "Full-text query over the city name, max 256 characters", "in": "query", - "name": "limit", + "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", + "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" } ], @@ -229449,7 +259929,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.newsResponseDoc" + "$ref": "#/definitions/datasets.numbeoCitiesSearchResponseDoc" } }, "400": { @@ -229458,14 +259938,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" } @@ -229476,109 +259956,27 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko news cards", + "summary": "Search the Numbeo cities dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/nft/category/{slug}": { + "/datasets/numbeo-countries/items/{country}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized NFT collection rows from a CoinGecko public NFT category page. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-nft-category", + "description": "Returns one composite Numbeo country record by country name from dataset id enum value `numbeo-countries`.", + "operationId": "datasets-numbeo-countries-item", "parameters": [ { - "description": "CoinGecko NFT category slug such as metaverse", + "description": "Country name as Numbeo spells it", "in": "path", - "name": "slug", + "name": "country", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "Vietnam" } ], "produces": [ @@ -229588,7 +259986,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.nftCategoryResponseDoc" + "$ref": "#/definitions/datasets.numbeoCountryResponseDoc" } }, "400": { @@ -229603,14 +260001,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" } @@ -229621,102 +260019,108 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko NFT category", + "summary": "Get a Numbeo country from the dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/nfts": { + "/datasets/numbeo-countries/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized NFT collection rows from the CoinGecko public website NFT table. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-nfts", + "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`.", + "operationId": "datasets-numbeo-countries-search", "parameters": [ { - "description": "Page number, default 1", + "description": "Full-text query over the country name, max 256 characters", "in": "query", - "name": "page", - "type": "integer" + "name": "q", + "type": "string" }, { - "description": "Rows to return, default 100, max 100", + "description": "Minimum Cost of Living Index (New York = 100)", "in": "query", - "name": "limit", - "type": "integer" + "name": "min_cost_of_living_index", + "type": "number" }, { - "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": "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": "vs_currency", + "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": [ @@ -229726,7 +260130,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.nftsResponseDoc" + "$ref": "#/definitions/datasets.numbeoCountriesSearchResponseDoc" } }, "400": { @@ -229735,14 +260139,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" } @@ -229753,31 +260157,74 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko NFT collections", + "summary": "Search the Numbeo countries dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/search": { + "/datasets/pitchbook-advisors/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized CoinGecko search sections from the public website search JSON. Empty valid searches return empty arrays.", - "operationId": "coingecko-search", + "description": "Returns terms aggregation counts for the PitchBook advisors dataset. Facet enum: `service_type`, `hq_country`, `hq_state`, `run_id`.", + "operationId": "datasets-pitchbook-advisors-facets", "parameters": [ { - "description": "Search query", + "description": "Facet enum: service_type, hq_country, hq_state, run_id", + "enum": [ + "service_type", + "hq_country", + "hq_state", + "run_id" + ], "in": "query", - "name": "q", + "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": "Rows per section to return, default 10, max 50", + "description": "Exact service provider type filter, max 128 characters", "in": "query", - "name": "limit", + "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" } ], @@ -229788,7 +260235,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.searchResponseDoc" + "$ref": "#/definitions/datasets.pitchbookAdvisorsFacetResponseDoc" } }, "400": { @@ -229797,14 +260244,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" } @@ -229815,25 +260262,27 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko discovery search", + "summary": "Facet PitchBook advisors dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/token-unlocks": { + "/datasets/pitchbook-advisors/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from CoinGecko's public incoming token unlocks page.", - "operationId": "coingecko-token-unlocks", + "description": "Returns one crawled PitchBook advisor record by id from dataset id enum value `pitchbook-advisors`.", + "operationId": "datasets-pitchbook-advisors-item", "parameters": [ { - "description": "Rows to return, default 100, max 100", - "in": "query", - "name": "limit", - "type": "integer" + "description": "PitchBook advisor id, e.g. 676215-64", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "676215-64" } ], "produces": [ @@ -229843,7 +260292,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.tokenUnlocksResponseDoc" + "$ref": "#/definitions/datasets.pitchbookAdvisorResponseDoc" } }, "400": { @@ -229852,14 +260301,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" } @@ -229870,122 +260325,85 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko incoming token unlocks", + "summary": "Get a PitchBook advisor from dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/treasuries": { + "/datasets/pitchbook-advisors/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized entity rows from CoinGecko's public crypto treasuries tables. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-treasuries", + "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`.", + "operationId": "datasets-pitchbook-advisors-search", "parameters": [ { - "description": "Treasury asset filter, default all", - "enum": [ - "all", - "bitcoin", - "ethereum", - "solana", - "bnb", - "xrp", - "tron" - ], + "description": "Full-text query over name and description, max 256 characters", "in": "query", - "name": "asset", + "name": "q", "type": "string" }, { - "description": "Treasury holder type filter, default all", - "enum": [ - "all", - "companies", - "governments" - ], + "description": "Exact service provider type filter (e.g. Commercial Bank, Investment Bank, Financing Advisory), max 128 characters", "in": "query", - "name": "holder_type", + "name": "service_type", "type": "string" }, { - "description": "Rows to return, default 100, max 100", + "description": "Exact headquarters country filter, max 128 characters", "in": "query", - "name": "limit", + "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": "Quote currency", + "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": [ - "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" + "relevance", + "name_asc", + "year_founded_desc", + "recently_crawled_desc" ], "in": "query", - "name": "vs_currency", + "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": [ @@ -229995,7 +260413,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.treasuriesResponseDoc" + "$ref": "#/definitions/datasets.pitchbookAdvisorsSearchResponseDoc" } }, "400": { @@ -230004,14 +260422,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" } @@ -230022,96 +260440,102 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko crypto treasuries", + "summary": "Search PitchBook advisors dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/coingecko/trending": { + "/datasets/pitchbook-companies/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns deduped trending coins and categories from the public CoinGecko highlights page. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-trending", + "description": "Returns terms aggregation counts for the PitchBook companies dataset. Facet enum: `status`, `primary_industry`, `financing_status`, `ownership_status`, `hq_country`, `hq_state`, `run_id`.", + "operationId": "datasets-pitchbook-companies-facets", "parameters": [ { - "description": "Rows per section to return, default 20, max 50", + "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": "limit", - "type": "integer" + "name": "facet", + "required": true, + "type": "string", + "x-example": "status" }, { - "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": "Full-text query over name and description, max 256 characters", "in": "query", - "name": "vs_currency", + "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": [ @@ -230121,7 +260545,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.trendingResponseDoc" + "$ref": "#/definitions/datasets.pitchbookCompaniesFacetResponseDoc" } }, "400": { @@ -230130,14 +260554,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" } @@ -230148,33 +260572,27 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko trending highlights", + "summary": "Facet PitchBook companies dataset", "tags": [ - "CoinGecko" + "Datasets" ] } }, - "/colehaan/collections": { + "/datasets/pitchbook-companies/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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", + "description": "Returns one crawled PitchBook company record by id from dataset id enum value `pitchbook-companies`.", + "operationId": "datasets-pitchbook-companies-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": "PitchBook company id, e.g. 752821-12", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "752821-12" } ], "produces": [ @@ -230184,7 +260602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/datasets.pitchbookCompanyResponseDoc" } }, "400": { @@ -230193,14 +260611,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" } @@ -230211,41 +260635,110 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan collections", + "summary": "Get a PitchBook company from dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/collections/{handle}/products": { + "/datasets/pitchbook-companies/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "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`.", + "operationId": "datasets-pitchbook-companies-search", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "collection-handle" + "description": "Full-text query over name and description, max 256 characters", + "in": "query", + "name": "q", + "type": "string" }, { - "description": "1-based page, defaults to 1", + "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", - "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": [ @@ -230255,7 +260748,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/datasets.pitchbookCompaniesSearchResponseDoc" } }, "400": { @@ -230264,20 +260757,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" } @@ -230288,33 +260775,68 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan collection products", + "summary": "Search PitchBook companies dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/pages": { + "/datasets/pitchbook-funds/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Cole Haan (https://www.colehaan.com). The storefront URL is fixed server-side.", - "operationId": "colehaan-pages", + "description": "Returns terms aggregation counts for the PitchBook funds dataset. Facet enum: `fund_strategy`, `fund_status`, `run_id`.", + "operationId": "datasets-pitchbook-funds-facets", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Facet enum: fund_strategy, fund_status, run_id", + "enum": [ + "fund_strategy", + "fund_status", + "run_id" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "facet", + "required": true, + "type": "string", + "x-example": "fund_strategy" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Full-text query over name and description, max 256 characters", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "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": [ @@ -230324,7 +260846,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/datasets.pitchbookFundsFacetResponseDoc" } }, "400": { @@ -230339,8 +260861,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -230351,27 +260873,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan static pages", + "summary": "Facet PitchBook funds dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/pages/{handle}": { + "/datasets/pitchbook-funds/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one Cole Haan (https://www.colehaan.com) page handle. The storefront URL is fixed server-side.", - "operationId": "colehaan-page", + "description": "Returns one crawled PitchBook fund record by id from dataset id enum value `pitchbook-funds`.", + "operationId": "datasets-pitchbook-funds-item", "parameters": [ { - "description": "Page handle", + "description": "PitchBook fund id, e.g. 19719-91F", "in": "path", - "name": "handle", + "name": "id", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "19719-91F" } ], "produces": [ @@ -230381,7 +260903,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/datasets.pitchbookFundResponseDoc" } }, "400": { @@ -230402,8 +260924,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -230414,33 +260936,79 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cole Haan static page", + "summary": "Get a PitchBook fund from dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/products": { + "/datasets/pitchbook-funds/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from Cole Haan's (https://www.colehaan.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "colehaan-products", + "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`.", + "operationId": "datasets-pitchbook-funds-search", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Full-text query over name and description, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact fund strategy filter (e.g. Early Stage VC, Buyout), max 128 characters", + "in": "query", + "name": "fund_strategy", + "type": "string" + }, + { + "description": "Exact fund status filter (e.g. Closed, Raising), 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" + }, + { + "description": "Sort enum: relevance, name_asc, vintage_desc, recently_crawled_desc", + "enum": [ + "relevance", + "name_asc", + "vintage_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": "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": [ @@ -230450,7 +261018,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/datasets.pitchbookFundsSearchResponseDoc" } }, "400": { @@ -230465,8 +261033,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -230477,27 +261045,82 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan products", + "summary": "Search PitchBook funds dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/products/{handle}": { + "/datasets/pitchbook-investors/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 terms aggregation counts for the PitchBook investors dataset. Facet enum: `status`, `investor_type`, `hq_country`, `hq_state`, `run_id`.", + "operationId": "datasets-pitchbook-investors-facets", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "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": "facet", "required": true, "type": "string", - "x-example": "product-handle" + "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 investor type filter, max 128 characters", + "in": "query", + "name": "investor_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 current portfolio size", + "in": "query", + "name": "min_portfolio_count", + "type": "integer" + }, + { + "description": "Minimum number of exits", + "in": "query", + "name": "min_exits_count", + "type": "integer" } ], "produces": [ @@ -230507,7 +261130,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/datasets.pitchbookInvestorsFacetResponseDoc" } }, "400": { @@ -230516,20 +261139,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" } @@ -230540,45 +261157,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cole Haan product", + "summary": "Facet PitchBook investors dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/products/{handle}/recommendations": { + "/datasets/pitchbook-investors/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized recommended products for one Cole Haan (https://www.colehaan.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "colehaan-product-recommendations", + "description": "Returns one crawled PitchBook investor record by id from dataset id enum value `pitchbook-investors`.", + "operationId": "datasets-pitchbook-investors-item", "parameters": [ { - "description": "Product handle", + "description": "PitchBook investor id, e.g. 294471-37", "in": "path", - "name": "handle", + "name": "id", "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": "294471-37" } ], "produces": [ @@ -230588,7 +261187,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/datasets.pitchbookInvestorResponseDoc" } }, "400": { @@ -230609,8 +261208,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -230621,41 +261220,91 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan product recommendations", + "summary": "Get a PitchBook investor from dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/search/suggest": { + "/datasets/pitchbook-investors/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Cole Haan's (https://www.colehaan.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "colehaan-search-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`.", + "operationId": "datasets-pitchbook-investors-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": "wool" + "type": "string" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "description": "Exact status filter (e.g. Active, Inactive), max 128 characters", "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "name": "status", + "type": "string" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Exact investor type filter (e.g. Venture Capital, Private Equity, Angel), max 128 characters", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "investor_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 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": [ + "relevance", + "name_asc", + "portfolio_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": "page_size", + "type": "integer" } ], "produces": [ @@ -230665,7 +261314,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/datasets.pitchbookInvestorsSearchResponseDoc" } }, "400": { @@ -230680,8 +261329,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -230692,42 +261341,75 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cole Haan search suggestions", + "summary": "Search PitchBook investors dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/sitemap/urls": { + "/datasets/pitchbook-limited-partners/facets": { "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", + "description": "Returns terms aggregation counts for the PitchBook limited partners dataset. Facet enum: `institution_type`, `hq_country`, `hq_state`, `run_id`.", + "operationId": "datasets-pitchbook-limited-partners-facets", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "description": "Facet enum: institution_type, hq_country, hq_state, run_id", "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" + "institution_type", + "hq_country", + "hq_state", + "run_id" ], "in": "query", - "name": "type", + "name": "facet", + "required": true, "type": "string", - "x-example": "products" + "x-example": "institution_type" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "description": "Full-text query over name and description, max 256 characters", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "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" } ], "produces": [ @@ -230737,7 +261419,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/datasets.pitchbookLimitedPartnersFacetResponseDoc" } }, "400": { @@ -230752,8 +261434,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -230764,19 +261446,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan sitemap URLs", + "summary": "Facet PitchBook limited partners dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/sitemaps": { + "/datasets/pitchbook-limited-partners/items/{id}": { "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 one crawled PitchBook limited partner record by id from dataset id enum value `pitchbook-limited-partners`.", + "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" + } + ], "produces": [ "application/json" ], @@ -230784,7 +261476,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/datasets.pitchbookLimitedPartnerResponseDoc" } }, "400": { @@ -230793,14 +261485,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" } @@ -230811,19 +261509,87 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan sitemaps", + "summary": "Get a PitchBook limited partner from dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/colehaan/store": { + "/datasets/pitchbook-limited-partners/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized storefront metadata for Cole Haan (https://www.colehaan.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "colehaan-store", + "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`.", + "operationId": "datasets-pitchbook-limited-partners-search", + "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", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -230831,7 +261597,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/datasets.pitchbookLimitedPartnersSearchResponseDoc" } }, "400": { @@ -230846,8 +261612,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -230858,24 +261624,203 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cole Haan store metadata", + "summary": "Search PitchBook limited partners dataset", "tags": [ - "Cole Haan" + "Datasets" ] } }, - "/collider/article": { + "/datasets/playstation-games/facets": { "get": { - "description": "Returns public Collider article metadata and body paragraphs from a canonical article URL.", - "operationId": "collider-article", + "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": "Canonical Collider article URL", + "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": [ + "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": "url", + "name": "facet", "required": true, "type": "string", - "x-example": "https://collider.com/saw-new-movie-mike-p-nelson-director/" + "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": [ @@ -230885,7 +261830,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.playstationGamesFacetResponseDoc" } }, "400": { @@ -230894,20 +261839,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" } @@ -230918,24 +261857,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Collider article content", + "summary": "Facet PlayStation games dataset", "tags": [ - "Collider" + "Datasets" ] } }, - "/collider/author": { + "/datasets/playstation-games/items/{product_id}": { "get": { - "description": "Returns a Collider author's byline metadata, biography, social links, and recent articles from a canonical author URL.", - "operationId": "collider-author", + "consumes": [ + "application/json" + ], + "description": "Returns one crawled PlayStation Store record by product_id from dataset id enum value `playstation-games`.", + "operationId": "datasets-playstation-games-item", "parameters": [ { - "description": "Canonical Collider author 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://collider.com/author/hannah-hunt/" + "x-example": "UP0001-PPSA01491_00-GAME000000000000" } ], "produces": [ @@ -230945,7 +261887,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.colliderAuthorResponseDoc" + "$ref": "#/definitions/datasets.playstationGameResponseDoc" } }, "400": { @@ -230960,8 +261902,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" } @@ -230972,73 +261920,206 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Collider author profile", + "summary": "Get a PlayStation game from dataset", "tags": [ - "Collider" + "Datasets" ] } }, - "/collider/headlines": { + "/datasets/playstation-games/search": { "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": "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`.", + "operationId": "datasets-playstation-games-search", "parameters": [ { - "description": "Collider RSS section slug", + "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", + "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": [ - "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" + "free", + "under_5", + "5_to_10", + "10_to_20", + "20_to_40", + "40_to_60", + "60_plus" ], "in": "query", - "name": "section", - "required": true, + "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": [ @@ -231048,7 +262129,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.playstationGamesSearchResponseDoc" } }, "400": { @@ -231063,8 +262144,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -231075,54 +262156,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get Collider section headlines", + "summary": "Search PlayStation games dataset", "tags": [ - "Collider" + "Datasets" ] } }, - "/collider/news": { + "/datasets/producthunt-makers/facets": { "get": { - "description": "Returns fresh Collider top stories from its public RSS feed.", - "operationId": "collider-news", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "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": "Facet enum: topic, product_count_band", + "enum": [ + "topic", + "product_count_band" + ], + "in": "query", + "name": "facet", + "required": true, + "type": "string", + "x-example": "topic" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Full-text query over maker name and headline, max 256 characters", + "in": "query", + "name": "q", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "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" } ], - "summary": "Get Collider top stories", - "tags": [ - "Collider" - ] - } - }, - "/collider/sections": { - "get": { - "description": "Returns the public Collider RSS section inventory used by the headlines endpoint.", - "operationId": "collider-sections", "produces": [ "application/json" ], @@ -231130,7 +262214,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/datasets.producthuntMakersFacetResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -231138,6 +262228,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -231145,19 +262241,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Collider RSS sections", + "summary": "Facet the Product Hunt makers dataset", "tags": [ - "Collider" + "Datasets" ] } }, - "/comc/categories": { + "/datasets/producthunt-makers/items/{username}": { "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 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": "Product Hunt maker username, e.g. rrhoover", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "rrhoover" + } + ], "produces": [ "application/json" ], @@ -231165,7 +262271,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/comc.categoriesResponseDoc" + "$ref": "#/definitions/datasets.producthuntMakerResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -231174,8 +262292,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -231186,27 +262304,67 @@ "ApiKeyAuth": [] } ], - "summary": "List COMC categories", + "summary": "Get a Product Hunt maker from the dataset", "tags": [ - "COMC" + "Datasets" ] } }, - "/comc/listing": { + "/datasets/producthunt-makers/search": { "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": "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`.", + "operationId": "datasets-producthunt-makers-search", "parameters": [ { - "description": "Required. The handle from a comc_search result (or the equivalent comc.com card URL path).", + "description": "Full-text query over maker name and headline, max 256 characters", "in": "query", - "name": "handle", - "required": true, - "type": "string", - "x-example": "Cards/Football/2021/Panini_Absolute_-_Base_-_Red/36/Josh_Allen/17779360" + "name": "q", + "type": "string" + }, + { + "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" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -231216,7 +262374,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/comc.listingResponseDoc" + "$ref": "#/definitions/datasets.producthuntMakersSearchResponseDoc" } }, "400": { @@ -231231,8 +262389,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -231243,106 +262401,93 @@ "ApiKeyAuth": [] } ], - "summary": "Get COMC card listing detail", + "summary": "Search the Product Hunt makers dataset", "tags": [ - "COMC" + "Datasets" ] } }, - "/comc/search": { + "/datasets/producthunt-products/facets": { "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 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": "Optional. One of comc_categories' slug values. Omit to search all categories.", + "description": "Facet enum: topic, launch_year, pricing_type, product_state", + "enum": [ + "topic", + "launch_year", + "pricing_type", + "product_state" + ], "in": "query", - "name": "category", + "name": "facet", + "required": true, "type": "string", - "x-example": "Baseball" + "x-example": "topic" }, { - "description": "Optional free-text search query.", + "description": "Full-text query over product name and tagline, max 256 characters", "in": "query", - "name": "query", - "type": "string", - "x-example": "mike trout" + "name": "q", + "type": "string" }, { - "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" - ], + "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", "in": "query", - "name": "sort", - "type": "string", - "x-example": "r" + "name": "topic", + "type": "string" }, { - "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).", + "description": "Exact maker-username filter (populated by hydration), max 128 characters", "in": "query", - "name": "attributes", - "type": "string", - "x-example": "RC,AUTO" + "name": "maker", + "type": "string" }, { - "description": "Optional. Allowed values: aUngraded (Ungraded), aGraded (Graded), aAftermarketAuto (Aftermarket Auto), aAfterAutoGraded (Aftermarket Auto Graded).", - "enum": [ - "aUngraded", - "aGraded", - "aAftermarketAuto", - "aAfterAutoGraded" - ], + "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", "in": "query", - "name": "condition", - "type": "string", - "x-example": "aGraded" + "name": "launched_after", + "type": "string" }, { - "description": "1-based page, default 1.", + "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "launched_before", + "type": "string" }, { - "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 - ], + "description": "Minimum upvotes, 0 or greater", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 20 + "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": [ @@ -231352,7 +262497,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/comc.searchResponseDoc" + "$ref": "#/definitions/datasets.producthuntProductsFacetResponseDoc" } }, "400": { @@ -231367,8 +262512,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -231379,27 +262524,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search COMC card listings", + "summary": "Facet the Product Hunt products dataset", "tags": [ - "COMC" + "Datasets" ] } }, - "/congress/report": { + "/datasets/producthunt-products/items/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Fetch a single disclosure report by its filing_url (as returned by", - "operationId": "congress-report", + "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": "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": "url", + "description": "Product Hunt product slug, e.g. chatgpt", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://efdsearch.senate.gov/search/view/annual/cc198326-0f50-4f47-8b03-a5c6440f400f/" + "x-example": "chatgpt" } ], "produces": [ @@ -231409,7 +262554,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/congress.reportResponseDoc" + "$ref": "#/definitions/datasets.producthuntProductResponseDoc" } }, "400": { @@ -231424,14 +262569,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" } @@ -231442,346 +262587,105 @@ "ApiKeyAuth": [] } ], - "summary": "Fetch and parse a congressional disclosure report", + "summary": "Get a Product Hunt product from the dataset", "tags": [ - "Congress" + "Datasets" ] } }, - "/congress/stock-disclosures": { + "/datasets/producthunt-products/search": { "get": { "consumes": [ "application/json" ], - "description": "Search public congressional stock disclosure filings (House or Senate)", - "operationId": "congress-stock-disclosures", + "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 as hydration runs. Sort enum: `relevance`, `votes_desc`, `launched_desc`, `launched_asc`, `rating_desc`, `best_rank_asc`.", + "operationId": "datasets-producthunt-products-search", "parameters": [ { - "description": "Chamber filter. Allowed values: house, senate.", - "enum": [ - "house", - "senate" - ], - "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.", + "description": "Full-text query over product name and tagline, max 256 characters", "in": "query", - "name": "member", + "name": "q", "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", - "type": "string", - "x-example": "Warren" - }, - { - "description": "Deprecated unsupported parameter; any non-empty value returns a validation error and the parameter is planned for removal.", + "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", "in": "query", - "name": "ticker", + "name": "topic", "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": "CA" - }, - { - "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" - ], + "description": "Exact maker-username filter (populated by hydration), max 128 characters", "in": "query", - "name": "senator_state", - "type": "string", - "x-example": "MA" + "name": "maker", + "type": "string" }, { - "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" - ], + "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", "in": "query", - "name": "candidate_state", - "type": "string", - "x-example": "TX" + "name": "launched_after", + "type": "string" }, { - "description": "House district filter (House only).", + "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", "in": "query", - "name": "district", + "name": "launched_before", "type": "string" }, { - "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": "Minimum upvotes, 0 or greater", "in": "query", - "name": "filer_type", - "type": "string", - "x-example": "candidate" + "name": "min_votes", + "type": "integer" }, { - "description": "House candidate-search election year filter (requires filer_type=candidate).", + "description": "Minimum review rating, from 0 through 5 (populated by hydration)", "in": "query", - "name": "election_year", - "type": "string", - "x-example": "2024" + "name": "min_rating", + "type": "number" }, { - "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": "Exact pricing-type filter (populated by hydration), e.g. free, paid, freemium", "in": "query", - "name": "report_type", - "type": "string", - "x-example": "annual,periodic_transaction" + "name": "pricing_type", + "type": "string" }, { - "description": "Minimum filing date. House accepts YYYY. Senate accepts YYYY or MM/DD/YYYY and defaults to 2012 when omitted.", + "description": "Website presence filter (populated by hydration)", "in": "query", - "name": "from", - "type": "string", - "x-example": "01/01/2024" + "name": "has_website", + "type": "boolean" }, { - "description": "Maximum filing date. House accepts YYYY. Senate accepts YYYY or MM/DD/YYYY.", + "description": "true keeps only products still online, false only retired products", "in": "query", - "name": "to", - "type": "string", - "x-example": "12/31/2024" + "name": "is_online", + "type": "boolean" }, { - "description": "Sort key. Allowed values: name_asc, name_desc, office_asc, office_desc, filing_year_asc, filing_year_desc.", + "description": "Sort enum: relevance, votes_desc, launched_desc, launched_asc, rating_desc, best_rank_asc", "enum": [ - "name_asc", - "name_desc", - "office_asc", - "office_desc", - "filing_year_asc", - "filing_year_desc" + "relevance", + "votes_desc", + "launched_desc", + "launched_asc", + "rating_desc", + "best_rank_asc" ], "in": "query", "name": "sort", - "type": "string", - "x-example": "filing_year_desc" + "type": "string" }, { - "default": 1, - "description": "1-based result page (1-1000).", + "description": "Page number, defaults to 1", "in": "query", - "maximum": 1000, - "minimum": 1, "name": "page", "type": "integer" }, { - "description": "Max results (1-500).", + "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": [ @@ -231791,7 +262695,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/congress.stockDisclosuresResponseDoc" + "$ref": "#/definitions/datasets.producthuntProductsSearchResponseDoc" } }, "400": { @@ -231800,14 +262704,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" } @@ -231818,28 +262722,72 @@ "ApiKeyAuth": [] } ], - "summary": "Search congressional stock-disclosure filings", + "summary": "Search the Product Hunt products dataset", "tags": [ - "Congress" + "Datasets" ] } }, - "/contact": { - "post": { + "/datasets/producthunt-trends/facets": { + "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 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": "Website URL payload", - "in": "body", - "name": "option", + "description": "Facet enum: topic, launch_year", + "enum": [ + "topic", + "launch_year" + ], + "in": "query", + "name": "facet", "required": true, - "schema": { - "$ref": "#/definitions/contact.ContactRequest" - } + "type": "string", + "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": [ @@ -231849,23 +262797,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/contact.contactResponseDoc" + "$ref": "#/definitions/datasets.producthuntTrendsFacetResponseDoc" } }, "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", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -231876,26 +262824,84 @@ "ApiKeyAuth": [] } ], - "summary": "Contact API — emails, socials and phones for a website", + "summary": "Facet the Product Hunt trends dataset", "tags": [ - "Web" + "Datasets" ] } }, - "/costco/categories": { + "/datasets/producthunt-trends/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": "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`.", + "operationId": "datasets-producthunt-trends-search", "parameters": [ { - "description": "Search text to scope the returned categories to, e.g. \\", + "description": "Aggregate cell dimension enum: topic_month, topic_year, topic. Defaults to topic_month", + "enum": [ + "topic_month", + "topic_year", + "topic" + ], "in": "query", - "name": "query", - "type": "string", - "x-example": "refrigerator" + "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 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" + ], + "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": [ @@ -231905,17 +262911,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.categoriesResponseDoc" + "$ref": "#/definitions/datasets.producthuntTrendsSearchResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "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" } @@ -231926,27 +262938,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get Costco category facets", + "summary": "Search the Product Hunt trends dataset", "tags": [ - "Costco" + "Datasets" ] } }, - "/costco/product/{id}": { + "/datasets/reddit-trending/search": { "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": "Searches daily snapshots of each tracked subreddit's hot-feed post order, stored in a search index (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 — the underlying credential-free scraper does not expose vote counts, so `rank` reflects Reddit's own hot-feed order rather than a locally computed score.", + "operationId": "datasets-reddit-trending-search", "parameters": [ { - "description": "Costco product id, e.g. from a search result's id field or a product page URL's \\", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "4000103922" + "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", + "in": "query", + "name": "subreddit", + "type": "string" + }, + { + "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", + "in": "query", + "name": "date", + "type": "string" + }, + { + "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" } ], "produces": [ @@ -231956,7 +263000,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.productResponseDoc" + "$ref": "#/definitions/datasets.redditTrendingSearchResponseDoc" } }, "400": { @@ -231965,8 +263009,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -231976,12 +263020,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -231989,43 +263027,97 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Costco product's detail", + "summary": "Search the reddit-trending dataset", "tags": [ - "Costco" + "Datasets" ] } }, - "/costco/product/{id}/availability": { + "/datasets/sec-companies/facets": { "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 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": "Costco product id", - "in": "path", - "name": "id", + "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": "facet", "required": true, "type": "string", - "x-example": "1942114" + "x-example": "sic" }, { - "description": "US destination ZIP code", + "description": "Full-text query over the company name, or an exact ticker match, max 256 characters", "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "98101" + "name": "q", + "type": "string" }, { - "description": "US destination two-letter state code", + "description": "Exact ticker filter (case-insensitive), max 32 characters", "in": "query", - "name": "state", - "required": true, - "type": "string", - "x-example": "WA" + "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": [ @@ -232035,7 +263127,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.productAvailabilityResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesFacetResponseDoc" } }, "400": { @@ -232044,14 +263136,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" } @@ -232062,27 +263154,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Costco product's delivery estimate", + "summary": "Facet the SEC companies dataset", "tags": [ - "Costco" + "Datasets" ] } }, - "/costco/product/{id}/reviews": { + "/datasets/sec-companies/financials/{cik}": { "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 a company's normalized 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 normalized 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": "Costco product id, e.g. from a search result's id field", + "description": "SEC CIK, numeric or zero-padded", "in": "path", - "name": "id", + "name": "cik", "required": true, "type": "string", - "x-example": "4000354684" + "x-example": "320193" + }, + { + "description": "Statement enum: income, balance, cash_flow. Omit to return all three.", + "enum": [ + "income", + "balance", + "cash_flow" + ], + "in": "query", + "name": "statement", + "type": "string" + }, + { + "description": "Period-type enum: annual, quarterly. Omit to return both.", + "enum": [ + "annual", + "quarterly" + ], + "in": "query", + "name": "period", + "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", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -232092,7 +263223,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.productReviewsResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesFinancialsResponseDoc" } }, "400": { @@ -232101,14 +263232,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" } @@ -232119,33 +263250,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Costco product's reviews", + "summary": "Get a SEC company's financial-statement history", "tags": [ - "Costco" + "Datasets" ] } }, - "/costco/search": { + "/datasets/sec-companies/insider/{cik}": { "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. Public data sourced from Costco's own search backend.", - "operationId": "costco-search", + "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": "Search text", - "in": "query", - "name": "query", + "description": "SEC CIK, numeric or zero-padded", + "in": "path", + "name": "cik", + "required": true, "type": "string", - "x-example": "refrigerator" + "x-example": "320193" }, { - "description": "Costco category slug, e.g. the last path segment of a category page URL", + "description": "Inclusive start date (YYYY-MM-DD, UTC) filtering transaction date", "in": "query", - "name": "category", - "type": "string", - "x-example": "refrigerators" + "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": [ @@ -232155,7 +263304,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.searchResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesInsiderResponseDoc" } }, "400": { @@ -232164,14 +263313,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" } @@ -232182,35 +263331,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Costco products", + "summary": "Get a SEC company's insider-transaction history", "tags": [ - "Costco" + "Datasets" ] } }, - "/costco/warehouses": { + "/datasets/sec-companies/items/{cik}": { "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 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": "Latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 47.565 - }, - { - "description": "Longitude", - "in": "query", - "name": "longitude", + "description": "SEC CIK, numeric or zero-padded, e.g. 320193 or 0000320193", + "in": "path", + "name": "cik", "required": true, - "type": "number", - "x-example": -122.329 + "type": "string", + "x-example": "320193" } ], "produces": [ @@ -232220,7 +263361,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.warehousesResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesItemResponseDoc" } }, "400": { @@ -232229,14 +263370,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" } @@ -232247,35 +263394,141 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Costco warehouses", + "summary": "Get a company from the SEC companies dataset", "tags": [ - "Costco" + "Datasets" ] } }, - "/courtlistener/courts": { + "/datasets/sec-companies/search": { "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": "Searches SEC-reporting companies stored in a search index — normalized 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.", + "operationId": "datasets-sec-companies-search", "parameters": [ { - "description": "CourtListener court identifier", + "description": "Full-text query over the company name, or an exact ticker match, max 256 characters", "in": "query", - "name": "court_id", - "type": "string", - "x-example": "scotus" + "name": "q", + "type": "string" }, { - "default": 1, - "description": "Directory page, 1-indexed", + "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", - "minimum": 1, "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": [ @@ -232285,7 +263538,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/courtlistener.courtsResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesSearchResponseDoc" } }, "400": { @@ -232305,12 +263558,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -232318,34 +263565,49 @@ "ApiKeyAuth": [] } ], - "summary": "Browse CourtListener courts", + "summary": "Search the SEC companies dataset", "tags": [ - "CourtListener" + "Datasets" ] } }, - "/courtlistener/people": { + "/datasets/sec-institutional-positions/facets": { "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 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": "CourtListener person identifier", + "description": "Facet enum: manager, issuer", + "enum": [ + "manager", + "issuer" + ], "in": "query", - "minimum": 1, - "name": "person_id", - "type": "integer", - "x-example": 123 + "name": "facet", + "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": "Cursor from a prior response's next_cursor field", + "description": "Exact CUSIP filter, max 16 characters", "in": "query", - "name": "cursor", - "type": "string", - "x-example": "cD0yMDI2LTA4LTI3KzAwJTNBMDAlM0EwMC4wMDAwMDAlMkIwMCUzQTAw" + "name": "cusip", + "type": "string" } ], "produces": [ @@ -232355,7 +263617,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/courtlistener.peopleResponseDoc" + "$ref": "#/definitions/datasets.secInstitutionalPositionsFacetResponseDoc" } }, "400": { @@ -232375,12 +263637,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -232388,34 +263644,60 @@ "ApiKeyAuth": [] } ], - "summary": "Browse CourtListener judicial people", + "summary": "Facet the SEC institutional positions dataset", "tags": [ - "CourtListener" + "Datasets" ] } }, - "/courtlistener/search": { + "/datasets/sec-institutional-positions/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches CourtListener's public opinion-search index by text and returns normalized opinion-result metadata with a cursor for the next page. The endpoint uses CourtListener's anonymous public search data and does not retrieve authenticated opinion detail, dockets, judges, alerts, or account data.", - "operationId": "courtlistener-search", + "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`.", + "operationId": "datasets-sec-institutional-positions-search", "parameters": [ { - "description": "Opinion search text", + "description": "Exact institutional-manager CIK filter, numeric or zero-padded", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "\"qualified immunity\"" + "name": "manager_cik", + "type": "string" }, { - "description": "Cursor from a prior response's next_cursor field", + "description": "Issuer-name text filter (best-effort match, not a resolved CIK join), max 256 characters", "in": "query", - "name": "cursor", - "type": "string", - "x-example": "cD0yMDI2LTA4LTI3KzAwJTNBMDAlM0EwMC4wMDAwMDAlMkIwMCUzQTAw" + "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", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -232425,7 +263707,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/courtlistener.searchResponseDoc" + "$ref": "#/definitions/datasets.secInstitutionalPositionsSearchResponseDoc" } }, "400": { @@ -232445,12 +263727,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -232458,16 +263734,76 @@ "ApiKeyAuth": [] } ], - "summary": "Search CourtListener opinions", + "summary": "Search the SEC institutional positions dataset", "tags": [ - "CourtListener" + "Datasets" ] } }, - "/cricinfo/calendar": { + "/datasets/starbucks-stores/facets": { "get": { - "description": "Returns the dated international match calendar currently published by Cricinfo. It includes match-day names and the associated series labels.", - "operationId": "cricinfo-calendar", + "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", + "parameters": [ + { + "description": "Facet enum: country, state, market, amenities, ownership_type_code", + "enum": [ + "country", + "state", + "market", + "amenities", + "ownership_type_code" + ], + "in": "query", + "name": "facet", + "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" + }, + { + "description": "State/region code filter", + "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": [ "application/json" ], @@ -232475,7 +263811,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.calendarResponseDoc" + "$ref": "#/definitions/datasets.starbucksStoresFacetResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -232484,8 +263826,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -232496,31 +263838,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Cricinfo international calendar", + "summary": "Facet stored Starbucks stores", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/commentary": { + "/datasets/starbucks-stores/items/{store_number}": { "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 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": "Canonical Cricinfo full-scorecard or live-score URL", - "in": "query", - "name": "url", + "description": "Starbucks store number, e.g. 101-54", + "in": "path", + "name": "store_number", "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" - }, - { - "description": "Maximum commentary entries returned, from 1 to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "101-54" } ], "produces": [ @@ -232530,7 +263868,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.commentaryResponseDoc" + "$ref": "#/definitions/datasets.starbucksStoreResponseDoc" } }, "400": { @@ -232551,8 +263889,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -232563,23 +263901,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cricinfo match commentary", + "summary": "Get a stored Starbucks store", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/grounds": { + "/datasets/starbucks-stores/nearby": { "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 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.", + "operationId": "datasets-starbucks-stores-nearby", "parameters": [ { - "description": "Maximum featured grounds returned, from 1 to 100", + "description": "Center latitude, from -90 through 90", "in": "query", - "name": "limit", + "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", + "in": "query", + "name": "radius_m", + "required": true, "type": "integer", - "x-example": 20 + "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": [ @@ -232589,7 +263971,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.groundsResponseDoc" + "$ref": "#/definitions/datasets.starbucksStoresSearchResponseDoc" } }, "400": { @@ -232604,8 +263986,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -232616,16 +263998,101 @@ "ApiKeyAuth": [] } ], - "summary": "List Cricinfo grounds", + "summary": "Find nearby stored Starbucks stores", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/live": { + "/datasets/starbucks-stores/search": { "get": { - "description": "Returns the current public live-score feed, including live, upcoming, and recently completed match cards with their canonical scorecard URLs.", - "operationId": "cricinfo-live-matches", + "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).", + "operationId": "datasets-starbucks-stores-search", + "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", + "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": [ "application/json" ], @@ -232633,7 +264100,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.liveMatchesResponseDoc" + "$ref": "#/definitions/datasets.starbucksStoresSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -232642,8 +264115,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -232654,24 +264127,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cricinfo live matches", + "summary": "Search the Starbucks store directory", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/match": { + "/datasets/steam-achievements/search": { "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": "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`.", + "operationId": "datasets-steam-achievements-search", "parameters": [ { - "description": "Canonical Cricinfo full-scorecard or live-cricket-score URL", + "description": "Exact Steam app id filter", "in": "query", - "name": "url", - "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" + "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": [ @@ -232681,7 +264178,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.matchResponseDoc" + "$ref": "#/definitions/datasets.steamAchievementsSearchResponseDoc" } }, "400": { @@ -232690,20 +264187,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" } @@ -232714,23 +264205,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo match scorecard", + "summary": "Search steam-achievements dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/news": { + "/datasets/steam-charts/search": { "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": "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`.", + "operationId": "datasets-steam-charts-search", "parameters": [ { - "description": "Maximum stories returned, from 1 to 100", + "description": "Full-text query over the game name, max 256 characters", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "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": [ @@ -232740,7 +264285,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.newsResponseDoc" + "$ref": "#/definitions/datasets.steamChartsSearchResponseDoc" } }, "400": { @@ -232755,8 +264300,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -232767,23 +264312,222 @@ "ApiKeyAuth": [] } ], - "summary": "Get latest Cricinfo news", + "summary": "Search the steam-charts dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/photos": { + "/datasets/steam-games/facets": { "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", + "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", "parameters": [ { - "description": "Maximum photos returned, from 1 to 100", + "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": "limit", - "type": "integer", - "x-example": 20 + "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", + "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": [ @@ -232793,7 +264537,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.photosResponseDoc" + "$ref": "#/definitions/datasets.steamGamesFacetResponseDoc" } }, "400": { @@ -232808,8 +264552,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -232820,24 +264564,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get latest Cricinfo photos", + "summary": "Facet the Steam games dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/rankings": { + "/datasets/steam-games/items/{appid}": { "get": { - "description": "Returns ICC rankings (team or player) from a Cricinfo rankings page. `url` must be a canonical `https://www.cricinfo.com/rankings/...` URL.", - "operationId": "cricinfo-rankings", + "consumes": [ + "application/json" + ], + "description": "Returns one enriched Steam catalog record by appid from dataset id enum value `steam-games`.", + "operationId": "datasets-steam-games-item", "parameters": [ { - "description": "Canonical Cricinfo rankings URL", - "in": "query", - "name": "url", + "description": "Steam app id", + "in": "path", + "name": "appid", "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/rankings/content/page/211271.html" + "type": "integer", + "x-example": 620 } ], "produces": [ @@ -232847,7 +264594,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.rankingsResponseDoc" + "$ref": "#/definitions/datasets.steamGameResponseDoc" } }, "400": { @@ -232868,8 +264615,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -232880,122 +264627,227 @@ "ApiKeyAuth": [] } ], - "summary": "Get ICC rankings from Cricinfo", + "summary": "Get a Steam game from the dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/records": { + "/datasets/steam-games/search": { "get": { - "description": "Returns a bounded normalized table from a public 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", + "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`.", + "operationId": "datasets-steam-games-search", "parameters": [ { - "description": "Relative Statsguru record path", + "description": "Full-text query over name, developer and publisher, max 256 characters", "in": "query", - "name": "record", - "required": true, - "type": "string", - "x-example": "batting/most_runs_career.html" + "name": "q", + "type": "string" }, { - "description": "Record match-class. Allowed values: 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 20, 21, 22, 23", + "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": [ - 1, - 2, - 3, - 4, - 5, - 6, - 8, - 9, - 10, - 11, - 12, - 20, - 21, - 22, - 23 + "free", + "under5", + "5to15", + "15to30", + "30to60", + "over60" ], "in": "query", - "name": "class", - "required": true, - "type": "integer", - "x-example": 1 + "name": "price_tier", + "type": "string" }, { - "description": "Numeric record subject identifier", + "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": "id", - "type": "string", - "x-example": "6" + "name": "review_tier", + "type": "string" }, { - "description": "Record subject type", + "description": "Exact SteamSpy owners-range bucket filter, max 128 characters", "in": "query", - "name": "type", - "type": "string", - "x-example": "team" + "name": "owners_bucket", + "type": "string" }, { - "description": "Record currentness selector", + "description": "Exact crawl run-id filter, max 128 characters", "in": "query", - "name": "current", - "type": "string", - "x-example": "2" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/cricinfo.recordsResponseDoc" - } + "name": "run_id", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter by free-to-play flag", + "in": "query", + "name": "is_free", + "type": "boolean" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter by Windows support", + "in": "query", + "name": "windows", + "type": "boolean" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter by macOS support", + "in": "query", + "name": "mac", + "type": "boolean" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Cricinfo record table", - "tags": [ - "Cricinfo" - ] - } - }, - "/cricinfo/records/index": { - "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": "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" + }, + { + "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": "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" ], @@ -233003,7 +264855,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.recordsIndexResponseDoc" + "$ref": "#/definitions/datasets.steamGamesSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -233012,8 +264870,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -233024,24 +264882,53 @@ "ApiKeyAuth": [] } ], - "summary": "List Cricinfo records catalog", + "summary": "Search the Steam games dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/rss": { + "/datasets/steam-news/search": { "get": { - "description": "Returns a normalized public Cricinfo RSS feed. `url` must be one of Cricinfo's official news, live-score, country-story, or player-story RSS URLs.", - "operationId": "cricinfo-rss", + "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`.", + "operationId": "datasets-steam-news-search", "parameters": [ { - "description": "Official Cricinfo RSS feed URL", + "description": "Full-text query over the news title + contents, max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/rss/content/feeds/news/0.xml" + "name": "q", + "type": "string" + }, + { + "description": "Exact Steam app id filter", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Sort enum: date_desc, date_asc", + "enum": [ + "date_desc", + "date_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": [ @@ -233051,7 +264938,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.rssResponseDoc" + "$ref": "#/definitions/datasets.steamNewsSearchResponseDoc" } }, "400": { @@ -233066,8 +264953,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -233078,16 +264965,56 @@ "ApiKeyAuth": [] } ], - "summary": "Read a Cricinfo RSS feed", + "summary": "Search the steam-news dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/scores": { + "/datasets/steam-playercounts/search": { "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", + "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`.", + "operationId": "datasets-steam-playercounts-search", + "parameters": [ + { + "description": "Exact Steam app id filter", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Snapshot date filter yyyy-MM-dd", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "Sort enum: date_desc, date_asc, players_desc", + "enum": [ + "date_desc", + "date_asc", + "players_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" ], @@ -233095,7 +265022,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.scoresResponseDoc" + "$ref": "#/definitions/datasets.steamPlayerCountsSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -233104,8 +265037,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -233116,24 +265049,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get current Cricinfo match scores", + "summary": "Search steam-playercounts dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/series": { + "/datasets/steam-prices/search": { "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", + "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`.", + "operationId": "datasets-steam-prices-search", "parameters": [ { - "description": "Slug-and-ID portion of a canonical series URL", + "description": "Exact Steam app id filter", "in": "query", - "name": "series_id", - "required": true, - "type": "string", - "x-example": "indian-premier-league-2024-1410320" + "name": "app_id", + "type": "string" + }, + { + "description": "Snapshot date filter yyyy-MM-dd", + "in": "query", + "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": [ @@ -233143,7 +265108,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.seriesResponseDoc" + "$ref": "#/definitions/datasets.steamPricesSearchResponseDoc" } }, "400": { @@ -233152,20 +265117,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" } @@ -233176,24 +265135,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo series schedule and standings", + "summary": "Search the steam-prices dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/squads": { + "/datasets/steam-reviews/search": { "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": "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`.", + "operationId": "datasets-steam-reviews-search", "parameters": [ { - "description": "Canonical Cricinfo team profile URL", + "description": "Full-text query over the review body, max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/team/india-6" + "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": [ @@ -233203,7 +265204,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.squadsResponseDoc" + "$ref": "#/definitions/datasets.steamReviewsSearchResponseDoc" } }, "400": { @@ -233212,20 +265213,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" } @@ -233236,153 +265231,164 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo team squad", + "summary": "Search the steam-reviews dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/stats": { + "/datasets/techstack/facets": { "get": { - "description": "Returns a bounded normalized 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 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": "Statsguru match-class. Allowed values: 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 20, 21, 22, 23", + "description": "Facet enum: technology, category, cms, ecommerce, cdn, web_server, server_language, analytics, tld, render_tier, seed_source", "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 8, - 9, - 10, - 11, - 12, - 20, - 21, - 22, - 23 + "technology", + "category", + "cms", + "ecommerce", + "cdn", + "web_server", + "server_language", + "analytics", + "tld", + "render_tier", + "seed_source" ], "in": "query", - "name": "class", + "name": "facet", "required": true, - "type": "integer", - "x-example": 1 + "type": "string", + "x-example": "technology" }, { - "description": "Statsguru statistic family", - "enum": [ - "batting", - "bowling", - "fielding", - "allround", - "fow", - "team", - "official", - "aggregate" - ], + "description": "Substring match on the site domain, max 256 characters", "in": "query", - "name": "type", - "required": true, - "type": "string", - "x-example": "batting" + "name": "q", + "type": "string" }, { - "description": "Numeric Cricinfo player identifier", + "collectionFormat": "csv", + "description": "Repeatable exact technology name the site MUST use (AND)", "in": "query", - "name": "player", - "type": "string", - "x-example": "45789" + "items": { + "type": "string" + }, + "name": "technology", + "type": "array" }, { - "description": "Numeric Cricinfo team identifier", + "collectionFormat": "csv", + "description": "Repeatable exact technology name; the site must use at least one (OR)", "in": "query", - "name": "team", - "type": "string", - "x-example": "6" + "items": { + "type": "string" + }, + "name": "any_of", + "type": "array" }, { - "description": "Numeric opposition team identifier", + "collectionFormat": "csv", + "description": "Repeatable exact technology name the site must NOT use (excludes)", "in": "query", - "name": "opposition", - "type": "string", - "x-example": "2" + "items": { + "type": "string" + }, + "name": "not", + "type": "array" }, { - "description": "Numeric host-country identifier", + "description": "Exact category filter, e.g. Ecommerce, CMS, Analytics", "in": "query", - "name": "host", - "type": "string", - "x-example": "6" + "name": "category", + "type": "string" }, { - "description": "Numeric ground identifier", + "description": "Exact CMS filter, e.g. WordPress, Shopify, Webflow", "in": "query", - "name": "ground", - "type": "string", - "x-example": "713" + "name": "cms", + "type": "string" }, { - "description": "Season formatted as YYYY or YYYY/YY", + "description": "Exact e-commerce platform filter, e.g. Shopify, WooCommerce, Magento", "in": "query", - "name": "season", - "type": "string", - "x-example": "2025" + "name": "ecommerce", + "type": "string" }, { - "description": "Statsguru starting date", + "description": "Exact CDN / hosting filter, e.g. Cloudflare, Fastly, Vercel", "in": "query", - "name": "span_min", - "type": "string", - "x-example": "01 Jan 2020" + "name": "cdn", + "type": "string" }, { - "description": "Statsguru ending date", + "description": "Exact web-server filter, e.g. nginx, Apache, IIS", "in": "query", - "name": "span_max", - "type": "string", - "x-example": "31 Dec 2025" + "name": "web_server", + "type": "string" }, { - "description": "Statsguru table view", + "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": [ - "innings", - "match", - "series", - "ground", - "host", - "opposition", - "year", - "season" + "http", + "browser" ], "in": "query", - "name": "view", - "type": "string", - "x-example": "innings" + "name": "render_tier", + "type": "string" }, { - "description": "Statsguru sort column", + "description": "Source filter for where the domain was discovered, e.g. tranco", "in": "query", - "name": "orderby", - "type": "string", - "x-example": "runs" + "name": "seed_source", + "type": "string" }, { - "description": "Sort descending when true", + "description": "true keeps only sites with a detected CAPTCHA", "in": "query", - "name": "orderby_desc", - "type": "boolean", - "x-example": true + "name": "has_captcha", + "type": "boolean" }, { - "description": "Maximum rows returned, from 1 to 100", + "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": "limit", - "type": "integer", - "x-example": 50 + "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": [ @@ -233392,7 +265398,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.statsResponseDoc" + "$ref": "#/definitions/datasets.techstackFacetResponseDoc" } }, "400": { @@ -233407,8 +265413,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -233419,24 +265425,27 @@ "ApiKeyAuth": [] } ], - "summary": "Query Cricinfo Statsguru", + "summary": "Facet the website tech-stack dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/story": { + "/datasets/techstack/items/{domain}": { "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 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 Cricinfo story, report, preview, or live-blog 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.cricinfo.com/story/lutho-sipamla-ruled-out-of-namibia-tri-series-with-hamstring-injury-1552225" + "x-example": "shopify.com" } ], "produces": [ @@ -233446,7 +265455,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.storyResponseDoc" + "$ref": "#/definitions/datasets.techstackItemResponseDoc" } }, "400": { @@ -233467,8 +265476,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -233479,24 +265488,168 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo story", + "summary": "Get a site from the website tech-stack dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/team": { + "/datasets/techstack/search": { "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": "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`.", + "operationId": "datasets-techstack-search", "parameters": [ { - "description": "Canonical Cricinfo team profile URL", + "description": "Substring match on the site domain, max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/team/india-6" + "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", + "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": [ @@ -233506,7 +265659,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.teamProfileResponseDoc" + "$ref": "#/definitions/datasets.techstackSearchResponseDoc" } }, "400": { @@ -233515,20 +265668,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" } @@ -233539,24 +265686,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo team profile", + "summary": "Search the website tech-stack dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/team/schedule": { + "/datasets/trustmrr/facets": { "get": { - "description": "Returns a team's recent fixtures and results from its dedicated page. `url` must be a canonical `https://www.cricinfo.com/team/...` URL.", - "operationId": "cricinfo-team-schedule", + "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": "Canonical Cricinfo team URL", + "description": "Facet enum: category, country, payment_provider, target_audience, business_type, tech, channels, listing_tier, status, on_sale, is_sponsored, tags", + "enum": [ + "category", + "country", + "payment_provider", + "target_audience", + "business_type", + "tech", + "channels", + "listing_tier", + "status", + "on_sale", + "is_sponsored", + "tags" + ], "in": "query", - "name": "url", + "name": "facet", "required": true, "type": "string", - "x-example": "https://www.cricinfo.com/team/india-6" + "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": [ @@ -233566,7 +265766,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.teamScheduleResponseDoc" + "$ref": "#/definitions/datasets.trustmrrFacetResponseDoc" } }, "400": { @@ -233575,20 +265775,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" } @@ -233599,16 +265793,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo team match schedule", + "summary": "Facet the TrustMRR dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/teams": { + "/datasets/trustmrr/history/{slug}": { "get": { - "description": "Returns Cricinfo's grouped public team directory, including international, domestic, and franchise team identities.", - "operationId": "cricinfo-teams", + "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" ], @@ -233616,7 +265841,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.teamsResponseDoc" + "$ref": "#/definitions/datasets.trustmrrHistoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -233625,8 +265856,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -233637,24 +265868,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Cricinfo teams", + "summary": "Get a TrustMRR startup's daily history", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/venue": { + "/datasets/trustmrr/items/{slug}": { "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 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": "Canonical Cricinfo cricket-ground URL", - "in": "query", - "name": "url", + "description": "Startup slug, max 128 characters", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.cricinfo.com/cricket-grounds/wankhede-stadium-mumbai-58324" + "x-example": "gumroad" } ], "produces": [ @@ -233664,7 +265898,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.venueResponseDoc" + "$ref": "#/definitions/datasets.trustmrrItemResponseDoc" } }, "400": { @@ -233685,8 +265919,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -233697,24 +265931,192 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo cricket-ground profile", + "summary": "Get a TrustMRR startup from the dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/venue/matches": { + "/datasets/trustmrr/search": { "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": "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`.", + "operationId": "datasets-trustmrr-search", "parameters": [ { - "description": "Canonical Cricinfo cricket-ground URL", + "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", + "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": "url", - "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/cricket-grounds/wankhede-stadium-mumbai-58324" + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -233724,7 +266126,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.venueMatchesResponseDoc" + "$ref": "#/definitions/datasets.trustmrrSearchResponseDoc" } }, "400": { @@ -233733,20 +266135,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" } @@ -233757,23 +266153,164 @@ "ApiKeyAuth": [] } ], - "summary": "Get matches at a Cricinfo venue", + "summary": "Search the TrustMRR dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/cricinfo/videos": { + "/datasets/vehicle-listings/facets": { "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": "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": "Maximum videos returned, from 1 to 100", + "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": "limit", - "type": "integer", - "x-example": 20 + "name": "facet", + "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" + }, + { + "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": "Maximum odometer mileage", + "in": "query", + "name": "max_mileage", + "type": "integer" } ], "produces": [ @@ -233783,7 +266320,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.videosResponseDoc" + "$ref": "#/definitions/datasets.vehicleListingsFacetResponseDoc" } }, "400": { @@ -233798,8 +266335,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -233810,24 +266347,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cricinfo videos", + "summary": "Facet vehicle listings dataset", "tags": [ - "Cricinfo" + "Datasets" ] } }, - "/ctvnews/article": { + "/datasets/vehicle-listings/items/{id}": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns one crawled vehicle listing by id from dataset id enum value `vehicle-listings`. id is `:`, e.g. `carmax:28187774`.", + "operationId": "datasets-vehicle-listings-item", "parameters": [ { - "description": "Canonical CTV News article URL", - "in": "query", - "name": "url", + "description": "Vehicle listing id, formatted : (e.g. carmax:28187774)", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.ctvnews.ca/toronto/article/example-article-slug/" + "x-example": "carmax:28187774" } ], "produces": [ @@ -233837,7 +266377,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.vehicleListingResponseDoc" } }, "400": { @@ -233852,8 +266392,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" } @@ -233864,24 +266410,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CTV News article content", + "summary": "Get a vehicle listing from dataset", "tags": [ - "CTV News" + "Datasets" ] } }, - "/ctvnews/author": { + "/datasets/vehicle-listings/price-history/{id}": { "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", + "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", "parameters": [ { - "description": "Canonical CTV News author URL", - "in": "query", - "name": "url", + "description": "Vehicle listing id, formatted : (e.g. carmax:28187774)", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.ctvnews.ca/about-us/team/the-associated-press/" + "x-example": "carmax:28187774" } ], "produces": [ @@ -233891,7 +266440,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ctvnewsAuthorResponseDoc" + "$ref": "#/definitions/datasets.vehicleListingPriceHistoryResponseDoc" } }, "400": { @@ -233900,14 +266449,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" } @@ -233918,52 +266467,172 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CTV News author profile", + "summary": "Get a vehicle listing's price history", "tags": [ - "CTV News" + "Datasets" ] } }, - "/ctvnews/headlines": { + "/datasets/vehicle-listings/search": { "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", + "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`.", + "operationId": "datasets-vehicle-listings-search", "parameters": [ { - "description": "CTV News section slug", + "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": [ - "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" + "carmax", + "autotrader", + "carsdotcom" ], "in": "query", - "name": "section", - "required": true, + "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": [ @@ -233973,7 +266642,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.vehicleListingsSearchResponseDoc" } }, "400": { @@ -233982,46 +266651,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CTV News section headlines", - "tags": [ - "CTV News" - ] - } - }, - "/ctvnews/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", - "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" } @@ -234032,163 +266669,132 @@ "ApiKeyAuth": [] } ], - "summary": "Get CTV News top stories", - "tags": [ - "CTV News" - ] - } - }, - "/ctvnews/sections": { - "get": { - "description": "Returns the public CTV News section inventory (national topic sections and local newsroom sections) used by the headlines endpoint.", - "operationId": "ctvnews-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CTV News sections", + "summary": "Search vehicle listings dataset", "tags": [ - "CTV News" + "Datasets" ] } }, - "/culvers/calendar": { + "/datasets/x-users/facets": { "get": { "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": "Returns terms aggregation counts for the X users dataset. Facet enum: `is_blue_verified`, `has_bio`, `has_external_url`, `source_tier`.", + "operationId": "datasets-x-users-facets", "parameters": [ { - "description": "Restaurant slug from /culvers/directory", + "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": "slug", + "name": "facet", "required": true, "type": "string", - "x-example": "waunakee" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/culvers.calendarResponseDoc" - } + "x-example": "is_blue_verified" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Full-text query over username, name, bio and location, max 256 characters", + "in": "query", + "name": "q", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact username filter (case-insensitive), max 128 characters", + "in": "query", + "name": "username", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact filter for which seed tier discovered this account", + "in": "query", + "name": "source_tier", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get one Culver's restaurant's flavor-of-the-day and daily soup schedule", - "tags": [ - "Culvers" - ] - } - }, - "/culvers/categories": { - "get": { - "consumes": [ - "application/json" - ], - "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" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/culvers.categoriesResponseDoc" - } + "description": "Filter by the X blue-check verification flag", + "in": "query", + "name": "is_blue_verified", + "type": "boolean" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter by a non-empty profile bio", + "in": "query", + "name": "has_bio", + "type": "boolean" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "List Culver's national menu categories", - "tags": [ - "Culvers" - ] - } - }, - "/culvers/directory": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of Culver's own restaurant-URL sitemap (~1,121 restaurants). Each entry's slug is the value GET /culvers/store takes.", - "operationId": "culvers-directory", - "parameters": [ + "description": "Filter by a linked external URL", + "in": "query", + "name": "has_external_url", + "type": "boolean" + }, { - "description": "Optional. 1-based page, default 1.", + "description": "Minimum follower count", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "min_followers", + "type": "integer" }, { - "description": "Optional. Entries per page, 1-500, default 100.", + "description": "Maximum follower count", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 100 + "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" } ], "produces": [ @@ -234198,7 +266804,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.directoryResponseDoc" + "$ref": "#/definitions/datasets.xUsersFacetResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -234207,8 +266819,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -234219,27 +266831,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Culver's restaurant-URL index", + "summary": "Facet the X users dataset", "tags": [ - "Culvers" + "Datasets" ] } }, - "/culvers/flavor": { + "/datasets/x-users/items/{username}": { "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 one X user record by username from dataset id enum value `x-users`.", + "operationId": "datasets-x-users-item", "parameters": [ { - "description": "Flavor slug from /culvers/calendar or /culvers/store", - "in": "query", - "name": "slug", + "description": "X username, with or without a leading @, max 128 characters", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "chocolate-covered-strawberry" + "x-example": "elonmusk" } ], "produces": [ @@ -234249,7 +266861,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.flavorResponseDoc" + "$ref": "#/definitions/datasets.xUserResponseDoc" } }, "400": { @@ -234270,8 +266882,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -234282,35 +266894,130 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Culver's Fresh Frozen Custard flavor's detail", + "summary": "Get an X user from the dataset", "tags": [ - "Culvers" + "Datasets" ] } }, - "/culvers/item": { + "/datasets/x-users/search": { "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", + "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`.", + "operationId": "datasets-x-users-search", "parameters": [ { - "description": "Category slug from /culvers/categories", + "description": "Full-text query over username, name, bio and location, max 256 characters", "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "butterburgers" + "name": "q", + "type": "string" }, { - "description": "Item slug from /culvers/menu", + "description": "Exact username filter (case-insensitive), max 128 characters", "in": "query", - "name": "item", - "required": true, - "type": "string", - "x-example": "butterburger-cheese" + "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" } ], "produces": [ @@ -234320,7 +267027,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.itemResponseDoc" + "$ref": "#/definitions/datasets.xUsersSearchResponseDoc" } }, "400": { @@ -234329,20 +267036,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" } @@ -234353,27 +267054,160 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Culver's menu item's full detail", + "summary": "Search the X users dataset", "tags": [ - "Culvers" + "Datasets" ] } }, - "/culvers/menu": { + "/datasets/youtube-creators/facets": { "get": { "consumes": [ "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 client-side, and no credential-free per-restaurant pricing source was found; see GET /culvers/item for full modifier/topping detail.", - "operationId": "culvers-menu", + "description": "Returns terms aggregation counts for the YouTube creators dataset. Facet enum: `region`, `discovery_source`.", + "operationId": "datasets-youtube-creators-facets", "parameters": [ { - "description": "Category slug from /culvers/categories", + "description": "Facet enum: region, discovery_source", + "enum": [ + "region", + "discovery_source" + ], "in": "query", - "name": "category", + "name": "facet", "required": true, "type": "string", - "x-example": "butterburgers" + "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)", + "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": [ + "relevance", + "followers_desc", + "followers_asc", + "views_desc", + "videos_desc", + "hydrated_at_desc", + "hydrated_at_asc" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -234383,7 +267217,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.menuResponseDoc" + "$ref": "#/definitions/datasets.youtubeCreatorsFacetResponseDoc" } }, "400": { @@ -234392,20 +267226,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" } @@ -234416,27 +267244,27 @@ "ApiKeyAuth": [] } ], - "summary": "List one Culver's menu category's items", + "summary": "Facet the YouTube creators dataset", "tags": [ - "Culvers" + "Datasets" ] } }, - "/culvers/store": { + "/datasets/youtube-creators/items/{channel_id}": { "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 one YouTube channel record by channel id from dataset id enum value `youtube-creators`.", + "operationId": "datasets-youtube-creators-item", "parameters": [ { - "description": "Restaurant slug from /culvers/directory", - "in": "query", - "name": "slug", + "description": "YouTube channel id, e.g. UCxxxxxxxxxxxxxxxxxxxxxxxx", + "in": "path", + "name": "channel_id", "required": true, "type": "string", - "x-example": "ann-arbor-mi-lohr-rd" + "x-example": "UCX6OQ3DkcsbYNE6H8uQQuVA" } ], "produces": [ @@ -234446,7 +267274,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.storeResponseDoc" + "$ref": "#/definitions/datasets.youtubeCreatorResponseDoc" } }, "400": { @@ -234467,8 +267295,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -234479,131 +267307,160 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Culver's restaurant by its directory slug", + "summary": "Get a YouTube creator from the dataset", "tags": [ - "Culvers" + "Datasets" ] } }, - "/cvs/brands": { + "/datasets/youtube-creators/search": { "get": { "consumes": [ "application/json" ], - "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" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/cvs.brandsResponseDoc" - } + "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`.", + "operationId": "datasets-youtube-creators-search", + "parameters": [ + { + "description": "Full-text query over channel_name and bio, max 256 characters", + "in": "query", + "name": "q", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact channel id filter (e.g. UCxxxxxxxxxxxxxxxxxxxxxxxx), max 128 characters", + "in": "query", + "name": "channel_id", + "type": "string" }, - "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" - } + "description": "Exact channel region/country filter (case-insensitive), max 128 characters", + "in": "query", + "name": "region", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact filter for how the channel was discovered (e.g. commoncrawl, wikidata), max 128 characters", + "in": "query", + "name": "discovery_source", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "CVS category taxonomy", - "tags": [ - "CVS" - ] - } - }, - "/cvs/category": { - "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: normalized 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/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", - "operationId": "cvs-category", - "parameters": [ + "description": "Filter by a non-empty About bio", + "in": "query", + "name": "has_bio", + "type": "boolean" + }, { - "description": "CVS category, subcategory, or brand-page URL path, optionally with a /q/{value}/{typeCode} facet-filter suffix, e.g. \\", + "description": "Filter by at least one linked external URL", "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "beauty" + "name": "has_links", + "type": "boolean" }, { - "description": "1-indexed page number, default 1", + "description": "Filter by whether the channel exposes a public subscriber count", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "followers_count_available", + "type": "boolean" }, { - "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)", + "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": [ - "pa", - "pd", - "tr", - "rc", - "az", - "za" + "relevance", + "followers_desc", + "followers_asc", + "views_desc", + "videos_desc", + "hydrated_at_desc", + "hydrated_at_asc" ], "in": "query", "name": "sort", - "type": "string", - "x-example": "pa" + "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": [ @@ -234613,7 +267470,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.categoryResponseDoc" + "$ref": "#/definitions/datasets.youtubeCreatorsSearchResponseDoc" } }, "400": { @@ -234628,8 +267485,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -234640,27 +267497,24 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a CVS OTC category page", + "summary": "Search the YouTube creators dataset", "tags": [ - "CVS" + "Datasets" ] } }, - "/cvs/product-ingredients/{slug}": { + "/dawn/article": { "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 public Dawn article metadata and body paragraphs from a canonical article URL.", + "operationId": "dawn-article", "parameters": [ { - "description": "CVS product page URL slug, e.g. \\", - "in": "path", - "name": "slug", + "description": "Canonical Dawn article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "e-l-f-16hr-camo-concealer-prodid-2370023" + "x-example": "https://www.dawn.com/news/2032361/pm-shehbaz-stresses-islamabad-mou-implementation-in-meeting-with-pezeshkian" } ], "produces": [ @@ -234670,7 +267524,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.productIngredientsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -234685,12 +267539,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -234703,27 +267551,24 @@ "ApiKeyAuth": [] } ], - "summary": "CVS OTC product ingredients", + "summary": "Get Dawn article content", "tags": [ - "CVS" + "Dawn" ] } }, - "/cvs/product/{slug}": { + "/dawn/author": { "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 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": "CVS product page URL slug, e.g. \\", - "in": "path", - "name": "slug", + "description": "Canonical www.dawn.com/authors// URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "safe-home-premium-radon-test-kit-prodid-945948" + "x-example": "https://www.dawn.com/authors/675/khurram-husain" } ], "produces": [ @@ -234733,7 +267578,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.productResponseDoc" + "$ref": "#/definitions/publicnews.dawnAuthorResponseDoc" } }, "400": { @@ -234748,12 +267593,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -234766,49 +267605,43 @@ "ApiKeyAuth": [] } ], - "summary": "CVS OTC product detail", + "summary": "Get a Dawn author profile", "tags": [ - "CVS" + "Dawn" ] } }, - "/cvs/search": { + "/dawn/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Performs a keyword search across CVS.com's non-prescription retail/OTC catalog and returns one page of results: normalized 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. This is the same product-search backend cvs-category reads, just reached by keyword instead of by category/brand path. 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/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", - "operationId": "cvs-search", + "description": "Returns fresh headlines from one public Dawn section.", + "operationId": "dawn-headlines", "parameters": [ { - "description": "Search keyword or phrase", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "ibuprofen" - }, - { - "description": "1-indexed page number, default 1", - "in": "query", - "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)", + "description": "Dawn section slug", "enum": [ - "pa", - "pd", - "tr", - "rc", - "az", - "za" + "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": "sort", + "name": "section", + "required": true, "type": "string", - "x-example": "pa" + "x-example": "pakistan" } ], "produces": [ @@ -234818,7 +267651,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.categoryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -234827,12 +267660,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -234845,77 +267672,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search CVS OTC products by keyword", + "summary": "Get Dawn section headlines", "tags": [ - "CVS" + "Dawn" ] } }, - "/cvs/store-locator": { + "/dawn/news": { "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", - "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. \\", - "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" - } - ], + "description": "Returns fresh Dawn (Pakistan) stories from the public RSS feed.", + "operationId": "dawn-news", "produces": [ "application/json" ], @@ -234923,25 +267689,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -234956,24 +267704,50 @@ "ApiKeyAuth": [] } ], - "summary": "CVS store locator", + "summary": "Get Dawn top stories", "tags": [ - "CVS" + "Dawn" ] } }, - "/dailycaller/article": { + "/dawn/sections": { "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", + "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 The Daily Caller article URL", + "description": "Canonical Deadline article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://dailycaller.com/2026/09/23/example-article-slug" + "x-example": "https://deadline.com/2026/09/example-story-1237111140/" } ], "produces": [ @@ -235010,24 +267784,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Caller article content", + "summary": "Get Deadline article content", "tags": [ - "The Daily Caller" + "Deadline" ] } }, - "/dailycaller/author": { + "/deadline/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", + "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": "Canonical The Daily Caller author URL", + "description": "Canonical deadline.com/author/ URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://dailycaller.com/author/EmilyKopp/" + "x-example": "https://deadline.com/author/andreas-wiseman/" + }, + { + "description": "1-based page of recent articles to return; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -235037,7 +267818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailycallerAuthorResponseDoc" + "$ref": "#/definitions/publicnews.deadlineAuthorResponseDoc" } }, "400": { @@ -235064,47 +267845,74 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Daily Caller author profile", + "summary": "Get a Deadline author profile", "tags": [ - "The Daily Caller" + "Deadline" ] } }, - "/dailycaller/headlines": { + "/deadline/headlines": { "get": { - "description": "Returns the newest headlines listed on one public The Daily Caller section page.", - "operationId": "dailycaller-headlines", + "description": "Returns fresh headlines from one public Deadline section or vertical feed.", + "operationId": "deadline-headlines", "parameters": [ { - "description": "The Daily Caller 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", + "obituaries", + "podcast", "politics", - "us", - "world", - "national-security", - "elections", - "business", - "energy", - "education", - "health", - "tech", - "media", - "entertainment", + "predictions", + "primetime-pilot-panic", + "ratings", + "recaps", + "red-carpet-premieres", + "reviews", "sports", - "guns-and-gear", - "investigative-group", - "opinion", - "analysis", - "two-sides", - "big-tent-ideas", - "patriots", - "satire", + "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" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "acquisitions" } ], "produces": [ @@ -235135,16 +267943,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Caller section headlines", + "summary": "Get Deadline section headlines", "tags": [ - "The Daily Caller" + "Deadline" ] } }, - "/dailycaller/news": { + "/deadline/news": { "get": { - "description": "Returns fresh The Daily Caller top stories from its public RSS feed.", - "operationId": "dailycaller-news", + "description": "Returns fresh Deadline Hollywood Entertainment top stories from its public RSS feed.", + "operationId": "deadline-news", "produces": [ "application/json" ], @@ -235173,16 +267981,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Caller top stories", + "summary": "Get Deadline top stories", "tags": [ - "The Daily Caller" + "Deadline" ] } }, - "/dailycaller/sections": { + "/deadline/sections": { "get": { - "description": "Returns the live-verified The Daily Caller section inventory used by the headlines endpoint.", - "operationId": "dailycaller-sections", + "description": "Returns the complete public section inventory accepted by /api/v1/deadline/headlines (both Deadline's editorial categories and its verticals).", + "operationId": "deadline-sections", "produces": [ "application/json" ], @@ -235199,24 +268007,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Caller sections", + "summary": "Get Deadline sections", "tags": [ - "The Daily Caller" + "Deadline" ] } }, - "/dailyexpress/article": { + "/deliveroo/fulfillment-times": { "get": { - "description": "Returns public Daily Express article metadata and body paragraphs from a canonical article URL.", - "operationId": "dailyexpress-article", + "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", "parameters": [ { - "description": "Canonical Daily Express article URL", + "description": "Search center latitude", "in": "query", - "name": "url", + "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": "https://www.express.co.uk/news/123456/example" + "x-example": "uk" } ], "produces": [ @@ -235226,7 +268061,74 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/deliveroo.fulfillmentTimesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "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": "uname", + "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" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/deliveroo.restaurantResponseDoc" } }, "400": { @@ -235253,24 +268155,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Express article content", + "summary": "Get one Deliveroo restaurant, grocery, or shopping partner's detail", "tags": [ - "Daily Express" + "Deliveroo" ] } }, - "/dailyexpress/author": { + "/deliveroo/restaurant/menu": { "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 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": "Canonical Daily Express journalist URL", + "description": "Restaurant slug, from a search response's uname field", "in": "query", - "name": "url", + "name": "uname", "required": true, "type": "string", - "x-example": "https://www.express.co.uk/journalist/123944/Rebecca-Russell" + "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" } ], "produces": [ @@ -235280,7 +268201,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailyExpressAuthorResponseDoc" + "$ref": "#/definitions/deliveroo.menuResponseDoc" } }, "400": { @@ -235307,54 +268228,168 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Express journalist profile", + "summary": "Get one Deliveroo restaurant, grocery, or shopping partner's priced catalog", "tags": [ - "Daily Express" + "Deliveroo" ] } }, - "/dailyexpress/headlines": { + "/deliveroo/search": { "get": { - "description": "Returns fresh headlines from one public Daily Express RSS section.", - "operationId": "dailyexpress-headlines", + "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", "parameters": [ { - "description": "Daily Express section slug", + "description": "Search center latitude", + "in": "query", + "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": [ - "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" + "ie", + "fr", + "it", + "be", + "ae", + "kw" ], "in": "query", - "name": "section", - "required": true, - "type": "string" + "name": "market", + "type": "string", + "x-example": "uk" + }, + { + "description": "Restaurants to return, clamped to 100 (default 20)", + "in": "query", + "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": "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" + }, + { + "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": 30 + }, + { + "description": "Maximum delivery fee in GBP", + "enum": [ + 1, + 2, + 3 + ], + "in": "query", + "name": "max_delivery_fee_pounds", + "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 } ], "produces": [ @@ -235364,7 +268399,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/deliveroo.searchResponseDoc" } }, "400": { @@ -235385,16 +268420,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Express section headlines", + "summary": "Search Deliveroo restaurants, groceries, or shopping stores near a location", "tags": [ - "Daily Express" + "Deliveroo" ] } }, - "/dailyexpress/news": { + "/deliveroo/search/filters": { "get": { - "description": "Returns fresh Daily Express stories from the public News RSS feed.", - "operationId": "dailyexpress-news", + "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", + "parameters": [ + { + "description": "Search center latitude", + "in": "query", + "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": "uk" + } + ], "produces": [ "application/json" ], @@ -235402,39 +268474,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/deliveroo.filtersResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Express top stories", - "tags": [ - "Daily Express" - ] - } - }, - "/dailyexpress/sections": { - "get": { - "description": "Returns the live public Daily Express RSS section inventory.", - "operationId": "dailyexpress-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "503": { + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/app.Response" } } }, @@ -235443,24 +268495,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Express sections", + "summary": "Get Deliveroo's live search filter and sort catalog for a location", "tags": [ - "Daily Express" + "Deliveroo" ] } }, - "/dailymail/article": { + "/denverpost/article": { "get": { - "description": "Returns public Daily Mail article metadata and body paragraphs from a canonical article URL.", - "operationId": "dailymail-article", + "description": "Returns article metadata and paragraphs present in the public HTML response. Subscriber-only pages may expose only an anonymous preview; this service does not bypass access controls.", + "operationId": "denverpost-article", "parameters": [ { - "description": "Canonical Daily Mail article URL", + "description": "Canonical Denver Post article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.dailymail.co.uk/news/article-1234567/example.html" + "x-example": "https://www.denverpost.com/2026/09/29/colorado-oportunity-zones-investment/" } ], "produces": [ @@ -235497,31 +268549,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Mail article content", + "summary": "Get a Denver Post article", "tags": [ - "Daily Mail" + "The Denver Post" ] } }, - "/dailymail/author": { + "/denverpost/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", + "description": "Returns one author's public profile and the articles listed on its first page.", + "operationId": "denverpost-author", "parameters": [ { - "description": "Canonical dailymail.com/profile-/.html URL", + "description": "Author slug, e.g. aldo-svaldi", "in": "query", - "name": "url", - "required": true, + "name": "slug", "type": "string", - "x-example": "https://www.dailymail.com/profile-1021/charliespiering.html" + "x-example": "aldo-svaldi" }, { - "description": "1-based page of articles to return; defaults to 1", + "description": "Canonical denverpost.com/author// URL; alternative to slug", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "url", + "type": "string", + "x-example": "https://www.denverpost.com/author/aldo-svaldi/" } ], "produces": [ @@ -235531,7 +268582,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailyMailAuthorResponseDoc" + "$ref": "#/definitions/publicnews.denverPostAuthorResponseDoc" } }, "400": { @@ -235558,37 +268609,101 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Mail author profile", + "summary": "Get a Denver Post author archive", "tags": [ - "Daily Mail" + "The Denver Post" ] } }, - "/dailymail/headlines": { + "/denverpost/headlines": { "get": { - "description": "Returns fresh headlines from one public Daily Mail RSS section.", - "operationId": "dailymail-headlines", + "description": "Returns current headlines from one public editorial section or topic archive.", + "operationId": "denverpost-headlines", "parameters": [ { - "description": "Daily Mail RSS section slug", + "description": "Section or topic slug returned by denverpost-sections", "enum": [ - "home", "news", - "sport", - "tvshowbiz", + "latest-headlines", + "colorado", + "politics", + "crime-public-safety", + "courts", + "national", + "world", + "education", "health", - "femail", + "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", - "sciencetech", - "money", - "debate", - "us", - "australia" + "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" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -235619,16 +268734,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Mail section headlines", + "summary": "Get Denver Post section headlines", "tags": [ - "Daily Mail" + "The Denver Post" ] } }, - "/dailymail/news": { + "/denverpost/news": { "get": { - "description": "Returns fresh Daily Mail top stories from its public RSS feed.", - "operationId": "dailymail-news", + "description": "Returns current top stories from the public Denver Post homepage.", + "operationId": "denverpost-news", "produces": [ "application/json" ], @@ -235639,12 +268754,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -235657,16 +268766,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Mail top stories", + "summary": "Get Denver Post top stories", "tags": [ - "Daily Mail" + "The Denver Post" ] } }, - "/dailymail/sections": { + "/denverpost/sections": { "get": { - "description": "Returns the live-verified public Daily Mail RSS section inventory.", - "operationId": "dailymail-sections", + "description": "Returns the live-verified public editorial section and topic archive values accepted by headlines.", + "operationId": "denverpost-sections", "produces": [ "application/json" ], @@ -235683,26 +268792,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Mail RSS sections", + "summary": "Get Denver Post section and topic inventory", "tags": [ - "Daily Mail" + "The Denver Post" ] } }, - "/dailyrecord/article": { + "/depop/brands": { "get": { - "description": "Returns public Daily Record article metadata and body paragraphs from a canonical article URL.", - "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" - } + "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" ], @@ -235710,17 +268812,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/depop.brandsResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -235737,32 +268833,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Record article content", + "summary": "Depop's full brand directory", "tags": [ - "Daily Record" + "Depop" ] } }, - "/dailyrecord/author": { + "/depop/categories": { "get": { - "description": "Returns one Daily Record author's public profile: name, job title, bio, email, X/Twitter handle, and their recent articles.", - "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/" - } + "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" ], @@ -235770,23 +268853,11 @@ "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" + "$ref": "#/definitions/depop.categoriesResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -235797,35 +268868,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Record author profile", + "summary": "Get Depop's category taxonomy", "tags": [ - "Daily Record" + "Depop" ] } }, - "/dailyrecord/headlines": { + "/depop/item/{slug}": { "get": { - "description": "Returns fresh headlines from one public Daily Record section.", - "operationId": "dailyrecord-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a normalized Depop item-detail page: description, all photos, price, condition, brand, size, seller info, and a \"similar items\" carousel when the page has one. Public data sourced from Depop's own item pages.", + "operationId": "depop-item", "parameters": [ { - "description": "Daily Record section slug", - "enum": [ - "news", - "scotland", - "uk-world-news", - "sport", - "football", - "showbiz", - "lifestyle", - "money", - "travel", - "in-your-area" - ], - "in": "query", - "name": "section", + "description": "Depop item URL slug, e.g. from a search result's id field", + "in": "path", + "name": "slug", "required": true, - "type": "string" + "type": "string", + "x-example": "ag_boutique-vintage-mid-rise-bootcut-levi-2476" } ], "produces": [ @@ -235835,7 +268898,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/depop.ItemDetailResponse" } }, "400": { @@ -235844,36 +268907,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Record section headlines", - "tags": [ - "Daily Record" - ] - } - }, - "/dailyrecord/news": { - "get": { - "description": "Returns fresh Daily Record stories from the public News RSS feed.", - "operationId": "dailyrecord-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "500": { + "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -235888,50 +268931,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Record top stories", + "summary": "Get Depop item detail", "tags": [ - "Daily Record" + "Depop" ] } }, - "/dailyrecord/sections": { + "/depop/item/{slug}/similar": { "get": { - "description": "Returns the public Daily Record editorial section inventory.", - "operationId": "dailyrecord-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "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", + "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": "Canonical Daily Star (UK) article URL", - "in": "query", - "name": "url", + "description": "Depop item URL slug, e.g. from a search result's id field", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.dailystar.co.uk/tv/wayne-rooney-opens-up-weight-37700309" + "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 + }, + { + "description": "Opaque pagination cursor from a previous response's next_cursor field. Omit for the first page.", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -235941,7 +268974,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/depop.similarItemsResponseDoc" } }, "400": { @@ -235956,8 +268989,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -235974,37 +269007,115 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Star (UK) article content", + "summary": "Get Depop items similar to a listing", "tags": [ - "Daily Star UK" + "Depop" ] } }, - "/dailystaruk/author": { + "/depop/search": { "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": "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 normalized listing summaries (title, price, brand, condition, like count, photos, sizes), a pagination cursor, and the total matching count. Public data sourced from Depop's own search API.", + "operationId": "depop-search", "parameters": [ { - "description": "Author slug, e.g. edward-easton", + "description": "Free-text keyword search", "in": "query", - "name": "slug", + "name": "query", + "required": true, "type": "string", - "x-example": "edward-easton" + "x-example": "nike jacket" }, { - "description": "Canonical dailystar.co.uk/authors// URL; alternative to slug", + "description": "Minimum listing price in USD", "in": "query", - "name": "url", + "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": "https://www.dailystar.co.uk/authors/edward-easton/" + "x-example": "used_excellent,used_good" }, { - "default": 1, - "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", + "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": "page", - "type": "integer" + "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": [ @@ -236014,7 +269125,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" + "$ref": "#/definitions/depop.searchResponseDoc" } }, "400": { @@ -236023,14 +269134,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" } @@ -236047,63 +269152,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Star (UK) author profile", + "summary": "Search Depop listings", "tags": [ - "Daily Star UK" + "Depop" ] } }, - "/dailystaruk/headlines": { + "/depop/search-sellers": { "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": "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": "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": "Seller name or username to search for", "in": "query", - "name": "section", + "name": "query", "required": true, - "type": "string" + "type": "string", + "x-example": "vintage nike" } ], "produces": [ @@ -236113,7 +269182,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/depop.searchSellersResponseDoc" } }, "400": { @@ -236122,46 +269191,8 @@ "$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 Daily Star (UK) section headlines", - "tags": [ - "Daily Star UK" - ] - } - }, - "/dailystaruk/news": { - "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", - "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" } @@ -236178,50 +269209,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Star (UK) top stories", + "summary": "Search Depop sellers by name", "tags": [ - "Daily Star UK" + "Depop" ] } }, - "/dailystaruk/sections": { + "/depop/search/facets": { "get": { - "description": "Returns the public Daily Star (UK) editorial section inventory used by dailystaruk-headlines.", - "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 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": "Daily Wire article URL", + "description": "Free-text keyword search", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://www.dailywire.com/news/example-article-slug" + "x-example": "bandage dress" } ], "produces": [ @@ -236231,7 +269239,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/depop.searchFacetsResponseDoc" } }, "400": { @@ -236240,8 +269248,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -236258,30 +269266,96 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Wire article content", + "summary": "Depop search result-count breakdowns", "tags": [ - "DailyWire" + "Depop" ] } }, - "/dailywire/author": { + "/depop/shop/{username}": { "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 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": "Author slug, e.g. brent-scher", + "description": "Depop seller username, e.g. from a shop page URL segment", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "villafanashop" + }, + { + "description": "Minimum listing price in USD", "in": "query", - "name": "slug", + "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": "brent-scher" + "x-example": "used_excellent,used_good" }, { - "description": "Canonical dailywire.com/author/ URL; alternative to slug", + "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": "url", + "name": "colours", "type": "string", - "x-example": "https://www.dailywire.com/author/brent-scher" + "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": [ @@ -236291,7 +269365,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailyWireAuthorResponseDoc" + "$ref": "#/definitions/depop.shopResponseDoc" } }, "400": { @@ -236306,63 +269380,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Daily Wire author profile", - "tags": [ - "DailyWire" - ] - } - }, - "/dailywire/headlines": { - "get": { - "description": "Returns current Daily Wire headlines for one content-vertical section, sourced from the site's own homepage feed.", - "operationId": "dailywire-headlines", - "parameters": [ - { - "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" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -236379,16 +269398,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Wire section headlines", + "summary": "Get a Depop seller's shop", "tags": [ - "DailyWire" + "Depop" ] } }, - "/dailywire/news": { + "/depop/sizes": { "get": { - "description": "Returns fresh Daily Wire top stories from its public RSS feed.", - "operationId": "dailywire-news", + "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", "produces": [ "application/json" ], @@ -236396,11 +269418,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/depop.sizesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -236417,45 +269439,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Wire top stories", + "summary": "Get Depop's size taxonomy", "tags": [ - "DailyWire" + "Depop" ] } }, - "/dailywire/sections": { + "/depop/suggest": { "get": { - "description": "Returns the live-sampled public Daily Wire content-vertical inventory used by the headlines endpoint.", - "operationId": "dailywire-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "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": [ { - "ApiKeyAuth": [] + "description": "Partial search query to autocomplete", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "red corte" } ], - "summary": "Get Daily Wire content-vertical sections", - "tags": [ - "DailyWire" - ] - } - }, - "/datasets": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Lists available read-only scraped datasets and the capabilities supported by each dataset.", - "operationId": "datasets-list", "produces": [ "application/json" ], @@ -236463,11 +269469,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.listResponseDoc" + "$ref": "#/definitions/depop.suggestResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -236477,6 +269483,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -236484,102 +269496,28 @@ "ApiKeyAuth": [] } ], - "summary": "List stored scraped datasets", + "summary": "Depop search-box autocomplete", "tags": [ - "Datasets" + "Depop" ] } }, - "/datasets/airbnb-markets/facets": { - "get": { + "/diagnostics/antibot-check": { + "post": { "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). The `admin1`, `locality`, `room_type`, `property_type` and `amenities` facets stay empty until their enrichment coverage is high enough to be reliable. group_by enum: `country`, `market`, `admin1`, `locality`, `room_type`, `property_type`.", - "operationId": "datasets-airbnb-markets-facets", + "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": [ { - "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": "facet", + "description": "Target URL (and optional fast flag)", + "in": "body", + "name": "request", "required": true, - "type": "string" - }, - { - "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" - }, - { - "description": "Minimum listings per bucket; raises the small-cell suppression floor", - "in": "query", - "name": "min_listings", - "type": "integer" + "schema": { + "$ref": "#/definitions/diagnostics.AntibotCheckRequest" + } } ], "produces": [ @@ -236589,23 +269527,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.airbnbMarketsFacetResponseDoc" + "$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" } @@ -236616,26 +269554,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Airbnb markets dataset", + "summary": "Anti-bot check — website scraping difficulty", "tags": [ - "Datasets" + "Web" ] } }, - "/datasets/airbnb-markets/items/{country}": { + "/discogs/artist/{id}": { "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", + "description": "Returns a normalized Discogs artist profile: real name, bio, links, name variations, aliases, and group memberships. Credential-free official Discogs database data.", + "operationId": "discogs-artist", "parameters": [ { - "description": "ISO-3166-1 alpha-2 country code, e.g. FR", + "description": "Discogs artist id", "in": "path", - "name": "country", + "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "1289" } ], "produces": [ @@ -236645,7 +269584,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.airbnbMarketResponseDoc" + "$ref": "#/definitions/discogs.artistResponseDoc" } }, "400": { @@ -236660,14 +269599,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" } @@ -236678,76 +269617,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Airbnb market from the dataset", + "summary": "Get a Discogs artist profile", "tags": [ - "Datasets" + "Discogs" ] } }, - "/datasets/airbnb-markets/nearby": { + "/discogs/artist/{id}/releases": { "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" - }, - { - "description": "Center longitude, from -180 through 180", - "in": "query", - "name": "lon", - "required": true, - "type": "number" - }, - { - "description": "Search radius in meters, from 1 through 50000", - "in": "query", - "name": "radius_m", - "required": true, - "type": "integer" - }, - { - "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" - }, + "application/json" + ], + "description": "Returns an artist's paginated release/master credits (role, format, label, year, want/collection counts). Credential-free official Discogs database data.", + "operationId": "discogs-artist-releases", + "parameters": [ { - "description": "Count only Superhost listings", - "in": "query", - "name": "superhost", - "type": "boolean" + "description": "Discogs artist id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1289" }, { - "description": "Minimum listing rating, from 0 through 5", + "description": "1-based page number, default 1", "in": "query", - "name": "min_rating", - "type": "number" + "name": "page", + "type": "integer" }, { - "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD)", + "description": "Results per page, default 50, max 100", "in": "query", - "name": "active_since", - "type": "string" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -236757,7 +269659,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.airbnbMarketsNearbyResponseDoc" + "$ref": "#/definitions/discogs.artistReleasesResponseDoc" } }, "400": { @@ -236766,8 +269668,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -236777,6 +269679,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -236784,105 +269692,27 @@ "ApiKeyAuth": [] } ], - "summary": "Airbnb market density near a coordinate", + "summary": "List a Discogs artist's releases", "tags": [ - "Datasets" + "Discogs" ] } }, - "/datasets/airbnb-markets/search": { + "/discogs/label/{id}": { "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). `admin1`, `locality`, `room_type` and `property_type` are enrichment-derived and stay empty until their coverage is high enough to be reliable. 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`.", - "operationId": "datasets-airbnb-markets-search", + "description": "Returns a normalized Discogs label profile: profile text, contact info, parent label, and sub-labels. Credential-free official Discogs database data.", + "operationId": "discogs-label", "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", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Discogs label id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "895" } ], "produces": [ @@ -236892,7 +269722,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.airbnbMarketsSearchResponseDoc" + "$ref": "#/definitions/discogs.labelResponseDoc" } }, "400": { @@ -236901,8 +269731,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -236912,6 +269742,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -236919,74 +269755,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Airbnb markets dataset", + "summary": "Get a Discogs label profile", "tags": [ - "Datasets" + "Discogs" ] } }, - "/datasets/apple-podcasts-shows/facets": { + "/discogs/label/{id}/releases": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the Apple Podcasts shows dataset. Facet enum: `genre`, `genre_id`, `country`, `content_advisory_rating`, `run_id`.", - "operationId": "datasets-apple-podcasts-shows-facets", + "description": "Returns a label's paginated release catalog (title, artist, format, catalog number, year). Credential-free official Discogs database data.", + "operationId": "discogs-label-releases", "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": "Discogs label id", + "in": "path", + "name": "id", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "895" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "1-based page number, default 1", "in": "query", - "name": "run_id", - "type": "string" + "name": "page", + "type": "integer" }, { - "description": "Minimum episode count (track_count), 0 or greater", + "description": "Results per page, default 50, max 100", "in": "query", - "name": "min_track_count", + "name": "per_page", "type": "integer" } ], @@ -236997,7 +269797,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePodcastsShowsFacetResponseDoc" + "$ref": "#/definitions/discogs.labelReleasesResponseDoc" } }, "400": { @@ -237006,8 +269806,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -237017,6 +269817,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -237024,26 +269830,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet Apple Podcasts shows dataset", + "summary": "List a Discogs label's releases", "tags": [ - "Datasets" + "Discogs" ] } }, - "/datasets/apple-podcasts-shows/items/{id}": { + "/discogs/master/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled Apple Podcasts show record by id from dataset id enum value `apple-podcasts-shows`.", - "operationId": "datasets-apple-podcasts-shows-item", + "description": "Returns a normalized Discogs master release: the version-agnostic grouping of a release across pressings/reissues (artists, tracklist, genres/styles, videos, images, marketplace stats). Credential-free official Discogs database data.", + "operationId": "discogs-master", "parameters": [ { - "description": "Apple Podcasts numeric show id (e.g. 173001861)", + "description": "Discogs master release id", "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "26647" } ], "produces": [ @@ -237053,7 +269860,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePodcastsShowResponseDoc" + "$ref": "#/definitions/discogs.masterResponseDoc" } }, "400": { @@ -237068,14 +269875,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" } @@ -237086,86 +269893,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Apple Podcasts show from dataset", + "summary": "Get a Discogs master release", "tags": [ - "Datasets" + "Discogs" ] } }, - "/datasets/apple-podcasts-shows/search": { + "/discogs/release/{id}": { "get": { "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`.", - "operationId": "datasets-apple-podcasts-shows-search", + "description": "Returns a normalized Discogs release: artists, labels, formats, tracklist, credits, identifiers, videos, images, and community want/have/rating. Credential-free official Discogs database data (api.discogs.com).", + "operationId": "discogs-release", "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": "Discogs release id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "249504" } ], "produces": [ @@ -237175,7 +269923,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePodcastsShowsSearchResponseDoc" + "$ref": "#/definitions/discogs.releaseResponseDoc" } }, "400": { @@ -237184,8 +269932,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -237195,6 +269943,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -237202,105 +269956,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Podcasts shows dataset", + "summary": "Get a Discogs release", "tags": [ - "Datasets" + "Discogs" ] } }, - "/datasets/apps-charts/search": { + "/discogs/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches daily top-chart snapshots scraped from the iOS App Store and Google Play, stored in a search index (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`.", - "operationId": "datasets-apps-charts-search", + "description": "Searches Discogs releases, masters, artists, and labels. Credential-free official Discogs database data.", + "operationId": "discogs-search", "parameters": [ { - "description": "Full-text query over chart-entry title and developer, max 256 characters", + "description": "Search query", "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" + "required": true, + "type": "string", + "x-example": "Daft Punk Discovery" }, { - "description": "Sort enum: rank, rank_desc, date_desc", + "description": "Result type filter", "enum": [ - "rank", - "rank_desc", - "date_desc" + "release", + "master", + "artist", + "label" ], "in": "query", - "name": "sort", + "name": "type", "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 50, max 100", "in": "query", - "name": "page_size", + "name": "per_page", "type": "integer" } ], @@ -237311,7 +270010,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chartsSearchResponseDoc" + "$ref": "#/definitions/discogs.searchResponseDoc" } }, "400": { @@ -237320,14 +270019,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" } @@ -237338,77 +270037,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the app-charts dataset", + "summary": "Search the Discogs database", "tags": [ - "Datasets" + "Discogs" ] } }, - "/datasets/apps-reviews/search": { + "/dominos/coupons": { "get": { "consumes": [ "application/json" ], - "description": "Searches user reviews scraped from the iOS App Store and Google Play, stored in a search index (one document per review). Store enum: `ios`, `android`. Sort enum: `recent`, `score_desc`, `score_asc`, `helpful_desc`.", - "operationId": "datasets-apps-reviews-search", + "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": "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", + "description": "Domino's store id, from /dominos/store-locator", "in": "query", - "name": "page_size", - "type": "integer" + "name": "store_id", + "required": true, + "type": "string", + "x-example": "4336" } ], "produces": [ @@ -237418,7 +270067,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.reviewsSearchResponseDoc" + "$ref": "#/definitions/dominos.couponsResponseDoc" } }, "400": { @@ -237427,14 +270076,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" } @@ -237445,108 +270100,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the app-reviews dataset", + "summary": "Get one Domino's store's available coupons and deals", "tags": [ - "Datasets" + "Dominos" ] } }, - "/datasets/apps/search": { + "/dominos/customization": { "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`.", - "operationId": "datasets-apps-search", + "description": "Returns one Domino's US store's full build-your-own customization catalog, grouped by product category (Domino's own internal 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. Reads the same structured menu response as GET /dominos/menu, so it costs no additional upstream request. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", + "operationId": "dominos-customization", "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": "Domino's store id, from /dominos/store-locator", "in": "query", - "name": "page_size", - "type": "integer" + "name": "store_id", + "required": true, + "type": "string", + "x-example": "4336" } ], "produces": [ @@ -237556,7 +270130,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.appsSearchResponseDoc" + "$ref": "#/definitions/dominos.customizationResponseDoc" } }, "400": { @@ -237565,14 +270139,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" } @@ -237583,98 +270163,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the apps-intelligence dataset", + "summary": "Get one Domino's store's full build-your-own customization catalog", "tags": [ - "Datasets" + "Dominos" ] } }, - "/datasets/bbb-businesses/facets": { + "/dominos/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns distribution counts over the BBB businesses index (dataset id enum value `bbb-businesses`), honoring the same filters as search. Facet enum: `category`, `state`, `city`, `rating`, `accredited`, `entity_type`, `run_id`.", - "operationId": "datasets-bbb-businesses-facets", + "description": "Returns one Domino's US store's full menu, normalized into 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": "Facet enum: category, state, city, rating, accredited, entity_type, run_id", - "enum": [ - "category", - "state", - "city", - "rating", - "accredited", - "entity_type", - "run_id" - ], + "description": "Domino's store id, from /dominos/store-locator", "in": "query", - "name": "facet", + "name": "store_id", "required": true, - "type": "string" - }, - { - "description": "Full-text match on the business name/category, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact category filter", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact 2-letter state/province filter", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact city 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": "Accreditation filter", - "in": "query", - "name": "accredited", - "type": "boolean" - }, - { - "description": "Exact entity-type filter", - "in": "query", - "name": "entity_type", - "type": "string" - }, - { - "description": "Exact crawl run id filter", - "in": "query", - "name": "run_id", - "type": "string" + "type": "string", + "x-example": "4336" } ], "produces": [ @@ -237684,7 +270193,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.bbbBusinessesFacetResponseDoc" + "$ref": "#/definitions/dominos.menuResponseDoc" } }, "400": { @@ -237693,14 +270202,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" } @@ -237711,26 +270226,60 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the BBB businesses dataset", + "summary": "Get one Domino's store's full structured menu", "tags": [ - "Datasets" + "Dominos" ] } }, - "/datasets/bbb-businesses/items/{id}": { + "/dominos/nutrition": { "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 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": "Business id (the - slug from the profile URL), e.g. 0825-1000223803", - "in": "path", - "name": "id", + "description": "Domino's store id, from /dominos/store-locator", + "in": "query", + "name": "store_id", "required": true, - "type": "string" + "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)", + "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": [ @@ -237740,7 +270289,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.bbbBusinessResponseDoc" + "$ref": "#/definitions/dominos.nutritionResponseDoc" } }, "400": { @@ -237761,8 +270310,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -237773,114 +270322,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a business from the BBB businesses dataset", + "summary": "Get calorie information for one Domino's product configuration", "tags": [ - "Datasets" + "Dominos" ] } }, - "/datasets/bbb-businesses/search": { + "/dominos/store": { "get": { "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`. sort enum: `relevance`, `rating_desc`, `rating_asc`, `accredited_first`, `name_asc`, `years_in_business_desc`.", - "operationId": "datasets-bbb-businesses-search", + "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": "Full-text match on the business name/category, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact category filter, e.g. Plumber. Use the values returned by facets?facet=category", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact 2-letter state/province filter, parsed from the profile URL, e.g. tx", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact city filter, parsed from the profile URL", - "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", - "in": "query", - "name": "accredited", - "type": "boolean" - }, - { - "description": "Exact entity-type filter, e.g. Limited Liability Company (LLC)", - "in": "query", - "name": "entity_type", - "type": "string" - }, - { - "description": "Exact crawl run id filter", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Sort enum: relevance, rating_desc, rating_asc, accredited_first, name_asc, years_in_business_desc", - "enum": [ - "relevance", - "rating_desc", - "rating_asc", - "accredited_first", - "name_asc", - "years_in_business_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": "Domino's store id, from /dominos/store-locator", "in": "query", - "name": "page_size", - "type": "integer" + "name": "store_id", + "required": true, + "type": "string", + "x-example": "4336" } ], "produces": [ @@ -237890,7 +270352,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.bbbBusinessesSearchResponseDoc" + "$ref": "#/definitions/dominos.storeDetailResponseDoc" } }, "400": { @@ -237899,14 +270361,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" } @@ -237917,133 +270385,54 @@ "ApiKeyAuth": [] } ], - "summary": "Search the BBB businesses dataset", + "summary": "Get one Domino's store's full profile record", "tags": [ - "Datasets" + "Dominos" ] } }, - "/datasets/boxofficemojo/facets": { + "/dominos/store-locator": { "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 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": "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" - }, - { - "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", + "description": "Optional street address line", "in": "query", - "name": "min_domestic", - "type": "integer" + "name": "address", + "type": "string", + "x-example": "1600 Pennsylvania Ave NW" }, { - "description": "Minimum foreign share of worldwide gross, 0 through 1", + "description": "City name (required together with state if postal_code is not given)", "in": "query", - "name": "min_foreign_share", - "type": "number" + "name": "city", + "type": "string", + "x-example": "Washington" }, { - "description": "Maximum domestic share of worldwide gross, 0 through 1", + "description": "Two-letter US state code (required together with city if postal_code is not given)", "in": "query", - "name": "max_domestic_share", - "type": "number" + "name": "state", + "type": "string", + "x-example": "DC" }, { - "description": "Hydrated filter", + "description": "US ZIP code (can be used alone instead of city/state)", "in": "query", - "name": "hydrated", - "type": "boolean" + "name": "postal_code", + "type": "string", + "x-example": "20500" }, { - "description": "Only titles with worldwide gross of at least $1B", + "description": "One of: Delivery, Carryout. Default Delivery", "in": "query", - "name": "is_billion_dollar", - "type": "boolean" + "name": "service_method", + "type": "string", + "x-example": "Delivery" } ], "produces": [ @@ -238053,7 +270442,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.boxOfficeMojoFacetResponseDoc" + "$ref": "#/definitions/dominos.storeLocatorResponseDoc" } }, "400": { @@ -238068,8 +270457,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -238080,26 +270469,35 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Box Office Mojo dataset", + "summary": "Find Domino's stores near an address, city/state, or ZIP code", "tags": [ - "Datasets" + "Dominos" ] } }, - "/datasets/boxofficemojo/items/{title_id}": { + "/doordash/explore": { "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", + "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": "Title id (IMDb tt… id), e.g. tt0499549", - "in": "path", - "name": "title_id", + "description": "Consumer latitude", + "in": "query", + "name": "latitude", "required": true, - "type": "string" + "type": "number", + "x-example": 37.7825 + }, + { + "description": "Consumer longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -238109,7 +270507,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.boxOfficeMojoItemResponseDoc" + "$ref": "#/definitions/doordash.exploreResponseDoc" } }, "400": { @@ -238118,20 +270516,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" } @@ -238142,150 +270534,227 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Box Office Mojo title from the dataset", + "summary": "Get DoorDash nearby stores explore feed", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/boxofficemojo/search": { + "/doordash/feed": { "get": { "consumes": [ "application/json" ], - "description": "Searches theatrical box-office records from public Box Office Mojo charts and title pages, stored in a search index. 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`.", - "operationId": "datasets-boxofficemojo-search", + "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": "Full-text query over title and taxonomy names, max 256 characters", + "description": "Consumer latitude", "in": "query", - "name": "q", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Exact title id (IMDb tt… id used by Box Office Mojo), max 32 characters", + "description": "Consumer longitude", "in": "query", - "name": "title_id", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 }, { - "description": "Year that must appear in years_active", + "description": "Number of stores to skip", "in": "query", - "name": "year", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 }, { - "description": "Primary lifetime chart year", + "description": "Max stores to return", "in": "query", - "name": "lifetime_year", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/doordash.feedResponseDoc" + } }, - { - "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" + "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": [ { - "description": "Franchise name filter, max 128 characters", + "ApiKeyAuth": [] + } + ], + "summary": "Get DoorDash store discovery feed", + "tags": [ + "DoorDash" + ] + } + }, + "/doordash/search": { + "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", + "parameters": [ + { + "description": "Restaurant, cuisine, or dish query", "in": "query", - "name": "franchise", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "pizza" }, { - "description": "Brand name filter, max 128 characters", + "description": "Consumer latitude", "in": "query", - "name": "brand", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Genre name filter, max 128 characters", + "description": "Consumer longitude", "in": "query", - "name": "genre", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 }, { - "description": "Only titles in the lifetime worldwide top 1000 chart", + "description": "Exact cuisine or store tag, case-insensitive", "in": "query", - "name": "in_lifetime_top_1000", - "type": "boolean" + "name": "tag", + "type": "string", + "x-example": "Pizza" }, { - "description": "Only titles with hydrated release groups and market grosses", + "description": "Keep only DashPass-eligible stores", "in": "query", - "name": "hydrated", + "name": "dashPassOnly", "type": "boolean" }, { - "description": "Only titles with worldwide gross of at least $1B", + "description": "Keep only stores currently available ASAP", "in": "query", - "name": "is_billion_dollar", + "name": "asapOnly", "type": "boolean" }, { - "description": "Minimum lifetime worldwide gross in whole USD dollars", + "description": "Keep only pickup-enabled stores", "in": "query", - "name": "min_worldwide", - "type": "integer" + "name": "pickupOnly", + "type": "boolean" }, { - "description": "Maximum lifetime worldwide gross in whole USD dollars", + "description": "Maximum displayed distance in miles, from 0 to 100", "in": "query", - "name": "max_worldwide", - "type": "integer" + "name": "maxDistanceMiles", + "type": "number", + "x-example": 5 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/doordash.searchResponseDoc" + } }, - { - "description": "Minimum lifetime domestic gross in whole USD dollars", - "in": "query", - "name": "min_domestic", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum foreign share of worldwide gross, 0 through 1", - "in": "query", - "name": "min_foreign_share", - "type": "number" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Maximum domestic share of worldwide gross, 0 through 1", - "in": "query", - "name": "max_domestic_share", - "type": "number" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Search DoorDash pickup restaurants", + "tags": [ + "DoorDash" + ] + } + }, + "/doordash/search/autocomplete": { + "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", + "parameters": [ { - "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": "Partial restaurant, cuisine, or dish query", "in": "query", - "name": "sort", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "piz" }, { - "description": "Page number, defaults to 1", + "description": "Consumer latitude", "in": "query", - "name": "page", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Consumer longitude", "in": "query", - "name": "page_size", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -238295,7 +270764,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.boxOfficeMojoSearchResponseDoc" + "$ref": "#/definitions/doordash.searchResponseDoc" } }, "400": { @@ -238304,14 +270773,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" } @@ -238322,38 +270791,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Box Office Mojo dataset", + "summary": "Get DoorDash pickup search suggestions", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/chrome-extensions/changes": { + "/doordash/search/filters": { "get": { - "description": "Returns recent change observations. Change type enum: `users`, `rating`, `rating_count`, `version`, `developer`, `permissions`, `privacy`, `status`.", - "operationId": "datasets-chrome-extensions-changes", + "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", "parameters": [ { - "description": "Change type enum: users, rating, rating_count, version, developer, permissions, privacy, status", - "enum": [ - "users", - "rating", - "rating_count", - "version", - "developer", - "permissions", - "privacy", - "status" - ], + "description": "Consumer latitude", "in": "query", - "name": "change_type", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Maximum observations, default 100, max 500", + "description": "Consumer longitude", "in": "query", - "name": "limit", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -238363,7 +270829,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionChangesResponseDoc" + "$ref": "#/definitions/doordash.searchFiltersResponseDoc" } }, "400": { @@ -238372,14 +270838,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" } @@ -238390,140 +270856,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get recent Chrome Web Store item changes", + "summary": "Get DoorDash search filter options", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/chrome-extensions/facets": { + "/doordash/search/items": { "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": "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": "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": "Dish or item search text", "in": "query", - "name": "facet", + "name": "query", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "pizza" }, { - "description": "Manifest version enum: 2, 3", - "enum": [ - 2, - 3 - ], + "description": "Cuisine or store tag used to narrow candidate stores", "in": "query", - "name": "manifest_version", - "type": "integer" + "name": "tag", + "type": "string", + "x-example": "Pizza" }, { - "description": "Data-collection filter", + "description": "Keep only DashPass-eligible stores", "in": "query", - "name": "collects_data", - "type": "boolean" + "name": "dashPassOnly", + "type": "boolean", + "x-example": false }, { - "description": "Broad-host-access filter", + "description": "Keep only stores currently available ASAP", "in": "query", - "name": "has_broad_host_access", - "type": "boolean" + "name": "asapOnly", + "type": "boolean", + "x-example": false }, { - "description": "Minimum users", + "description": "Keep only pickup-enabled stores", "in": "query", - "name": "min_users", - "type": "integer" + "name": "pickupOnly", + "type": "boolean", + "x-example": false }, { - "description": "Minimum rating", + "description": "Maximum displayed distance in miles", "in": "query", - "name": "min_rating", - "type": "number" + "name": "maxDistanceMiles", + "type": "number", + "x-example": 5 }, { - "description": "Minimum rating count", + "description": "Consumer latitude", "in": "query", - "name": "min_rating_count", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "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": "Consumer longitude", "in": "query", - "name": "sort", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -238533,7 +270937,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionFacetResponseDoc" + "$ref": "#/definitions/doordash.searchItemsResponseDoc" } }, "400": { @@ -238542,14 +270946,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" } @@ -238560,41 +270964,43 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Chrome Web Store dataset", + "summary": "Search DoorDash dishes and items", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/chrome-extensions/history/{id}": { + "/doordash/store/{store_id}": { "get": { - "description": "Returns chronological change-only observations for a Chrome Web Store item.", - "operationId": "datasets-chrome-extensions-history", + "consumes": [ + "application/json" + ], + "description": "Returns location-aware DoorDash store metadata through the Android mobile guest flow. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-store", "parameters": [ { - "description": "Chrome Web Store item id", + "description": "Numeric DoorDash store ID", "in": "path", - "name": "id", + "name": "store_id", "required": true, - "type": "string" - }, - { - "description": "Inclusive start date, YYYY-MM-DD", - "in": "query", - "name": "from", - "type": "string" + "type": "string", + "x-example": "26282644" }, { - "description": "Inclusive end date, YYYY-MM-DD", + "description": "Delivery latitude", "in": "query", - "name": "to", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Maximum points, default 365, max 1000", + "description": "Delivery longitude", "in": "query", - "name": "limit", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -238604,7 +271010,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionHistoryResponseDoc" + "$ref": "#/definitions/doordash.storeResponseDoc" } }, "400": { @@ -238613,8 +271019,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -238624,6 +271030,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -238631,23 +271043,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chrome Web Store item history", + "summary": "Get a DoorDash store", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/chrome-extensions/items/{id}": { + "/doordash/store/{store_id}/fulfillment": { "get": { - "description": "Returns one stored extension, theme or legacy app snapshot by its 32-character Chrome Web Store id.", - "operationId": "datasets-chrome-extensions-item", + "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", "parameters": [ { - "description": "Chrome Web Store item id", + "description": "Numeric DoorDash store ID", "in": "path", - "name": "id", + "name": "store_id", "required": true, - "type": "string" + "type": "string", + "x-example": "26282644" + }, + { + "description": "Delivery latitude", + "in": "query", + "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": [ @@ -238657,7 +271089,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionItemResponseDoc" + "$ref": "#/definitions/doordash.storeFulfillmentResponseDoc" } }, "400": { @@ -238672,14 +271104,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" } @@ -238690,33 +271122,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrome Web Store dataset item", + "summary": "Get DoorDash store fulfillment details", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/chrome-extensions/metrics": { + "/doordash/store/{store_id}/info": { "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 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": "Recent-change window enum: 7, 30, 90; default 30", - "enum": [ - 7, - 30, - 90 - ], + "description": "Numeric DoorDash store ID", + "in": "path", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "26282644" + }, + { + "description": "Delivery latitude", "in": "query", - "name": "days", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Top category and permission buckets, default 10, min 5, max 25", + "description": "Delivery longitude", "in": "query", - "name": "limit", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -238726,7 +271168,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionMetricsResponseDoc" + "$ref": "#/definitions/doordash.storeInfoResponseDoc" } }, "400": { @@ -238735,8 +271177,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -238746,6 +271188,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -238753,134 +271201,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chrome Web Store dataset metrics", + "summary": "Get DoorDash store contact info", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/chrome-extensions/search": { + "/doordash/store/{store_id}/item/{item_id}": { "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`.", - "operationId": "datasets-chrome-extensions-search", + "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", "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", - "enum": [ - 2, - 3 - ], - "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" + "description": "Numeric DoorDash store ID", + "in": "path", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "26282644" }, { - "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" + "description": "Menu item name, matched case-insensitively", + "in": "path", + "name": "item_id", + "required": true, + "type": "string", + "x-example": "Fluffy Pancakes" }, { - "description": "Page number, default 1", + "description": "Delivery latitude", "in": "query", - "name": "page", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Page size, default 20, max 100", + "description": "Delivery longitude", "in": "query", - "name": "page_size", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -238890,7 +271255,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionsSearchResponseDoc" + "$ref": "#/definitions/doordash.storeItemResponseDoc" } }, "400": { @@ -238899,8 +271264,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -238910,6 +271275,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -238917,120 +271288,122 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Chrome Web Store dataset", + "summary": "Get DoorDash menu item details", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/chrome-extensions/trending": { + "/doordash/store/{store_id}/menu": { "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`.", - "operationId": "datasets-chrome-extensions-trending", + "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", "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": "Numeric DoorDash store ID", + "in": "path", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "26282644" }, { - "description": "Status enum: active, removed", - "enum": [ - "active", - "removed" - ], + "description": "Delivery latitude", "in": "query", - "name": "status", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Manifest version enum: 2, 3", - "enum": [ - 2, - 3 - ], + "description": "Delivery longitude", "in": "query", - "name": "manifest_version", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/doordash.menuResponseDoc" + } }, - { - "description": "Data-collection filter", - "in": "query", - "name": "collects_data", - "type": "boolean" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Broad-host-access filter", - "in": "query", - "name": "has_broad_host_access", - "type": "boolean" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum users", - "in": "query", - "name": "min_users", - "type": "integer" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum rating", - "in": "query", - "name": "min_rating", - "type": "number" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a DoorDash store menu", + "tags": [ + "DoorDash" + ] + } + }, + "/doordash/store/{store_id}/reviews": { + "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", + "parameters": [ { - "description": "Minimum rating count", - "in": "query", - "name": "min_rating_count", - "type": "integer" + "description": "Numeric DoorDash store ID", + "in": "path", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "26282644" }, { - "description": "Page number", + "description": "Delivery latitude", "in": "query", - "name": "page", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Page size, max 100", + "description": "Delivery longitude", "in": "query", - "name": "page_size", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -239040,7 +271413,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionsSearchResponseDoc" + "$ref": "#/definitions/doordash.storeReviewsResponseDoc" } }, "400": { @@ -239049,8 +271422,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -239060,6 +271433,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -239067,98 +271446,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get trending Chrome Web Store items", + "summary": "Get DoorDash store reviews", "tags": [ - "Datasets" + "DoorDash" ] } }, - "/datasets/creators/search": { + "/draftkings/sportsbook/event": { "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.", - "operationId": "datasets-creators-search", + "description": "Returns one event's metadata (league id, sport id, teams, status, start time) from DraftKings' credential-free public JSON. `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": "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", - "enum": [ - "followers_desc", - "engagement_desc", - "engagement_qualified_desc", - "likes_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", + "description": "Numeric DraftKings event id", "in": "query", - "name": "page_size", - "type": "integer" + "name": "event_id", + "required": true, + "type": "string", + "x-example": "34240140" } ], "produces": [ @@ -239168,7 +271476,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.creatorsSearchResponseDoc" + "$ref": "#/definitions/draftkings.eventResponseDoc" } }, "400": { @@ -239177,14 +271485,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" } @@ -239195,143 +271509,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search the TikTok creators dataset", + "summary": "DraftKings Sportsbook event", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/facebook-pages/facets": { + "/draftkings/sportsbook/event-context": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns terms aggregation counts for the Facebook Pages dataset. Facet enum: `category`, `discovery_source`.", - "operationId": "datasets-facebook-pages-facets", + "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": "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": "Numeric DraftKings event id", "in": "query", - "name": "facet", + "name": "event_id", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "34522271" } ], "produces": [ @@ -239341,7 +271536,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.facebookPagesFacetResponseDoc" + "$ref": "#/definitions/draftkings.eventContextResponseDoc" } }, "400": { @@ -239350,14 +271545,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" } @@ -239368,26 +271569,35 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Facebook Pages dataset", + "summary": "DraftKings Sportsbook event context", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/facebook-pages/items/{page_id}": { + "/draftkings/sportsbook/event-markets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Facebook Page record by page id from dataset id enum value `facebook-pages`.", - "operationId": "datasets-facebook-pages-item", + "description": "Returns one event's betting markets and selections for a specific market category, from DraftKings' credential-free public JSON. `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, or from a DraftKings Sportsbook event page's own network traffic. 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": "Facebook Page id, max 128 characters", - "in": "path", - "name": "page_id", + "description": "Numeric DraftKings event id", + "in": "query", + "name": "event_id", "required": true, - "type": "string" + "type": "string", + "x-example": "34497667" + }, + { + "description": "Numeric DraftKings market subcategory id", + "in": "query", + "name": "subcategory_id", + "required": true, + "type": "string", + "x-example": "6354" } ], "produces": [ @@ -239397,7 +271607,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.facebookPageResponseDoc" + "$ref": "#/definitions/draftkings.eventMarketsResponseDoc" } }, "400": { @@ -239418,8 +271628,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -239430,124 +271640,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Facebook Page from the dataset", + "summary": "DraftKings Sportsbook event markets", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/facebook-pages/search": { + "/draftkings/sportsbook/featured-leagues": { "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`.", - "operationId": "datasets-facebook-pages-search", - "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", - "in": "query", - "name": "page_size", - "type": "integer" - } - ], + "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" ], @@ -239555,13 +271660,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.facebookPagesSearchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/draftkings.featuredLeaguesResponseDoc" } }, "429": { @@ -239570,8 +271669,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -239582,228 +271681,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Facebook Pages dataset", + "summary": "DraftKings Sportsbook featured leagues", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/github-users/facets": { + "/draftkings/sportsbook/futures": { "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 league-level futures markets and selections for a specific DraftKings market category, from DraftKings' credential-free public JSON. `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": "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" - ], + "description": "Numeric DraftKings league id", "in": "query", - "name": "facet", + "name": "league_id", "required": true, - "type": "string" - }, - { - "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" - }, - { - "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" + "type": "string", + "x-example": "84240" }, { - "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": "Numeric DraftKings futures market subcategory id", "in": "query", - "name": "sort", - "type": "string" + "name": "subcategory_id", + "required": true, + "type": "string", + "x-example": "17279" } ], "produces": [ @@ -239813,7 +271719,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.githubUsersFacetResponseDoc" + "$ref": "#/definitions/draftkings.futuresResponseDoc" } }, "400": { @@ -239822,14 +271728,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" } @@ -239840,26 +271752,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the GitHub users dataset", + "summary": "DraftKings Sportsbook futures", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/github-users/items/{login}": { + "/draftkings/sportsbook/league-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns one enriched GitHub user record by login from dataset id enum value `github-users`.", - "operationId": "datasets-github-users-item", + "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": "GitHub login, max 128 characters", - "in": "path", - "name": "login", + "description": "Numeric DraftKings league id", + "in": "query", + "name": "league_id", "required": true, - "type": "string" + "type": "string", + "x-example": "84240" } ], "produces": [ @@ -239869,7 +271782,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.githubUserResponseDoc" + "$ref": "#/definitions/draftkings.leagueEventsResponseDoc" } }, "400": { @@ -239890,8 +271803,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -239902,77 +271815,109 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GitHub user from the dataset", + "summary": "DraftKings Sportsbook league event directory", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/github-users/nearby": { + "/draftkings/sportsbook/leagues": { "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`.", - "operationId": "datasets-github-users-nearby", - "parameters": [ - { - "description": "Latitude", - "in": "query", - "name": "lat", - "required": true, - "type": "number" - }, - { - "description": "Longitude", - "in": "query", - "name": "lon", - "required": true, - "type": "number" - }, - { - "description": "Radius in meters, max 50000", - "in": "query", - "name": "radius_m", - "required": true, - "type": "integer" + "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/draftkings.leaguesResponseDoc" + } }, - { - "description": "Follower-tier enum: nano, micro, mid, macro, mega", - "enum": [ - "nano", - "micro", - "mid", - "macro", - "mega" - ], - "in": "query", - "name": "influence_tier", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Filter by any public contact channel", - "in": "query", - "name": "reachable", - "type": "boolean" + "ApiKeyAuth": [] + } + ], + "summary": "DraftKings Sportsbook sports and leagues", + "tags": [ + "DraftKings Sportsbook" + ] + } + }, + "/draftkings/sportsbook/live": { + "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", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/draftkings.liveResponseDoc" + } }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" + "429": { + "description": "Too Many Requests", + "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": "DraftKings Sportsbook live events", + "tags": [ + "DraftKings Sportsbook" + ] + } + }, + "/draftkings/sportsbook/odds": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the primary betting markets (moneyline, spread, total) for every upcoming event in a DraftKings Sportsbook league, from DraftKings' credential-free public JSON. `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": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Numeric DraftKings league id", "in": "query", - "name": "page_size", - "type": "integer" + "name": "league_id", + "required": true, + "type": "string", + "x-example": "84240" } ], "produces": [ @@ -239982,7 +271927,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.githubUsersSearchResponseDoc" + "$ref": "#/definitions/draftkings.oddsResponseDoc" } }, "400": { @@ -239991,14 +271936,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" } @@ -240009,214 +271960,90 @@ "ApiKeyAuth": [] } ], - "summary": "Search nearby GitHub users", + "summary": "DraftKings Sportsbook odds", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/github-users/search": { + "/draftkings/sportsbook/quick-links": { "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`.", - "operationId": "datasets-github-users-search", - "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": "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/draftkings.quickLinksResponseDoc" + } }, - { - "description": "Latitude for radius filtering or distance sort", - "in": "query", - "name": "lat", - "type": "number" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Longitude for radius filtering or distance sort", - "in": "query", - "name": "lon", - "type": "number" - }, + "ApiKeyAuth": [] + } + ], + "summary": "DraftKings Sportsbook quick links", + "tags": [ + "DraftKings Sportsbook" + ] + } + }, + "/draftkings/sportsbook/team": { + "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", + "parameters": [ { - "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", + "description": "Numeric DraftKings team id", "in": "query", - "name": "radius_m", - "type": "integer" + "name": "team_id", + "required": true, + "type": "string", + "x-example": "18454" }, { - "description": "Sort enum: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc", + "description": "Sport: football, hockey, basketball, baseball", "enum": [ - "relevance", - "rank_score_desc", - "followers_desc", - "account_age_desc", - "account_age_asc", - "distance_asc" + "football", + "hockey", + "basketball", + "baseball" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" + "name": "sport", + "required": true, + "type": "string", + "x-example": "football" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Lowercase DraftKings team slug", "in": "query", - "name": "page_size", - "type": "integer" + "name": "slug", + "required": true, + "type": "string", + "x-example": "arizona-cardinals" } ], "produces": [ @@ -240226,7 +272053,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.githubUsersSearchResponseDoc" + "$ref": "#/definitions/draftkings.teamResponseDoc" } }, "400": { @@ -240235,14 +272062,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" } @@ -240253,66 +272086,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search the GitHub users dataset", + "summary": "DraftKings Sportsbook team", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/goodreads-authors/facets": { + "/draftkings/sportsbook/teams": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the Goodreads authors dataset. Facet enum: `genres`, `run_id`.", - "operationId": "datasets-goodreads-authors-facets", + "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": "Facet enum: genres, run_id", + "description": "League: nfl, nhl, nba, cbb, mlb, cfb", "enum": [ - "genres", - "run_id" + "nfl", + "nhl", + "nba", + "cbb", + "mlb", + "cfb" ], "in": "query", - "name": "facet", + "name": "league", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "nfl" } ], "produces": [ @@ -240322,7 +272124,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsAuthorsFacetResponseDoc" + "$ref": "#/definitions/draftkings.teamsResponseDoc" } }, "400": { @@ -240337,8 +272139,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -240349,26 +272151,41 @@ "ApiKeyAuth": [] } ], - "summary": "Facet Goodreads authors dataset", + "summary": "DraftKings Sportsbook league teams", "tags": [ - "Datasets" + "DraftKings Sportsbook" ] } }, - "/datasets/goodreads-authors/items/{id}": { + "/duckduckgo/image": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled Goodreads author profile record by id from dataset id enum value `goodreads-authors`.", - "operationId": "datasets-goodreads-authors-item", + "description": "Returns normalized DuckDuckGo image results for a query string: title, source page URL, image URL, thumbnail, dimensions, and hostname, plus page-based pagination. Results are fetched from DuckDuckGo's own image JSON API.", + "operationId": "duckduckgo-image", "parameters": [ { - "description": "Goodreads author id, e.g. 153394", - "in": "path", - "name": "id", + "description": "Search query", + "in": "query", + "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "openai" + }, + { + "description": "1-based page number, defaults to 1", + "in": "query", + "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": [ @@ -240378,7 +272195,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsAuthorResponseDoc" + "$ref": "#/definitions/duckduckgo.imageResponseDoc" } }, "400": { @@ -240404,6 +272221,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -240411,79 +272234,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads author from dataset", + "summary": "Search DuckDuckGo image results", "tags": [ - "Datasets" + "DuckDuckGo Search" ] } }, - "/datasets/goodreads-authors/search": { + "/duckduckgo/news": { "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`.", - "operationId": "datasets-goodreads-authors-search", + "description": "Returns normalized DuckDuckGo news results for a query string: title, destination URL, source, excerpt, thumbnail, and relative/published time, plus page-based pagination. Results are fetched from DuckDuckGo's own news JSON API.", + "operationId": "duckduckgo-news", "parameters": [ { - "description": "Full-text query over name, about and genres, max 256 characters", + "description": "Search query", "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" + "required": true, + "type": "string", + "x-example": "openai" }, { - "description": "Page number, defaults to 1", + "description": "1-based page number, 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": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", "in": "query", - "name": "page_size", - "type": "integer" + "name": "region", + "type": "string", + "x-example": "us-en" } ], "produces": [ @@ -240493,7 +272278,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsAuthorsSearchResponseDoc" + "$ref": "#/definitions/duckduckgo.newsResponseDoc" } }, "400": { @@ -240502,6 +272287,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -240513,6 +272304,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -240520,139 +272317,64 @@ "ApiKeyAuth": [] } ], - "summary": "Search Goodreads authors dataset", + "summary": "Search DuckDuckGo news results", "tags": [ - "Datasets" + "DuckDuckGo Search" ] } }, - "/datasets/goodreads-books/facets": { + "/duckduckgo/search": { "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 normalized 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. Results are fetched from DuckDuckGo's own server-rendered search page.", + "operationId": "duckduckgo-search", "parameters": [ { - "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", - "name": "facet", - "required": true, - "type": "string" - }, - { - "description": "Full-text query over title, author and description, max 256 characters", + "description": "Search query", "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" + "required": true, + "type": "string", + "x-example": "openai" }, { - "description": "Exact series name filter, max 128 characters", + "description": "1-based page number, defaults to 1", "in": "query", - "name": "series", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Exact ISBN-10 filter, max 128 characters", + "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", "in": "query", - "name": "isbn", - "type": "string" + "name": "region", + "type": "string", + "x-example": "us-en" }, { - "description": "Exact ISBN-13 filter, max 128 characters", + "description": "Restrict results to a recency window", + "enum": [ + "d", + "w", + "m", + "y" + ], "in": "query", - "name": "isbn13", + "name": "time_range", "type": "string" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Safe search level, defaults to DuckDuckGo's own moderate setting when omitted", + "enum": [ + "strict", + "moderate", + "off" + ], "in": "query", - "name": "run_id", + "name": "safe_search", "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": [ @@ -240662,7 +272384,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsBooksFacetResponseDoc" + "$ref": "#/definitions/duckduckgo.searchResponseDoc" } }, "400": { @@ -240671,6 +272393,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -240682,6 +272410,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -240689,26 +272423,34 @@ "ApiKeyAuth": [] } ], - "summary": "Facet Goodreads books dataset", + "summary": "Search DuckDuckGo web results", "tags": [ - "Datasets" + "DuckDuckGo Search" ] } }, - "/datasets/goodreads-books/items/{id}": { + "/duckduckgo/shopping": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled Goodreads book record by id from dataset id enum value `goodreads-books`.", - "operationId": "datasets-goodreads-books-item", + "description": "Returns normalized 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": "Goodreads book id, e.g. 2767052", - "in": "path", - "name": "id", + "description": "Search query", + "in": "query", + "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "running shoes" + }, + { + "description": "DuckDuckGo market code, e.g. us-en, uk-en", + "in": "query", + "name": "region", + "type": "string", + "x-example": "us-en" } ], "produces": [ @@ -240718,7 +272460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsBookResponseDoc" + "$ref": "#/definitions/duckduckgo.shoppingResponseDoc" } }, "400": { @@ -240744,6 +272486,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -240751,149 +272499,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads book from dataset", + "summary": "Search DuckDuckGo shopping results", "tags": [ - "Datasets" + "DuckDuckGo Search" ] } }, - "/datasets/goodreads-books/search": { + "/duckduckgo/video": { "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`.", - "operationId": "datasets-goodreads-books-search", + "description": "Returns normalized DuckDuckGo video results for a query string: title, destination URL, description, duration, thumbnail, publisher/uploader, published time, and view count, plus page-based pagination. Results are fetched from DuckDuckGo's own video JSON API.", + "operationId": "duckduckgo-video", "parameters": [ { - "description": "Full-text query over title, author and description, max 256 characters", + "description": "Search query", "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" + "required": true, + "type": "string", + "x-example": "openai" }, { - "description": "Page number, defaults to 1", + "description": "1-based page number, 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": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", "in": "query", - "name": "page_size", - "type": "integer" + "name": "region", + "type": "string", + "x-example": "us-en" } ], "produces": [ @@ -240903,7 +272543,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsBooksSearchResponseDoc" + "$ref": "#/definitions/duckduckgo.videoResponseDoc" } }, "400": { @@ -240912,6 +272552,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -240923,6 +272569,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -240930,158 +272582,26 @@ "ApiKeyAuth": [] } ], - "summary": "Search Goodreads books dataset", + "summary": "Search DuckDuckGo video results", "tags": [ - "Datasets" + "DuckDuckGo Search" ] } }, - "/datasets/google-map-businesses/facets": { + "/dunkin/directory": { "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 the matching ISO 3166-2 codes (e.g. `ES-MD`, `FR-59`) and are the stable cross-country grouping key. Rows not yet resolved carry no code and are absent from the code facets.", - "operationId": "datasets-google-map-businesses-facets", + "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": "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" - }, - { - "description": "Full-text business search query, max 256 characters", - "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. US-CA or FR-HDF, max 128 characters; use facet=state_code to discover values", - "in": "query", - "name": "state_code", - "type": "string" - }, - { - "description": "Exact ISO 3166-2 county/district code filter, e.g. FR-59 or IT-RM, max 128 characters; use facet=county_code to discover 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", - "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" - ], + "description": "Directory path from a previous response's children[].path: a state code (e.g. \\", "in": "query", - "name": "sort", - "type": "string" + "name": "path", + "type": "string", + "x-example": "ny" } ], "produces": [ @@ -241091,7 +272611,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.googleMapBusinessesFacetResponseDoc" + "$ref": "#/definitions/dunkin.directoryResponseDoc" } }, "400": { @@ -241100,14 +272620,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" } @@ -241118,28 +272644,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet stored Google Maps businesses", + "summary": "Browse the Dunkin store directory", "tags": [ - "Datasets" + "Dunkin" ] } }, - "/datasets/google-map-businesses/items/{place_id}": { + "/dunkin/menu": { "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", - "parameters": [ - { - "description": "Google Place ID, max 256 characters", - "in": "path", - "name": "place_id", - "required": true, - "type": "string" - } - ], + "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" ], @@ -241147,19 +272664,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.googleMapBusinessResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/dunkin.menuResponseDoc" } }, "429": { @@ -241168,8 +272673,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -241180,70 +272685,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get a stored Google Maps business", + "summary": "Get Dunkin's national menu", "tags": [ - "Datasets" + "Dunkin" ] } }, - "/datasets/google-map-businesses/nearby": { + "/dunkin/nearby": { "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.", - "operationId": "datasets-google-map-businesses-nearby", + "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": "Latitude", - "in": "query", - "name": "lat", - "required": true, - "type": "number" - }, - { - "description": "Longitude", + "description": "Search center latitude", "in": "query", - "name": "lon", + "name": "latitude", "required": true, - "type": "number" + "type": "number", + "x-example": 40.7128 }, { - "description": "Radius in meters, max 50000", + "description": "Search center longitude", "in": "query", - "name": "radius_m", + "name": "longitude", "required": true, - "type": "integer" - }, - { - "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" + "type": "number", + "x-example": -74.006 }, { - "description": "Minimum review count", + "description": "Search radius in miles, 1-100 (default 25)", "in": "query", - "name": "min_review_count", - "type": "integer" + "name": "radius", + "type": "integer", + "x-example": 25 }, { - "description": "Page number, defaults to 1", + "description": "Maximum stores to return, 1-50 (default 10)", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Result offset for paging through total_in_radius (default 0)", "in": "query", - "name": "page_size", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -241253,7 +272744,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.googleMapBusinessesSearchResponseDoc" + "$ref": "#/definitions/dunkin.nearbyResponseDoc" } }, "400": { @@ -241262,14 +272753,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" } @@ -241280,152 +272777,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search nearby stored Google Maps businesses", + "summary": "Find Dunkin stores near a coordinate, nearest first", "tags": [ - "Datasets" + "Dunkin" ] } }, - "/datasets/google-map-businesses/search": { - "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.", - "operationId": "datasets-google-map-businesses-search", - "parameters": [ - { - "description": "Full-text business search query, max 256 characters", - "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. US-CA or FR-HDF, max 128 characters; use facet=state_code to discover values", - "in": "query", - "name": "state_code", - "type": "string" - }, - { - "description": "Exact ISO 3166-2 county/district code filter, e.g. FR-59 or IT-RM, max 128 characters; use facet=county_code to discover 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" - }, + "/dunkin/store": { + "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", + "parameters": [ { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "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": "page_size", - "type": "integer" + "name": "path", + "required": true, + "type": "string", + "x-example": "307107" } ], "produces": [ @@ -241435,7 +272807,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.googleMapBusinessesSearchResponseDoc" + "$ref": "#/definitions/dunkin.storeResponseDoc" } }, "400": { @@ -241444,14 +272816,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" } @@ -241462,169 +272840,152 @@ "ApiKeyAuth": [] } ], - "summary": "Search stored Google Maps businesses", + "summary": "Get one Dunkin store's detail", "tags": [ - "Datasets" + "Dunkin" ] } }, - "/datasets/housing-markets/facets": { + "/dw/article": { "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 public Deutsche Welle article metadata and body paragraphs from a canonical article URL.", + "operationId": "dw-article", "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": "Canonical DW article URL", "in": "query", - "name": "facet", + "name": "url", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "https://www.dw.com/en/south-africa-11-killed-in-attack-on-house-party/a-79382743" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Maximum price-to-income ratio", - "in": "query", - "name": "max_price_to_income", - "type": "number" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum salary needed to buy in USD per year", - "in": "query", - "name": "min_salary_to_buy", - "type": "integer" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Maximum salary needed to buy in USD per year", - "in": "query", - "name": "max_salary_to_buy", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get DW article content", + "tags": [ + "DW" + ] + } + }, + "/dw/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", + "parameters": [ { - "description": "Minimum median days on market", + "description": "Canonical www.dw.com/en//person- URL", "in": "query", - "name": "min_median_dom", - "type": "number" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.dw.com/en/cathrin-schaer/person-55594156" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.dwAuthorResponseDoc" + } }, - { - "description": "Maximum median days on market", - "in": "query", - "name": "max_median_dom", - "type": "number" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum active inventory", - "in": "query", - "name": "min_inventory", - "type": "integer" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Maximum active inventory", - "in": "query", - "name": "max_inventory", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a DW author profile", + "tags": [ + "DW" + ] + } + }, + "/dw/headlines": { + "get": { + "description": "Returns fresh headlines from one public Deutsche Welle section.", + "operationId": "dw-headlines", + "parameters": [ { - "description": "Minimum homes sold in the period", + "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": "min_homes_sold", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "africa" } ], "produces": [ @@ -241634,7 +272995,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.housingMarketsFacetResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -241643,14 +273004,40 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get DW section headlines", + "tags": [ + "DW" + ] + } + }, + "/dw/news": { + "get": { + "description": "Returns fresh Deutsche Welle stories from the public RSS feed.", + "operationId": "dw-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" } @@ -241661,58 +273048,53 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the US housing markets dataset", + "summary": "Get DW top stories", "tags": [ - "Datasets" + "DW" ] } }, - "/datasets/housing-markets/items/{region_type}/{table_id}": { + "/dw/sections": { + "get": { + "description": "Returns the complete public Deutsche Welle English-edition section inventory (regions, topics, and categories) accepted by /dw/headlines.", + "operationId": "dw-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get DW sections", + "tags": [ + "DW" + ] + } + }, + "/ebay/item/{item_id}": { "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 normalized details for a public eBay item listing.", + "operationId": "ebay-item", "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" - }, - { - "description": "Redfin table id (the region's stable numeric id)", + "description": "eBay item ID", "in": "path", - "name": "table_id", + "name": "item_id", "required": true, - "type": "integer" - }, - { - "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", - "in": "query", - "name": "property_type", - "type": "string" - }, - { - "description": "Return the full monthly series instead of a single period", - "in": "query", - "name": "history", - "type": "boolean" + "type": "string", + "x-example": "196435705622" } ], "produces": [ @@ -241722,7 +273104,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.housingMarketItemResponseDoc" + "$ref": "#/definitions/ebay.itemResponseDoc" } }, "400": { @@ -241748,6 +273130,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -241755,186 +273143,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get a US housing market record from the dataset", + "summary": "Get eBay item details", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/housing-markets/search": { + "/ebay/live/streams": { "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.", - "operationId": "datasets-housing-markets-search", + "description": "Returns currently live and upcoming eBay Live streams for a category channel.", + "operationId": "ebay-live-streams", "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", + "description": "eBay Live category channel, defaults to explore", "enum": [ - "national", - "metro", - "county", - "city", - "zip" + "explore", + "IPqZx79LNuwFcSVt", + "oHjQFTlZ5cYgWkjB", + "l68DJtBAVZge4x4n", + "2Nk3OYiOJHfXqpWG", + "5quuEnjO3axyz46U", + "nGpMTpm13Q86Eaoo", + "sYRxeaskGmNC6xaB", + "iYaYo88zN2vtQorh", + "GYAbsFw6onSNloAb", + "WJ9zLwYjK8njaBtN", + "rALkRyk8gXHzIBR6", + "DNta0sJ8Y6NXZsC9", + "GU4UfBzZSF4jiteS", + "IO7Oih07PtNJSWhU", + "cF4xtF8z9riubmLh", + "bywKDIdtxhi4hUSO" ], "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", + "name": "category", "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", + "description": "Pagination cursor from a previous response's next_request_number, defaults to 0", "in": "query", - "name": "min_homes_sold", + "name": "request_number", "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" - ], + "description": "Pagination session id from a previous response's session_id", "in": "query", - "name": "sort", + "name": "session_id", "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": [ @@ -241944,7 +273202,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.housingMarketsSearchResponseDoc" + "$ref": "#/definitions/ebay.liveStreamsResponseDoc" } }, "400": { @@ -241964,6 +273222,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -241971,157 +273235,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the US housing markets dataset", + "summary": "List eBay Live streams", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/instagram-users/facets": { + "/ebay/live/streams/batch": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the Instagram users dataset. Facet enum: `is_verified`, `is_business_account`, `has_bio`, `has_external_url`, `category_name`, `source_tier`.", - "operationId": "datasets-instagram-users-facets", + "description": "Returns normalized summaries for multiple eBay Live streams/events in one call, up to 9 ids per request.", + "operationId": "ebay-live-streams-batch", "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": "One or more eBay Live stream/event ids, up to 9. Comma-separated or repeated query values are both accepted.", "in": "query", - "name": "facet", + "name": "ids", "required": true, - "type": "string" - }, - { - "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" - }, - { - "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" + "type": "string", + "x-example": "FncRQ8VJGxKzLase" } ], "produces": [ @@ -242131,7 +273265,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.instagramUsersFacetResponseDoc" + "$ref": "#/definitions/ebay.liveStreamsBatchResponseDoc" } }, "400": { @@ -242151,6 +273285,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -242158,26 +273298,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Instagram users dataset", + "summary": "Get multiple eBay Live streams", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/instagram-users/items/{username}": { + "/ebay/live/streams/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Instagram user record by username from dataset id enum value `instagram-users`.", - "operationId": "datasets-instagram-users-item", + "description": "Returns normalized detail for a single eBay Live stream/event, including each host's feedback summary for the last 365 days.", + "operationId": "ebay-live-stream", "parameters": [ { - "description": "Instagram username, with or without a leading @, max 128 characters", + "description": "eBay Live stream/event id", "in": "path", - "name": "username", + "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "qrJnMkM8X2hJuIf3" } ], "produces": [ @@ -242187,7 +273328,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.instagramUserResponseDoc" + "$ref": "#/definitions/ebay.liveStreamResponseDoc" } }, "400": { @@ -242213,6 +273354,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -242220,142 +273367,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Instagram user from the dataset", + "summary": "Get an eBay Live stream", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/instagram-users/search": { + "/ebay/live/streams/{id}/items": { "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`.", - "operationId": "datasets-instagram-users-search", + "description": "Returns the currently featured/auction items for an eBay Live stream, including live bidding state.", + "operationId": "ebay-live-stream-items", "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)", - "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": "eBay Live stream/event id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "qrJnMkM8X2hJuIf3" } ], "produces": [ @@ -242365,7 +273397,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.instagramUsersSearchResponseDoc" + "$ref": "#/definitions/ebay.liveStreamItemsResponseDoc" } }, "400": { @@ -242385,6 +273417,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -242392,103 +273430,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Instagram users dataset", + "summary": "List an eBay Live stream's featured items", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/jobs/companies": { - "get": { + "/ebay/search": { + "post": { "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`.", - "operationId": "datasets-jobs-companies", + "description": "Returns normalized eBay search results.", + "operationId": "ebay-search", "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": "Sort enum: open_desc, company_asc, crawled_desc", - "enum": [ - "open_desc", - "company_asc", - "crawled_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "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": "eBay search payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/ebay.SearchOption" + } } ], "produces": [ @@ -242498,7 +273461,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsCompaniesResponseDoc" + "$ref": "#/definitions/ebay.searchResponseDoc" } }, "400": { @@ -242507,11 +273470,23 @@ "$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": [ @@ -242519,26 +273494,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find which companies are hiring", + "summary": "Search eBay listings", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/jobs/companies/{id}": { + "/ebay/seller/{seller}": { "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 normalized details for a public eBay seller profile.", + "operationId": "ebay-seller", "parameters": [ { - "description": "Dataset board id", + "description": "eBay seller username", "in": "path", - "name": "id", + "name": "seller", "required": true, - "type": "string" + "type": "string", + "x-example": "poloblade" } ], "produces": [ @@ -242548,7 +273524,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsItemResponseDoc" + "$ref": "#/definitions/ebay.sellerResponseDoc" } }, "400": { @@ -242563,11 +273539,23 @@ "$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": [ @@ -242575,25 +273563,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single company by board id", + "summary": "Get eBay seller profile", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/jobs/facets": { + "/ebay/seller/{seller}/about": { "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", + "description": "Returns normalized seller about information from the public 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": "Buckets per facet, default 20, max 100", - "in": "query", - "name": "size", - "type": "integer" + "description": "eBay seller username", + "in": "path", + "name": "seller", + "required": true, + "type": "string", + "x-example": "poloblade" } ], "produces": [ @@ -242603,7 +273593,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsFacetResponseDoc" + "$ref": "#/definitions/ebay.sellerAboutResponseDoc" } }, "400": { @@ -242612,11 +273602,29 @@ "$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": [ @@ -242624,26 +273632,46 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the jobs dataset (hiring market aggregates)", + "summary": "Get eBay seller about details", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/jobs/items/{id}": { + "/ebay/seller/{seller}/feedback": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled job posting by its dataset posting id. Returns 404 when absent.", - "operationId": "datasets-jobs-item", + "description": "Returns normalized seller feedback summary, detailed ratings, and recent review cards from the public eBay seller feedback tab.", + "operationId": "ebay-seller-feedback", "parameters": [ { - "description": "Dataset posting id", + "description": "eBay seller username", "in": "path", - "name": "id", + "name": "seller", "required": true, - "type": "string" + "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" } ], "produces": [ @@ -242653,7 +273681,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsItemResponseDoc" + "$ref": "#/definitions/ebay.sellerFeedbackResponseDoc" } }, "400": { @@ -242668,11 +273696,23 @@ "$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": [ @@ -242680,86 +273720,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single posting from the jobs dataset", + "summary": "Get eBay seller feedback", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/jobs/nearby": { + "/ebay/seller/{seller}/shop": { "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`.", - "operationId": "datasets-jobs-nearby", + "description": "Returns normalized listings from the public eBay seller shop tab, with pagination backed by the store odtRefresh response.", + "operationId": "ebay-seller-shop", "parameters": [ { - "description": "Latitude, -90..90", - "in": "query", - "name": "lat", - "required": true, - "type": "number" - }, - { - "description": "Longitude, -180..180", - "in": "query", - "name": "lon", + "description": "eBay seller username", + "in": "path", + "name": "seller", "required": true, - "type": "number" - }, - { - "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" + "type": "string", + "x-example": "poloblade" }, { - "description": "Page number, default 1", + "default": 1, + "description": "Shop page number", "in": "query", "name": "page", "type": "integer" - }, - { - "description": "Page size, default 20, max 100", - "in": "query", - "name": "page_size", - "type": "integer" } ], "produces": [ @@ -242769,7 +273757,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsSearchResponseDoc" + "$ref": "#/definitions/ebay.sellerShopResponseDoc" } }, "400": { @@ -242778,11 +273766,29 @@ "$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": [ @@ -242790,166 +273796,84 @@ "ApiKeyAuth": [] } ], - "summary": "Find postings near a coordinate", + "summary": "Get eBay seller shop listings", "tags": [ - "Datasets" + "eBay" ] } }, - "/datasets/jobs/search": { + "/economictimes/article": { "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`.", - "operationId": "datasets-jobs-search", + "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": "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)", - "in": "query", - "name": "remote", - "type": "boolean" - }, - { - "description": "Workplace type filter", - "enum": [ - "onsite", - "hybrid", - "remote" - ], - "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", + "description": "Canonical Economic Times article URL", "in": "query", - "name": "min_salary", - "type": "number" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://economictimes.indiatimes.com/markets/aif-pms/example-story/articleshow/134466306.cms" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Maximum salary (matches postings whose range starts at or below this); requires salary_currency", - "in": "query", - "name": "max_salary", - "type": "number" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "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" + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Sort enum: relevance, posted_desc, company_asc", - "enum": [ - "relevance", - "posted_desc", - "company_asc" - ], - "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, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Economic Times article content", + "tags": [ + "Economic Times" + ] + } + }, + "/economictimes/author": { + "get": { + "description": "Returns one Economic Times reporter's public profile: name, job title, biography, headshot, and their recent articles.", + "operationId": "economictimes-author", + "parameters": [ { - "description": "Page size, default 20, max 100; page*page_size must be <= 10000", + "description": "Canonical Economic Times author URL", "in": "query", - "name": "page_size", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://economictimes.indiatimes.com/etreporter/author-kshitij-anand-479257392.cms" } ], "produces": [ @@ -242959,7 +273883,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsSearchResponseDoc" + "$ref": "#/definitions/publicnews.economicTimesAuthorResponseDoc" } }, "400": { @@ -242968,8 +273892,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" } @@ -242980,158 +273910,184 @@ "ApiKeyAuth": [] } ], - "summary": "Search the jobs dataset (all companies' live postings)", + "summary": "Get an Economic Times author profile", "tags": [ - "Datasets" + "Economic Times" ] } }, - "/datasets/journalists/facets": { + "/economictimes/headlines": { "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", + "description": "Returns fresh headlines from one public Economic Times section feed.", + "operationId": "economictimes-headlines", "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" - }, - { - "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", + "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", - "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" + "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": "email_kind", - "type": "string" - }, - { - "description": "Minimum outreach-readiness score, from 0 to 100", - "in": "query", - "name": "min_outreach_readiness", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "top-stories" } ], "produces": [ @@ -243141,7 +274097,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.journalistsFacetResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -243150,14 +274106,46 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Economic Times section headlines", + "tags": [ + "Economic Times" + ] + } + }, + "/economictimes/news": { + "get": { + "description": "Returns fresh Economic Times top-stories headline metadata from its public RSS feed.", + "operationId": "economictimes-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" } @@ -243168,33 +274156,54 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the journalists dataset", + "summary": "Get The Economic Times top stories", "tags": [ - "Datasets" + "Economic Times" ] } }, - "/datasets/journalists/items/{outlet}/{slug}": { + "/economictimes/sections": { "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": "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": "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": "Outlet id, e.g. techcrunch. Use the ids returned by facets?facet=outlet", - "in": "path", - "name": "outlet", - "required": true, - "type": "string" - }, - { - "description": "Journalist slug within the outlet, e.g. zack-whittaker", - "in": "path", - "name": "slug", + "description": "Addresses to verify", + "in": "body", + "name": "option", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/contact.VerifyRequest" + } } ], "produces": [ @@ -243204,29 +274213,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.journalistsItemResponseDoc" + "$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" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error during verification", "schema": { "$ref": "#/definitions/app.Response" } @@ -243237,166 +274240,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a journalist from the journalists dataset", + "summary": "Email verification — deliverability status for a batch of addresses", "tags": [ - "Datasets" + "Web" ] } }, - "/datasets/journalists/search": { + "/engadget/article": { "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`.", - "operationId": "datasets-journalists-search", + "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": "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": "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", + "description": "Canonical Engadget article URL", "in": "query", - "name": "page_size", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.engadget.com/2267229/meta-put-muse-in-a-tamagotchi-like-charm-device/" } ], "produces": [ @@ -243406,7 +274267,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.journalistsSearchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -243415,14 +274276,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" } @@ -243433,95 +274294,30 @@ "ApiKeyAuth": [] } ], - "summary": "Search the journalists dataset", + "summary": "Get Engadget article content", "tags": [ - "Datasets" + "Engadget" ] } }, - "/datasets/numbeo-cities/facets": { + "/engadget/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns terms aggregation counts for the Numbeo cities dataset. Facet enum: `country`.", - "operationId": "datasets-numbeo-cities-facets", + "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": "Facet enum: country", - "enum": [ - "country" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string" - }, - { - "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", + "description": "Author slug, e.g. mariella-moon", "in": "query", - "name": "max_pollution_index", - "type": "number" + "name": "slug", + "type": "string", + "x-example": "mariella-moon" }, { - "description": "Maximum Traffic Index", + "description": "Canonical engadget.com/author/ URL; alternative to slug", "in": "query", - "name": "max_traffic_index", - "type": "number" + "name": "url", + "type": "string", + "x-example": "https://www.engadget.com/author/mariella-moon/" } ], "produces": [ @@ -243531,7 +274327,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCitiesFacetResponseDoc" + "$ref": "#/definitions/publicnews.engadgetAuthorResponseDoc" } }, "400": { @@ -243540,14 +274336,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" } @@ -243558,27 +274354,74 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Numbeo cities dataset", + "summary": "Get an Engadget author profile", "tags": [ - "Datasets" + "Engadget" ] } }, - "/datasets/numbeo-cities/items/{slug}": { + "/engadget/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one composite Numbeo city record by city slug from dataset id enum value `numbeo-cities`.", - "operationId": "datasets-numbeo-cities-item", + "description": "Returns fresh Engadget headlines from one public category feed.", + "operationId": "engadget-headlines", "parameters": [ { - "description": "Numbeo city slug", - "in": "path", - "name": "slug", + "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": "section", "required": true, "type": "string", - "x-example": "Los-Angeles" + "x-example": "ai" } ], "produces": [ @@ -243588,7 +274431,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCityResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -243597,11 +274440,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Engadget section headlines", + "tags": [ + "Engadget" + ] + } + }, + "/engadget/news": { + "get": { + "description": "Returns fresh Engadget technology news from the public homepage feed. Engadget articles are free to read.", + "operationId": "engadget-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -243609,8 +274478,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -243621,114 +274490,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo city from the dataset", + "summary": "Get Engadget top stories", "tags": [ - "Datasets" + "Engadget" ] } }, - "/datasets/numbeo-cities/search": { + "/engadget/sections": { "get": { - "consumes": [ + "description": "Returns the public Engadget category taxonomy (48 categories) accepted by the headlines endpoint.", + "operationId": "engadget-sections", + "produces": [ "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`.", - "operationId": "datasets-numbeo-cities-search", - "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", - "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" - }, + "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 Engadget sections", + "tags": [ + "Engadget" + ] + } + }, + "/eonline/article": { + "get": { + "description": "Returns public E! News article metadata, byline and body paragraphs from a canonical article URL.", + "operationId": "eonline-article", + "parameters": [ { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Canonical E! News article URL", "in": "query", - "name": "page_size", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.eonline.com/news/1436400/inside-taylor-swift-dakota-johnsons-friendship" } ], "produces": [ @@ -243738,7 +274543,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCitiesSearchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -243747,14 +274552,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" } @@ -243765,27 +274570,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Numbeo cities dataset", + "summary": "Get E! News article content", "tags": [ - "Datasets" + "E! News" ] } }, - "/datasets/numbeo-countries/items/{country}": { + "/eonline/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one composite Numbeo country record by country name from dataset id enum value `numbeo-countries`.", - "operationId": "datasets-numbeo-countries-item", + "description": "Returns an E! News writer's name and the articles listed on their author page, from a canonical author URL.", + "operationId": "eonline-author", "parameters": [ { - "description": "Country name as Numbeo spells it", - "in": "path", - "name": "country", + "description": "Canonical E! News author URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "Vietnam" + "x-example": "https://www.eonline.com/authors/natalie-finn" } ], "produces": [ @@ -243795,7 +274597,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCountryResponseDoc" + "$ref": "#/definitions/publicnews.eonlineAuthorResponseDoc" } }, "400": { @@ -243810,14 +274612,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" } @@ -243828,108 +274624,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo country from the dataset", + "summary": "Get an E! News author page", "tags": [ - "Datasets" + "E! News" ] } }, - "/datasets/numbeo-countries/search": { + "/eonline/headlines": { "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`.", - "operationId": "datasets-numbeo-countries-search", + "description": "Returns fresh headlines from one E! News section feed.", + "operationId": "eonline-headlines", "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": "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": "E! News section slug", "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" + "top_stories", + "tv", + "movies", + "music", + "celebrities", + "couples", + "royals", + "red_carpet", + "influencer", + "style", + "fashion", + "shop" ], "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": "section", + "required": true, + "type": "string", + "x-example": "top_stories" } ], "produces": [ @@ -243939,7 +274665,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCountriesSearchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -243948,14 +274674,46 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get E! News section headlines", + "tags": [ + "E! News" + ] + } + }, + "/eonline/news": { + "get": { + "description": "Returns fresh E! News (US edition) top stories from its public RSS feed.", + "operationId": "eonline-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" } @@ -243966,74 +274724,93 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Numbeo countries dataset", + "summary": "Get E! News top stories", "tags": [ - "Datasets" + "E! News" ] } }, - "/datasets/pitchbook-advisors/facets": { + "/eonline/sections": { + "get": { + "description": "Returns the E! News section inventory used by the headlines endpoint.", + "operationId": "eonline-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get E! News sections", + "tags": [ + "E! News" + ] + } + }, + "/espn/athlete": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the PitchBook advisors dataset. Facet enum: `service_type`, `hq_country`, `hq_state`, `run_id`.", - "operationId": "datasets-pitchbook-advisors-facets", + "description": "Returns one athlete's bio/overview (name, position, jersey, physicals, current team) from ESPN's credential-free public JSON. 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": "Facet enum: service_type, hq_country, hq_state, run_id", + "description": "Sport key", "enum": [ - "service_type", - "hq_country", - "hq_state", - "run_id" + "football", + "basketball", + "baseball", + "hockey", + "soccer" ], "in": "query", - "name": "facet", + "name": "sport", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "football" }, { - "description": "Minimum founding year", + "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": "min_year_founded", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Maximum founding year", + "description": "Numeric ESPN athlete (player) id", "in": "query", - "name": "max_year_founded", - "type": "integer" + "name": "athlete", + "required": true, + "type": "string", + "x-example": "3139477" } ], "produces": [ @@ -244043,7 +274820,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookAdvisorsFacetResponseDoc" + "$ref": "#/definitions/espn.athleteResponseDoc" } }, "400": { @@ -244052,14 +274829,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" } @@ -244070,26 +274853,67 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook advisors dataset", + "summary": "ESPN athlete", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-advisors/items/{id}": { + "/espn/game-summary": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled PitchBook advisor record by id from dataset id enum value `pitchbook-advisors`.", - "operationId": "datasets-pitchbook-advisors-item", + "description": "Returns one game's matchup, betting odds, and boxscore stat totals from ESPN's credential-free public JSON. 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": "PitchBook advisor id, e.g. 676215-64", - "in": "path", - "name": "id", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], + "in": "query", + "name": "sport", "required": true, - "type": "string" + "type": "string", + "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": [ @@ -244099,7 +274923,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookAdvisorResponseDoc" + "$ref": "#/definitions/espn.gameSummaryResponseDoc" } }, "400": { @@ -244120,8 +274944,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -244132,85 +274956,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook advisor from dataset", + "summary": "ESPN game summary", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-advisors/search": { + "/espn/news": { "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`.", - "operationId": "datasets-pitchbook-advisors-search", + "description": "Returns recent news articles (headline, description, link) for a league from ESPN's credential-free public JSON. 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": "Full-text query over name and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact service provider type filter (e.g. Commercial Bank, Investment Bank, Financing Advisory), 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" - }, - { - "description": "Sort enum: relevance, name_asc, year_founded_desc, recently_crawled_desc", + "description": "Sport key", "enum": [ - "relevance", - "name_asc", - "year_founded_desc", - "recently_crawled_desc" + "football", + "basketball", + "baseball", + "hockey", + "soccer" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" + "name": "sport", + "required": true, + "type": "string", + "x-example": "basketball" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "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": "page_size", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "nba" } ], "produces": [ @@ -244220,7 +275018,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookAdvisorsSearchResponseDoc" + "$ref": "#/definitions/espn.newsResponseDoc" } }, "400": { @@ -244229,14 +275027,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" } @@ -244247,101 +275051,44 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook advisors dataset", + "summary": "ESPN league news", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-companies/facets": { + "/espn/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the PitchBook companies dataset. Facet enum: `status`, `primary_industry`, `financing_status`, `ownership_status`, `hq_country`, `hq_state`, `run_id`.", - "operationId": "datasets-pitchbook-companies-facets", + "description": "Returns poll rankings (e.g. AP Top 25) for a college league from ESPN's credential-free public JSON. 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": "Facet enum: status, primary_industry, financing_status, ownership_status, hq_country, hq_state, run_id", + "description": "Sport key", "enum": [ - "status", - "primary_industry", - "financing_status", - "ownership_status", - "hq_country", - "hq_state", - "run_id" + "football", + "basketball" ], "in": "query", - "name": "facet", + "name": "sport", "required": true, - "type": "string" - }, - { - "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", - "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" + "type": "string", + "x-example": "football" }, { - "description": "Minimum number of investors", + "description": "College league key", + "enum": [ + "college-football", + "mens-college-basketball", + "womens-college-basketball" + ], "in": "query", - "name": "min_investor_count", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "college-football" } ], "produces": [ @@ -244351,7 +275098,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookCompaniesFacetResponseDoc" + "$ref": "#/definitions/espn.rankingsResponseDoc" } }, "400": { @@ -244360,14 +275107,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" } @@ -244378,26 +275131,86 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook companies dataset", + "summary": "ESPN poll rankings", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-companies/items/{id}": { + "/espn/scoreboard": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled PitchBook company record by id from dataset id enum value `pitchbook-companies`.", - "operationId": "datasets-pitchbook-companies-item", + "description": "Returns games (scores, schedule, status, and odds when available) for a sport and league from ESPN's credential-free public JSON. 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": "PitchBook company id, e.g. 752821-12", - "in": "path", - "name": "id", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], + "in": "query", + "name": "sport", "required": true, - "type": "string" + "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": "Date or range as YYYYMMDD, YYYYMMDD-YYYYMMDD, or YYYY; defaults to the current scoreboard", + "in": "query", + "name": "dates", + "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 } ], "produces": [ @@ -244407,7 +275220,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookCompanyResponseDoc" + "$ref": "#/definitions/espn.scoreboardResponseDoc" } }, "400": { @@ -244428,8 +275241,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -244440,110 +275253,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook company from dataset", + "summary": "ESPN scoreboard", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-companies/search": { + "/espn/standings": { "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`.", - "operationId": "datasets-pitchbook-companies-search", + "description": "Returns league standings grouped by conference/division from ESPN's credential-free public JSON. 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": "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": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], "in": "query", - "name": "min_investor_count", - "type": "integer" + "name": "sport", + "required": true, + "type": "string", + "x-example": "football" }, { - "description": "Sort enum: relevance, name_asc, year_founded_desc, investor_count_desc, recently_crawled_desc", + "description": "League key (must be valid for the sport)", "enum": [ - "relevance", - "name_asc", - "year_founded_desc", - "investor_count_desc", - "recently_crawled_desc" + "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", - "type": "string" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Page number, defaults to 1", + "description": "Four-digit season year; defaults to the current season", "in": "query", - "name": "page", - "type": "integer" + "name": "season", + "type": "integer", + "x-example": 2024 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Season type", + "enum": [ + 1, + 2, + 3 + ], "in": "query", - "name": "page_size", - "type": "integer" + "name": "seasontype", + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -244553,7 +275334,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookCompaniesSearchResponseDoc" + "$ref": "#/definitions/espn.standingsResponseDoc" } }, "400": { @@ -244562,14 +275343,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" } @@ -244580,67 +275367,67 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook companies dataset", + "summary": "ESPN standings", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-funds/facets": { + "/espn/team": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the PitchBook funds dataset. Facet enum: `fund_strategy`, `fund_status`, `run_id`.", - "operationId": "datasets-pitchbook-funds-facets", + "description": "Returns one team's detail (identity, colors, record, standing summary) from ESPN's credential-free public JSON. 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": "Facet enum: fund_strategy, fund_status, run_id", + "description": "Sport key", "enum": [ - "fund_strategy", - "fund_status", - "run_id" + "football", + "basketball", + "baseball", + "hockey", + "soccer" ], "in": "query", - "name": "facet", + "name": "sport", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "football" }, { - "description": "Minimum vintage year", + "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": "min_vintage_year", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Maximum vintage year", + "description": "Team id (numeric) or abbreviation", "in": "query", - "name": "max_vintage_year", - "type": "integer" + "name": "team", + "required": true, + "type": "string", + "x-example": "KC" } ], "produces": [ @@ -244650,7 +275437,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookFundsFacetResponseDoc" + "$ref": "#/definitions/espn.teamResponseDoc" } }, "400": { @@ -244659,14 +275446,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" } @@ -244677,26 +275470,67 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook funds dataset", + "summary": "ESPN team detail", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-funds/items/{id}": { + "/espn/team-roster": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled PitchBook fund record by id from dataset id enum value `pitchbook-funds`.", - "operationId": "datasets-pitchbook-funds-item", + "description": "Returns a team's roster (players with position, jersey, age, and experience) plus head coach from ESPN's credential-free public JSON. 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": "PitchBook fund id, e.g. 19719-91F", - "in": "path", - "name": "id", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], + "in": "query", + "name": "sport", "required": true, - "type": "string" + "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", + "in": "query", + "name": "team", + "required": true, + "type": "string", + "x-example": "KC" } ], "produces": [ @@ -244706,7 +275540,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookFundResponseDoc" + "$ref": "#/definitions/espn.rosterResponseDoc" } }, "400": { @@ -244727,8 +275561,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -244739,79 +275573,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook fund from dataset", + "summary": "ESPN team roster", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-funds/search": { + "/espn/teams": { "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`.", - "operationId": "datasets-pitchbook-funds-search", + "description": "Returns the full team list for a sport and league from ESPN's credential-free public JSON. 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": "Full-text query over name and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact fund strategy filter (e.g. Early Stage VC, Buyout), max 128 characters", - "in": "query", - "name": "fund_strategy", - "type": "string" - }, - { - "description": "Exact fund status filter (e.g. Closed, Raising), 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" - }, - { - "description": "Sort enum: relevance, name_asc, vintage_desc, recently_crawled_desc", + "description": "Sport key", "enum": [ - "relevance", - "name_asc", - "vintage_desc", - "recently_crawled_desc" + "football", + "basketball", + "baseball", + "hockey", + "soccer" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" + "name": "sport", + "required": true, + "type": "string", + "x-example": "basketball" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "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": "page_size", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "nba" } ], "produces": [ @@ -244821,7 +275635,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookFundsSearchResponseDoc" + "$ref": "#/definitions/espn.teamsResponseDoc" } }, "400": { @@ -244830,14 +275644,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" } @@ -244848,81 +275668,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook funds dataset", + "summary": "ESPN team list", "tags": [ - "Datasets" + "ESPN" ] } }, - "/datasets/pitchbook-investors/facets": { + "/etsy/listing/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the PitchBook investors dataset. Facet enum: `status`, `investor_type`, `hq_country`, `hq_state`, `run_id`.", - "operationId": "datasets-pitchbook-investors-facets", + "description": "Returns Etsy listing detail: title, price, images, materials, tags, and shop.", + "operationId": "etsy-listing", "parameters": [ { - "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": "facet", + "description": "Numeric Etsy listing id", + "in": "path", + "name": "id", "required": true, - "type": "string" - }, - { - "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 investor type filter, max 128 characters", - "in": "query", - "name": "investor_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 current portfolio size", - "in": "query", - "name": "min_portfolio_count", - "type": "integer" - }, - { - "description": "Minimum number of exits", - "in": "query", - "name": "min_exits_count", - "type": "integer" + "type": "string", + "x-example": "1044347578" } ], "produces": [ @@ -244932,7 +275698,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookInvestorsFacetResponseDoc" + "$ref": "#/definitions/etsy.listingResponseDoc" } }, "400": { @@ -244941,6 +275707,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -244952,6 +275724,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -244959,26 +275737,48 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook investors dataset", + "summary": "Get Etsy listing detail", "tags": [ - "Datasets" + "Etsy" ] } }, - "/datasets/pitchbook-investors/items/{id}": { + "/etsy/listing/{id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled PitchBook investor record by id from dataset id enum value `pitchbook-investors`.", - "operationId": "datasets-pitchbook-investors-item", + "description": "Returns buyer reviews for an Etsy listing.", + "operationId": "etsy-listing-reviews", "parameters": [ { - "description": "PitchBook investor id, e.g. 294471-37", + "description": "Numeric Etsy listing id", "in": "path", "name": "id", "required": true, - "type": "string" + "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" } ], "produces": [ @@ -244988,7 +275788,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookInvestorResponseDoc" + "$ref": "#/definitions/etsy.listingReviewsResponseDoc" } }, "400": { @@ -245014,6 +275814,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -245021,91 +275827,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook investor from dataset", + "summary": "Get Etsy listing reviews", "tags": [ - "Datasets" + "Etsy" ] } }, - "/datasets/pitchbook-investors/search": { + "/etsy/search": { "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`.", - "operationId": "datasets-pitchbook-investors-search", + "description": "Returns Etsy product search results across shops for a keyword query.", + "operationId": "etsy-search", "parameters": [ { - "description": "Full-text query over name and description, max 256 characters", + "description": "Search keywords", "in": "query", "name": "q", - "type": "string" - }, - { - "description": "Exact status filter (e.g. Active, Inactive), max 128 characters", - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Exact investor type filter (e.g. Venture Capital, Private Equity, Angel), max 128 characters", - "in": "query", - "name": "investor_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 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": [ - "relevance", - "name_asc", - "portfolio_count_desc", - "recently_crawled_desc" - ], - "in": "query", - "name": "sort", - "type": "string" + "required": true, + "type": "string", + "x-example": "handmade mug" }, { - "description": "Page number, defaults to 1", + "description": "0-based result offset", "in": "query", - "name": "page", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Page size (default 36, max 100)", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 36 } ], "produces": [ @@ -245115,7 +275871,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookInvestorsSearchResponseDoc" + "$ref": "#/definitions/etsy.searchResponseDoc" } }, "400": { @@ -245135,6 +275891,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -245142,74 +275904,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook investors dataset", + "summary": "Search Etsy listings", "tags": [ - "Datasets" + "Etsy" ] } }, - "/datasets/pitchbook-limited-partners/facets": { + "/etsy/shop/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the PitchBook limited partners dataset. Facet enum: `institution_type`, `hq_country`, `hq_state`, `run_id`.", - "operationId": "datasets-pitchbook-limited-partners-facets", + "description": "Returns Etsy shops matching a keyword.", + "operationId": "etsy-shop-search", "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" - }, - { - "description": "Full-text query over name and description, max 256 characters", + "description": "Shop search keyword", "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" + "required": true, + "type": "string", + "x-example": "ceramic" }, { - "description": "Maximum founding year", + "description": "Max shops to return (default 10)", "in": "query", - "name": "max_year_founded", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -245219,7 +275941,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookLimitedPartnersFacetResponseDoc" + "$ref": "#/definitions/etsy.shopSearchResponseDoc" } }, "400": { @@ -245239,6 +275961,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -245246,26 +275974,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook limited partners dataset", + "summary": "Search Etsy shops", "tags": [ - "Datasets" + "Etsy" ] } }, - "/datasets/pitchbook-limited-partners/items/{id}": { + "/etsy/shop/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled PitchBook limited partner record by id from dataset id enum value `pitchbook-limited-partners`.", - "operationId": "datasets-pitchbook-limited-partners-item", + "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": "PitchBook limited partner id, e.g. 864326-44", + "description": "Numeric Etsy shop id or shop name", "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "gaguatelier" } ], "produces": [ @@ -245275,7 +276004,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookLimitedPartnerResponseDoc" + "$ref": "#/definitions/etsy.shopResponseDoc" } }, "400": { @@ -245301,6 +276030,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -245308,85 +276043,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook limited partner from dataset", + "summary": "Get Etsy shop profile", "tags": [ - "Datasets" + "Etsy" ] } }, - "/datasets/pitchbook-limited-partners/search": { + "/etsy/shop/{id}/listings": { "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`.", - "operationId": "datasets-pitchbook-limited-partners-search", + "description": "Returns a shop's listing catalog, optionally filtered by keyword. Accepts a numeric shop id or a shop name.", + "operationId": "etsy-shop-listings", "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": "Numeric Etsy shop id or shop name", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "gaguatelier" }, { - "description": "Sort enum: relevance, name_asc, year_founded_desc, recently_crawled_desc", - "enum": [ - "relevance", - "name_asc", - "year_founded_desc", - "recently_crawled_desc" - ], + "description": "Keyword filter within the shop's own catalog", "in": "query", - "name": "sort", - "type": "string" + "name": "q", + "type": "string", + "x-example": "mug" }, { - "description": "Page number, defaults to 1", + "description": "0-based listing offset", "in": "query", - "name": "page", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Page size (default 24)", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -245396,7 +276094,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookLimitedPartnersSearchResponseDoc" + "$ref": "#/definitions/etsy.shopListingsResponseDoc" } }, "400": { @@ -245405,6 +276103,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -245416,6 +276120,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -245423,202 +276133,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook limited partners dataset", + "summary": "Get an Etsy shop's listings", "tags": [ - "Datasets" + "Etsy" ] } }, - "/datasets/playstation-games/facets": { + "/etsy/shop/{id}/reviews": { "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", - "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", - "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" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string" - }, - { - "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" - }, + "application/json" + ], + "description": "Returns buyer reviews for an Etsy shop. Accepts a numeric shop id or a shop name.", + "operationId": "etsy-shop-reviews", + "parameters": [ { - "description": "Minimum discount percent, 0 through 100", - "in": "query", - "name": "min_discount_pct", - "type": "integer" + "description": "Numeric Etsy shop id or shop name", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "gaguatelier" }, { - "description": "Minimum release year", + "description": "0-based review offset", "in": "query", - "name": "min_release_year", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 }, { - "description": "Maximum release year", + "description": "Page size (default 14)", "in": "query", - "name": "max_release_year", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 14 } ], "produces": [ @@ -245628,7 +276177,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.playstationGamesFacetResponseDoc" + "$ref": "#/definitions/etsy.shopReviewsResponseDoc" } }, "400": { @@ -245637,6 +276186,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -245648,6 +276203,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -245655,26 +276216,24 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PlayStation games dataset", + "summary": "Get Etsy shop reviews", "tags": [ - "Datasets" + "Etsy" ] } }, - "/datasets/playstation-games/items/{product_id}": { + "/euronews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one crawled PlayStation Store record by product_id from dataset id enum value `playstation-games`.", - "operationId": "datasets-playstation-games-item", + "description": "Returns public Euronews article metadata and body paragraphs from a canonical English-edition article URL.", + "operationId": "euronews-article", "parameters": [ { - "description": "PlayStation product id (e.g. UP0001-PPSA01491_00-GAME000000000000)", - "in": "path", - "name": "product_id", + "description": "Canonical Euronews article URL", + "in": "query", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.euronews.com/2026/09/24/example-article-slug" } ], "produces": [ @@ -245684,7 +276243,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.playstationGameResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -245699,14 +276258,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" } @@ -245717,206 +276270,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PlayStation game from dataset", + "summary": "Get Euronews article content", "tags": [ - "Datasets" + "Euronews" ] } }, - "/datasets/playstation-games/search": { + "/euronews/author": { "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`.", - "operationId": "datasets-playstation-games-search", + "description": "Returns a Euronews author's byline metadata and recent articles from a canonical profile URL.", + "operationId": "euronews-author", "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", - "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", + "description": "Canonical Euronews author profile URL", "in": "query", - "name": "page_size", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.euronews.com/profiles/2748" } ], "produces": [ @@ -245926,7 +276297,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.playstationGamesSearchResponseDoc" + "$ref": "#/definitions/publicnews.euronewsAuthorResponseDoc" } }, "400": { @@ -245935,14 +276306,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" } @@ -245953,54 +276324,68 @@ "ApiKeyAuth": [] } ], - "summary": "Search PlayStation games dataset", + "summary": "Get a Euronews author profile", "tags": [ - "Datasets" + "Euronews" ] } }, - "/datasets/producthunt-makers/facets": { + "/euronews/headlines": { "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 fresh headlines from one public Euronews English-edition section.", + "operationId": "euronews-headlines", "parameters": [ { - "description": "Facet enum: topic, product_count_band", + "description": "Euronews section slug", "enum": [ - "topic", - "product_count_band" + "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" ], "in": "query", - "name": "facet", + "name": "section", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -246010,7 +276395,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntMakersFacetResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -246019,14 +276404,46 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Euronews section headlines", + "tags": [ + "Euronews" + ] + } + }, + "/euronews/news": { + "get": { + "description": "Returns fresh Euronews English-edition top stories from its public RSS feed.", + "operationId": "euronews-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" } @@ -246037,26 +276454,59 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Product Hunt makers dataset", + "summary": "Get Euronews top stories", "tags": [ - "Datasets" + "Euronews" ] } }, - "/datasets/producthunt-makers/items/{username}": { + "/euronews/sections": { + "get": { + "description": "Returns the public Euronews English-edition section inventory used by the headlines endpoint.", + "operationId": "euronews-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Euronews sections", + "tags": [ + "Euronews" + ] + } + }, + "/everlane/collections": { "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 normalized 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": "Product Hunt maker username, e.g. rrhoover", - "in": "path", - "name": "username", - "required": true, - "type": "string" + "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": [ @@ -246066,7 +276516,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntMakerResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -246075,20 +276525,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" } @@ -246099,67 +276543,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Product Hunt maker from the dataset", + "summary": "List Everlane collections", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/producthunt-makers/search": { + "/everlane/collections/{handle}/products": { "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`.", - "operationId": "datasets-producthunt-makers-search", + "description": "Returns normalized 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": "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, 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": "Collection handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "collection-handle" }, { - "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 products, defaults to 50 and supports up to 250", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -246169,7 +276587,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntMakersSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -246178,14 +276596,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" } @@ -246196,92 +276620,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Product Hunt makers dataset", + "summary": "List Everlane collection products", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/producthunt-products/facets": { + "/everlane/pages": { "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 normalized static pages from Everlane (https://www.everlane.com). The storefront URL is fixed server-side.", + "operationId": "everlane-pages", "parameters": [ { - "description": "Facet enum: topic, launch_year, pricing_type, product_state", - "enum": [ - "topic", - "launch_year", - "pricing_type", - "product_state" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string" - }, - { - "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", - "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", + "description": "1-based page, defaults to 1", "in": "query", - "name": "has_website", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "true keeps only products still online, false only retired products", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "is_online", - "type": "boolean" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -246291,7 +276656,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntProductsFacetResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -246306,8 +276671,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -246318,26 +276683,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Product Hunt products dataset", + "summary": "List Everlane static pages", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/producthunt-products/items/{slug}": { + "/everlane/pages/{handle}": { "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": "Returns normalized static page detail for one Everlane (https://www.everlane.com) page handle. The storefront URL is fixed server-side.", + "operationId": "everlane-page", "parameters": [ { - "description": "Product Hunt product slug, e.g. chatgpt", + "description": "Page handle", "in": "path", - "name": "slug", + "name": "handle", "required": true, - "type": "string" + "type": "string", + "x-example": "page-handle" } ], "produces": [ @@ -246347,7 +276713,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntProductResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -246368,8 +276734,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -246380,105 +276746,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Product Hunt product from the dataset", + "summary": "Get a Everlane static page", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/producthunt-products/search": { + "/everlane/products": { "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 as hydration runs. Sort enum: `relevance`, `votes_desc`, `launched_desc`, `launched_asc`, `rating_desc`, `best_rank_asc`.", - "operationId": "datasets-producthunt-products-search", + "description": "Returns normalized 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": "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", + "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 products, defaults to 50 and supports up to 250", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -246488,7 +276782,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntProductsSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -246503,8 +276797,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -246515,71 +276809,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Product Hunt products dataset", + "summary": "List Everlane products", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/producthunt-trends/facets": { + "/everlane/products/{handle}": { "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 normalized 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": "Facet enum: topic, launch_year", - "enum": [ - "topic", - "launch_year" - ], - "in": "query", - "name": "facet", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "product-handle" } ], "produces": [ @@ -246589,7 +276839,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntTrendsFacetResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -246598,14 +276848,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" } @@ -246616,84 +276872,45 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Product Hunt trends dataset", + "summary": "Get a Everlane product", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/producthunt-trends/search": { + "/everlane/products/{handle}/recommendations": { "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`.", - "operationId": "datasets-producthunt-trends-search", + "description": "Returns normalized recommended products for one Everlane (https://www.everlane.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "everlane-product-recommendations", "parameters": [ { - "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": "Product handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "product-handle" }, { - "description": "Minimum launches per cell; raises the small-cell suppression floor (never lowered below the built-in minimum)", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "min_launches", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Sort enum: period_desc, period_asc, launch_count_desc, sum_votes_desc", + "description": "Recommendation intent. Allowed values: related, complementary", "enum": [ - "period_desc", - "period_asc", - "launch_count_desc", - "sum_votes_desc" + "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": [ @@ -246703,7 +276920,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntTrendsSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -246712,14 +276929,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" } @@ -246730,59 +276953,113 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Product Hunt trends dataset", + "summary": "List Everlane product recommendations", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/reddit-trending/search": { + "/everlane/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Searches daily snapshots of each tracked subreddit's hot-feed post order, stored in a search index (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 — the underlying credential-free scraper does not expose vote counts, so `rank` reflects Reddit's own hot-feed order rather than a locally computed score.", - "operationId": "datasets-reddit-trending-search", + "description": "Returns products, collections, and query suggestions from Everlane's (https://www.everlane.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "everlane-search-suggest", "parameters": [ { - "description": "Full-text query over the post title, max 256 characters", + "description": "Search query", "in": "query", "name": "q", - "type": "string" + "required": true, + "type": "string", + "x-example": "wool" }, { - "description": "Exact subreddit-name filter, max 128 characters", + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", "in": "query", - "name": "subreddit", - "type": "string" + "name": "types", + "type": "string", + "x-example": "product,collection,query" }, { - "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", + "description": "Maximum results per type, defaults to 10 and supports up to 20", "in": "query", - "name": "date", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + } }, - { - "description": "Sort enum: rank, date_desc", - "enum": [ - "rank", - "date_desc" - ], - "in": "query", - "name": "sort", - "type": "string" + "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 Everlane search suggestions", + "tags": [ + "Everlane" + ] + } + }, + "/everlane/sitemap/urls": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns capped URL entries from Everlane's (https://www.everlane.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "everlane-sitemap-urls", + "parameters": [ { - "description": "Page number, defaults to 1", + "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": "page", - "type": "integer" + "name": "type", + "type": "string", + "x-example": "products" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -246792,7 +277069,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.redditTrendingSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -246807,8 +277084,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -246819,98 +277096,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search the reddit-trending dataset", + "summary": "List Everlane sitemap URLs", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/sec-companies/facets": { + "/everlane/sitemaps": { "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", - "parameters": [ - { - "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": "facet", - "required": true, - "type": "string" - }, - { - "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" - } - ], + "description": "Returns child sitemap URLs from Everlane's (https://www.everlane.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "everlane-sitemaps", "produces": [ "application/json" ], @@ -246918,7 +277116,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesFacetResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -246933,8 +277131,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -246945,67 +277143,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the SEC companies dataset", + "summary": "List Everlane sitemaps", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/sec-companies/financials/{cik}": { + "/everlane/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns a company's normalized 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 normalized 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": "SEC CIK, numeric or zero-padded", - "in": "path", - "name": "cik", - "required": true, - "type": "string" - }, - { - "description": "Statement enum: income, balance, cash_flow. Omit to return all three.", - "enum": [ - "income", - "balance", - "cash_flow" - ], - "in": "query", - "name": "statement", - "type": "string" - }, - { - "description": "Period-type enum: annual, quarterly. Omit to return both.", - "enum": [ - "annual", - "quarterly" - ], - "in": "query", - "name": "period", - "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", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Returns normalized storefront metadata for Everlane (https://www.everlane.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "everlane-store", "produces": [ "application/json" ], @@ -247013,7 +277163,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesFinancialsResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -247028,8 +277178,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -247040,50 +277190,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SEC company's financial-statement history", + "summary": "Get Everlane store metadata", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/sec-companies/insider/{cik}": { + "/ew/article": { "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 public Entertainment Weekly article metadata and body paragraphs from a canonical article URL.", + "operationId": "ew-article", "parameters": [ { - "description": "SEC CIK, numeric or zero-padded", - "in": "path", - "name": "cik", - "required": true, - "type": "string" - }, - { - "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": "Canonical Entertainment Weekly article URL", "in": "query", - "name": "limit", - "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": [ @@ -247093,7 +277217,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesInsiderResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -247102,14 +277226,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" } @@ -247120,26 +277244,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SEC company's insider-transaction history", + "summary": "Get Entertainment Weekly article content", "tags": [ - "Datasets" + "Entertainment Weekly" ] } }, - "/datasets/sec-companies/items/{cik}": { + "/ew/author": { "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 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": "SEC CIK, numeric or zero-padded, e.g. 320193 or 0000320193", - "in": "path", - "name": "cik", + "description": "Canonical ew.com/author/ or ew.com/- profile URL", + "in": "query", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://ew.com/author/dalton-ross/" } ], "produces": [ @@ -247149,7 +277271,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesItemResponseDoc" + "$ref": "#/definitions/publicnews.ewAuthorResponseDoc" } }, "400": { @@ -247164,14 +277286,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" } @@ -247182,141 +277298,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a company from the SEC companies dataset", + "summary": "Get an Entertainment Weekly author profile", "tags": [ - "Datasets" + "Entertainment Weekly" ] } }, - "/datasets/sec-companies/search": { + "/ew/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches SEC-reporting companies stored in a search index — normalized 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.", - "operationId": "datasets-sec-companies-search", + "description": "Returns fresh headlines from one public Entertainment Weekly section.", + "operationId": "ew-headlines", "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", + "description": "Entertainment Weekly section slug", "enum": [ - "relevance", - "name_asc", - "revenue_desc", - "net_income_desc", - "filing_recent_desc", - "insider_activity_desc" + "tv", + "movies", + "music", + "what-to-watch", + "binge", + "celebrity", + "awardist", + "books", + "theater" ], "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": "section", + "required": true, + "type": "string", + "x-example": "tv" } ], "produces": [ @@ -247326,7 +277336,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesSearchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -247335,14 +277345,40 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Entertainment Weekly section headlines", + "tags": [ + "Entertainment Weekly" + ] + } + }, + "/ew/news": { + "get": { + "description": "Returns fresh Entertainment Weekly stories from its homepage.", + "operationId": "ew-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" } @@ -247353,48 +277389,54 @@ "ApiKeyAuth": [] } ], - "summary": "Search the SEC companies dataset", + "summary": "Get Entertainment Weekly top stories", "tags": [ - "Datasets" + "Entertainment Weekly" ] } }, - "/datasets/sec-institutional-positions/facets": { + "/ew/sections": { "get": { + "description": "Returns the complete public Entertainment Weekly primary-navigation section inventory accepted by /ew/headlines.", + "operationId": "ew-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Entertainment Weekly sections", + "tags": [ + "Entertainment Weekly" + ] + } + }, + "/expedia/activities/search": { + "post": { "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 normalized Expedia Things To Do (activities/tours) search results for a free-text destination and date range.", + "operationId": "expedia-activities-search", "parameters": [ { - "description": "Facet enum: manager, issuer", - "enum": [ - "manager", - "issuer" - ], - "in": "query", - "name": "facet", + "description": "Activity search payload", + "in": "body", + "name": "option", "required": true, - "type": "string" - }, - { - "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" + "schema": { + "$ref": "#/definitions/expedia.ActivitySearchOption" + } } ], "produces": [ @@ -247404,7 +277446,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secInstitutionalPositionsFacetResponseDoc" + "$ref": "#/definitions/expedia.expediaActivitySearchResponseDoc" } }, "400": { @@ -247424,6 +277466,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -247431,60 +277479,28 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the SEC institutional positions dataset", + "summary": "Search Expedia activities", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/sec-institutional-positions/search": { - "get": { + "/expedia/flights/search": { + "post": { "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`.", - "operationId": "datasets-sec-institutional-positions-search", + "description": "Returns normalized Expedia Flights search results (departing-leg offers) for an origin/destination IATA pair and date range.", + "operationId": "expedia-flights-search", "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", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Flights search payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/expedia.FlightsSearchOption" + } } ], "produces": [ @@ -247494,7 +277510,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secInstitutionalPositionsSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaFlightsSearchResponseDoc" } }, "400": { @@ -247514,6 +277530,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -247521,73 +277543,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search the SEC institutional positions dataset", + "summary": "Search Expedia flights", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/starbucks-stores/facets": { - "get": { + "/expedia/locations/search": { + "post": { "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 normalized destination/property typeahead suggestions (cities, airports, neighborhoods, hotels) for a free-text term.", + "operationId": "expedia-locations-search", "parameters": [ { - "description": "Facet enum: country, state, market, amenities, ownership_type_code", - "enum": [ - "country", - "state", - "market", - "amenities", - "ownership_type_code" - ], - "in": "query", - "name": "facet", + "description": "Location search payload", + "in": "body", + "name": "option", "required": true, - "type": "string" - }, - { - "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" - }, - { - "description": "State/region code filter", - "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" + "schema": { + "$ref": "#/definitions/expedia.LocationSearchOption" + } } ], "produces": [ @@ -247597,7 +277574,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.starbucksStoresFacetResponseDoc" + "$ref": "#/definitions/expedia.expediaLocationSearchResponseDoc" } }, "400": { @@ -247617,6 +277594,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -247624,26 +277607,28 @@ "ApiKeyAuth": [] } ], - "summary": "Facet stored Starbucks stores", + "summary": "Search Expedia destinations", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/starbucks-stores/items/{store_number}": { - "get": { + "/expedia/properties/detail": { + "post": { "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 a hotel's detail summary (name, star rating, address/coordinates, top amenities) for a known property id.", + "operationId": "expedia-properties-detail", "parameters": [ { - "description": "Starbucks store number, e.g. 101-54", - "in": "path", - "name": "store_number", + "description": "Property detail payload", + "in": "body", + "name": "option", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/expedia.PropertyDetailOption" + } } ], "produces": [ @@ -247653,7 +277638,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.starbucksStoreResponseDoc" + "$ref": "#/definitions/expedia.expediaPropertyDetailResponseDoc" } }, "400": { @@ -247679,6 +277664,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -247686,64 +277677,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get a stored Starbucks store", + "summary": "Expedia Stays property detail", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/starbucks-stores/nearby": { - "get": { + "/expedia/properties/filters": { + "post": { "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.", - "operationId": "datasets-starbucks-stores-nearby", + "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": "Center latitude, from -90 through 90", - "in": "query", - "name": "lat", - "required": true, - "type": "number" - }, - { - "description": "Center longitude, from -180 through 180", - "in": "query", - "name": "lon", - "required": true, - "type": "number" - }, - { - "description": "Search radius in meters, 1 through 50000", - "in": "query", - "name": "radius_m", + "description": "Property filters payload", + "in": "body", + "name": "option", "required": true, - "type": "integer" - }, - { - "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" + "schema": { + "$ref": "#/definitions/expedia.PropertyFiltersOption" + } } ], "produces": [ @@ -247753,7 +277708,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.starbucksStoresSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaPropertyFiltersResponseDoc" } }, "400": { @@ -247762,6 +277717,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -247773,6 +277734,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -247780,99 +277747,28 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby stored Starbucks stores", + "summary": "Expedia search filters", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/starbucks-stores/search": { - "get": { + "/expedia/properties/reviews": { + "post": { "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).", - "operationId": "datasets-starbucks-stores-search", + "description": "Returns a hotel's overall rating and highlighted/recent guest reviews (reviewer, date, rating, message) for a known property id.", + "operationId": "expedia-properties-reviews", "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", - "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" + "description": "Property reviews payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/expedia.PropertyReviewsOption" + } } ], "produces": [ @@ -247882,7 +277778,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.starbucksStoresSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaPropertyReviewsResponseDoc" } }, "400": { @@ -247891,6 +277787,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -247902,6 +277804,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -247909,48 +277817,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Starbucks store directory", + "summary": "Expedia Stays property guest reviews", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/steam-achievements/search": { - "get": { + "/expedia/properties/search": { + "post": { "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`.", - "operationId": "datasets-steam-achievements-search", + "description": "Returns normalized 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": "Exact Steam app id filter", - "in": "query", - "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" + "description": "Property search payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/expedia.PropertySearchOption" + } } ], "produces": [ @@ -247960,7 +277848,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamAchievementsSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaPropertySearchResponseDoc" } }, "400": { @@ -247969,6 +277857,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -247980,6 +277874,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -247987,76 +277887,85 @@ "ApiKeyAuth": [] } ], - "summary": "Search steam-achievements dataset", + "summary": "Search Expedia Stays properties", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/steam-charts/search": { + "/expresstribune/article": { "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`.", - "operationId": "datasets-steam-charts-search", + "description": "Returns public story metadata and body paragraphs from a canonical tribune.com.pk/story// URL.", + "operationId": "expresstribune-article", "parameters": [ { - "description": "Full-text query over the game name, max 256 characters", - "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": "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", + "description": "Canonical Express Tribune story URL", "in": "query", - "name": "app_id", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://tribune.com.pk/story/2632091/somali-pirates-kill-three-pakistanis-during-rescue-operation" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", - "in": "query", - "name": "date", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Sort enum: rank, rank_desc, date_desc", - "enum": [ - "rank", - "rank_desc", - "date_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", + "ApiKeyAuth": [] + } + ], + "summary": "Get The Express Tribune article content", + "tags": [ + "The Express Tribune" + ] + } + }, + "/expresstribune/author": { + "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", + "parameters": [ + { + "description": "Canonical author archive URL", "in": "query", - "name": "page", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://tribune.com.pk/author/7803/web-desk-2" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "1-based page number", "in": "query", - "name": "page_size", + "maximum": 1000, + "minimum": 1, + "name": "page", "type": "integer" } ], @@ -248067,7 +277976,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamChartsSearchResponseDoc" + "$ref": "#/definitions/publicnews.expresstribuneAuthorResponseDoc" } }, "400": { @@ -248076,14 +277985,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" } @@ -248094,221 +278003,59 @@ "ApiKeyAuth": [] } ], - "summary": "Search the steam-charts dataset", + "summary": "Get an Express Tribune author's public archive", "tags": [ - "Datasets" + "The Express Tribune" ] } }, - "/datasets/steam-games/facets": { + "/expresstribune/headlines": { "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 headlines from one public RSS section. Some directory feeds are historical or infrequently updated; their publisher timestamps are preserved.", + "operationId": "expresstribune-headlines", "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", + "description": "The Express Tribune section slug", "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" + "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": "facet", + "name": "section", "required": true, - "type": "string" - }, - { - "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", - "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" + "type": "string", + "x-example": "home" } ], "produces": [ @@ -248318,7 +278065,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamGamesFacetResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -248327,14 +278074,40 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "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/publicnews.newsResponseDoc" + } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -248345,26 +278118,54 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Steam games dataset", + "summary": "Get The Express Tribune top stories", "tags": [ - "Datasets" + "The Express Tribune" ] } }, - "/datasets/steam-games/items/{appid}": { + "/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": "Returns one enriched Steam catalog record by appid from dataset id enum value `steam-games`.", - "operationId": "datasets-steam-games-item", + "description": "Scrapes a public URL into clean Markdown, then returns data that strictly conforms to the supplied bounded JSON Schema.", + "operationId": "extract", "parameters": [ { - "description": "Steam app id", - "in": "path", - "name": "appid", + "description": "Extraction options", + "in": "body", + "name": "extractOption", "required": true, - "type": "integer" + "schema": { + "$ref": "#/definitions/extract.Option" + } } ], "produces": [ @@ -248374,29 +278175,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamGameResponseDoc" + "$ref": "#/definitions/extract.responseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "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" } @@ -248407,225 +278202,114 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Steam game from the dataset", + "summary": "Extract schema-conforming JSON from a URL", "tags": [ - "Datasets" + "Web" ] } }, - "/datasets/steam-games/search": { + "/facebook/marketplace/search": { "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`.", - "operationId": "datasets-steam-games-search", + "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": "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", + "description": "Facebook Marketplace location vanity slug", "in": "query", - "name": "developer", - "type": "string" + "name": "location", + "required": true, + "type": "string", + "x-example": "austin" }, { - "description": "Exact publisher filter, max 128 characters", + "description": "Free-text search terms; omit (with category) for the location's browse feed", "in": "query", - "name": "publisher", - "type": "string" + "name": "query", + "type": "string", + "x-example": "bike" }, { - "description": "Exact genre filter (e.g. Action, Indie), max 128 characters", + "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": "genre", - "type": "string" + "name": "category", + "type": "string", + "x-example": "vehicles" }, { - "description": "Exact store category filter (e.g. Single-player), max 128 characters", + "description": "Minimum price in whole currency units; requires query or category", "in": "query", - "name": "category", - "type": "string" + "name": "min_price", + "type": "integer", + "x-example": 20 }, { - "description": "Exact community-tag filter (e.g. Roguelike, Metroidvania, Cozy), max 128 characters", + "description": "Maximum price in whole currency units; requires query or category", "in": "query", - "name": "tag", - "type": "string" + "name": "max_price", + "type": "integer", + "x-example": 500 }, { - "description": "Price-tier enum: free, under5, 5to15, 15to30, 30to60, over60", + "description": "Result order; requires query or category", "enum": [ - "free", - "under5", - "5to15", - "15to30", - "30to60", - "over60" + "best_match", + "distance_ascend", + "creation_time_descend", + "price_ascend", + "price_descend" ], "in": "query", - "name": "price_tier", - "type": "string" + "name": "sort_by", + "type": "string", + "x-example": "price_ascend" }, { - "description": "Review-tier enum: overwhelmingly_positive, very_positive, positive, mostly_positive, mixed, mostly_negative, negative, very_negative, overwhelmingly_negative, insufficient", + "description": "Restrict to listings posted within this many days; requires query or category", "enum": [ - "overwhelmingly_positive", - "very_positive", - "positive", - "mostly_positive", - "mixed", - "mostly_negative", - "negative", - "very_negative", - "overwhelmingly_negative", - "insufficient" + 1, + 7, + 30 ], "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" + "name": "days_since_listed", + "type": "integer", + "x-example": 7 }, { - "description": "Sort enum: relevance, owners_desc, reviews_desc, review_score_desc, ccu_desc, metacritic_desc, price_asc, price_desc, release_desc, release_asc", + "description": "Comma-separated listing conditions; requires query or category", "enum": [ - "relevance", - "owners_desc", - "reviews_desc", - "review_score_desc", - "ccu_desc", - "metacritic_desc", - "price_asc", - "price_desc", - "release_desc", - "release_asc" + "new", + "used_like_new", + "used_good", + "used_fair" ], "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": "condition", + "type": "string", + "x-example": "new,used_like_new" } ], "produces": [ @@ -248635,23 +278319,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamGamesSearchResponseDoc" + "$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" } @@ -248662,53 +278346,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Steam games dataset", + "summary": "Search Facebook Marketplace", "tags": [ - "Datasets" + "Facebook" ] } }, - "/datasets/steam-news/search": { + "/facebook/{page}": { "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`.", - "operationId": "datasets-steam-news-search", + "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": "Full-text query over the news title + contents, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact Steam app id filter", - "in": "query", - "name": "app_id", - "type": "string" - }, - { - "description": "Sort enum: date_desc, date_asc", - "enum": [ - "date_desc", - "date_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", + "description": "Facebook Page reference: vanity name, handle, profile.php id, or full Facebook URL", + "in": "path", "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" + "required": true, + "type": "string", + "x-example": "nike" } ], "produces": [ @@ -248718,23 +278376,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamNewsSearchResponseDoc" + "$ref": "#/definitions/facebook.pageResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Bad request — missing or invalid page reference", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "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" } @@ -248745,56 +278403,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search the steam-news dataset", + "summary": "Get Facebook page details", "tags": [ - "Datasets" + "Facebook" ] } }, - "/datasets/steam-playercounts/search": { + "/fanatics/categories": { "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`.", - "operationId": "datasets-steam-playercounts-search", - "parameters": [ - { - "description": "Exact Steam app id filter", - "in": "query", - "name": "app_id", - "type": "string" - }, - { - "description": "Snapshot date filter yyyy-MM-dd", - "in": "query", - "name": "date", - "type": "string" - }, - { - "description": "Sort enum: date_desc, date_asc, players_desc", - "enum": [ - "date_desc", - "date_asc", - "players_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" ], @@ -248802,23 +278423,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamPlayerCountsSearchResponseDoc" - } - }, - "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" } @@ -248829,56 +278444,48 @@ "ApiKeyAuth": [] } ], - "summary": "Search steam-playercounts dataset", + "summary": "Get Fanatics' league and team navigation tree", "tags": [ - "Datasets" + "Fanatics" ] } }, - "/datasets/steam-prices/search": { + "/fanatics/category": { "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`.", - "operationId": "datasets-steam-prices-search", + "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": "Exact Steam app id filter", - "in": "query", - "name": "app_id", - "type": "string" - }, - { - "description": "Snapshot date filter yyyy-MM-dd", + "description": "A fanatics.com league or team category URL, exactly as returned by a fanatics_categories result's url field.", "in": "query", - "name": "date", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "/nfl/indianapolis-colts/o-2483+t-03378189+z-90650-4056854214" }, { - "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": "1-based result page. Defaults to 1.", "in": "query", - "name": "sort", - "type": "string" + "name": "page_number", + "type": "integer", + "x-example": 1 }, { - "description": "Page number, defaults to 1", + "description": "Results per page. One of 24, 48, 72. Defaults to 24.", "in": "query", - "name": "page", - "type": "integer" + "name": "page_size", + "type": "integer", + "x-example": 24 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "One of TopSellers, LowestPrice, HighestPrice, NewestArrivals. Defaults to TopSellers.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "sort", + "type": "string", + "x-example": "TopSellers" } ], "produces": [ @@ -248888,7 +278495,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamPricesSearchResponseDoc" + "$ref": "#/definitions/fanatics.categoryResponseDoc" } }, "400": { @@ -248897,14 +278504,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" } @@ -248915,66 +278522,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the steam-prices dataset", + "summary": "Browse a Fanatics league or team category", "tags": [ - "Datasets" + "Fanatics" ] } }, - "/datasets/steam-reviews/search": { + "/fanatics/product": { "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`.", - "operationId": "datasets-steam-reviews-search", + "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": "Full-text query over the review body, max 256 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" - }, - { - "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", + "description": "A fanatics.com product-detail URL, exactly as returned by a fanatics_search or fanatics_category result's url field.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "url", + "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" } ], "produces": [ @@ -248984,7 +278552,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamReviewsSearchResponseDoc" + "$ref": "#/definitions/fanatics.productResponseDoc" } }, "400": { @@ -248993,8 +278561,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -249004,6 +278572,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -249011,165 +278585,97 @@ "ApiKeyAuth": [] } ], - "summary": "Search the steam-reviews dataset", + "summary": "Get a Fanatics product's detail", "tags": [ - "Datasets" + "Fanatics" ] } }, - "/datasets/techstack/facets": { + "/fanatics/search": { "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 one page of Fanatics' own keyword search results (name, brand, price, availability, image, url).", + "operationId": "fanatics-search", "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": "Free-text search keywords.", "in": "query", - "name": "facet", + "name": "query", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "colts jersey" }, { - "description": "Source filter for where the domain was discovered, e.g. tranco", + "description": "1-based result page. Defaults to 1.", "in": "query", - "name": "seed_source", - "type": "string" + "name": "page_number", + "type": "integer", + "x-example": 1 }, { - "description": "true keeps only sites with a detected CAPTCHA", + "description": "Results per page. One of 24, 48, 72. Defaults to 24.", "in": "query", - "name": "has_captcha", - "type": "boolean" + "name": "page_size", + "type": "integer", + "x-example": 24 }, { - "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": "One of TopSellers, LowestPrice, HighestPrice, NewestArrivals. Defaults to TopSellers.", "in": "query", - "name": "is_infrastructure", - "type": "boolean" + "name": "sort", + "type": "string", + "x-example": "TopSellers" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanatics.searchResponseDoc" + } }, - { - "description": "true keeps only sites whose homepage was fetched", - "in": "query", - "name": "reachable", - "type": "boolean" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum number of detected technologies, 0 or greater", - "in": "query", - "name": "min_tech_count", - "type": "integer" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Scan run id; defaults to the latest run", - "in": "query", - "name": "run_id", - "type": "string" + "ApiKeyAuth": [] } ], + "summary": "Search Fanatics' product catalog", + "tags": [ + "Fanatics" + ] + } + }, + "/fanaticscollect/auctions": { + "get": { + "consumes": [ + "application/json" + ], + "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. Credential-free public data from Fanatics Collect's own GraphQL API.", + "operationId": "fanaticscollect-auctions", "produces": [ "application/json" ], @@ -249177,14 +278683,55 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.techstackFacetResponseDoc" + "$ref": "#/definitions/fanaticscollect.auctionsResponseDoc" } }, - "400": { - "description": "Bad Request", + "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 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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanaticscollect.categoriesResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -249192,11 +278739,52 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "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 -- both are hydrated client-side in a form this repo cannot reliably parse. Credential-free public data, server-rendered on Fanatics Collect's own page.", + "operationId": "fanaticscollect-instant-rips-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanaticscollect.instantRipsCategoriesResponseDoc" + } + }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -249204,25 +278792,37 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the website tech-stack dataset", + "summary": "Get Fanatics Collect Instant Rips categories", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/techstack/items/{domain}": { + "/fanaticscollect/listing/{id}": { "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 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. Credential-free public data from Fanatics Collect's own GraphQL API.", + "operationId": "fanaticscollect-listing", "parameters": [ { - "description": "Site domain, e.g. shopify.com (a scheme and www. are stripped)", + "description": "Listing UUID", "in": "path", - "name": "domain", + "name": "id", "required": true, + "type": "string", + "x-example": "1e389d12-6f23-11ed-9d8b-0a58a9feac02" + }, + { + "description": "Listing type. Default: WEEKLY", + "enum": [ + "WEEKLY", + "PREMIER", + "FIXED" + ], + "in": "query", + "name": "type", "type": "string" } ], @@ -249233,29 +278833,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.techstackItemResponseDoc" + "$ref": "#/definitions/fanaticscollect.listingResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid path/query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "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" } @@ -249266,167 +278872,208 @@ "ApiKeyAuth": [] } ], - "summary": "Get a site from the website tech-stack dataset", + "summary": "Get Fanatics Collect listing detail", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/techstack/search": { + "/fanaticscollect/search": { "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`.", - "operationId": "datasets-techstack-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. Credential-free public data from Fanatics Collect's own public search index. 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" - }, - { - "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" + "type": "string", + "x-example": "aaron judge" }, { - "collectionFormat": "csv", - "description": "Repeatable exact technology name the site must NOT use (excludes)", + "description": "Listing type. Omit to search all three.", + "enum": [ + "WEEKLY", + "PREMIER", + "FIXED" + ], "in": "query", - "items": { - "type": "string" - }, - "name": "not", - "type": "array" + "name": "marketplace", + "type": "string" }, { - "description": "Exact category filter, e.g. Ecommerce, CMS, Analytics, Payment, CDN", + "description": "Top-level category", + "enum": [ + "Sports Cards", + "Trading Card Games", + "Other", + "Video Games", + "Comics" + ], "in": "query", - "name": "category", + "name": "category_parent", "type": "string" }, { - "description": "Exact CMS filter, e.g. WordPress, Shopify, Webflow", + "description": "A parent > child category path (or just the child name), e.g. \\", "in": "query", - "name": "cms", + "name": "sub_category", "type": "string" }, { - "description": "Exact e-commerce platform filter, e.g. Shopify, WooCommerce, Magento", + "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": "ecommerce", + "name": "grading_service", "type": "string" }, { - "description": "Exact CDN / hosting filter, e.g. Cloudflare, Fastly, Vercel", + "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": "cdn", - "type": "string" + "name": "certified_seller", + "type": "string", + "x-example": "Fanatics Collect" }, { - "description": "Exact web-server filter, e.g. nginx, Apache, IIS", + "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": "web_server", - "type": "string" + "name": "seller_id", + "type": "string", + "x-example": "4216b44a-9696-4263-96c3-5f58eeb9a316" }, { - "description": "Exact server language / framework filter, e.g. PHP, ASP.NET, Ruby on Rails", + "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": "server_language", - "type": "string" + "name": "brand", + "type": "string", + "x-example": "Michael Jordan" }, { - "description": "Exact top-level-domain filter, e.g. com, org, io", + "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": "tld", - "type": "string" + "name": "auction_urn", + "type": "string", + "x-example": "WEEKLY:fb70389e-1c67-11f1-90df-0ab83224f98f" }, { - "description": "Fetch-tier filter. Enum: http, browser", + "description": "Listing status. Default LIVE.", "enum": [ - "http", - "browser" + "LIVE", + "SOLD", + "ALL" ], "in": "query", - "name": "render_tier", + "name": "status", "type": "string" }, { - "description": "Source filter for where the domain was discovered, e.g. tranco", + "description": "Filter for listings the seller accepts offers on", "in": "query", - "name": "seed_source", - "type": "string" + "name": "allow_offers", + "type": "boolean" }, { - "description": "true keeps only sites with a detected CAPTCHA", + "description": "Filter for listings with at least one active offer pending", "in": "query", - "name": "has_captcha", + "name": "has_offers", "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", + "description": "Filter for listings Fanatics Collect itself flags as a great price vs. guide value", "in": "query", - "name": "is_infrastructure", + "name": "great_price", "type": "boolean" }, { - "description": "true keeps only sites whose homepage was fetched, false only sites that could not be fetched", + "description": "Minimum current price/bid, inclusive", "in": "query", - "name": "reachable", - "type": "boolean" + "name": "min_price", + "type": "number" }, { - "description": "Minimum number of detected technologies, 0 or greater", + "description": "Maximum current price/bid, inclusive", "in": "query", - "name": "min_tech_count", + "name": "max_price", + "type": "number" + }, + { + "description": "Minimum card/item year, inclusive", + "in": "query", + "name": "min_year", "type": "integer" }, { - "description": "Scan run id; defaults to the latest run", + "description": "Maximum card/item year, inclusive", "in": "query", - "name": "run_id", - "type": "string" + "name": "max_year", + "type": "integer" }, { - "description": "Sort enum: relevance, rank_asc, tech_count_desc, domain_asc, crawled_desc", + "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": [ - "relevance", - "rank_asc", - "tech_count_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" } ], @@ -249437,7 +279084,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.techstackSearchResponseDoc" + "$ref": "#/definitions/fanaticscollect.searchResponseDoc" } }, "400": { @@ -249446,14 +279093,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" } @@ -249464,76 +279111,131 @@ "ApiKeyAuth": [] } ], - "summary": "Search the website tech-stack dataset", + "summary": "Search Fanatics Collect listings", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/trustmrr/facets": { + "/fanaticscollect/sold-items": { "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": "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. Credential-free public data from Fanatics Collect's own public sales-history API. See GetCategories for the accepted category, grading-service, eye-appeal-grade, and sort values.", + "operationId": "fanaticscollect-sold-items", "parameters": [ { - "description": "Facet enum: category, country, payment_provider, target_audience, business_type, tech, channels, listing_tier, status, on_sale, is_sponsored, tags", + "description": "Free-text search across item title", + "in": "query", + "name": "title", + "type": "string", + "x-example": "aaron judge" + }, + { + "description": "Item category", "enum": [ - "category", - "country", - "payment_provider", - "target_audience", - "business_type", - "tech", - "channels", - "listing_tier", - "status", - "on_sale", - "is_sponsored", - "tags" + "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": "facet", - "required": true, + "name": "category", "type": "string" }, { - "description": "Full-text query, max 256 characters", + "description": "Grading/authentication service, including ungraded for raw items", + "enum": [ + "PSA", + "SGC", + "BGS", + "BVG", + "BCCG", + "CGC", + "CSG", + "ungraded" + ], "in": "query", - "name": "q", + "name": "grading_service", "type": "string" }, { - "description": "Exact category filter, max 128 characters", + "description": "Eye-appeal grade", + "enum": [ + "Eye Appeal - A", + "Eye Appeal - E", + "Eye Appeal - S" + ], "in": "query", - "name": "category", + "name": "eye_appeal_grade", "type": "string" }, { - "description": "Exact ISO country-code filter, max 128 characters", + "description": "Minimum card/item year, inclusive", "in": "query", - "name": "country", - "type": "string" + "name": "min_year", + "type": "integer" }, { - "description": "Payment-provider filter, max 128 characters", + "description": "Maximum card/item year, inclusive", "in": "query", - "name": "payment_provider", - "type": "string" + "name": "max_year", + "type": "integer" }, { - "description": "Filter for startups currently listed for sale", + "description": "Minimum sold price, inclusive", "in": "query", - "name": "on_sale", - "type": "boolean" + "name": "min_price", + "type": "number" }, { - "description": "Minimum verified MRR in USD", + "description": "Maximum sold price, inclusive", "in": "query", - "name": "min_mrr", + "name": "max_price", "type": "number" + }, + { + "description": "Result order. Default sold_date_desc.", + "enum": [ + "sold_date_desc", + "highest_price", + "lowest_price" + ], + "in": "query", + "name": "sort", + "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": [ @@ -249543,7 +279245,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.trustmrrFacetResponseDoc" + "$ref": "#/definitions/fanaticscollect.soldItemsResponseDoc" } }, "400": { @@ -249552,14 +279254,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" } @@ -249570,44 +279272,26 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the TrustMRR dataset", + "summary": "Search Fanatics Collect sold items", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/trustmrr/history/{slug}": { + "/fanaticscollect/trending-searches": { "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 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. Credential-free public data from Fanatics Collect's own GraphQL API.", + "operationId": "fanaticscollect-trending-searches", "parameters": [ { - "description": "Startup slug, max 128 characters", - "in": "path", - "name": "slug", - "required": true, - "type": "string" - }, - { - "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", + "description": "Number of terms to return, 1-50, default 8", "in": "query", "name": "limit", - "type": "integer" + "type": "integer", + "x-example": 8 } ], "produces": [ @@ -249617,7 +279301,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.trustmrrHistoryResponseDoc" + "$ref": "#/definitions/fanaticscollect.trendingSearchesResponseDoc" } }, "400": { @@ -249626,14 +279310,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" } @@ -249644,26 +279328,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TrustMRR startup's daily history", + "summary": "Get Fanatics Collect trending search terms", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/trustmrr/items/{slug}": { + "/fanaticslive/browse": { "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 the live and upcoming shows currently listed under a Fanatics Live league: name, status, cover image, viewers, and the hosting channel/shop. Public data sourced from Fanatics Live's own GraphQL API.", + "operationId": "fanaticslive-browse", "parameters": [ { - "description": "Startup slug, max 128 characters", - "in": "path", - "name": "slug", + "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" + ], + "in": "query", + "name": "league", "required": true, - "type": "string" + "type": "string", + "x-example": "POKEMON" } ], "produces": [ @@ -249673,7 +279383,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.trustmrrItemResponseDoc" + "$ref": "#/definitions/fanaticslive.browseResponseDoc" } }, "400": { @@ -249682,20 +279392,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" } @@ -249706,192 +279410,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TrustMRR startup from the dataset", + "summary": "Browse Fanatics Live shows by league", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/trustmrr/search": { + "/fanaticslive/channel/{id}": { "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`.", - "operationId": "datasets-trustmrr-search", + "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. Public data sourced from Fanatics Live's own GraphQL API.", + "operationId": "fanaticslive-channel", "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", - "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" + "description": "Fanatics Live channel id (a UUID), e.g. from a shop or show result's channel.id field", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "adc4b55f-5e10-4ed0-8680-11875cfe1c94" } ], "produces": [ @@ -249901,7 +279440,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.trustmrrSearchResponseDoc" + "$ref": "#/definitions/fanaticslive.channelResponseDoc" } }, "400": { @@ -249910,8 +279449,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -249921,6 +279460,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -249928,163 +279473,156 @@ "ApiKeyAuth": [] } ], - "summary": "Search the TrustMRR dataset", + "summary": "Get a Fanatics Live channel's detail page", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/vehicle-listings/facets": { + "/fanaticslive/leagues": { "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", - "parameters": [ - { - "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": "facet", - "required": true, - "type": "string" - }, - { - "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" - }, - { - "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": "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. Public data sourced from Fanatics Live's own GraphQL API.", + "operationId": "fanaticslive-leagues", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanaticslive.leaguesResponseDoc" + } }, - { - "description": "Exact seller type filter: retailer, dealer, private", - "enum": [ - "retailer", - "dealer", - "private" - ], - "in": "query", - "name": "seller_type", - "type": "string" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact US state abbreviation filter, max 8 characters", - "in": "query", - "name": "state", - "type": "string" - }, + "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. Public data sourced from Fanatics Live's own GraphQL API.", + "operationId": "fanaticslive-shop", + "parameters": [ { - "description": "Exact VIN filter", - "in": "query", - "name": "vin", - "type": "string" + "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": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanaticslive.shopResponseDoc" + } }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Filter for listings currently marked down from a previous price", - "in": "query", - "name": "is_price_reduced", - "type": "boolean" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum model year", - "in": "query", - "name": "min_year", - "type": "integer" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Maximum model year", - "in": "query", - "name": "max_year", - "type": "integer" + "ApiKeyAuth": [] + } + ], + "summary": "Get a Fanatics Live shop's public profile", + "tags": [ + "Fanatics Live" + ] + } + }, + "/fanaticslive/shop/{slug}/shows": { + "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 credential-free way to observe a COMPLETE-status show. Public data sourced from Fanatics Live's own GraphQL API.", + "operationId": "fanaticslive-shop-shows", + "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": "Minimum price in US dollars", + "description": "Which show list to return", + "enum": [ + "live", + "replay" + ], "in": "query", - "name": "min_price", - "type": "number" + "name": "status", + "required": true, + "type": "string", + "x-example": "live" }, { - "description": "Maximum price in US dollars", + "description": "Pagination cursor from a previous response's next_cursor", "in": "query", - "name": "max_price", - "type": "number" + "name": "after", + "type": "string" }, { - "description": "Maximum odometer mileage", + "description": "Max shows to return (default 24)", "in": "query", - "name": "max_mileage", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -250094,7 +279632,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.vehicleListingsFacetResponseDoc" + "$ref": "#/definitions/fanaticslive.shopShowsResponseDoc" } }, "400": { @@ -250103,17 +279641,64 @@ "$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" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "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}. Public data sourced from Fanatics Live's own GraphQL API.", + "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": [ @@ -250121,26 +279706,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet vehicle listings dataset", + "summary": "Get Fanatics Live's shop directory", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/vehicle-listings/items/{id}": { + "/fanaticslive/show/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled vehicle listing by id from dataset id enum value `vehicle-listings`. id is `:`, e.g. `carmax:28187774`.", - "operationId": "datasets-vehicle-listings-item", + "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. Public data sourced from Fanatics Live's own GraphQL API.", + "operationId": "fanaticslive-show", "parameters": [ { - "description": "Vehicle listing id, formatted : (e.g. carmax:28187774)", + "description": "Fanatics Live show id, e.g. from a browse result's id field", "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "1b1aeec0-346b-4c8f-941a-bcb8af558a5a" } ], "produces": [ @@ -250150,7 +279736,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.vehicleListingResponseDoc" + "$ref": "#/definitions/fanaticslive.showResponseDoc" } }, "400": { @@ -250165,14 +279751,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" } @@ -250183,26 +279769,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a vehicle listing from dataset", + "summary": "Get a Fanatics Live show's detail page", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/vehicle-listings/price-history/{id}": { + "/fanaticslive/show/{id}/instant-rips": { "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 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. Public data sourced from Fanatics Live's own GraphQL API.", + "operationId": "fanaticslive-instant-rips", "parameters": [ { - "description": "Vehicle listing id, formatted : (e.g. carmax:28187774)", + "description": "Fanatics Live show id, the same id GET /fanaticslive/show/{id} takes", "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "186f8cac-d031-436a-b46d-9d9f0b839df2" } ], "produces": [ @@ -250212,7 +279799,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.vehicleListingPriceHistoryResponseDoc" + "$ref": "#/definitions/fanaticslive.instantRipsResponseDoc" } }, "400": { @@ -250221,8 +279808,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -250232,6 +279819,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -250239,174 +279832,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a vehicle listing's price history", + "summary": "Get a Fanatics Live show's current instant-rip state", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/vehicle-listings/search": { + "/farfetch/categories": { "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`.", - "operationId": "datasets-vehicle-listings-search", - "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", - "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" - } - ], + "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" ], @@ -250414,23 +279852,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.vehicleListingsSearchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/farfetch.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" } @@ -250441,131 +279873,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search vehicle listings dataset", + "summary": "Farfetch category directory", "tags": [ - "Datasets" + "Farfetch" ] } }, - "/datasets/x-users/facets": { + "/farfetch/designers": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the X users dataset. Facet enum: `is_blue_verified`, `has_bio`, `has_external_url`, `source_tier`.", - "operationId": "datasets-x-users-facets", + "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": "Facet enum: is_blue_verified, has_bio, has_external_url, source_tier", - "enum": [ - "is_blue_verified", - "has_bio", - "has_external_url", - "source_tier" - ], + "description": "Department: women, men, kids", "in": "query", - "name": "facet", + "name": "gender", "required": true, - "type": "string" - }, - { - "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": [ - "relevance", - "followers_desc", - "followers_asc", - "crawled_at_desc", - "crawled_at_asc", - "created_at_desc", - "created_at_asc" - ], - "in": "query", - "name": "sort", - "type": "string" + "type": "string", + "x-example": "women" } ], "produces": [ @@ -250575,7 +279903,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.xUsersFacetResponseDoc" + "$ref": "#/definitions/farfetch.designersResponseDoc" } }, "400": { @@ -250584,14 +279912,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" } @@ -250602,26 +279930,35 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the X users dataset", + "summary": "Farfetch designer directory", "tags": [ - "Datasets" + "Farfetch" ] } }, - "/datasets/x-users/items/{username}": { + "/farfetch/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns one X user record by username from dataset id enum value `x-users`.", - "operationId": "datasets-x-users-item", + "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": "X username, with or without a leading @, max 128 characters", - "in": "path", - "name": "username", + "description": "Department: women, men, kids", + "in": "query", + "name": "gender", "required": true, - "type": "string" + "type": "string", + "x-example": "women" + }, + { + "description": "Product URL slug from a search result's id field", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "gucci-slide-sandals-with-double-g-item-37690086" } ], "produces": [ @@ -250631,7 +279968,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.xUserResponseDoc" + "$ref": "#/definitions/farfetch.productResponseDoc" } }, "400": { @@ -250646,14 +279983,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" } @@ -250664,130 +280001,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get an X user from the dataset", + "summary": "Farfetch product detail", "tags": [ - "Datasets" + "Farfetch" ] } }, - "/datasets/x-users/search": { + "/farfetch/search": { "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`.", - "operationId": "datasets-x-users-search", + "description": "Browses Farfetch's luxury multi-brand marketplace by department plus a designer and/or category filter (at least one is required), returning normalized listing summaries (name, brand, price, image, availability) and the upstream page count. Public data sourced from Farfetch's own listing pages.", + "operationId": "farfetch-search", "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)", + "description": "Department: women, men, kids", "in": "query", - "name": "crawled_after", - "type": "string" + "name": "gender", + "required": true, + "type": "string", + "x-example": "women" }, { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "description": "Designer slug from GET /farfetch/designers; designer or category is required", "in": "query", - "name": "crawled_before", - "type": "string" + "name": "designer", + "type": "string", + "x-example": "gucci" }, { - "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": "Category slug from GET /farfetch/categories; designer or category is required", "in": "query", - "name": "sort", - "type": "string" + "name": "category", + "type": "string", + "x-example": "shoes-1" }, { - "description": "Page number, defaults to 1", + "description": "1-based 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": "integer", + "x-example": 1 } ], "produces": [ @@ -250797,7 +280052,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.xUsersSearchResponseDoc" + "$ref": "#/definitions/farfetch.searchResponseDoc" } }, "400": { @@ -250806,14 +280061,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" } @@ -250824,159 +280079,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search the X users dataset", + "summary": "Search Farfetch listings", "tags": [ - "Datasets" + "Farfetch" ] } }, - "/datasets/youtube-creators/facets": { + "/fashionnova/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the YouTube creators dataset. Facet enum: `region`, `discovery_source`.", - "operationId": "datasets-youtube-creators-facets", + "description": "Returns normalized 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": "Facet enum: region, discovery_source", - "enum": [ - "region", - "discovery_source" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string" - }, - { - "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 collections, defaults to 50 and supports up to 250", "in": "query", - "name": "sort", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -250986,7 +280115,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.youtubeCreatorsFacetResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -251001,8 +280130,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -251013,26 +280142,41 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the YouTube creators dataset", + "summary": "List Fashion Nova collections", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/datasets/youtube-creators/items/{channel_id}": { + "/fashionnova/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns one YouTube channel record by channel id from dataset id enum value `youtube-creators`.", - "operationId": "datasets-youtube-creators-item", + "description": "Returns normalized 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": "YouTube channel id, e.g. UCxxxxxxxxxxxxxxxxxxxxxxxx", + "description": "Collection handle", "in": "path", - "name": "channel_id", + "name": "handle", "required": true, - "type": "string" + "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": [ @@ -251042,7 +280186,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.youtubeCreatorResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -251063,8 +280207,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -251075,160 +280219,159 @@ "ApiKeyAuth": [] } ], - "summary": "Get a YouTube creator from the dataset", + "summary": "List Fashion Nova collection products", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/datasets/youtube-creators/search": { + "/fashionnova/pages": { "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`.", - "operationId": "datasets-youtube-creators-search", + "description": "Returns normalized static pages from Fashion Nova (https://www.fashionnova.com). The storefront URL is fixed server-side.", + "operationId": "fashionnova-pages", "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", + "description": "1-based page, defaults to 1", "in": "query", - "name": "max_followers", - "type": "integer" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Minimum uploaded-video count", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "min_videos", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + } }, - { - "description": "Maximum uploaded-video count", - "in": "query", - "name": "max_videos", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum total view count", - "in": "query", - "name": "min_views", - "type": "integer" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Maximum total view count", - "in": "query", - "name": "max_views", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List Fashion Nova static pages", + "tags": [ + "Fashion Nova" + ] + } + }, + "/fashionnova/pages/{handle}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized static page detail for one Fashion Nova (https://www.fashionnova.com) page handle. The storefront URL is fixed server-side.", + "operationId": "fashionnova-page", + "parameters": [ { - "description": "Channels created on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "joined_after", - "type": "string" + "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" + } }, - { - "description": "Channels created on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "joined_before", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "hydrated_after", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "hydrated_before", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "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" - ], - "in": "query", - "name": "sort", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a Fashion Nova static page", + "tags": [ + "Fashion Nova" + ] + } + }, + "/fashionnova/products": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized 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": "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 products, defaults to 50 and supports up to 250", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -251238,7 +280381,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.youtubeCreatorsSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -251253,8 +280396,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -251265,24 +280408,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the YouTube creators dataset", + "summary": "List Fashion Nova products", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/dawn/article": { + "/fashionnova/products/{handle}": { "get": { - "description": "Returns public Dawn article metadata and body paragraphs from a canonical article URL.", - "operationId": "dawn-article", + "consumes": [ + "application/json" + ], + "description": "Returns normalized 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": "Canonical Dawn article URL", - "in": "query", - "name": "url", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://www.dawn.com/news/2032361/pm-shehbaz-stresses-islamabad-mou-implementation-in-meeting-with-pezeshkian" + "x-example": "product-handle" } ], "produces": [ @@ -251292,7 +280438,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -251307,6 +280453,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -251319,24 +280471,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get Dawn article content", + "summary": "Get a Fashion Nova product", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/dawn/author": { + "/fashionnova/products/{handle}/recommendations": { "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 normalized recommended products for one Fashion Nova (https://www.fashionnova.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "fashionnova-product-recommendations", "parameters": [ { - "description": "Canonical www.dawn.com/authors// URL", - "in": "query", - "name": "url", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://www.dawn.com/authors/675/khurram-husain" + "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": [ @@ -251346,7 +280519,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dawnAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -251361,6 +280534,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -251373,42 +280552,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Dawn author profile", + "summary": "List Fashion Nova product recommendations", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/dawn/headlines": { + "/fashionnova/search/suggest": { "get": { - "description": "Returns fresh headlines from one public Dawn section.", - "operationId": "dawn-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns products, collections, and query suggestions from Fashion Nova's (https://www.fashionnova.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "fashionnova-search-suggest", "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" - ], + "description": "Search query", "in": "query", - "name": "section", + "name": "q", "required": true, - "type": "string" + "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": [ @@ -251418,7 +280596,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -251427,6 +280605,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -251439,16 +280623,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Dawn section headlines", + "summary": "Get Fashion Nova search suggestions", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/dawn/news": { + "/fashionnova/sitemap/urls": { "get": { - "description": "Returns fresh Dawn (Pakistan) stories from the public RSS feed.", - "operationId": "dawn-news", + "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": "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" ], @@ -251456,7 +280668,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -251471,16 +280695,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Dawn top stories", + "summary": "List Fashion Nova sitemap URLs", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/dawn/sections": { + "/fashionnova/sitemaps": { "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", + "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" ], @@ -251488,7 +280715,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$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" } } }, @@ -251497,26 +280742,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Dawn sections", + "summary": "List Fashion Nova sitemaps", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/deadline/article": { + "/fashionnova/store": { "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 Deadline article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://deadline.com/2026/09/example-story-1237111140/" - } + "consumes": [ + "application/json" ], + "description": "Returns normalized storefront metadata for Fashion Nova (https://www.fashionnova.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "fashionnova-store", "produces": [ "application/json" ], @@ -251524,7 +280762,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -251533,8 +280771,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -251551,31 +280789,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Deadline article content", + "summary": "Get Fashion Nova store metadata", "tags": [ - "Deadline" + "Fashion Nova" ] } }, - "/deadline/author": { + "/fashionphile/collections": { "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 normalized 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.com/author/ URL", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://deadline.com/author/andreas-wiseman/" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "1-based page of recent articles to return; 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": [ @@ -251585,7 +280825,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.deadlineAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -251594,8 +280834,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -251612,73 +280852,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Deadline author profile", + "summary": "List Fashionphile collections", "tags": [ - "Deadline" + "Fashionphile" ] } }, - "/deadline/headlines": { + "/fashionphile/collections/{handle}/products": { "get": { - "description": "Returns fresh headlines from one public Deadline section or vertical feed.", - "operationId": "deadline-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized 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": "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" - ], - "in": "query", - "name": "section", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, - "type": "string" + "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": [ @@ -251688,7 +280896,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -251697,6 +280905,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": { @@ -251709,16 +280929,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Deadline section headlines", + "summary": "List Fashionphile collection products", "tags": [ - "Deadline" + "Fashionphile" ] } }, - "/deadline/news": { + "/fashionphile/pages": { "get": { - "description": "Returns fresh Deadline Hollywood Entertainment top stories from its public RSS feed.", - "operationId": "deadline-news", + "consumes": [ + "application/json" + ], + "description": "Returns normalized static pages from Fashionphile (https://www.fashionphile.com). The storefront URL is fixed server-side.", + "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 + } + ], "produces": [ "application/json" ], @@ -251726,7 +280965,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -251747,16 +280992,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Deadline top stories", + "summary": "List Fashionphile static pages", "tags": [ - "Deadline" + "Fashionphile" ] } }, - "/deadline/sections": { + "/fashionphile/pages/{handle}": { "get": { - "description": "Returns the complete public section inventory accepted by /api/v1/deadline/headlines (both Deadline's editorial categories and its verticals).", - "operationId": "deadline-sections", + "consumes": [ + "application/json" + ], + "description": "Returns normalized static page detail for one Fashionphile (https://www.fashionphile.com) page handle. The storefront URL is fixed server-side.", + "operationId": "fashionphile-page", + "parameters": [ + { + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "page-handle" + } + ], "produces": [ "application/json" ], @@ -251764,7 +281022,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$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" } } }, @@ -251773,51 +281055,33 @@ "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 normalized 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": [ @@ -251827,7 +281091,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.fulfillmentTimesResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -251836,6 +281100,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -251848,43 +281118,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 normalized 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": [ @@ -251894,7 +281148,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.restaurantResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -251909,6 +281163,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -251921,43 +281181,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 normalized recommended products for one Fashionphile (https://www.fashionphile.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. 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": [ @@ -251967,7 +281229,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.menuResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -251982,6 +281244,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -251994,168 +281262,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 normalized, 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 JSON 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": [ @@ -252165,7 +281353,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.searchResponseDoc" } }, "400": { @@ -252174,6 +281362,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -252186,51 +281380,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) credential-free predictive search Ajax endpoint. 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": [ @@ -252240,7 +281424,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.filtersResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -252249,43 +281433,8 @@ "$ref": "#/definitions/app.Response" } }, - "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" - ] - } - }, - "/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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -252302,62 +281451,42 @@ "ApiKeyAuth": [] } ], - "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", + "summary": "Get Fashionphile search suggestions", "tags": [ - "Depop" + "Fashionphile" ] } }, - "/depop/item/{slug}": { + "/fashionphile/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Depop item-detail page: description, all photos, price, condition, brand, size, seller info, and a \"similar items\" carousel when the page has one. Public data sourced from Depop's own item pages.", - "operationId": "depop-item", + "description": "Returns capped URL entries from Fashionphile's (https://www.fashionphile.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "fashionphile-sitemap-urls", "parameters": [ { - "description": "Depop item URL slug, e.g. from a search result's id field", - "in": "path", - "name": "slug", - "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": "ag_boutique-vintage-mid-rise-bootcut-levi-2476" + "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": [ @@ -252367,7 +281496,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.ItemDetailResponse" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -252376,14 +281505,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" } @@ -252400,42 +281523,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Depop item detail", + "summary": "List Fashionphile sitemap URLs", "tags": [ - "Depop" + "Fashionphile" ] } }, - "/depop/item/{slug}/similar": { + "/fashionphile/sitemaps": { "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", - "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": "Max results per page, 1-150", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 - }, - { - "description": "Opaque pagination cursor from a previous response's next_cursor field. Omit for the first page.", - "in": "query", - "name": "after", - "type": "string" - } - ], + "description": "Returns child sitemap URLs from Fashionphile's (https://www.fashionphile.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "fashionphile-sitemaps", "produces": [ "application/json" ], @@ -252443,7 +281543,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.similarItemsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -252452,14 +281552,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" } @@ -252476,117 +281570,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Depop items similar to a listing", + "summary": "List Fashionphile sitemaps", "tags": [ - "Depop" + "Fashionphile" ] } }, - "/depop/search": { + "/fashionphile/store": { "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 normalized listing summaries (title, price, brand, condition, like count, photos, sizes), a pagination cursor, and the total matching count. Public data sourced from Depop's own search API.", - "operationId": "depop-search", - "parameters": [ - { - "description": "Free-text keyword search", - "in": "query", - "name": "query", - "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" - }, - { - "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" - } - ], + "description": "Returns normalized storefront metadata for Fashionphile (https://www.fashionphile.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "fashionphile-store", "produces": [ "application/json" ], @@ -252594,7 +281590,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -252603,8 +281599,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -252621,27 +281617,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Depop listings", + "summary": "Get Fashionphile store metadata", "tags": [ - "Depop" + "Fashionphile" ] } }, - "/depop/search-sellers": { + "/fastcompany/article": { "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 public Fast Company article metadata and body paragraphs from a canonical article URL. The service uses the configured production browser fleet when ordinary HTTP transport encounters Fast Company's bot-verification challenge; it does not bypass authentication or access controls.", + "operationId": "fastcompany-article", "parameters": [ { - "description": "Seller name or username to search for", + "description": "Canonical Fast Company article URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "vintage nike" + "x-example": "https://www.fastcompany.com/91611506/example-headline" } ], "produces": [ @@ -252651,7 +281644,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.searchSellersResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -252660,8 +281653,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -252678,27 +281671,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Depop sellers by name", + "summary": "Get Fast Company article content", "tags": [ - "Depop" + "Fast Company" ] } }, - "/depop/search/facets": { + "/fastcompany/author": { "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 a Fast Company contributor's name, biography, and recent articles from a canonical contributor URL. Recent articles and the contributor's name come from their own public RSS feed; the biography comes from the contributor's profile page and is omitted if that page's bot-verification challenge cannot be cleared. The service uses the configured production browser fleet when ordinary HTTP transport encounters that challenge; it does not bypass authentication or access controls.", + "operationId": "fastcompany-author", "parameters": [ { - "description": "Free-text keyword search", + "description": "Canonical Fast Company contributor URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "bandage dress" + "x-example": "https://www.fastcompany.com/user/example-writer" } ], "produces": [ @@ -252708,7 +281698,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.searchFacetsResponseDoc" + "$ref": "#/definitions/publicnews.fastCompanyAuthorResponseDoc" } }, "400": { @@ -252717,8 +281707,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -252735,96 +281725,24 @@ "ApiKeyAuth": [] } ], - "summary": "Depop search result-count breakdowns", + "summary": "Get a Fast Company contributor profile", "tags": [ - "Depop" + "Fast Company" ] } }, - "/depop/shop/{username}": { + "/fastcompany/headlines": { "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 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": "Depop seller username, e.g. from a shop page URL segment", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "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. \\", + "description": "Fast Company section slug, from GET /fastcompany/sections", "in": "query", - "name": "sizes", + "name": "section", + "required": true, "type": "string", - "x-example": "54.4" + "x-example": "technology" } ], "produces": [ @@ -252834,7 +281752,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.shopResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -252843,18 +281761,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": { @@ -252867,19 +281773,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Depop seller's shop", + "summary": "Get Fast Company section headlines", "tags": [ - "Depop" + "Fast Company" ] } }, - "/depop/sizes": { + "/fastcompany/news": { "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 fresh Fast Company stories from its public RSS feed.", + "operationId": "fastcompany-news", "produces": [ "application/json" ], @@ -252887,11 +281790,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.sizesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -252908,27 +281811,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get Depop's size taxonomy", + "summary": "Get Fast Company top stories", "tags": [ - "Depop" + "Fast Company" ] } }, - "/depop/suggest": { + "/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", + "tags": [ + "Fast Company" + ] + } + }, + "/fiveguys/directory": { "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 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": "Partial search query to autocomplete", + "description": "Optional. Directory path from a previous response's children[].path, e.g. \\", "in": "query", - "name": "query", - "required": true, + "name": "path", "type": "string", - "x-example": "red corte" + "x-example": "il" } ], "produces": [ @@ -252938,7 +281866,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.suggestResponseDoc" + "$ref": "#/definitions/fiveguys.directoryResponseDoc" } }, "400": { @@ -252947,8 +281875,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" } @@ -252965,28 +281899,57 @@ "ApiKeyAuth": [] } ], - "summary": "Depop search-box autocomplete", + "summary": "Browse the Five Guys restaurant directory by state and city", "tags": [ - "Depop" + "FiveGuys" ] } }, - "/diagnostics/antibot-check": { - "post": { + "/fiveguys/faq": { + "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 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": "Target URL (and optional fast flag)", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/diagnostics.AntibotCheckRequest" - } + "description": "Optional. Free-text filter over question and answer text.", + "in": "query", + "name": "search", + "type": "string", + "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": [ @@ -252996,23 +281959,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/diagnostics.antibotCheckResponseDoc" + "$ref": "#/definitions/fiveguys.faqResponseDoc" } }, "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" } @@ -253023,27 +281986,29 @@ "ApiKeyAuth": [] } ], - "summary": "Anti-bot check — website scraping difficulty", + "summary": "List Five Guys' published customer FAQ", "tags": [ - "Web" + "FiveGuys" ] } }, - "/discogs/artist/{id}": { + "/fiveguys/faq-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Discogs artist profile: real name, bio, links, name variations, aliases, and group memberships. Credential-free official Discogs database data.", - "operationId": "discogs-artist", + "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": "Discogs artist id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1289" + "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": [ @@ -253053,23 +282018,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.faqCategoriesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -253086,39 +282039,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Discogs artist profile", + "summary": "List Five Guys FAQ categories", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/artist/{id}/releases": { + "/fiveguys/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns an artist's paginated release/master credits (role, format, label, year, want/collection counts). Credential-free official Discogs database data.", - "operationId": "discogs-artist-releases", + "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": "Discogs artist id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1289" - }, - { - "description": "1-based page number, default 1", + "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": "page", - "type": "integer" + "name": "category", + "type": "string" }, { - "description": "Results per page, default 50, max 100", + "description": "Optional. Content language: en (default) or es.", + "enum": [ + "en", + "es" + ], "in": "query", - "name": "per_page", - "type": "integer" + "name": "lang", + "type": "string" } ], "produces": [ @@ -253128,7 +282077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.artistReleasesResponseDoc" + "$ref": "#/definitions/fiveguys.menuResponseDoc" } }, "400": { @@ -253143,8 +282092,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -253161,27 +282110,56 @@ "ApiKeyAuth": [] } ], - "summary": "List a Discogs artist's releases", + "summary": "List Five Guys menu categories and items", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/label/{id}": { + "/fiveguys/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Discogs label profile: profile text, contact info, parent label, and sub-labels. Credential-free official Discogs database data.", - "operationId": "discogs-label", + "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": "Discogs label id", - "in": "path", - "name": "id", + "description": "Search center latitude", + "in": "query", + "name": "latitude", "required": true, - "type": "string", - "x-example": "895" + "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": [ @@ -253191,7 +282169,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.labelResponseDoc" + "$ref": "#/definitions/fiveguys.nearbyResponseDoc" } }, "400": { @@ -253200,14 +282178,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" } @@ -253224,41 +282196,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Discogs label profile", + "summary": "Find Five Guys restaurants near a coordinate", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/label/{id}/releases": { + "/fiveguys/nutrition": { "get": { "consumes": [ "application/json" ], - "description": "Returns a label's paginated release catalog (title, artist, format, catalog number, year). Credential-free official Discogs database data.", - "operationId": "discogs-label-releases", - "parameters": [ - { - "description": "Discogs label id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "895" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page, default 50, max 100", - "in": "query", - "name": "per_page", - "type": "integer" - } - ], + "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" ], @@ -253266,23 +282216,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.labelReleasesResponseDoc" - } - }, - "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" } @@ -253299,27 +282237,63 @@ "ApiKeyAuth": [] } ], - "summary": "List a Discogs label's releases", + "summary": "Get the current Five Guys nutrition & allergen PDF guide's location", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/master/{id}": { + "/fiveguys/ordering-locations": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Discogs master release: the version-agnostic grouping of a release across pressings/reissues (artists, tracklist, genres/styles, videos, images, marketplace stats). Credential-free official Discogs database data.", - "operationId": "discogs-master", + "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 master release id", - "in": "path", - "name": "id", + "description": "Search center latitude", + "in": "query", + "name": "latitude", "required": true, - "type": "string", - "x-example": "26647" + "type": "number", + "x-example": 30.267153 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "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 + }, + { + "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": [ @@ -253329,7 +282303,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.masterResponseDoc" + "$ref": "#/definitions/fiveguys.orderingLocationsResponseDoc" } }, "400": { @@ -253338,14 +282312,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" } @@ -253362,27 +282330,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Discogs master release", + "summary": "Find Five Guys restaurants near a coordinate with ordering details", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/release/{id}": { + "/fiveguys/ordering-menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Discogs release: artists, labels, formats, tracklist, credits, identifiers, videos, images, and community want/have/rating. Credential-free official Discogs database data (api.discogs.com).", - "operationId": "discogs-release", + "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 release 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": "249504" + "x-example": "23841" } ], "produces": [ @@ -253392,7 +282360,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.releaseResponseDoc" + "$ref": "#/definitions/fiveguys.orderingMenuResponseDoc" } }, "400": { @@ -253407,8 +282375,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -253425,51 +282393,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Discogs release", + "summary": "Get one Five Guys store's priced menu from the ordering platform", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/search": { + "/fiveguys/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches Discogs releases, masters, artists, and labels. Credential-free official Discogs database data.", - "operationId": "discogs-search", + "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": "Search query", + "description": "Free-text location: a city, a zip/postal code, a street address, or a landmark", "in": "query", - "name": "q", + "name": "query", "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": "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": [ @@ -253479,7 +282437,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.searchResponseDoc" + "$ref": "#/definitions/fiveguys.searchResponseDoc" } }, "400": { @@ -253488,8 +282446,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -253506,27 +282464,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Discogs database", + "summary": "Search Five Guys restaurants by free-text location", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/dominos/coupons": { + "/fiveguys/store": { "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 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": "Domino's store id, from /dominos/store-locator", + "description": "The restaurant's locator slug, e.g. \\", "in": "query", - "name": "store_id", - "required": true, + "name": "path", "type": "string", - "x-example": "4336" + "x-example": "703-s-seely-ave" + }, + { + "description": "The restaurant's entity id, e.g. \\", + "in": "query", + "name": "id", + "type": "string", + "x-example": "4060" } ], "produces": [ @@ -253536,7 +282500,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.couponsResponseDoc" + "$ref": "#/definitions/fiveguys.storeResponseDoc" } }, "400": { @@ -253569,27 +282533,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Domino's store's available coupons and deals", + "summary": "Get one Five Guys restaurant by its locator path", "tags": [ - "Dominos" + "FiveGuys" ] } }, - "/dominos/customization": { + "/fiverr/gig/{username}/{slug}": { "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 internal 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. Reads the same structured menu response as GET /dominos/menu, so it costs no additional upstream request. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", - "operationId": "dominos-customization", + "description": "Returns a normalized 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). Public data sourced from Fiverr's own server-rendered gig pages via a real browser-rendering backend. 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": "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" + }, + { + "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": [ @@ -253599,7 +282571,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.customizationResponseDoc" + "$ref": "#/definitions/fiverr.gigResponseDoc" } }, "400": { @@ -253614,8 +282586,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -253632,27 +282604,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Domino's store's full build-your-own customization catalog", + "summary": "Get Fiverr gig detail", "tags": [ - "Dominos" + "Fiverr" ] } }, - "/dominos/menu": { + "/fiverr/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Domino's US store's full menu, normalized into 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", + "description": "Searches Fiverr's public gig listings by free-text keyword, returning normalized gig summaries (title, seller username, seller level, rating, review count, starting price, category, thumbnail image). Public data sourced from Fiverr's own server-rendered search pages via a real browser-rendering backend. 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": "Domino's store id, from /dominos/store-locator", + "description": "Free-text gig search keyword", "in": "query", - "name": "store_id", + "name": "q", "required": true, "type": "string", - "x-example": "4336" + "x-example": "logo design" + }, + { + "description": "1-based result page. Defaults to 1.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -253662,7 +282641,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.menuResponseDoc" + "$ref": "#/definitions/fiverr.searchResponseDoc" } }, "400": { @@ -253671,14 +282650,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" } @@ -253695,60 +282668,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Domino's store's full structured menu", + "summary": "Search Fiverr gigs", "tags": [ - "Dominos" + "Fiverr" ] } }, - "/dominos/nutrition": { + "/fiverr/seller/{username}": { "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": "Returns a normalized 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. Public data sourced from Fiverr's own server-rendered seller profile pages via a real browser-rendering backend. 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", - "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)", - "in": "query", - "name": "product_code", + "description": "Fiverr seller username, e.g. from a search result's seller_username field", + "in": "path", + "name": "username", "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" + "x-example": "inshape_studio" } ], "produces": [ @@ -253758,7 +282698,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.nutritionResponseDoc" + "$ref": "#/definitions/fiverr.sellerResponseDoc" } }, "400": { @@ -253773,8 +282713,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -253791,27 +282731,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get calorie information for one Domino's product configuration", + "summary": "Get Fiverr seller profile", "tags": [ - "Dominos" + "Fiverr" ] } }, - "/dominos/store": { + "/flashscore/calendar": { "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 public tournament calendar entries, dates, winners when available, and competition paths for the current season.", + "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": [ @@ -253821,7 +282769,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.storeDetailResponseDoc" + "$ref": "#/definitions/flashscore.calendarResponseDoc" } }, "400": { @@ -253836,12 +282784,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -253854,76 +282796,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Domino's store's full profile record", + "summary": "Flashscore season calendar", "tags": [ - "Dominos" + "Flashscore" ] } }, - "/dominos/store-locator": { + "/flashscore/calendar-categories": { "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", - "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" - } - ], + "description": "Lists the current ATP, WTA, golf, badminton, and Formula 1 calendar pages.", + "operationId": "flashscore-calendar-categories", "produces": [ "application/json" ], "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/dominos.storeLocatorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.calendarCategoriesResponseDoc" } }, "503": { @@ -253938,35 +282831,73 @@ "ApiKeyAuth": [] } ], - "summary": "Find Domino's stores near an address, city/state, or ZIP code", + "summary": "Flashscore season calendar categories", "tags": [ - "Dominos" + "Flashscore" ] } }, - "/doordash/explore": { + "/flashscore/competitions": { "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": "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": "Consumer latitude", + "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" + ], "in": "query", - "name": "latitude", + "name": "sport", "required": true, - "type": "number", - "x-example": 37.7825 + "type": "string", + "x-example": "football" }, { - "description": "Consumer longitude", + "description": "Days from today; -7 to 7; defaults to 0", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "maximum": 7, + "minimum": -7, + "name": "day_offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -253976,7 +282907,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.exploreResponseDoc" + "$ref": "#/definitions/flashscore.competitionsResponseDoc" } }, "400": { @@ -253985,12 +282916,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -254003,49 +282928,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash nearby stores explore feed", + "summary": "Flashscore competitions by sport and date", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/feed": { + "/flashscore/match-h2h": { "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 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": "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": "xtmHKGT0" } ], "produces": [ @@ -254055,7 +282958,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.feedResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -254064,8 +282967,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -254082,75 +282985,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash store discovery feed", + "summary": "Flashscore match head-to-head and recent results", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/search": { + "/flashscore/match-highlights": { "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 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": "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": "j52jHsN8" } ], "produces": [ @@ -254160,7 +283015,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.searchResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -254169,8 +283024,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -254187,43 +283042,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search DoorDash pickup restaurants", + "summary": "Flashscore match highlights", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/search/autocomplete": { + "/flashscore/match-info": { "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 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": "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": "xtmHKGT0" } ], "produces": [ @@ -254233,7 +283072,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.searchResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -254242,8 +283081,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -254260,35 +283099,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash pickup search suggestions", + "summary": "Flashscore match venue and broadcast information", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/search/filters": { + "/flashscore/match-lineups": { "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": "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", "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": "j52jHsN8" } ], "produces": [ @@ -254298,7 +283129,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.searchFiltersResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -254307,8 +283138,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -254325,78 +283156,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash search filter options", + "summary": "Flashscore match lineups and formations", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/search/items": { + "/flashscore/match-news": { "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 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": "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": [ @@ -254406,7 +283186,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.searchItemsResponseDoc" + "$ref": "#/definitions/flashscore.matchNewsResponseDoc" } }, "400": { @@ -254415,12 +283195,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -254433,43 +283207,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search DoorDash dishes and items", + "summary": "Flashscore match news references", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}": { + "/flashscore/match-standings": { "get": { "consumes": [ "application/json" ], - "description": "Returns location-aware DoorDash store metadata through the Android mobile guest flow. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-store", + "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": "Numeric DoorDash store ID", - "in": "path", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "26282644" - }, - { - "description": "Delivery latitude", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "latitude", + "name": "id", "required": true, - "type": "number", - "x-example": 37.7825 + "type": "string", + "x-example": "xtmHKGT0" }, { - "description": "Delivery longitude", + "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": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "name": "view", + "type": "string", + "x-example": "overall" } ], "produces": [ @@ -254479,7 +283260,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -254494,12 +283275,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -254512,43 +283287,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DoorDash store", + "summary": "Flashscore match league standings", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/fulfillment": { + "/flashscore/match-stats": { "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 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": "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": "xtmHKGT0" } ], "produces": [ @@ -254558,7 +283317,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeFulfillmentResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -254573,12 +283332,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -254591,43 +283344,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash store fulfillment details", + "summary": "Flashscore match statistics", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/info": { + "/flashscore/navigation": { "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 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": "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": "Relative Flashscore navigation path; defaults to /. Use a path returned by flashscore-sports or flashscore-navigation.", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "name": "path", + "type": "string", + "x-example": "/basketball/usa/" } ], "produces": [ @@ -254637,7 +283373,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeInfoResponseDoc" + "$ref": "#/definitions/flashscore.navigationResponseDoc" } }, "400": { @@ -254652,12 +283388,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -254670,51 +283400,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash store contact info", + "summary": "Flashscore sport, category, country, and competition navigation", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/item/{item_id}": { + "/flashscore/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 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": "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", + "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": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 + "name": "category", + "type": "string", + "x-example": "football" }, { - "description": "Delivery longitude", + "description": "1-based page, 1 to 100; defaults to 1", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -254724,7 +283480,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeItemResponseDoc" + "$ref": "#/definitions/flashscore.newsListResponseDoc" } }, "400": { @@ -254739,12 +283495,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -254757,43 +283507,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash menu item details", + "summary": "Flashscore News listings by section", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/menu": { + "/flashscore/news-article": { "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 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": "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 article id", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 + "type": "string", + "x-example": "GYDHQ2yR" } ], "produces": [ @@ -254803,7 +283537,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.menuResponseDoc" + "$ref": "#/definitions/flashscore.newsArticleResponseDoc" } }, "400": { @@ -254818,12 +283552,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -254836,45 +283564,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DoorDash store menu", + "summary": "Flashscore news article metadata", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/reviews": { + "/flashscore/news-categories": { "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", - "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": "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/flashscore.newsCategoriesResponseDoc" + } + } + }, + "security": [ { - "description": "Delivery longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "ApiKeyAuth": [] } ], + "summary": "Flashscore News categories", + "tags": [ + "Flashscore" + ] + } + }, + "/flashscore/ranking-categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the live-verified public ranking categories, including tennis live rankings.", + "operationId": "flashscore-ranking-categories", "produces": [ "application/json" ], @@ -254882,25 +283613,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeReviewsResponseDoc" - } - }, - "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/flashscore.rankingCategoriesResponseDoc" } }, "503": { @@ -254915,27 +283628,64 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash store reviews", + "summary": "Flashscore ranking categories", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/draftkings/sportsbook/event": { + "/flashscore/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns one event's metadata (league id, sport id, teams, status, start time) from DraftKings' credential-free public JSON. `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 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 event 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": "event_id", + "name": "category", "required": true, "type": "string", - "x-example": "34240140" + "x-example": "tennis-atp" } ], "produces": [ @@ -254945,7 +283695,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.eventResponseDoc" + "$ref": "#/definitions/flashscore.rankingResponseDoc" } }, "400": { @@ -254960,12 +283710,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -254978,24 +283722,73 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook event", + "summary": "Flashscore rankings", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/event-context": { + "/flashscore/scores": { "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 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 event 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" + ], "in": "query", - "name": "event_id", + "name": "sport", "required": true, "type": "string", - "x-example": "34522271" + "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": [ @@ -255005,7 +283798,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.eventContextResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -255014,18 +283807,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": { @@ -255038,35 +283819,29 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook event context", + "summary": "Flashscore scores and fixtures by sport", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/event-markets": { + "/flashscore/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one event's betting markets and selections for a specific market category, from DraftKings' credential-free public JSON. `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, or from a DraftKings Sportsbook event page's own network traffic. An empty `markets` list is a valid response when the category has no markets currently posted for this event.", - "operationId": "draftkings-event-markets", + "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": "Numeric DraftKings event id", - "in": "query", - "name": "event_id", - "required": true, - "type": "string", - "x-example": "34497667" - }, - { - "description": "Numeric DraftKings market subcategory id", + "description": "Search phrase (2 to 80 characters)", "in": "query", - "name": "subcategory_id", + "maxLength": 80, + "minLength": 2, + "name": "q", "required": true, "type": "string", - "x-example": "6354" + "x-example": "Champions League" } ], "produces": [ @@ -255076,7 +283851,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.eventMarketsResponseDoc" + "$ref": "#/definitions/flashscore.searchResponseDoc" } }, "400": { @@ -255085,18 +283860,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": { @@ -255109,19 +283872,19 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook event markets", + "summary": "Flashscore search", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/featured-leagues": { + "/flashscore/sports": { "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": "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" ], @@ -255129,13 +283892,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.featuredLeaguesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.sportsResponseDoc" } }, "503": { @@ -255150,37 +283907,19 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook featured leagues", + "summary": "Flashscore sports and live category counts", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/futures": { + "/flashscore/top-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns league-level futures markets and selections for a specific DraftKings market category, from DraftKings' credential-free public JSON. `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": "Numeric DraftKings league id", - "in": "query", - "name": "league_id", - "required": true, - "type": "string", - "x-example": "84240" - }, - { - "description": "Numeric DraftKings futures market subcategory id", - "in": "query", - "name": "subcategory_id", - "required": true, - "type": "string", - "x-example": "17279" - } - ], + "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" ], @@ -255188,25 +283927,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.futuresResponseDoc" - } - }, - "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.topSearchResponseDoc" } }, "503": { @@ -255221,27 +283942,36 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook futures", + "summary": "Flashscore top search entities", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/league-events": { + "/flashscore/tournament-events": { "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 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": "Numeric DraftKings league id", + "description": "Relative Flashscore competition season results or fixtures path", "in": "query", - "name": "league_id", + "name": "path", "required": true, "type": "string", - "x-example": "84240" + "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": [ @@ -255251,7 +283981,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.leagueEventsResponseDoc" + "$ref": "#/definitions/flashscore.tournamentEventsResponseDoc" } }, "400": { @@ -255266,53 +283996,6 @@ "$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": "DraftKings Sportsbook league event directory", - "tags": [ - "DraftKings Sportsbook" - ] - } - }, - "/draftkings/sportsbook/leagues": { - "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", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/draftkings.leaguesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -255325,19 +284008,29 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook sports and leagues", + "summary": "Flashscore tournament season results or fixtures", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/live": { + "/flashscore/tournament-seasons": { "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": "Lists the seasons and winners 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": "Relative Flashscore competition archive path ending in /archive/", + "in": "query", + "name": "path", + "required": true, + "type": "string", + "x-example": "/football/europe/champions-league/archive/" + } + ], "produces": [ "application/json" ], @@ -255345,11 +284038,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.liveResponseDoc" + "$ref": "#/definitions/flashscore.tournamentSeasonsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -255366,27 +284065,49 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook live events", + "summary": "Flashscore tournament archive seasons", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/odds": { + "/flashscore/tournament-standings": { "get": { "consumes": [ "application/json" ], - "description": "Returns the primary betting markets (moneyline, spread, total) for every upcoming event in a DraftKings Sportsbook league, from DraftKings' credential-free public JSON. `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 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": "Numeric DraftKings league id", + "description": "Relative Flashscore competition path from flashscore-navigation or flashscore-competitions; omit /standings/", "in": "query", - "name": "league_id", + "name": "path", "required": true, "type": "string", - "x-example": "84240" + "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" } ], "produces": [ @@ -255396,7 +284117,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.oddsResponseDoc" + "$ref": "#/definitions/flashscore.tournamentStandingsResponseDoc" } }, "400": { @@ -255411,12 +284132,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -255429,19 +284144,29 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook odds", + "summary": "Flashscore competition standings table", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/quick-links": { + "/flashscore/tournament-standings-views": { "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 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": "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/" + } + ], "produces": [ "application/json" ], @@ -255449,11 +284174,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.quickLinksResponseDoc" + "$ref": "#/definitions/flashscore.tournamentStandingsViewsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -255470,49 +284201,60 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook quick links", + "summary": "Flashscore competition standings view discovery", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/team": { + "/foodpanda/restaurant": { "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 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": "Numeric DraftKings team id", + "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": "team_id", - "required": true, + "name": "market", "type": "string", - "x-example": "18454" + "x-example": "sg" }, { - "description": "Sport: football, hockey, basketball, baseball", - "enum": [ - "football", - "hockey", - "basketball", - "baseball" - ], + "description": "Restaurant code, from /foodpanda/search's code field", "in": "query", - "name": "sport", + "name": "code", "required": true, "type": "string", - "x-example": "football" + "x-example": "dxpr" }, { - "description": "Lowercase DraftKings team slug", + "description": "Caller latitude, optional", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "arizona-cardinals" + "name": "latitude", + "type": "number", + "x-example": 1.3521 + }, + { + "description": "Caller longitude, optional", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": 103.8198 } ], "produces": [ @@ -255522,7 +284264,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.teamResponseDoc" + "$ref": "#/definitions/foodpanda.restaurantResponseDoc" } }, "400": { @@ -255537,12 +284279,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -255555,35 +284291,46 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook team", + "summary": "Get one foodpanda restaurant's detail", "tags": [ - "DraftKings Sportsbook" + "Foodpanda" ] } }, - "/draftkings/sportsbook/teams": { + "/foodpanda/restaurant/menu": { "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 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": "League: nfl, nhl, nba, cbb, mlb, cfb", + "description": "Delivery Hero market the restaurant belongs to. Defaults to sg.", "enum": [ - "nfl", - "nhl", - "nba", - "cbb", - "mlb", - "cfb" + "sg", + "pk", + "bd", + "hk", + "my", + "ph", + "la", + "kh", + "tw", + "mm" ], "in": "query", - "name": "league", + "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": "nfl" + "x-example": "dxpr" } ], "produces": [ @@ -255593,7 +284340,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/draftkings.teamsResponseDoc" + "$ref": "#/definitions/foodpanda.menuResponseDoc" } }, "400": { @@ -255602,8 +284349,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -255620,41 +284367,46 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook league teams", + "summary": "Get one foodpanda restaurant's menu with prices", "tags": [ - "DraftKings Sportsbook" + "Foodpanda" ] } }, - "/duckduckgo/image": { + "/foodpanda/restaurant/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized DuckDuckGo image results for a query string: title, source page URL, image URL, thumbnail, dimensions, and hostname, plus page-based pagination. Results are fetched from DuckDuckGo's own image JSON API.", - "operationId": "duckduckgo-image", + "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": [ @@ -255664,7 +284416,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.imageResponseDoc" + "$ref": "#/definitions/foodpanda.reviewsResponseDoc" } }, "400": { @@ -255679,18 +284431,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": { @@ -255703,41 +284443,75 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo image results", + "summary": "Get a sample of one foodpanda restaurant's customer reviews", "tags": [ - "DuckDuckGo Search" + "Foodpanda" ] } }, - "/duckduckgo/news": { + "/foodpanda/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized DuckDuckGo news results for a query string: title, destination URL, source, excerpt, thumbnail, and relative/published time, plus page-based pagination. Results are fetched from DuckDuckGo's own news JSON API.", - "operationId": "duckduckgo-news", + "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", + "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": 1 + "x-example": 44 }, { - "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "description": "Restaurants to return, clamped to 50 (default 20)", "in": "query", - "name": "region", - "type": "string", - "x-example": "us-en" + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Result offset for pagination (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -255747,7 +284521,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.newsResponseDoc" + "$ref": "#/definitions/foodpanda.searchResponseDoc" } }, "400": { @@ -255756,24 +284530,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": { @@ -255786,64 +284542,54 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo news results", + "summary": "Search foodpanda restaurants near a location", "tags": [ - "DuckDuckGo Search" + "Foodpanda" ] } }, - "/duckduckgo/search": { + "/foodpanda/search/cuisines": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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. Results are fetched from DuckDuckGo's own server-rendered search page.", - "operationId": "duckduckgo-search", + "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", - "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": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "description": "Delivery Hero market. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph", + "la", + "kh", + "tw", + "mm" + ], "in": "query", - "name": "region", + "name": "market", "type": "string", - "x-example": "us-en" + "x-example": "sg" }, { - "description": "Restrict results to a recency window", - "enum": [ - "d", - "w", - "m", - "y" - ], + "description": "Search center latitude", "in": "query", - "name": "time_range", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 1.3521 }, { - "description": "Safe search level, defaults to DuckDuckGo's own moderate setting when omitted", - "enum": [ - "strict", - "moderate", - "off" - ], + "description": "Search center longitude", "in": "query", - "name": "safe_search", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": 103.8198 } ], "produces": [ @@ -255853,7 +284599,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.searchResponseDoc" + "$ref": "#/definitions/foodpanda.cuisinesResponseDoc" } }, "400": { @@ -255862,24 +284608,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": { @@ -255892,34 +284620,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo web results", + "summary": "Get foodpanda's live cuisine filter catalog for a location", "tags": [ - "DuckDuckGo Search" + "Foodpanda" ] } }, - "/duckduckgo/shopping": { + "/forbes/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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 public Forbes article metadata and body content from Forbes's same-host content JSON endpoint. The response preserves rich body HTML, normalized 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", + "description": "Canonical HTTPS Forbes article URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "running shoes" - }, - { - "description": "DuckDuckGo market code, e.g. us-en, uk-en", - "in": "query", - "name": "region", - "type": "string", - "x-example": "us-en" + "x-example": "https://www.forbes.com/sites/example/2026/09/21/example-story/" } ], "produces": [ @@ -255929,7 +284647,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.shoppingResponseDoc" + "$ref": "#/definitions/forbes.articleResponseDoc" } }, "400": { @@ -255968,41 +284686,30 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo shopping results", + "summary": "Forbes article content", "tags": [ - "DuckDuckGo Search" + "Forbes" ] } }, - "/duckduckgo/video": { + "/forbes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized DuckDuckGo video results for a query string: title, destination URL, description, duration, thumbnail, publisher/uploader, published time, and view count, plus page-based pagination. Results are fetched from DuckDuckGo's own video JSON API.", - "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": [ @@ -256012,7 +284719,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.videoResponseDoc" + "$ref": "#/definitions/forbes.authorResponseDoc" } }, "400": { @@ -256051,26 +284758,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": [ @@ -256080,7 +284798,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dunkin.directoryResponseDoc" + "$ref": "#/definitions/forbes.billionairesResponseDoc" } }, "400": { @@ -256101,6 +284819,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -256113,19 +284837,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" ], @@ -256133,7 +284854,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dunkin.menuResponseDoc" + "$ref": "#/definitions/forbes.categoriesResponseDoc" } }, "429": { @@ -256142,6 +284863,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -256154,56 +284881,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 current Forbes article-card metadata from a public Forbes navigation path. Use /forbes/categories to discover paths.", + "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": [ @@ -256213,7 +284908,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dunkin.nearbyResponseDoc" + "$ref": "#/definitions/forbes.headlinesResponseDoc" } }, "400": { @@ -256234,6 +284929,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -256246,27 +284947,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": [ @@ -256276,7 +284974,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dunkin.storeResponseDoc" + "$ref": "#/definitions/forbes.personResponseDoc" } }, "400": { @@ -256297,6 +284995,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -256309,24 +285013,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Dunkin store's detail", + "summary": "Forbes person profile", "tags": [ - "Dunkin" + "Forbes" ] } }, - "/dw/article": { + "/foreignaffairs/article": { "get": { - "description": "Returns public Deutsche Welle article metadata and body paragraphs from a canonical article URL.", - "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": [ @@ -256336,7 +285040,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/foreignaffairs.articleResponseDoc" } }, "400": { @@ -256351,6 +285055,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -256363,24 +285073,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": [ @@ -256390,7 +285106,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dwAuthorResponseDoc" + "$ref": "#/definitions/foreignaffairs.authorResponseDoc" } }, "400": { @@ -256405,69 +285121,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get a DW author profile", - "tags": [ - "DW" - ] - } - }, - "/dw/headlines": { - "get": { - "description": "Returns fresh headlines from one public Deutsche Welle section.", - "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" - } - ], - "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" } @@ -256484,16 +285139,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get DW section headlines", + "summary": "Get a Foreign Affairs author profile", "tags": [ - "DW" + "ForeignAffairs" ] } }, - "/dw/news": { + "/foreignaffairs/headlines": { "get": { - "description": "Returns fresh Deutsche Welle stories from the public RSS feed.", - "operationId": "dw-news", + "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" ], @@ -256501,39 +285156,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/foreignaffairs.headlinesResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get DW top stories", - "tags": [ - "DW" - ] - } - }, - "/dw/sections": { - "get": { - "description": "Returns the complete public Deutsche Welle English-edition section inventory (regions, topics, and categories) accepted by /dw/headlines.", - "operationId": "dw-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "503": { + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/app.Response" } } }, @@ -256542,26 +285177,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get DW sections", + "summary": "Get Foreign Affairs site-wide headlines", "tags": [ - "DW" + "ForeignAffairs" ] } }, - "/ebay/item/{item_id}": { + "/foreignaffairs/topic": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized details for a public eBay item listing.", - "operationId": "ebay-item", + "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": "eBay item ID", - "in": "path", - "name": "item_id", + "description": "Foreign Affairs topic slug from foreignaffairs-topics", + "in": "query", + "name": "topic", "required": true, - "type": "string" + "type": "string", + "x-example": "economics" } ], "produces": [ @@ -256571,7 +285204,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.itemResponseDoc" + "$ref": "#/definitions/foreignaffairs.topicResponseDoc" } }, "400": { @@ -256580,24 +285213,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": { @@ -256610,58 +285231,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay item details", + "summary": "Get a Foreign Affairs topic feed", "tags": [ - "eBay" + "ForeignAffairs" ] } }, - "/ebay/live/streams": { + "/foreignaffairs/topics": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns currently live and upcoming eBay Live streams for a category channel.", - "operationId": "ebay-live-streams", - "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", - "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" - } - ], + "description": "Returns the complete research-backed directory of topic values accepted by foreignaffairs-topic, including each topic's public RSS feed URL.", + "operationId": "foreignaffairs-topics", "produces": [ "application/json" ], @@ -256669,31 +285248,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.liveStreamsResponseDoc" - } - }, - "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" + "$ref": "#/definitions/foreignaffairs.topicsResponseDoc" } } }, @@ -256702,26 +285257,24 @@ "ApiKeyAuth": [] } ], - "summary": "List eBay Live streams", + "summary": "List Foreign Affairs topic feeds", "tags": [ - "eBay" + "ForeignAffairs" ] } }, - "/ebay/live/streams/batch": { + "/foreignpolicy/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized summaries for multiple eBay Live streams/events in one call, up to 9 ids per request.", - "operationId": "ebay-live-streams-batch", + "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": "One or more eBay Live stream/event ids, up to 9. Comma-separated or repeated query values are both accepted.", + "description": "Canonical foreignpolicy.com article URL", "in": "query", - "name": "ids", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://foreignpolicy.com/2026/04/15/china-ports-maritime-power/" } ], "produces": [ @@ -256731,7 +285284,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.liveStreamsBatchResponseDoc" + "$ref": "#/definitions/foreignpolicy.articleResponseDoc" } }, "400": { @@ -256740,14 +285293,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" } @@ -256764,26 +285317,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get multiple eBay Live streams", + "summary": "Get Foreign Policy article content", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/live/streams/{id}": { + "/foreignpolicy/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized detail for a single eBay Live stream/event, including each host's feedback summary for the last 365 days.", - "operationId": "ebay-live-stream", + "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 stream/event id", - "in": "path", - "name": "id", - "required": true, - "type": "string" + "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", + "type": "string", + "x-example": "https://foreignpolicy.com/author/anne-applebaum/" } ], "produces": [ @@ -256793,7 +285350,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.liveStreamResponseDoc" + "$ref": "#/definitions/foreignpolicy.authorResponseDoc" } }, "400": { @@ -256814,46 +285371,28 @@ "$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 eBay Live stream", - "tags": [ - "eBay" - ] - } - }, - "/ebay/live/streams/{id}/items": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the currently featured/auction items for an eBay Live stream, including live bidding state.", - "operationId": "ebay-live-stream-items", - "parameters": [ - { - "description": "eBay Live stream/event id", - "in": "path", - "name": "id", - "required": true, - "type": "string" + }, + "security": [ + { + "ApiKeyAuth": [] } ], + "summary": "Get a Foreign Policy author profile", + "tags": [ + "ForeignPolicy" + ] + } + }, + "/foreignpolicy/headlines": { + "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", "produces": [ "application/json" ], @@ -256861,13 +285400,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.liveStreamItemsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/foreignpolicy.headlinesResponseDoc" } }, "429": { @@ -256876,12 +285409,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -256894,30 +285421,16 @@ "ApiKeyAuth": [] } ], - "summary": "List an eBay Live stream's featured items", + "summary": "Get Foreign Policy site-wide headlines", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/search": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized eBay search results.", - "operationId": "ebay-search", - "parameters": [ - { - "description": "eBay search payload", - "in": "body", - "name": "option", - "required": true, - "schema": { - "$ref": "#/definitions/ebay.SearchOption" - } - } - ], + "/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" ], @@ -256925,13 +285438,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/foreignpolicy.liveResponseDoc" } }, "429": { @@ -256940,12 +285447,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -256958,26 +285459,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search eBay listings", + "summary": "List Foreign Policy Live conversations", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/seller/{seller}": { + "/foreignpolicy/live-detail": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized details for a public eBay seller profile.", - "operationId": "ebay-seller", + "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 seller username", - "in": "path", - "name": "seller", + "description": "Foreign Policy FP Live conversation slug", + "in": "query", + "name": "live", "required": true, - "type": "string" + "type": "string", + "x-example": "ama-ask-me-anything-ukraine" } ], "produces": [ @@ -256987,7 +285486,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.sellerResponseDoc" + "$ref": "#/definitions/foreignpolicy.liveDetailResponseDoc" } }, "400": { @@ -257008,12 +285507,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -257026,26 +285519,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay seller profile", + "summary": "Get a Foreign Policy Live conversation", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/seller/{seller}/about": { + "/foreignpolicy/project": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized seller about information from the public 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 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 seller username", - "in": "path", - "name": "seller", + "description": "Foreign Policy project slug", + "in": "query", + "name": "project", "required": true, - "type": "string" + "type": "string", + "x-example": "asia" } ], "produces": [ @@ -257055,7 +285546,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.sellerAboutResponseDoc" + "$ref": "#/definitions/foreignpolicy.projectResponseDoc" } }, "400": { @@ -257076,12 +285567,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -257094,45 +285579,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay seller about details", + "summary": "Get a Foreign Policy project hub", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/seller/{seller}/feedback": { + "/foreignpolicy/projects": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized seller feedback summary, detailed ratings, and recent review cards from the public eBay seller feedback tab.", - "operationId": "ebay-seller-feedback", + "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" - }, { "default": 1, - "description": "Feedback page number", + "description": "1-based project-directory page, defaults to 1", "in": "query", + "maximum": 100, + "minimum": 1, "name": "page", "type": "integer" - }, - { - "default": 48, - "description": "Reviews per page", - "enum": [ - 24, - 48, - 72 - ], - "in": "query", - "name": "per_page", - "type": "integer" } ], "produces": [ @@ -257142,7 +285607,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.sellerFeedbackResponseDoc" + "$ref": "#/definitions/foreignpolicy.projectsResponseDoc" } }, "400": { @@ -257151,24 +285616,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": { @@ -257181,31 +285634,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay seller feedback", + "summary": "List Foreign Policy project hubs", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/seller/{seller}/shop": { + "/foreignpolicy/topic": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized listings from the public eBay seller shop tab, with pagination backed by the store odtRefresh response.", - "operationId": "ebay-seller-shop", + "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", - "required": true, + "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": "world-brief" + }, { "default": 1, - "description": "Shop page number", + "description": "1-based archive page, defaults to 1", "in": "query", + "maximum": 100, + "minimum": 1, "name": "page", "type": "integer" } @@ -257217,7 +285681,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.sellerShopResponseDoc" + "$ref": "#/definitions/foreignpolicy.topicResponseDoc" } }, "400": { @@ -257238,12 +285702,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -257256,24 +285714,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay seller shop listings", + "summary": "Get Foreign Policy category or tag archive", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/economictimes/article": { + "/fortune/article": { "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", + "description": "Returns public Fortune article metadata and body paragraphs from a canonical article URL.", + "operationId": "fortune-article", "parameters": [ { - "description": "Canonical Economic Times article URL", + "description": "Canonical Fortune article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://economictimes.indiatimes.com/markets/aif-pms/example-story/articleshow/134466306.cms" + "x-example": "https://fortune.com/2026/09/21/example/" } ], "produces": [ @@ -257292,12 +285750,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -257316,24 +285768,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Economic Times article content", + "summary": "Get Fortune article content", "tags": [ - "Economic Times" + "Fortune" ] } }, - "/economictimes/author": { + "/fortune/author": { "get": { - "description": "Returns one Economic Times reporter's public profile: name, job title, biography, headshot, and their recent articles.", - "operationId": "economictimes-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 Economic Times author 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://economictimes.indiatimes.com/etreporter/author-kshitij-anand-479257392.cms" + "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": [ @@ -257343,7 +285808,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.economicTimesAuthorResponseDoc" + "$ref": "#/definitions/publicnews.fortuneAuthorResponseDoc" } }, "400": { @@ -257370,183 +285835,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Economic Times author profile", + "summary": "Get a Fortune author profile", "tags": [ - "Economic Times" + "Fortune" ] } }, - "/economictimes/headlines": { + "/fortune/companies": { "get": { - "description": "Returns fresh headlines from one public Economic Times section feed.", - "operationId": "economictimes-headlines", + "description": "Returns companies from Fortune's public company directory (9,000+ companies as of 2026-09-23) with search, filtering, and pagination.", + "operationId": "fortune-companies", "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" - ], + "description": "Case-insensitive company-name search", "in": "query", - "name": "section", - "required": true, - "type": "string" + "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" } ], "produces": [ @@ -257556,7 +285924,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.fortuneCompaniesResponseDoc" } }, "400": { @@ -257577,16 +285945,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Economic Times section headlines", + "summary": "Search the Fortune company directory", "tags": [ - "Economic Times" + "Fortune" ] } }, - "/economictimes/news": { + "/fortune/companies/filters": { "get": { - "description": "Returns fresh Economic Times top-stories headline metadata from its public RSS feed.", - "operationId": "economictimes-news", + "description": "Returns the complete country, industry, and ranking filter inventory (exact values) and revenue/employee ranges accepted by fortune/companies.", + "operationId": "fortune-company-filters", "produces": [ "application/json" ], @@ -257594,13 +285962,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.fortuneCompanyFiltersResponseDoc" } }, "503": { @@ -257615,16 +285977,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Economic Times top stories", + "summary": "Discover Fortune company directory filters", "tags": [ - "Economic Times" + "Fortune" ] } }, - "/economictimes/sections": { + "/fortune/company": { "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", + "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" ], @@ -257632,7 +286010,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" } } }, @@ -257641,28 +286037,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Economic Times sections", + "summary": "Get a Fortune company profile", "tags": [ - "Economic Times" + "Fortune" ] } }, - "/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", + "/fortune/headlines": { + "get": { + "description": "Returns fresh headlines from one public Fortune section.", + "operationId": "fortune-headlines", "parameters": [ { - "description": "Addresses to verify", - "in": "body", - "name": "option", + "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": "section", "required": true, - "schema": { - "$ref": "#/definitions/contact.VerifyRequest" - } + "type": "string", + "x-example": "latest" } ], "produces": [ @@ -257672,23 +286102,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/contact.verifyResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Invalid input, or no usable address in the batch", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Fortune section headlines", + "tags": [ + "Fortune" + ] + } + }, + "/fortune/news": { + "get": { + "description": "Returns fresh Fortune stories from the public RSS feed.", + "operationId": "fortune-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - "500": { - "description": "Internal server error during verification", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -257699,24 +286155,108 @@ "ApiKeyAuth": [] } ], - "summary": "Email verification — deliverability status for a batch of addresses", + "summary": "Get Fortune top stories", "tags": [ - "Web" + "Fortune" ] } }, - "/engadget/article": { + "/fortune/ranking": { "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", + "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": "Canonical Engadget article URL", + "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": "url", - "required": true, + "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": "https://www.engadget.com/2267229/meta-put-muse-in-a-tamagotchi-like-charm-device/" + "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", + "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" } ], "produces": [ @@ -257726,7 +286266,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/publicnews.fortuneRankingResponseDoc" } }, "400": { @@ -257735,12 +286275,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -257753,30 +286287,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Engadget article content", + "summary": "Search a Fortune ranking", "tags": [ - "Engadget" + "Fortune" ] } }, - "/engadget/author": { + "/fortune/ranking/filters": { "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", + "description": "Returns the complete list/year-specific filter fields, exact options, and sortable columns from Fortune's public ranking source.", + "operationId": "fortune-ranking-filters", "parameters": [ { - "description": "Author slug, e.g. mariella-moon", + "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": "slug", - "type": "string", - "x-example": "mariella-moon" + "name": "list", + "type": "string" }, { - "description": "Canonical engadget.com/author/ URL; alternative to slug", + "description": "For fortune-china-500, accepted values are 2026, 2025, 2024, 2023; omit for current year or call fortune-ranking-years", "in": "query", - "name": "url", + "name": "year", "type": "string", - "x-example": "https://www.engadget.com/author/mariella-moon/" + "x-example": "2026" } ], "produces": [ @@ -257786,7 +286320,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.engadgetAuthorResponseDoc" + "$ref": "#/definitions/publicnews.fortuneRankingFiltersResponseDoc" } }, "400": { @@ -257795,12 +286329,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -257813,72 +286341,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Engadget author profile", + "summary": "Discover Fortune ranking filters", "tags": [ - "Engadget" + "Fortune" ] } }, - "/engadget/headlines": { + "/fortune/ranking/lists": { "get": { - "description": "Returns fresh Engadget headlines from one public category feed.", - "operationId": "engadget-headlines", + "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. Fortune China 500 is parsed from its public server-rendered English list page.", + "operationId": "fortune-ranking-lists", + "produces": [ + "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", "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" - ], + "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": "section", - "required": true, + "name": "list", "type": "string" } ], @@ -257889,7 +286393,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.fortuneRankingYearsResponseDoc" } }, "400": { @@ -257910,16 +286414,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Engadget section headlines", + "summary": "List Fortune ranking years", "tags": [ - "Engadget" + "Fortune" ] } }, - "/engadget/news": { + "/fortune/sections": { "get": { - "description": "Returns fresh Engadget technology news from the public homepage feed. Engadget articles are free to read.", - "operationId": "engadget-news", + "description": "Returns the public Fortune editorial section inventory.", + "operationId": "fortune-sections", "produces": [ "application/json" ], @@ -257927,13 +286431,36 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "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" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fotmob.responseDoc" } }, "503": { @@ -257948,16 +286475,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Engadget top stories", + "summary": "FotMob matches with audio commentary", "tags": [ - "Engadget" + "FotMob" ] } }, - "/engadget/sections": { + "/fotmob/fifa-ranking-periods": { "get": { - "description": "Returns the public Engadget category taxonomy (48 categories) accepted by the headlines endpoint.", - "operationId": "engadget-sections", + "consumes": [ + "application/json" + ], + "description": "Returns every ranking period currently offered by FotMob for the selected gender. Use a returned periodId with /fotmob/fifa-rankings.", + "operationId": "fotmob-fifa-ranking-periods", + "parameters": [ + { + "description": "Ranking gender", + "enum": [ + "men", + "women" + ], + "in": "query", + "name": "gender", + "required": true, + "type": "string", + "x-example": "men" + } + ], "produces": [ "application/json" ], @@ -257965,7 +286509,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/fotmob.fifaRankingPeriodsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -257974,24 +286530,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get Engadget sections", + "summary": "FotMob FIFA ranking period directory", "tags": [ - "Engadget" + "FotMob" ] } }, - "/eonline/article": { + "/fotmob/fifa-rankings": { "get": { - "description": "Returns public E! News article metadata, byline and body paragraphs from a canonical article URL.", - "operationId": "eonline-article", + "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", "parameters": [ { - "description": "Canonical E! News article URL", + "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": "url", + "name": "period_id", "required": true, "type": "string", - "x-example": "https://www.eonline.com/news/1436400/inside-taylor-swift-dakota-johnsons-friendship" + "x-example": "20260720" } ], "produces": [ @@ -258001,7 +286572,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/fotmob.fifaRankingsResponseDoc" } }, "400": { @@ -258028,24 +286599,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get E! News article content", + "summary": "FotMob FIFA national-team rankings", "tags": [ - "E! News" + "FotMob" ] } }, - "/eonline/author": { + "/fotmob/latest-news": { "get": { - "description": "Returns an E! News writer's name and the articles listed on their author page, from a canonical author URL.", - "operationId": "eonline-author", + "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", "parameters": [ { - "description": "Canonical E! News author URL", + "description": "Zero-based news offset; defaults to 0", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.eonline.com/authors/natalie-finn" + "maximum": 10000, + "minimum": 0, + "name": "start_index", + "type": "integer" } ], "produces": [ @@ -258055,7 +286629,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.eonlineAuthorResponseDoc" + "$ref": "#/definitions/fotmob.newsListResponseDoc" } }, "400": { @@ -258082,37 +286656,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get an E! News author page", + "summary": "FotMob latest football news", "tags": [ - "E! News" + "FotMob" ] } }, - "/eonline/headlines": { + "/fotmob/league": { "get": { - "description": "Returns fresh headlines from one E! News section feed.", - "operationId": "eonline-headlines", + "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", "parameters": [ { - "description": "E! News section slug", - "enum": [ - "top_stories", - "tv", - "movies", - "music", - "celebrities", - "couples", - "royals", - "red_carpet", - "influencer", - "style", - "fashion", - "shop" - ], + "description": "Numeric FotMob league id from /fotmob/leagues", "in": "query", - "name": "section", + "name": "league_id", "required": true, - "type": "string" + "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" + }, + { + "default": false, + "description": "Include the optional overview shot map; increases response size", + "in": "query", + "name": "shotmap", + "type": "boolean" } ], "produces": [ @@ -258122,7 +286700,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -258131,6 +286709,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -258143,16 +286727,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get E! News section headlines", + "summary": "FotMob league details and sections", "tags": [ - "E! News" + "FotMob" ] } }, - "/eonline/news": { + "/fotmob/leagues": { "get": { - "description": "Returns fresh E! News (US edition) top stories from its public RSS feed.", - "operationId": "eonline-news", + "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", "produces": [ "application/json" ], @@ -258160,13 +286747,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fotmob.responseDoc" } }, "503": { @@ -258181,93 +286762,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get E! News top stories", - "tags": [ - "E! News" - ] - } - }, - "/eonline/sections": { - "get": { - "description": "Returns the E! News section inventory used by the headlines endpoint.", - "operationId": "eonline-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get E! News sections", + "summary": "FotMob competition directory", "tags": [ - "E! News" + "FotMob" ] } }, - "/espn/athlete": { + "/fotmob/lineup-builder-players": { "get": { "consumes": [ "application/json" ], - "description": "Returns one athlete's bio/overview (name, position, jersey, physicals, current team) from ESPN's credential-free public JSON. 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 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": "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": "Comma-separated list of 1 to 11 numeric FotMob player ids", "in": "query", - "name": "athlete", + "name": "player_ids", "required": true, "type": "string", - "x-example": "3139477" + "x-example": "961995,562727" } ], "produces": [ @@ -258277,7 +286792,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.athleteResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -258292,12 +286807,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -258310,67 +286819,27 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN athlete", + "summary": "FotMob lineup builder player metadata", "tags": [ - "ESPN" + "FotMob" ] } }, - "/espn/game-summary": { + "/fotmob/lineup-builder-team": { "get": { "consumes": [ "application/json" ], - "description": "Returns one game's matchup, betting odds, and boxscore stat totals from ESPN's credential-free public JSON. 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 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": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "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", + "description": "Numeric FotMob team id discoverable through /fotmob/search", "in": "query", - "name": "event", + "name": "team_id", "required": true, "type": "string", - "x-example": "401816033" + "x-example": "9825" } ], "produces": [ @@ -258380,7 +286849,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.gameSummaryResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -258395,12 +286864,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -258413,59 +286876,27 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN game summary", + "summary": "FotMob lineup builder team data", "tags": [ - "ESPN" + "FotMob" ] } }, - "/espn/news": { + "/fotmob/match": { "get": { "consumes": [ "application/json" ], - "description": "Returns recent news articles (headline, description, link) for a league from ESPN's credential-free public JSON. 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 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": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "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" - ], + "description": "Numeric FotMob match id", "in": "query", - "name": "league", + "name": "id", "required": true, "type": "string", - "x-example": "nba" + "x-example": "5181825" } ], "produces": [ @@ -258475,7 +286906,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.newsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -258490,12 +286921,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -258508,44 +286933,27 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN league news", + "summary": "FotMob match details", "tags": [ - "ESPN" + "FotMob" ] } }, - "/espn/rankings": { + "/fotmob/match-media": { "get": { "consumes": [ "application/json" ], - "description": "Returns poll rankings (e.g. AP Top 25) for a college league from ESPN's credential-free public JSON. 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 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": "Sport key", - "enum": [ - "football", - "basketball" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "football" - }, - { - "description": "College league key", - "enum": [ - "college-football", - "mens-college-basketball", - "womens-college-basketball" - ], + "description": "Numeric FotMob match id, discoverable from /fotmob/matches or /fotmob/search", "in": "query", - "name": "league", + "name": "id", "required": true, "type": "string", - "x-example": "college-football" + "x-example": "5795457" } ], "produces": [ @@ -258555,7 +286963,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.rankingsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -258570,12 +286978,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -258588,86 +286990,34 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN poll rankings", + "summary": "FotMob match videos and media metadata", "tags": [ - "ESPN" + "FotMob" ] } }, - "/espn/scoreboard": { + "/fotmob/matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns games (scores, schedule, status, and odds when available) for a sport and league from ESPN's credential-free public JSON. 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 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": "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": "Date in YYYYMMDD format", "in": "query", - "name": "league", + "name": "date", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "20260925" }, { - "description": "Date or range as YYYYMMDD, YYYYMMDD-YYYYMMDD, or YYYY; defaults to the current scoreboard", + "description": "IANA timezone; defaults to UTC", "in": "query", - "name": "dates", + "name": "timezone", "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": "Asia/Shanghai" } ], "produces": [ @@ -258677,7 +287027,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.scoreboardResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -258686,18 +287036,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": { @@ -258710,78 +287048,35 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN scoreboard", + "summary": "FotMob matches for a date", "tags": [ - "ESPN" + "FotMob" ] } }, - "/espn/standings": { + "/fotmob/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns league standings grouped by conference/division from ESPN's credential-free public JSON. 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 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": "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 FotMob league id", "in": "query", - "name": "league", + "name": "league_id", "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 + "x-example": "47" }, { - "description": "Season type", - "enum": [ - 1, - 2, - 3 - ], + "description": "Zero-based news offset; defaults to 0", "in": "query", - "name": "seasontype", - "type": "integer", - "x-example": 2 + "maximum": 10000, + "minimum": 0, + "name": "start_index", + "type": "integer" } ], "produces": [ @@ -258791,7 +287086,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.standingsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -258806,12 +287101,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -258824,67 +287113,27 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN standings", + "summary": "FotMob league news", "tags": [ - "ESPN" + "FotMob" ] } }, - "/espn/team": { + "/fotmob/news-article": { "get": { "consumes": [ "application/json" ], - "description": "Returns one team's detail (identity, colors, record, standing summary) from ESPN's credential-free public JSON. 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 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": "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": "Complete FotMob top-news article id and slug from the public article URL", "in": "query", - "name": "team", + "name": "id", "required": true, "type": "string", - "x-example": "KC" + "x-example": "29776-fotmob-totw-premier-league-matchday-5s-best-xi" } ], "produces": [ @@ -258894,7 +287143,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.teamResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -258909,12 +287158,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -258927,67 +287170,34 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN team detail", + "summary": "FotMob full top-news article", "tags": [ - "ESPN" + "FotMob" ] } }, - "/espn/team-roster": { + "/fotmob/player": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's roster (players with position, jersey, age, and experience) plus head coach from ESPN's credential-free public JSON. 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 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": "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 FotMob player id from fotmob/search", "in": "query", - "name": "league", + "name": "id", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "961995" }, { - "description": "Team id (numeric) or abbreviation", + "default": true, + "description": "Include market-value history; defaults to true", "in": "query", - "name": "team", - "required": true, - "type": "string", - "x-example": "KC" + "name": "include_market_values", + "type": "boolean" } ], "produces": [ @@ -258997,7 +287207,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.rosterResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259012,12 +287222,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -259030,59 +287234,35 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN team roster", + "summary": "FotMob player profile", "tags": [ - "ESPN" + "FotMob" ] } }, - "/espn/teams": { + "/fotmob/player-match-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns the full team list for a sport and league from ESPN's credential-free public JSON. 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 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": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], + "description": "Numeric FotMob player id", "in": "query", - "name": "sport", + "name": "player_id", "required": true, "type": "string", - "x-example": "basketball" + "x-example": "961995" }, { - "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 FotMob match id", "in": "query", - "name": "league", + "name": "match_id", "required": true, "type": "string", - "x-example": "nba" + "x-example": "5795457" } ], "produces": [ @@ -259092,7 +287272,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.teamsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259107,12 +287287,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -259125,27 +287299,50 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN team list", + "summary": "FotMob player match stats", "tags": [ - "ESPN" + "FotMob" ] } }, - "/etsy/listing/{id}": { + "/fotmob/player-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns Etsy listing detail: title, price, images, materials, tags, and shop.", - "operationId": "etsy-listing", + "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": "Numeric Etsy listing id", - "in": "path", - "name": "id", + "description": "Numeric FotMob player id from fotmob/search", + "in": "query", + "name": "player_id", "required": true, "type": "string", - "x-example": "1044347578" + "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": [ @@ -259155,7 +287352,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.listingResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259170,18 +287367,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": { @@ -259194,48 +287379,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Etsy listing detail", + "summary": "FotMob player match history", "tags": [ - "Etsy" + "FotMob" ] } }, - "/etsy/listing/{id}/reviews": { + "/fotmob/player-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns buyer reviews for an Etsy listing.", - "operationId": "etsy-listing-reviews", + "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": "Numeric Etsy listing id", - "in": "path", - "name": "id", + "description": "Numeric FotMob player id from fotmob/search", + "in": "query", + "name": "player_id", "required": true, "type": "string", - "x-example": "1044347578" - }, - { - "description": "0-based review offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "961995" }, { - "description": "Review sort order", - "enum": [ - "newest", - "oldest", - "highest_rating", - "lowest_rating", - "most_relevant" - ], + "description": "Player-specific entryId from fotmob/player statSeasons", "in": "query", - "name": "sort", + "name": "season_id", + "required": true, "type": "string", - "x-example": "newest" + "x-example": "0-1" } ], "produces": [ @@ -259245,7 +287417,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.listingReviewsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259260,18 +287432,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": { @@ -259284,41 +287444,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Etsy listing reviews", + "summary": "FotMob player season statistics", "tags": [ - "Etsy" + "FotMob" ] } }, - "/etsy/search": { + "/fotmob/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Etsy product search results across shops for a keyword query.", - "operationId": "etsy-search", + "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 keywords", + "description": "Search phrase, 1 to 50 characters", "in": "query", - "name": "q", + "maxLength": 50, + "minLength": 1, + "name": "term", "required": true, "type": "string", - "x-example": "handmade mug" - }, - { - "description": "0-based result offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Page size (default 36, max 100)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 36 + "x-example": "Arsenal" } ], "produces": [ @@ -259328,7 +287476,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.searchResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259337,18 +287485,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": { @@ -259361,34 +287497,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Etsy listings", + "summary": "Search FotMob entities", "tags": [ - "Etsy" + "FotMob" ] } }, - "/etsy/shop/search": { + "/fotmob/seasons": { "get": { "consumes": [ "application/json" ], - "description": "Returns Etsy shops matching a keyword.", - "operationId": "etsy-shop-search", + "description": "Returns the complete list of season values accepted by the FotMob league endpoint for one competition.", + "operationId": "fotmob-seasons", "parameters": [ { - "description": "Shop search keyword", + "description": "Numeric FotMob league id from /fotmob/leagues", "in": "query", - "name": "q", + "name": "league_id", "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": 47 } ], "produces": [ @@ -259398,7 +287527,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.shopSearchResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259407,14 +287536,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" } @@ -259431,27 +287554,77 @@ "ApiKeyAuth": [] } ], - "summary": "Search Etsy shops", + "summary": "FotMob league season discovery", "tags": [ - "Etsy" + "FotMob" ] } }, - "/etsy/shop/{id}": { + "/fotmob/stats": { "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", + "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": "Numeric Etsy shop id or shop name", - "in": "path", - "name": "id", + "description": "Numeric FotMob league id", + "in": "query", + "name": "league_id", "required": true, "type": "string", - "x-example": "gaguatelier" + "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": "position", + "type": "string", + "x-example": "striker" } ], "produces": [ @@ -259461,7 +287634,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.shopResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259476,18 +287649,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": { @@ -259500,48 +287661,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get Etsy shop profile", + "summary": "FotMob league player or team statistics", "tags": [ - "Etsy" + "FotMob" ] } }, - "/etsy/shop/{id}/listings": { + "/fotmob/stats-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a shop's listing catalog, optionally filtered by keyword. Accepts a numeric shop id or a shop name.", - "operationId": "etsy-shop-listings", + "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": "Numeric Etsy shop id or shop name", - "in": "path", - "name": "id", + "description": "Numeric FotMob league id", + "in": "query", + "name": "league_id", "required": true, "type": "string", - "x-example": "gaguatelier" + "x-example": "47" }, { - "description": "Keyword filter within the shop's own catalog", + "description": "Numeric season id; omit to discover seasons", "in": "query", - "name": "q", + "name": "season_id", "type": "string", - "x-example": "mug" - }, - { - "description": "0-based listing offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "36781" }, { - "description": "Page size (default 24)", + "description": "Stats subject", + "enum": [ + "players", + "teams" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "name": "type", + "required": true, + "type": "string", + "x-example": "players" } ], "produces": [ @@ -259551,7 +287710,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.shopListingsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259566,14 +287725,53 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "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" + } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -259590,41 +287788,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Etsy shop's listings", + "summary": "FotMob league table", "tags": [ - "Etsy" + "FotMob" ] } }, - "/etsy/shop/{id}/reviews": { + "/fotmob/team": { "get": { "consumes": [ "application/json" ], - "description": "Returns buyer reviews for an Etsy shop. Accepts a numeric shop id or a shop name.", - "operationId": "etsy-shop-reviews", + "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 Etsy shop id or shop name", - "in": "path", + "description": "Numeric FotMob team id", + "in": "query", "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 + "x-example": "9825" } ], "produces": [ @@ -259634,7 +287818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.shopReviewsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259649,18 +287833,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": { @@ -259673,24 +287845,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Etsy shop reviews", + "summary": "FotMob team details", "tags": [ - "Etsy" + "FotMob" ] } }, - "/euronews/article": { + "/fotmob/team-fixtures": { "get": { - "description": "Returns public Euronews article metadata and body paragraphs from a canonical English-edition article URL.", - "operationId": "euronews-article", + "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": "Canonical Euronews article URL", + "description": "Numeric FotMob team id", "in": "query", - "name": "url", + "name": "team_id", "required": true, "type": "string", - "x-example": "https://www.euronews.com/2026/09/24/example-article-slug" + "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": [ @@ -259700,7 +287883,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259727,24 +287910,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Euronews article content", + "summary": "FotMob paginated team fixtures", "tags": [ - "Euronews" + "FotMob" ] } }, - "/euronews/author": { + "/fotmob/team-news": { "get": { - "description": "Returns a Euronews author's byline metadata and recent articles from a canonical profile URL.", - "operationId": "euronews-author", + "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", "parameters": [ { - "description": "Canonical Euronews author profile URL", + "description": "Numeric FotMob team id", "in": "query", - "name": "url", + "name": "team_id", "required": true, - "type": "string", - "x-example": "https://www.euronews.com/profiles/2748" + "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": [ @@ -259754,7 +287949,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.euronewsAuthorResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259781,67 +287976,122 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Euronews author profile", + "summary": "FotMob team news", "tags": [ - "Euronews" + "FotMob" ] } }, - "/euronews/headlines": { + "/fotmob/transfers": { "get": { - "description": "Returns fresh headlines from one public Euronews English-edition section.", - "operationId": "euronews-headlines", + "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", "parameters": [ { - "description": "Euronews section slug", + "default": "all", + "description": "Feed mode", "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" + "all", + "rumours", + "popular" ], "in": "query", - "name": "section", - "required": true, + "name": "mode", + "type": "string" + }, + { + "default": 1, + "description": "One-based result page; 50 rows per page", + "in": "query", + "maximum": 200, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": "6months", + "description": "Time window", + "enum": [ + "6months", + "1year", + "2years", + "3years" + ], + "in": "query", + "name": "last", + "type": "string" + }, + { + "default": "all", + "description": "Transfer direction; applied when league_ids or team_ids is supplied", + "enum": [ + "all", + "in", + "out" + ], + "in": "query", + "name": "direction", + "type": "string" + }, + { + "description": "Minimum transfer fee in EUR", + "in": "query", + "minimum": 0, + "name": "min_fee", + "type": "integer" + }, + { + "description": "Maximum transfer fee in EUR", + "in": "query", + "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": "47" + }, + { + "description": "Comma-separated numeric FotMob team ids, up to 50; discover with /fotmob/search", + "in": "query", + "name": "team_ids", + "type": "string", + "x-example": "8456" + }, + { + "default": "lastModified", + "description": "Sort column", + "enum": [ + "lastModified", + "fee", + "date", + "name", + "fromClubName", + "toClubName" + ], + "in": "query", + "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": [ @@ -259851,7 +288101,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259860,6 +288110,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -259872,16 +288128,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Euronews section headlines", + "summary": "FotMob transfer center", "tags": [ - "Euronews" + "FotMob" ] } }, - "/euronews/news": { + "/fotmob/trending-news": { "get": { - "description": "Returns fresh Euronews English-edition top stories from its public RSS feed.", - "operationId": "euronews-news", + "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" ], @@ -259889,11 +288148,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/fotmob.newsListResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -259910,16 +288169,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Euronews top stories", + "summary": "FotMob trending football news", "tags": [ - "Euronews" + "FotMob" ] } }, - "/euronews/sections": { + "/fotmob/trending-searches": { "get": { - "description": "Returns the public Euronews English-edition section inventory used by the headlines endpoint.", - "operationId": "euronews-sections", + "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" ], @@ -259927,7 +288189,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -259936,33 +288204,117 @@ "ApiKeyAuth": [] } ], - "summary": "Get Euronews sections", + "summary": "FotMob trending search suggestions", "tags": [ - "Euronews" + "FotMob" ] } }, - "/everlane/collections": { + "/fotmob/tv-guide": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 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": "1-based page, defaults to 1", + "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": "page", - "type": "integer", - "x-example": 1 + "name": "country", + "required": true, + "type": "string", + "x-example": "us" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "IANA timezone for local times", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "timezone", + "type": "string", + "x-example": "America/New_York" } ], "produces": [ @@ -259972,7 +288324,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -259981,8 +288333,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -259999,41 +288351,110 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane collections", + "summary": "FotMob football TV guide", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/collections/{handle}/products": { + "/fotmob/tv-guide-channels": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "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": "Collection handle", - "in": "path", - "name": "handle", + "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": "country", "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": "us" } ], "produces": [ @@ -260043,7 +288464,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -260058,12 +288479,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -260076,35 +288491,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane collection products", + "summary": "FotMob TV guide channels", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/pages": { + "/fotmob/tv-guide-countries": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Everlane (https://www.everlane.com). The storefront URL is fixed server-side.", - "operationId": "everlane-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 all country codes exposed by FotMob's public football TV guide country selector.", + "operationId": "fotmob-tv-guide-countries", "produces": [ "application/json" ], @@ -260112,19 +288511,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" + "$ref": "#/definitions/fotmob.responseDoc" } }, "503": { @@ -260139,27 +288526,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane static pages", + "summary": "FotMob TV guide country directory", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/pages/{handle}": { + "/foxnews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized static page detail for one Everlane (https://www.everlane.com) page handle. The storefront URL is fixed server-side.", - "operationId": "everlane-page", + "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": "Page handle", - "in": "path", - "name": "handle", + "description": "Canonical Fox News article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "https://www.foxnews.com/us/example-story" } ], "produces": [ @@ -260169,7 +288553,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/foxnews.articleResponseDoc" } }, "400": { @@ -260202,33 +288586,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Everlane static page", + "summary": "Get Fox News article content", "tags": [ - "Everlane" + "Fox News" ] } }, - "/everlane/products": { + "/foxnews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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", + "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": "1-based page, defaults to 1", + "description": "Fox News author name slug, e.g. brooke-taylor", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "slug", + "type": "string", + "x-example": "brooke-taylor" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Canonical https://www.foxnews.com/person// author page URL, as an alternative to slug", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "url", + "type": "string", + "x-example": "https://www.foxnews.com/person/t/brooke-taylor" } ], "produces": [ @@ -260238,7 +288619,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/foxnews.authorResponseDoc" } }, "400": { @@ -260247,6 +288628,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -260265,27 +288652,38 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane products", + "summary": "Get Fox News author profile", "tags": [ - "Everlane" + "Fox News" ] } }, - "/everlane/products/{handle}": { + "/foxnews/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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": "Returns fresh headlines from one public Fox News article RSS section. Use foxnews-sections for the current value space.", + "operationId": "foxnews-headlines", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "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", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "us" } ], "produces": [ @@ -260295,7 +288693,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/foxnews.headlinesResponseDoc" } }, "400": { @@ -260328,47 +288726,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Everlane product", + "summary": "Get Fox News section headlines", "tags": [ - "Everlane" + "Fox News" ] } }, - "/everlane/products/{handle}/recommendations": { + "/foxnews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized recommended products for one Everlane (https://www.everlane.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "everlane-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" - } - ], + "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" ], @@ -260376,19 +288743,7 @@ "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" + "$ref": "#/definitions/foxnews.newsResponseDoc" } }, "429": { @@ -260409,41 +288764,46 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane product recommendations", + "summary": "Get Fox News top stories", "tags": [ - "Everlane" + "Fox News" ] } }, - "/everlane/search/suggest": { + "/foxnews/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from Everlane's (https://www.everlane.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "everlane-search-suggest", + "description": "Searches Fox News' public credential-free Moxie search surface. Results may include article, video, or slideshow records; use type to restrict the result kind.", + "operationId": "foxnews-search", "parameters": [ { "description": "Search query", "in": "query", + "maxLength": 200, + "minLength": 1, "name": "q", "required": true, "type": "string", - "x-example": "wool" + "x-example": "election" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "default": 1, + "description": "1-based result offset", "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "maximum": 10000, + "minimum": 1, + "name": "start", + "type": "integer" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Result type", + "enum": [ + "article", + "video", + "slideshow" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "type", + "type": "string" } ], "produces": [ @@ -260453,7 +288813,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/foxnews.searchResponseDoc" } }, "400": { @@ -260480,42 +288840,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get Everlane search suggestions", + "summary": "Search Fox News public content", "tags": [ - "Everlane" + "Fox News" ] } }, - "/everlane/sitemap/urls": { + "/foxnews/sections": { "get": { - "consumes": [ + "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" ], - "description": "Returns capped URL entries from Everlane's (https://www.everlane.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "everlane-sitemap-urls", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/foxnews.sectionsResponseDoc" + } + }, + "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": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "Canonical FOX Sports story URL", "in": "query", - "name": "type", + "name": "url", + "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": "https://www.foxsports.com/stories/nfl/how-to-watch-eagles-vs-bears-tv-channel-live-stream-time-2026-week-3" } ], "produces": [ @@ -260525,7 +288899,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -260534,6 +288908,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -260552,19 +288932,51 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane sitemap URLs", + "summary": "Get FOX Sports article content", "tags": [ - "Everlane" + "FOX Sports" ] } }, - "/everlane/sitemaps": { + "/foxsports/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns current headlines from one public FOX Sports editorial RSS feed.", + "operationId": "foxsports-headlines", + "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" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "top" + } ], - "description": "Returns child sitemap URLs from Everlane's (https://www.everlane.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "everlane-sitemaps", "produces": [ "application/json" ], @@ -260572,7 +288984,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -260599,19 +289011,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane sitemaps", + "summary": "Get FOX Sports section headlines", "tags": [ - "Everlane" + "FOX Sports" ] } }, - "/everlane/store": { + "/foxsports/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized storefront metadata for Everlane (https://www.everlane.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "everlane-store", + "description": "Returns current FOX Sports top stories from the official public All Headlines RSS feed.", + "operationId": "foxsports-news", "produces": [ "application/json" ], @@ -260619,13 +289028,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -260646,24 +289049,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Everlane store metadata", + "summary": "Get FOX Sports top stories", "tags": [ - "Everlane" + "FOX Sports" ] } }, - "/ew/article": { + "/foxsports/sections": { "get": { - "description": "Returns public Entertainment Weekly article metadata and body paragraphs from a canonical article URL.", - "operationId": "ew-article", + "description": "Returns the live-verified public editorial RSS feed inventory used by foxsports-headlines.", + "operationId": "foxsports-sections", + "produces": [ + "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", "parameters": [ { - "description": "Canonical Entertainment Weekly article URL", + "description": "Canonical France 24 article URL", "in": "query", "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" + "x-example": "https://www.france24.com/en/europe/20260924-eu-sanctions-russian-pundit-xenia-fedorova-after-expulsion-from-france" } ], "produces": [ @@ -260700,24 +289129,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Entertainment Weekly article content", + "summary": "Get France 24 article content", "tags": [ - "Entertainment Weekly" + "France 24" ] } }, - "/ew/author": { + "/france24/author": { "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", + "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": "Canonical ew.com/author/ or ew.com/- profile URL", + "description": "Canonical www.france24.com/en/author// URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://ew.com/author/dalton-ross/" + "x-example": "https://www.france24.com/en/author/france-24/" } ], "produces": [ @@ -260727,7 +289156,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ewAuthorResponseDoc" + "$ref": "#/definitions/publicnews.france24AuthorResponseDoc" } }, "400": { @@ -260754,34 +289183,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Entertainment Weekly author profile", + "summary": "Get a France 24 author profile", "tags": [ - "Entertainment Weekly" + "France 24" ] } }, - "/ew/headlines": { + "/france24/headlines": { "get": { - "description": "Returns fresh headlines from one public Entertainment Weekly section.", - "operationId": "ew-headlines", + "description": "Returns fresh headlines from one public France 24 English-edition section.", + "operationId": "france24-headlines", "parameters": [ { - "description": "Entertainment Weekly section slug", + "description": "France 24 section slug", "enum": [ - "tv", - "movies", - "music", - "what-to-watch", - "binge", - "celebrity", - "awardist", - "books", - "theater" + "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" + "type": "string", + "x-example": "africa" } ], "produces": [ @@ -260812,16 +289245,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Entertainment Weekly section headlines", + "summary": "Get France 24 section headlines", "tags": [ - "Entertainment Weekly" + "France 24" ] } }, - "/ew/news": { + "/france24/news": { "get": { - "description": "Returns fresh Entertainment Weekly stories from its homepage.", - "operationId": "ew-news", + "description": "Returns fresh France 24 English-edition stories from the public RSS feed.", + "operationId": "france24-news", "produces": [ "application/json" ], @@ -260844,16 +289277,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Entertainment Weekly top stories", + "summary": "Get France 24 top stories", "tags": [ - "Entertainment Weekly" + "France 24" ] } }, - "/ew/sections": { + "/france24/sections": { "get": { - "description": "Returns the complete public Entertainment Weekly primary-navigation section inventory accepted by /ew/headlines.", - "operationId": "ew-sections", + "description": "Returns the complete public France 24 English-edition section inventory (regions, topics, and other public hubs) accepted by /france24/headlines.", + "operationId": "france24-sections", "produces": [ "application/json" ], @@ -260870,30 +289303,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Entertainment Weekly sections", + "summary": "Get France 24 sections", "tags": [ - "Entertainment Weekly" + "France 24" ] } }, - "/expedia/activities/search": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Expedia Things To Do (activities/tours) search results for a free-text destination and date range.", - "operationId": "expedia-activities-search", - "parameters": [ - { - "description": "Activity search payload", - "in": "body", - "name": "option", - "required": true, - "schema": { - "$ref": "#/definitions/expedia.ActivitySearchOption" - } - } - ], + "/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" ], @@ -260901,23 +289320,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaActivitySearchResponseDoc" + "$ref": "#/definitions/freemalaysiatoday.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "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": "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" } @@ -260934,28 +289379,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Expedia activities", + "summary": "List Free Malaysia Today sections", "tags": [ - "Expedia" + "Free Malaysia Today" ] } }, - "/expedia/flights/search": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Expedia Flights search results (departing-leg offers) for an origin/destination IATA pair and date range.", - "operationId": "expedia-flights-search", + "/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": [ { - "description": "Flights search payload", - "in": "body", - "name": "option", + "description": "Canonical FT article URL", + "in": "query", + "name": "url", "required": true, - "schema": { - "$ref": "#/definitions/expedia.FlightsSearchOption" - } + "type": "string", + "x-example": "https://www.ft.com/content/018aa34c-2498-4120-906b-5baf36e98c77" } ], "produces": [ @@ -260965,7 +289406,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaFlightsSearchResponseDoc" + "$ref": "#/definitions/ft.articleResponseDoc" } }, "400": { @@ -260974,14 +289415,20 @@ "$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" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -260998,28 +289445,37 @@ "ApiKeyAuth": [] } ], - "summary": "Search Expedia flights", + "summary": "Get a Financial Times article's content", "tags": [ - "Expedia" + "FT" ] } }, - "/expedia/locations/search": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized destination/property typeahead suggestions (cities, airports, neighborhoods, hotels) for a free-text term.", - "operationId": "expedia-locations-search", + "/ft/author": { + "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", "parameters": [ { - "description": "Location search payload", - "in": "body", - "name": "option", - "required": true, - "schema": { - "$ref": "#/definitions/expedia.LocationSearchOption" - } + "description": "Author URL slug, e.g. martin-wolf", + "in": "query", + "name": "slug", + "type": "string", + "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": "1-based page number of the author's article list", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -261029,7 +289485,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaLocationSearchResponseDoc" + "$ref": "#/definitions/ft.authorResponseDoc" } }, "400": { @@ -261038,14 +289494,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" } @@ -261062,30 +289518,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Expedia destinations", + "summary": "Get an FT author profile", "tags": [ - "Expedia" + "FT" ] } }, - "/expedia/properties/detail": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns a hotel's detail summary (name, star rating, address/coordinates, top amenities) for a known property id.", - "operationId": "expedia-properties-detail", - "parameters": [ - { - "description": "Property detail payload", - "in": "body", - "name": "option", - "required": true, - "schema": { - "$ref": "#/definitions/expedia.PropertyDetailOption" - } - } - ], + "/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" ], @@ -261093,7 +289535,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaPropertyDetailResponseDoc" + "$ref": "#/definitions/ft.categoriesResponseDoc" } }, "400": { @@ -261102,24 +289544,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": { @@ -261132,28 +289562,32 @@ "ApiKeyAuth": [] } ], - "summary": "Expedia Stays property detail", + "summary": "List Financial Times sections", "tags": [ - "Expedia" + "FT" ] } }, - "/expedia/properties/filters": { - "post": { - "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", + "/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": "Property filters payload", - "in": "body", - "name": "option", + "description": "Section slug from /ft/categories", + "in": "query", + "name": "section", "required": true, - "schema": { - "$ref": "#/definitions/expedia.PropertyFiltersOption" - } + "type": "string", + "x-example": "world" + }, + { + "description": "Results page", + "in": "query", + "maximum": 20, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -261163,7 +289597,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaPropertyFiltersResponseDoc" + "$ref": "#/definitions/ft.headlinesResponseDoc" } }, "400": { @@ -261184,8 +289618,46 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the latest stories in a Financial Times section", + "tags": [ + "FT" + ] + } + }, + "/ft/news": { + "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": [ + "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" } @@ -261202,28 +289674,54 @@ "ApiKeyAuth": [] } ], - "summary": "Expedia search filters", + "summary": "Get the latest Financial Times stories", "tags": [ - "Expedia" + "FT" ] } }, - "/expedia/properties/reviews": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns a hotel's overall rating and highlighted/recent guest reviews (reviewer, date, rating, message) for a known property id.", - "operationId": "expedia-properties-reviews", + "/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", "parameters": [ { - "description": "Property reviews payload", - "in": "body", - "name": "option", + "description": "Search keywords", + "in": "query", + "name": "q", "required": true, - "schema": { - "$ref": "#/definitions/expedia.PropertyReviewsOption" - } + "type": "string", + "x-example": "climate" + }, + { + "description": "Results page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Result ordering", + "enum": [ + "relevance", + "date" + ], + "in": "query", + "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": [ @@ -261233,7 +289731,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaPropertyReviewsResponseDoc" + "$ref": "#/definitions/ft.searchResponseDoc" } }, "400": { @@ -261254,12 +289752,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -261272,28 +289764,24 @@ "ApiKeyAuth": [] } ], - "summary": "Expedia Stays property guest reviews", + "summary": "Search Financial Times articles", "tags": [ - "Expedia" + "FT" ] } }, - "/expedia/properties/search": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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", + "/gamerant/article": { + "get": { + "description": "Returns public Game Rant article metadata and body paragraphs from a canonical article URL.", + "operationId": "gamerant-article", "parameters": [ { - "description": "Property search payload", - "in": "body", - "name": "option", + "description": "Canonical Game Rant article URL", + "in": "query", + "name": "url", "required": true, - "schema": { - "$ref": "#/definitions/expedia.PropertySearchOption" - } + "type": "string", + "x-example": "https://gamerant.com/xbox-console-update-patch-notes-september-2026/" } ], "produces": [ @@ -261303,7 +289791,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaPropertySearchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -261324,12 +289812,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -261342,28 +289824,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Expedia Stays properties", + "summary": "Get Game Rant article content", "tags": [ - "Expedia" + "Game Rant" ] } }, - "/extract": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Scrapes a public URL into clean Markdown, then returns data that strictly conforms to the supplied bounded JSON Schema.", - "operationId": "extract", + "/gamerant/author": { + "get": { + "description": "Returns a Game Rant author's byline metadata, biography, social links, and recent articles from a canonical author URL.", + "operationId": "gamerant-author", "parameters": [ { - "description": "Extraction options", - "in": "body", - "name": "extractOption", + "description": "Canonical Game Rant author URL", + "in": "query", + "name": "url", "required": true, - "schema": { - "$ref": "#/definitions/extract.Option" - } + "type": "string", + "x-example": "https://gamerant.com/author/dominik-bosnjak/" } ], "produces": [ @@ -261373,23 +289851,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/extract.responseDoc" + "$ref": "#/definitions/publicnews.gamerantAuthorResponseDoc" } }, "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" } @@ -261400,114 +289878,204 @@ "ApiKeyAuth": [] } ], - "summary": "Extract schema-conforming JSON from a URL", + "summary": "Get a Game Rant author profile", "tags": [ - "Web" + "Game Rant" ] } }, - "/facebook/marketplace/search": { + "/gamerant/headlines": { "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 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": "Facebook Marketplace location vanity slug", - "in": "query", - "name": "location", - "required": true, - "type": "string", - "x-example": "austin" - }, - { - "description": "Free-text search terms; omit (with category) for the location's browse feed", - "in": "query", - "name": "query", - "type": "string", - "x-example": "bike" - }, - { - "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": "category", - "type": "string", - "x-example": "vehicles" - }, - { - "description": "Minimum price in whole currency units; requires query or category", - "in": "query", - "name": "min_price", - "type": "integer", - "x-example": 20 - }, - { - "description": "Maximum price in whole currency units; requires query or category", - "in": "query", - "name": "max_price", - "type": "integer", - "x-example": 500 - }, - { - "description": "Result order; requires query or category", - "enum": [ - "best_match", - "distance_ascend", - "creation_time_descend", - "price_ascend", - "price_descend" - ], - "in": "query", - "name": "sort_by", - "type": "string", - "x-example": "price_ascend" - }, - { - "description": "Restrict to listings posted within this many days; requires query or category", - "enum": [ - 1, - 7, - 30 - ], - "in": "query", - "name": "days_since_listed", - "type": "integer", - "x-example": 7 - }, - { - "description": "Comma-separated listing conditions; requires query or category", + "description": "Game Rant RSS section slug", "enum": [ - "new", - "used_like_new", - "used_good", - "used_fair" + "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": "condition", + "name": "section", + "required": true, "type": "string", - "x-example": "new,used_like_new" + "x-example": "games" } ], "produces": [ @@ -261517,23 +290085,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/facebook.marketplaceSearchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error while fetching search results", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -261544,29 +290112,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Facebook Marketplace", + "summary": "Get Game Rant section headlines", "tags": [ - "Facebook" + "Game Rant" ] } }, - "/facebook/{page}": { + "/gamerant/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 fresh Game Rant top stories from its public RSS feed.", + "operationId": "gamerant-news", "produces": [ "application/json" ], @@ -261574,23 +290129,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/facebook.pageResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad request — missing or invalid page reference", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Page not found or unavailable", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Game Rant top stories", + "tags": [ + "Game Rant" + ] + } + }, + "/gamerant/sections": { + "get": { + "description": "Returns the public Game Rant RSS section inventory used by the headlines endpoint.", + "operationId": "gamerant-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } }, - "500": { - "description": "Internal server error while fetching page data", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -261601,19 +290182,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Facebook page details", + "summary": "Get Game Rant RSS sections", "tags": [ - "Facebook" + "Game Rant" ] } }, - "/fanatics/categories": { + "/gamesradar/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public GamesRadar+ article metadata and body paragraphs from a canonical article URL.", + "operationId": "gamesradar-article", + "parameters": [ + { + "description": "Canonical GamesRadar+ article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.gamesradar.com/games/silent-hill/silent-hill-townfall-review/" + } ], - "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" ], @@ -261621,11 +290209,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanatics.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -261642,48 +290236,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics' league and team navigation tree", + "summary": "Get GamesRadar+ article content", "tags": [ - "Fanatics" + "GamesRadar+" ] } }, - "/fanatics/category": { + "/gamesradar/author": { "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 one GamesRadar+ author's public profile: name, job title, biography, social links, and one page of their recent articles.", + "operationId": "gamesradar-author", "parameters": [ { - "description": "A fanatics.com league or team category URL, exactly as returned by a fanatics_categories result's url field.", + "description": "Author slug, e.g. rosalie-newcombe", "in": "query", - "name": "url", - "required": true, + "name": "slug", "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 + "x-example": "rosalie-newcombe" }, { - "description": "Results per page. One of 24, 48, 72. Defaults to 24.", + "description": "Canonical gamesradar.com/author/ URL, optionally with a /page/ segment; alternative to slug", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 24 + "name": "url", + "type": "string", + "x-example": "https://www.gamesradar.com/author/rosalie-newcombe/" }, { - "description": "One of TopSellers, LowestPrice, HighestPrice, NewestArrivals. Defaults to TopSellers.", + "default": 1, + "description": "1-based page number; overrides any page number in url", "in": "query", - "name": "sort", - "type": "string", - "x-example": "TopSellers" + "name": "page", + "type": "integer" } ], "produces": [ @@ -261693,7 +290276,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanatics.categoryResponseDoc" + "$ref": "#/definitions/publicnews.gamesradarAuthorResponseDoc" } }, "400": { @@ -261702,8 +290285,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -261720,27 +290303,47 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Fanatics league or team category", + "summary": "Get a GamesRadar+ author profile", "tags": [ - "Fanatics" + "GamesRadar+" ] } }, - "/fanatics/product": { + "/gamesradar/headlines": { "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": "Returns fresh GamesRadar+ headlines from one public section hub page.", + "operationId": "gamesradar-headlines", "parameters": [ { - "description": "A fanatics.com product-detail URL, exactly as returned by a fanatics_search or fanatics_category result's url field.", + "description": "GamesRadar+ section slug", + "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" + ], "in": "query", - "name": "url", + "name": "section", "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": "games" } ], "produces": [ @@ -261750,7 +290353,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanatics.productResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -261759,14 +290362,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get GamesRadar+ section headlines", + "tags": [ + "GamesRadar+" + ] + } + }, + "/gamesradar/news": { + "get": { + "description": "Returns fresh GamesRadar+ top stories from the public RSS feed.", + "operationId": "gamesradar-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" } @@ -261783,48 +290412,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics product's detail", + "summary": "Get GamesRadar+ top stories", "tags": [ - "Fanatics" + "GamesRadar+" ] } }, - "/fanatics/search": { + "/gamesradar/sections": { "get": { - "consumes": [ + "description": "Returns the public GamesRadar+ editorial taxonomy used by the headlines endpoint.", + "operationId": "gamesradar-sections", + "produces": [ "application/json" ], - "description": "Returns one page of Fanatics' own keyword search results (name, brand, price, availability, image, url).", - "operationId": "fanatics-search", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get GamesRadar+ sections", + "tags": [ + "GamesRadar+" + ] + } + }, + "/gbnews/article": { + "get": { + "description": "Returns public GB News article metadata and body paragraphs from a canonical story URL.", + "operationId": "gbnews-article", "parameters": [ { - "description": "Free-text search keywords.", + "description": "Canonical GB News story URL", "in": "query", - "name": "query", + "name": "url", "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" + "x-example": "https://www.gbnews.com/news/north-yorkshire-gaza-barracks-fire-catterick-garrison" } ], "produces": [ @@ -261834,7 +290465,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanatics.searchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -261843,8 +290474,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -261861,19 +290492,32 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fanatics' product catalog", + "summary": "Get GB News article content", "tags": [ - "Fanatics" + "GB News" ] } }, - "/fanaticscollect/auctions": { + "/gbnews/author": { "get": { - "consumes": [ - "application/json" + "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": "Author slug, e.g. peter-stevens-a", + "in": "query", + "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" + } ], - "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. Credential-free public data from Fanatics Collect's own GraphQL API.", - "operationId": "fanaticscollect-auctions", "produces": [ "application/json" ], @@ -261881,17 +290525,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.auctionsResponseDoc" + "$ref": "#/definitions/publicnews.gbnewsAuthorResponseDoc" } }, - "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" } @@ -261908,19 +290552,418 @@ "ApiKeyAuth": [] } ], - "summary": "List Fanatics Collect auction events", + "summary": "Get a GB News author profile", "tags": [ - "Fanatics Collect" + "GB News" ] } }, - "/fanaticscollect/categories": { + "/gbnews/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns fresh GB News headlines from one public section or topic feed.", + "operationId": "gbnews-headlines", + "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", + "required": true, + "type": "string", + "x-example": "news" + } ], - "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" ], @@ -261928,11 +290971,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -261949,19 +290992,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Fanatics Collect search filter values", + "summary": "Get GB News section headlines", "tags": [ - "Fanatics Collect" + "GB News" ] } }, - "/fanaticscollect/instant-rips/categories": { + "/gbnews/news": { "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 -- both are hydrated client-side in a form this repo cannot reliably parse. Credential-free public data, server-rendered on Fanatics Collect's own page.", - "operationId": "fanaticscollect-instant-rips-categories", + "description": "Returns fresh GB News top stories from the public news feed.", + "operationId": "gbnews-news", "produces": [ "application/json" ], @@ -261969,11 +291009,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.instantRipsCategoriesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -261990,40 +291030,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics Collect Instant Rips categories", + "summary": "Get GB News top stories", "tags": [ - "Fanatics Collect" + "GB News" ] } }, - "/fanaticscollect/listing/{id}": { + "/gbnews/sections": { "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. Credential-free public data from Fanatics Collect's own GraphQL API.", - "operationId": "fanaticscollect-listing", - "parameters": [ - { - "description": "Listing UUID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1e389d12-6f23-11ed-9d8b-0a58a9feac02" - }, - { - "description": "Listing type. Default: WEEKLY", - "enum": [ - "WEEKLY", - "PREMIER", - "FIXED" - ], - "in": "query", - "name": "type", - "type": "string" - } - ], + "description": "Returns the public GB News section and topic taxonomy accepted by the headlines endpoint.", + "operationId": "gbnews-sections", "produces": [ "application/json" ], @@ -262031,35 +291047,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.listingResponseDoc" - } - }, - "400": { - "description": "Missing or invalid path/query parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Listing not found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "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" } @@ -262070,208 +291068,88 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics Collect listing detail", + "summary": "Get GB News sections", "tags": [ - "Fanatics Collect" + "GB News" ] } }, - "/fanaticscollect/search": { + "/gdelt/context": { "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. Credential-free public data from Fanatics Collect's own public search index. See GetCategories for the accepted category, grading-service, status, and sort values.", - "operationId": "fanaticscollect-search", + "description": "Search recent (last 72 hours) GDELT-monitored news for", + "operationId": "gdelt-context", "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.", + "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": "seller_id", + "name": "query", + "required": true, "type": "string", - "x-example": "4216b44a-9696-4263-96c3-5f58eeb9a316" + "x-example": "climate change" }, { - "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.", + "description": "Convenience domain filter, appended to the query as domain:VALUE.", "in": "query", - "name": "brand", + "name": "domain", "type": "string", - "x-example": "Michael Jordan" + "x-example": "bbc.com" }, { - "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.", + "description": "Source-language filter (GDELT's searchlang parameter). Space-segmented languages only (excludes CJK and similar).", "in": "query", - "name": "auction_urn", + "name": "language", "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" + "x-example": "english" }, { - "description": "Filter for listings Fanatics Collect itself flags as a great price vs. guide value", + "description": "Only return sentences GDELT identified as a quotation.", "in": "query", - "name": "great_price", + "name": "is_quote", "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", + "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": "max_year", - "type": "integer" + "name": "timespan", + "type": "string", + "x-example": "24h" }, { - "description": "Minimum numeric grade, inclusive", + "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": "min_grade", - "type": "number" + "name": "from", + "type": "string", + "x-example": "2026-08-19" }, { - "description": "Maximum numeric grade, inclusive", + "description": "End of an absolute time window. Same formats as from.", "in": "query", - "name": "max_grade", - "type": "number" + "name": "to", + "type": "string", + "x-example": "2026-08-20" }, { - "description": "Result order. Default best_value.", + "default": "relevance", + "description": "Result order.", "enum": [ - "recommended", - "recently_added", - "best_deals", - "lot_number", - "lowest_price", - "highest_price", - "best_value", - "earliest_year", - "latest_year", - "earliest_sale_date", - "latest_sale_date" + "relevance", + "datedesc", + "dateasc" ], "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", + "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", - "name": "per_page", + "maximum": 200, + "minimum": 1, + "name": "maxrecords", "type": "integer" } ], @@ -262282,7 +291160,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.searchResponseDoc" + "$ref": "#/definitions/gdelt.contextResponseDoc" } }, "400": { @@ -262309,269 +291187,92 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fanatics Collect listings", + "summary": "Sentence-level co-occurrence search across recent GDELT coverage", "tags": [ - "Fanatics Collect" + "GDELT" ] } }, - "/fanaticscollect/sold-items": { + "/gdelt/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. Credential-free public data from Fanatics Collect's own public sales-history API. See GetCategories for the accepted category, grading-service, eye-appeal-grade, and sort values.", - "operationId": "fanaticscollect-sold-items", + "description": "Search the GDELT Project's continuously updated global news", + "operationId": "gdelt-search", "parameters": [ { - "description": "Free-text search across item title", + "description": "GDELT query string. Supports GDELT's own search operators: quoted phrases, (a OR b), theme:NAME, toneN, near20:\\", "in": "query", - "name": "title", + "name": "query", + "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" - }, - { - "description": "Maximum card/item year, inclusive", - "in": "query", - "name": "max_year", - "type": "integer" - }, - { - "description": "Minimum sold price, inclusive", - "in": "query", - "name": "min_price", - "type": "number" + "x-example": "climate change" }, { - "description": "Maximum sold price, inclusive", + "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": "max_price", - "type": "number" + "name": "country", + "type": "string", + "x-example": "unitedkingdom" }, { - "description": "Result order. Default sold_date_desc.", - "enum": [ - "sold_date_desc", - "highest_price", - "lowest_price" - ], + "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": "sort", - "type": "string" + "name": "language", + "type": "string", + "x-example": "english" }, { - "description": "1-based page number, default 1", + "description": "Convenience domain filter, appended to the query as domain:VALUE.", "in": "query", - "name": "page", - "type": "integer" + "name": "domain", + "type": "string", + "x-example": "bbc.com" }, { - "description": "Results per page, default 20, max 100", + "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", "in": "query", - "name": "per_page", - "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fanaticscollect.soldItemsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "timespan", + "type": "string", + "x-example": "1w" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Search Fanatics Collect sold items", - "tags": [ - "Fanatics Collect" - ] - } - }, - "/fanaticscollect/trending-searches": { - "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. Credential-free public data from Fanatics Collect's own GraphQL API.", - "operationId": "fanaticscollect-trending-searches", - "parameters": [ { - "description": "Number of terms to return, 1-50, default 8", + "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": "limit", - "type": "integer", - "x-example": 8 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "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" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Fanatics Collect trending search terms", - "tags": [ - "Fanatics Collect" - ] - } - }, - "/fanaticslive/browse": { - "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. Public data sourced from Fanatics Live's own GraphQL API.", - "operationId": "fanaticslive-browse", - "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" - ], + "name": "from", + "type": "string", + "x-example": "2026-08-01" + }, + { + "description": "End of an absolute time window. Same formats as from.", "in": "query", - "name": "league", - "required": true, + "name": "to", "type": "string", - "x-example": "POKEMON" + "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": [ @@ -262581,7 +291282,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.browseResponseDoc" + "$ref": "#/definitions/gdelt.searchResponseDoc" } }, "400": { @@ -262608,27 +291309,92 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Fanatics Live shows by league", + "summary": "Search global news coverage indexed by GDELT", "tags": [ - "Fanatics Live" + "GDELT" ] } }, - "/fanaticslive/channel/{id}": { + "/gdelt/timeline": { "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. Public data sourced from Fanatics Live's own GraphQL API.", - "operationId": "fanaticslive-channel", + "description": "Return how a query's global news coverage has trended over", + "operationId": "gdelt-timeline", "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": "GDELT query string. Same syntax as gdelt-search's query.", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "adc4b55f-5e10-4ed0-8680-11875cfe1c94" + "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" + }, + { + "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": [ @@ -262638,7 +291404,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.channelResponseDoc" + "$ref": "#/definitions/gdelt.timelineResponseDoc" } }, "400": { @@ -262647,12 +291413,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -262671,19 +291431,71 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live channel's detail page", + "summary": "Coverage volume or tone over time for a GDELT query", "tags": [ - "Fanatics Live" + "GDELT" ] } }, - "/fanaticslive/leagues": { + "/gdelt/tonechart": { "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. Public data sourced from Fanatics Live's own GraphQL API.", - "operationId": "fanaticslive-leagues", + "description": "Return a sentiment (tone) histogram for a query's matching", + "operationId": "gdelt-tonechart", + "parameters": [ + { + "description": "GDELT query string. Same syntax as gdelt-search's query.", + "in": "query", + "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": [ "application/json" ], @@ -262691,7 +291503,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.leaguesResponseDoc" + "$ref": "#/definitions/gdelt.toneChartResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { @@ -262712,27 +291530,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics Live's league taxonomy", + "summary": "Sentiment histogram for a GDELT query", "tags": [ - "Fanatics Live" + "GDELT" ] } }, - "/fanaticslive/shop/{slug}": { + "/gdelt/tv-concept-entities": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Fanatics Live shop's public profile page: description, social links, follower count, and its channels and staffers. Public data sourced from Fanatics Live's own GraphQL API.", - "operationId": "fanaticslive-shop", + "description": "Return GDELT's own catalog of Google Knowledge Graph concept", + "operationId": "gdelt-tv-concept-entities", "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": "we-the-hobby" + "default": 100, + "description": "Maximum entries to return, most-frequent first.", + "in": "query", + "maximum": 10000, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -262742,7 +291561,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.shopResponseDoc" + "$ref": "#/definitions/gdelt.tvCapNlpEntityDetailsResponseDoc" } }, "400": { @@ -262751,12 +291570,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -262775,51 +291588,203 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live shop's public profile", + "summary": "List GDELT Television 2.0 AI concept entities", "tags": [ - "Fanatics Live" + "GDELT" ] } }, - "/fanaticslive/shop/{slug}/shows": { + "/gdelt/tv-search": { "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 credential-free way to observe a COMPLETE-status show. Public data sourced from Fanatics Live's own GraphQL API.", - "operationId": "fanaticslive-shop-shows", + "description": "Search GDELT's Television 2.0 AI index of US television news", + "operationId": "gdelt-tv-search", "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" + "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" }, { - "description": "Which show list to return", + "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": [ - "live", - "replay" + "CNN", + "MSNBC", + "FOXNEWS", + "BBCNEWS", + "KGO", + "KPIX", + "KNTV" ], "in": "query", - "name": "status", + "name": "station", "required": true, - "type": "string" + "type": "string", + "x-example": "CNN" }, { - "description": "Pagination cursor from a previous response's next_cursor", + "description": "Limit to an exact show name.", "in": "query", - "name": "after", + "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" }, { - "description": "Max shows to return (default 24)", + "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", - "name": "limit", - "type": "integer", - "x-example": 24 + "maximum": 3000, + "minimum": 1, + "name": "maxrecords", + "type": "integer" } ], "produces": [ @@ -262829,7 +291794,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.shopShowsResponseDoc" + "$ref": "#/definitions/gdelt.tvSearchResponseDoc" } }, "400": { @@ -262838,12 +291803,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -262862,68 +291821,178 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live shop's own live or replay show list", + "summary": "Search US television news coverage (transcripts, captions, OCR, visual labels)", "tags": [ - "Fanatics Live" + "GDELT" ] } }, - "/fanaticslive/shops": { + "/gdelt/tv-showchart": { "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}. Public data sourced from Fanatics Live's own GraphQL API.", - "operationId": "fanaticslive-shops", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fanaticslive.shopsResponseDoc" - } + "description": "Return the top shows by result percentage for a query", + "operationId": "gdelt-tv-showchart", + "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" }, - "500": { - "description": "Internal Server Error", - "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" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "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. Public data sourced from Fanatics Live's own GraphQL API.", - "operationId": "fanaticslive-show", - "parameters": [ + "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" + }, { - "description": "Fanatics Live show id, e.g. from a browse result's id field", - "in": "path", - "name": "id", + "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": "1b1aeec0-346b-4c8f-941a-bcb8af558a5a" + "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).", + "in": "query", + "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": [ @@ -262933,7 +292002,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.showResponseDoc" + "$ref": "#/definitions/gdelt.tvShowChartResponseDoc" } }, "400": { @@ -262942,12 +292011,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -262966,27 +292029,178 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live show's detail page", + "summary": "Top US television shows by coverage share for a query", "tags": [ - "Fanatics Live" + "GDELT" ] } }, - "/fanaticslive/show/{id}/instant-rips": { + "/gdelt/tv-stationchart": { "get": { "consumes": [ "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. Public data sourced from Fanatics Live's own GraphQL API.", - "operationId": "fanaticslive-instant-rips", + "description": "Return a result-count comparison across the requested", + "operationId": "gdelt-tv-stationchart", "parameters": [ { - "description": "Fanatics Live show id, the same id GET /fanaticslive/show/{id} takes", - "in": "path", - "name": "id", + "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.", + "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": "186f8cac-d031-436a-b46d-9d9f0b839df2" + "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).", + "in": "query", + "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": [ @@ -262996,7 +292210,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.instantRipsResponseDoc" + "$ref": "#/definitions/gdelt.tvStationChartResponseDoc" } }, "400": { @@ -263005,12 +292219,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -263029,19 +292237,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live show's current instant-rip state", + "summary": "Compare US television news coverage across stations", "tags": [ - "Fanatics Live" + "GDELT" ] } }, - "/farfetch/categories": { + "/gdelt/tv-stationdetails": { "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", + "description": "Return GDELT's own current list of Television 2.0 AI", + "operationId": "gdelt-tv-stationdetails", "produces": [ "application/json" ], @@ -263049,7 +292257,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/farfetch.categoriesResponseDoc" + "$ref": "#/definitions/gdelt.tvStationDetailsResponseDoc" } }, "500": { @@ -263070,27 +292278,174 @@ "ApiKeyAuth": [] } ], - "summary": "Farfetch category directory", + "summary": "List GDELT Television 2.0 AI stations", "tags": [ - "Farfetch" + "GDELT" ] } }, - "/farfetch/designers": { + "/gdelt/tv-timeline": { "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": "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": "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": "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": "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": [ @@ -263100,7 +292455,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/farfetch.designersResponseDoc" + "$ref": "#/definitions/gdelt.tvTimelineResponseDoc" } }, "400": { @@ -263127,35 +292482,28 @@ "ApiKeyAuth": [] } ], - "summary": "Farfetch designer directory", + "summary": "Airtime volume over time for US television news coverage", "tags": [ - "Farfetch" + "GDELT" ] } }, - "/farfetch/product": { + "/gdelt/tv-visual-entities": { "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": "Return GDELT's own catalog of computer-vision object/activity", + "operationId": "gdelt-tv-visual-entities", "parameters": [ { - "description": "Department: women, men, kids", - "in": "query", - "name": "gender", - "required": true, - "type": "string", - "x-example": "women" - }, - { - "description": "Product URL slug from a search result's id field", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "gucci-slide-sandals-with-double-g-item-37690086" + "default": 100, + "description": "Maximum entries to return, most-frequent first.", + "in": "query", + "maximum": 10000, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -263165,7 +292513,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/farfetch.productResponseDoc" + "$ref": "#/definitions/gdelt.tvVisualEntityDetailsResponseDoc" } }, "400": { @@ -263174,12 +292522,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -263198,48 +292540,196 @@ "ApiKeyAuth": [] } ], - "summary": "Farfetch product detail", + "summary": "List GDELT Television 2.0 AI visual entities", "tags": [ - "Farfetch" + "GDELT" ] } }, - "/farfetch/search": { + "/gdelt/tv-wordcloud": { "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 normalized listing summaries (name, brand, price, image, availability) and the upstream page count. Public data sourced from Farfetch's own listing pages.", - "operationId": "farfetch-search", + "description": "Return a frequency-ranked word/label cloud for one match", + "operationId": "gdelt-tv-wordcloud", "parameters": [ { - "description": "Department: women, men, kids", + "description": "Required. Which match channel to build a word cloud from.", + "enum": [ + "transcript", + "caption", + "concept", + "onscreen_text", + "visual" + ], "in": "query", - "name": "gender", + "name": "channel", "required": true, "type": "string", - "x-example": "women" + "x-example": "caption" }, { - "description": "Designer slug from GET /farfetch/designers; designer or category is required", + "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": "designer", + "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" + }, + { + "description": "Required. Station to search.", + "enum": [ + "CNN", + "MSNBC", + "FOXNEWS", + "BBCNEWS", + "KGO", + "KPIX", + "KNTV" + ], + "in": "query", + "name": "station", + "required": true, "type": "string", - "x-example": "gucci" + "x-example": "CNN" }, { - "description": "Category slug from GET /farfetch/categories; designer or category is required", + "description": "Limit to an exact show name.", "in": "query", - "name": "category", + "name": "show", "type": "string", - "x-example": "shoes-1" + "x-example": "Inside Politics" }, { - "description": "1-based page number; defaults to 1", + "description": "Limit to a day of week, 0 (Sunday) through 7 (Saturday), PST.", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "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": [ @@ -263249,7 +292739,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/farfetch.searchResponseDoc" + "$ref": "#/definitions/gdelt.tvWordCloudResponseDoc" } }, "400": { @@ -263276,33 +292766,51 @@ "ApiKeyAuth": [] } ], - "summary": "Search Farfetch listings", + "summary": "Word cloud for US television news coverage", "tags": [ - "Farfetch" + "GDELT" ] } }, - "/fashionnova/collections": { + "/geocoding/lookup": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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", + "description": "Returns typed Nominatim JSONv2 places for comma-separated OSM ids such as W34633854,N123,R456.", + "operationId": "geocoding-lookup", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Comma-separated OSM ids such as W34633854,N123,R456", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "osm_ids", + "required": true, + "type": "string", + "x-example": "W34633854" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Preferred result language, forwarded to Nominatim", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "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": [ @@ -263312,7 +292820,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/geocoding.lookupResponseDoc" } }, "400": { @@ -263321,8 +292829,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" } @@ -263339,41 +292853,65 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova collections", + "summary": "Lookup Nominatim OSM ids", "tags": [ - "Fashion Nova" + "Geocoding" ] } }, - "/fashionnova/collections/{handle}/products": { + "/geocoding/reverse": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 nearest typed Nominatim JSONv2 place for latitude and longitude.", + "operationId": "geocoding-reverse", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", + "description": "Latitude", + "in": "query", + "name": "lat", "required": true, - "type": "string", - "x-example": "collection-handle" + "type": "number", + "x-example": 40.7484257 }, { - "description": "1-based page, defaults to 1", + "description": "Longitude", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Nominatim address zoom, defaults to 18", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "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": [ @@ -263383,7 +292921,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/geocoding.reverseResponseDoc" } }, "400": { @@ -263398,8 +292936,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "502": { + "description": "Bad Gateway", "schema": { "$ref": "#/definitions/app.Response" } @@ -263416,33 +292954,97 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova collection products", + "summary": "Reverse geocode coordinates", "tags": [ - "Fashion Nova" + "Geocoding" ] } }, - "/fashionnova/pages": { + "/geocoding/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Fashion Nova (https://www.fashionnova.com). The storefront URL is fixed server-side.", - "operationId": "fashionnova-pages", + "description": "Returns typed Nominatim JSONv2 forward geocoding results. Use either q or structured fields, not both.", + "operationId": "geocoding-search", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Free-text search query", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "q", + "type": "string" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "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", - "x-example": 50 + "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": [ @@ -263452,7 +293054,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/geocoding.searchResponseDoc" } }, "400": { @@ -263461,8 +293063,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" } @@ -263479,27 +293087,36 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova static pages", + "summary": "Search Nominatim places", "tags": [ - "Fashion Nova" + "Geocoding" ] } }, - "/fashionnova/pages/{handle}": { + "/ghanaweb/archive": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized static page detail for one Fashion Nova (https://www.fashionnova.com) page handle. The storefront URL is fixed server-side.", - "operationId": "fashionnova-page", + "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": "Page handle", - "in": "path", - "name": "handle", + "description": "A YYYYMM value returned by ghanaweb-archive-months", + "in": "query", + "name": "month", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "202609" + }, + { + "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" } ], "produces": [ @@ -263509,7 +293126,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/publicnews.ghanawebArchiveResponseDoc" } }, "400": { @@ -263524,12 +293141,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -263542,35 +293153,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fashion Nova static page", + "summary": "List GhanaWeb archive article URLs", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/products": { + "/ghanaweb/archive/months": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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": "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 every YYYYMM month currently advertised by GhanaWeb's official article-sitemap index. Use one of these values with ghanaweb-archive.", + "operationId": "ghanaweb-archive-months", "produces": [ "application/json" ], @@ -263578,19 +293170,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/publicnews.ghanawebArchiveMonthsResponseDoc" } }, "503": { @@ -263605,27 +293185,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova products", + "summary": "Discover GhanaWeb archive months", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/products/{handle}": { + "/ghanaweb/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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": "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": "Product handle", - "in": "path", - "name": "handle", + "description": "Canonical GhanaWeb article URL ending in its numeric story ID", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "https://www.ghanaweb.com/GhanaHomePage/NewsArchive/NPP-Chairmanship-Race-How-APL-s-survey-made-a-near-perfect-prediction-2055134" } ], "produces": [ @@ -263635,7 +293212,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -263644,18 +293221,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": { @@ -263668,45 +293233,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fashion Nova product", + "summary": "Get GhanaWeb article content", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/products/{handle}/recommendations": { + "/ghanaweb/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized recommended products for one Fashion Nova (https://www.fashionnova.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "fashionnova-product-recommendations", + "description": "Returns article cards from a verified GhanaWeb section page.", + "operationId": "ghanaweb-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": "Section slug from ghanaweb-sections", "enum": [ - "related", - "complementary" + "news", + "sports", + "business", + "entertainment", + "africa", + "opinions", + "editorial", + "crime", + "regional", + "health", + "politics", + "tabloid", + "world", + "lifestyle", + "features" ], "in": "query", - "name": "intent", + "name": "section", + "required": true, "type": "string", - "x-example": "related" + "x-example": "news" } ], "produces": [ @@ -263716,7 +293277,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -263725,18 +293286,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": { @@ -263749,43 +293298,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova product recommendations", + "summary": "Get GhanaWeb section headlines", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/search/suggest": { + "/ghanaweb/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from Fashion Nova's (https://www.fashionnova.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "fashionnova-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 GhanaWeb's current public stories from its Google News sitemap, including canonical URL, headline, and publication time.", + "operationId": "ghanaweb-news", "produces": [ "application/json" ], @@ -263793,13 +293315,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -263820,42 +293336,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fashion Nova search suggestions", + "summary": "Get GhanaWeb latest stories", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/sitemap/urls": { + "/ghanaweb/sections": { "get": { - "consumes": [ + "description": "Returns the complete verified article-bearing section set accepted by ghanaweb-headlines. Static, media, and non-article destinations are excluded.", + "operationId": "ghanaweb-sections", + "produces": [ "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", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get GhanaWeb article sections", + "tags": [ + "GhanaWeb" + ] + } + }, + "/ghanaweb/video": { + "get": { + "description": "Returns public GhanaWeb TV metadata and the page's YouTube embed URL. The media itself is not retrieved.", + "operationId": "ghanaweb-video", "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 GhanaWeb TV video ID", "in": "query", - "name": "type", + "name": "id", + "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": "138878" } ], "produces": [ @@ -263865,7 +293389,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/publicnews.ghanawebVideoResponseDoc" } }, "400": { @@ -263874,8 +293398,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -263892,19 +293416,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova sitemap URLs", + "summary": "Get GhanaWeb TV video metadata", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/sitemaps": { + "/ghanaweb/video-sections": { "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": "Returns the complete four-value video category set accepted by ghanaweb-videos.", + "operationId": "ghanaweb-video-sections", "produces": [ "application/json" ], @@ -263912,25 +293433,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" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.ghanawebVideoSectionsResponseDoc" } } }, @@ -263939,19 +293442,32 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova sitemaps", + "summary": "Get GhanaWeb TV video sections", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/store": { + "/ghanaweb/videos": { "get": { - "consumes": [ - "application/json" + "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": "Video category from ghanaweb-video-sections", + "enum": [ + "news", + "sports", + "business", + "entertainment" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } ], - "description": "Returns normalized storefront metadata for Fashion Nova (https://www.fashionnova.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "fashionnova-store", "produces": [ "application/json" ], @@ -263959,7 +293475,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/publicnews.ghanawebVideosResponseDoc" } }, "400": { @@ -263968,12 +293484,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -263986,33 +293496,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fashion Nova store metadata", + "summary": "List GhanaWeb TV videos", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionphile/collections": { + "/github/org/{org}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 a public GitHub organization profile (company-side enrichment).", + "operationId": "github-org", "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": "GitHub organization login", + "in": "path", + "name": "org", + "required": true, + "type": "string", + "x-example": "github" } ], "produces": [ @@ -264020,25 +293524,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped organization profile", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$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": "Organization not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -264049,41 +293553,74 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile collections", + "summary": "Retrieve a GitHub organization profile", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/collections/{handle}/products": { + "/github/org/{org}/repos": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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", + "description": "Returns a page of an organization's public repositories (company tech stack).", + "operationId": "github-org-repos", "parameters": [ { - "description": "Collection handle", + "description": "GitHub organization login", "in": "path", - "name": "handle", + "name": "org", "required": true, "type": "string", - "x-example": "collection-handle" + "x-example": "github" }, { - "description": "1-based page, defaults to 1", + "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", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Results per page (max 100)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -264091,31 +293628,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "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" } @@ -264126,33 +293651,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile collection products", + "summary": "List a GitHub organization's public repositories", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/pages": { + "/github/repo/{owner}/{repo}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Fashionphile (https://www.fashionphile.com). The storefront URL is fixed server-side.", - "operationId": "fashionphile-pages", + "description": "Returns public detail for a single repository (the core project object).", + "operationId": "github-repo", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "description": "Repository owner (user or org login)", + "in": "path", + "name": "owner", + "required": true, + "type": "string", + "x-example": "torvalds" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "description": "Repository name", + "in": "path", + "name": "repo", + "required": true, + "type": "string", + "x-example": "linux" } ], "produces": [ @@ -264160,25 +293687,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped repository detail", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$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" } @@ -264189,27 +293716,47 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile static pages", + "summary": "Retrieve a GitHub repository", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/pages/{handle}": { + "/github/repo/{owner}/{repo}/contributors": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one Fashionphile (https://www.fashionphile.com) page handle. The storefront URL is fixed server-side.", - "operationId": "fashionphile-page", + "description": "Returns a page of a repository's contributors (who builds a project).", + "operationId": "github-repo-contributors", "parameters": [ { - "description": "Page handle", + "description": "Repository owner (user or org login)", "in": "path", - "name": "handle", + "name": "owner", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "torvalds" + }, + { + "description": "Repository name", + "in": "path", + "name": "repo", + "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" } ], "produces": [ @@ -264217,31 +293764,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "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" } @@ -264252,33 +293787,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fashionphile static page", + "summary": "List a repository's contributors", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/products": { + "/github/repo/{owner}/{repo}/forks": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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", + "description": "Returns a page of a repository's public forks (adopter signal).", + "operationId": "github-repo-forks", "parameters": [ { - "description": "1-based page, defaults to 1", + "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": "Sort order", + "enum": [ + "newest", + "oldest", + "stargazers", + "watchers" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Results per page (max 100)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -264286,25 +293847,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped fork 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" } @@ -264315,27 +293870,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile products", + "summary": "List a repository's public forks", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/products/{handle}": { + "/github/repo/{owner}/{repo}/languages": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 the language byte breakdown for a repository, sorted by bytes descending (tech fingerprint).", + "operationId": "github-repo-languages", "parameters": [ { - "description": "Product handle", + "description": "Repository owner (user or org login)", "in": "path", - "name": "handle", + "name": "owner", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "torvalds" + }, + { + "description": "Repository name", + "in": "path", + "name": "repo", + "required": true, + "type": "string", + "x-example": "linux" } ], "produces": [ @@ -264343,31 +293906,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Wrapped language breakdown", "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" } @@ -264378,45 +293929,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fashionphile product", + "summary": "Retrieve a repository's language breakdown", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/products/{handle}/recommendations": { + "/github/repo/{owner}/{repo}/releases": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized recommended products for one Fashionphile (https://www.fashionphile.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "fashionphile-product-recommendations", + "description": "Returns a page of a repository's releases (momentum/health signal).", + "operationId": "github-repo-releases", "parameters": [ { - "description": "Product handle", + "description": "Repository owner (user or org login)", "in": "path", - "name": "handle", + "name": "owner", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "torvalds" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Repository name", + "in": "path", + "name": "repo", + "required": true, + "type": "string", + "x-example": "linux" + }, + { + "description": "Page number", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "page", + "type": "integer" }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Results per page (max 100)", "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -264424,31 +293977,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Wrapped release 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" } @@ -264459,88 +294000,61 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile product recommendations", + "summary": "List a repository's releases", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/search": { + "/github/search/repositories": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized, 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 JSON 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": "Searches public GitHub repositories (market/competitive discovery). Unauthenticated search is rate limited to roughly 10 requests per minute.", + "operationId": "github-search-repositories", "parameters": [ { - "description": "Search query text", + "description": "GitHub repository search query", "in": "query", "name": "q", + "required": true, "type": "string", - "x-example": "chanel" - }, - { - "description": "Filter by condition grade. Allowed values: New, Excellent, Giftable, Shows Wear, Worn, Flawed, Fair", - "enum": [ - "New", - "Excellent", - "Giftable", - "Shows Wear", - "Worn", - "Flawed", - "Fair" - ], - "in": "query", - "name": "condition", - "type": "string", - "x-example": "Excellent" + "x-example": "linux" }, { - "description": "Which listings to search. Allowed values: available (in-stock only, default), sold (sold archive only), all", + "description": "Sort field", "enum": [ - "available", - "sold", - "all" + "stars", + "forks", + "help-wanted-issues", + "updated" ], "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": "sort", + "type": "string" }, { - "description": "Sort order. Allowed values: relevance, newest, price_asc, price_desc", + "description": "Sort order", "enum": [ - "relevance", - "newest", - "price_asc", - "price_desc" + "asc", + "desc" ], "in": "query", - "name": "sort", - "type": "string", - "x-example": "relevance" + "name": "order", + "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": [ @@ -264548,25 +294062,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "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" } @@ -264577,41 +294085,60 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fashionphile products", + "summary": "Search public GitHub repositories", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/search/suggest": { + "/github/search/users": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Fashionphile's (https://www.fashionphile.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "fashionphile-search-suggest", + "description": "Searches public GitHub users (developer discovery). Unauthenticated search is rate limited to roughly 10 requests per minute.", + "operationId": "github-search-users", "parameters": [ { - "description": "Search query", + "description": "GitHub user search query", "in": "query", "name": "q", "required": true, "type": "string", - "x-example": "wool" + "x-example": "torvalds" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "description": "Sort field", + "enum": [ + "followers", + "repositories", + "joined" + ], "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "name": "sort", + "type": "string" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Sort order", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "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": [ @@ -264619,25 +294146,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" - } - }, - "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" } @@ -264648,42 +294169,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fashionphile search suggestions", + "summary": "Search public GitHub users", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/sitemap/urls": { + "/github/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns capped URL entries from Fashionphile's (https://www.fashionphile.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "fashionphile-sitemap-urls", + "description": "Returns the repositories on GitHub's trending page (market discovery).", + "operationId": "github-trending", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "Programming language filter (e.g. go, python)", "in": "query", - "name": "type", - "type": "string", - "x-example": "products" + "name": "language", + "type": "string" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "description": "Time window", + "enum": [ + "daily", + "weekly", + "monthly" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "since", + "type": "string" } ], "produces": [ @@ -264691,25 +294206,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped trending repository 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" } @@ -264720,43 +294229,56 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile sitemap URLs", + "summary": "List trending GitHub repositories", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/sitemaps": { + "/github/trending/developers": { "get": { "consumes": [ "application/json" ], - "description": "Returns child sitemap URLs from Fashionphile's (https://www.fashionphile.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "fashionphile-sitemaps", + "description": "Returns the developers on GitHub's trending developers page (market discovery).", + "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" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "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" } @@ -264767,43 +294289,53 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile sitemaps", + "summary": "List trending GitHub developers", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/store": { + "/github/user/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized storefront metadata for Fashionphile (https://www.fashionphile.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "fashionphile-store", + "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": "GitHub username", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "torvalds" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Wrapped user profile", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$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": "User not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -264814,24 +294346,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fashionphile store metadata", + "summary": "Retrieve a GitHub user profile", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fastcompany/article": { + "/github/user/{username}/events": { "get": { - "description": "Returns public Fast Company article metadata and body paragraphs from a canonical article URL. The service uses the configured production browser fleet when ordinary HTTP transport encounters Fast Company's bot-verification challenge; it does not bypass authentication or access controls.", - "operationId": "fastcompany-article", + "consumes": [ + "application/json" + ], + "description": "Returns a page of a user's recent public events, normalized to type, repository, and timestamp (freshness signal).", + "operationId": "github-user-events", "parameters": [ { - "description": "Canonical Fast Company article URL", - "in": "query", - "name": "url", + "description": "GitHub username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "https://www.fastcompany.com/91611506/example-headline" + "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": [ @@ -264839,25 +294386,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped event 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" } @@ -264868,24 +294409,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fast Company article content", + "summary": "List a GitHub user's recent public activity", "tags": [ - "Fast Company" + "GitHub" ] } }, - "/fastcompany/author": { + "/github/user/{username}/followers": { "get": { - "description": "Returns a Fast Company contributor's name, biography, and recent articles from a canonical contributor URL. Recent articles and the contributor's name come from their own public RSS feed; the biography comes from the contributor's profile page and is omitted if that page's bot-verification challenge cannot be cleared. The service uses the configured production browser fleet when ordinary HTTP transport encounters that challenge; it does not bypass authentication or access controls.", - "operationId": "fastcompany-author", + "consumes": [ + "application/json" + ], + "description": "Returns a page of the public accounts following a GitHub user.", + "operationId": "github-user-followers", "parameters": [ { - "description": "Canonical Fast Company contributor URL", - "in": "query", - "name": "url", + "description": "GitHub username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "https://www.fastcompany.com/user/example-writer" + "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": [ @@ -264893,25 +294449,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.fastCompanyAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped follower 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" } @@ -264922,82 +294472,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fast Company contributor profile", + "summary": "List a GitHub user's followers", "tags": [ - "Fast Company" + "GitHub" ] } }, - "/fastcompany/headlines": { + "/github/user/{username}/following": { "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": "Returns a page of the public accounts a GitHub user follows.", + "operationId": "github-user-following", "parameters": [ { - "description": "Fast Company section slug, from GET /fastcompany/sections", - "in": "query", - "name": "section", + "description": "GitHub username", + "in": "path", + "name": "username", "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": "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": "Get Fast Company section headlines", - "tags": [ - "Fast Company" - ] - } - }, - "/fastcompany/news": { - "get": { - "description": "Returns fresh Fast Company stories from its public RSS feed.", - "operationId": "fastcompany-news", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Wrapped following 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" } @@ -265008,52 +294535,27 @@ "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 who a GitHub user follows", "tags": [ - "Fast Company" + "GitHub" ] } }, - "/fiveguys/directory": { + "/github/user/{username}/pinned": { "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": "Returns the repositories a user pinned on their public profile (showcase signal). Empty when the user pinned nothing.", + "operationId": "github-user-pinned", "parameters": [ { - "description": "Optional. Directory path from a previous response's children[].path, e.g. \\", - "in": "query", - "name": "path", + "description": "GitHub username", + "in": "path", + "name": "username", + "required": true, "type": "string", - "x-example": "il" + "x-example": "torvalds" } ], "produces": [ @@ -265061,31 +294563,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 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" } @@ -265096,57 +294586,72 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Five Guys restaurant directory by state and city", + "summary": "List a GitHub user's pinned repositories", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/faq": { + "/github/user/{username}/repos": { "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": "Returns a page of a user's public repositories (tech-stack signal).", + "operationId": "github-user-repos", "parameters": [ { - "description": "Optional. Free-text filter over question and answer text.", - "in": "query", - "name": "search", - "type": "string", - "x-example": "gluten" - }, - { - "description": "Optional. Comma-separated faq_category term ids, from GET /fiveguys/faq-categories.", - "in": "query", - "name": "category", + "description": "GitHub username", + "in": "path", + "name": "username", + "required": true, "type": "string", - "x-example": "21" + "x-example": "torvalds" }, { - "description": "Optional. 1-based page number, default 1.", + "description": "Sort field", + "enum": [ + "created", + "updated", + "pushed", + "full_name" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "sort", + "type": "string" }, { - "description": "Optional. Entries per page, 1-100, default 20.", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "name": "direction", + "type": "string" }, { - "description": "Optional. Content language: en (default) or es.", + "description": "Repository type", "enum": [ - "en", - "es" + "all", + "owner", + "member" ], "in": "query", - "name": "lang", + "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": [ @@ -265154,25 +294659,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.faqResponseDoc" - } - }, - "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" } @@ -265183,29 +294682,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Five Guys' published customer FAQ", + "summary": "List a GitHub user's public repositories", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/faq-categories": { + "/gizmodo/article": { "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": "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": "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" - ], + "description": "Canonical Gizmodo article URL", "in": "query", - "name": "lang", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://gizmodo.com/meta-muse-charm-ai-keychain-2000816515" } ], "produces": [ @@ -265215,11 +294709,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiveguys.faqCategoriesResponseDoc" + "$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" } @@ -265236,35 +294736,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Five Guys FAQ categories", + "summary": "Get Gizmodo article content", "tags": [ - "FiveGuys" + "Gizmodo" ] } }, - "/fiveguys/menu": { + "/gizmodo/author": { "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": "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": "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": "category", - "type": "string" - }, - { - "description": "Optional. Content language: en (default) or es.", - "enum": [ - "en", - "es" - ], + "description": "Canonical Gizmodo author URL", "in": "query", - "name": "lang", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://gizmodo.com/author/jpero" } ], "produces": [ @@ -265274,7 +294763,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiveguys.menuResponseDoc" + "$ref": "#/definitions/publicnews.gizmodoAuthorResponseDoc" } }, "400": { @@ -265289,12 +294778,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -265307,56 +294790,75 @@ "ApiKeyAuth": [] } ], - "summary": "List Five Guys menu categories and items", + "summary": "Get a Gizmodo author profile", "tags": [ - "FiveGuys" + "Gizmodo" ] } }, - "/fiveguys/nearby": { + "/gizmodo/headlines": { "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 fresh headlines from one Gizmodo section's public RSS feed.", + "operationId": "gizmodo-headlines", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 41.881953 - }, - { - "description": "Search center longitude", + "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" + ], "in": "query", - "name": "longitude", + "name": "section", "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": "tech" } ], "produces": [ @@ -265366,7 +294868,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiveguys.nearbyResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -265375,12 +294877,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -265393,19 +294889,16 @@ "ApiKeyAuth": [] } ], - "summary": "Find Five Guys restaurants near a coordinate", + "summary": "Get Gizmodo section headlines", "tags": [ - "FiveGuys" + "Gizmodo" ] } }, - "/fiveguys/nutrition": { + "/gizmodo/news": { "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", + "description": "Returns fresh Gizmodo stories from its public RSS feed.", + "operationId": "gizmodo-news", "produces": [ "application/json" ], @@ -265413,7 +294906,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiveguys.nutritionResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -265434,65 +294927,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the current Five Guys nutrition & allergen PDF guide's location", + "summary": "Get Gizmodo top stories", "tags": [ - "FiveGuys" + "Gizmodo" ] } }, - "/fiveguys/ordering-locations": { + "/gizmodo/sections": { "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", - "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", - "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 - }, - { - "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 - } - ], + "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" ], @@ -265500,25 +294944,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiveguys.orderingLocationsResponseDoc" - } - }, - "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" } } }, @@ -265527,27 +294953,24 @@ "ApiKeyAuth": [] } ], - "summary": "Find Five Guys restaurants near a coordinate with ordering details", + "summary": "Get Gizmodo sections", "tags": [ - "FiveGuys" + "Gizmodo" ] } }, - "/fiveguys/ordering-menu": { + "/globalnews/article": { "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": "Returns public Global News article metadata and body paragraphs from a canonical article URL.", + "operationId": "globalnews-article", "parameters": [ { - "description": "The ordering platform's restaurant id, from GET /fiveguys/ordering-locations' locations[].id", + "description": "Canonical Global News article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "23841" + "x-example": "https://globalnews.ca/news/12070709/example-article-slug/" } ], "produces": [ @@ -265557,7 +294980,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiveguys.orderingMenuResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -265572,12 +294995,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -265590,41 +295007,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Five Guys store's priced menu from the ordering platform", + "summary": "Get Global News article content", "tags": [ - "FiveGuys" + "Global News" ] } }, - "/fiveguys/search": { + "/globalnews/author": { "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": "Returns a Global News author's byline metadata, biography, and recent articles from a canonical author URL.", + "operationId": "globalnews-author", "parameters": [ { - "description": "Free-text location: a city, a zip/postal code, a street address, or a landmark", + "description": "Canonical Global News author URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "Chicago, IL" - }, - { - "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 + "x-example": "https://globalnews.ca/author/jane-doe/" } ], "produces": [ @@ -265634,7 +295034,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiveguys.searchResponseDoc" + "$ref": "#/definitions/publicnews.globalnewsAuthorResponseDoc" } }, "400": { @@ -265643,8 +295043,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -265661,33 +295061,59 @@ "ApiKeyAuth": [] } ], - "summary": "Search Five Guys restaurants by free-text location", + "summary": "Get a Global News author profile", "tags": [ - "FiveGuys" + "Global News" ] } }, - "/fiveguys/store": { + "/globalnews/headlines": { "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 fresh headlines from one public Global News RSS section.", + "operationId": "globalnews-headlines", "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. \\", + "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": "4060" + "x-example": "world" } ], "produces": [ @@ -265697,7 +295123,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiveguys.storeResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -265706,11 +295132,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Global News section headlines", + "tags": [ + "Global News" + ] + } + }, + "/globalnews/news": { + "get": { + "description": "Returns fresh Global News (globalnews.ca) top stories from its public RSS feed.", + "operationId": "globalnews-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -265730,35 +295182,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Five Guys restaurant by its locator path", + "summary": "Get Global News top stories", "tags": [ - "FiveGuys" + "Global News" ] } }, - "/fiverr/gig/{username}/{slug}": { + "/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 a normalized 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). Public data sourced from Fiverr's own server-rendered gig pages via a real browser-rendering backend. 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": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Fiverr seller username, e.g. from a search result's seller_username field", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "inshape_studio" - }, + "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": "Fiverr gig URL slug, the trailing path segment after the username in a gig URL", - "in": "path", - "name": "slug", + "description": "Canonical Globe and Mail article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "do-modern-minimalist-logo-design-for-your-business" + "x-example": "https://www.theglobeandmail.com/canada/article-example-story/" } ], "produces": [ @@ -265768,7 +295235,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiverr.gigResponseDoc" + "$ref": "#/definitions/globeandmail.articleResponseDoc" } }, "400": { @@ -265777,14 +295244,20 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "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" } @@ -265801,34 +295274,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fiverr gig detail", + "summary": "Get a Globe and Mail article's content", "tags": [ - "Fiverr" + "GlobeAndMail" ] } }, - "/fiverr/search": { + "/globeandmail/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Fiverr's public gig listings by free-text keyword, returning normalized gig summaries (title, seller username, seller level, rating, review count, starting price, category, thumbnail image). Public data sourced from Fiverr's own server-rendered search pages via a real browser-rendering backend. 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 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": "Free-text gig search keyword", + "description": "Canonical Globe and Mail author 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://www.theglobeandmail.com/authors/example-reporter/" } ], "produces": [ @@ -265838,7 +295301,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiverr.searchResponseDoc" + "$ref": "#/definitions/globeandmail.authorResponseDoc" } }, "400": { @@ -265847,8 +295310,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" } @@ -265865,27 +295334,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fiverr gigs", + "summary": "Get a Globe and Mail reporter profile", "tags": [ - "Fiverr" + "GlobeAndMail" ] } }, - "/fiverr/seller/{username}": { + "/globeandmail/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a normalized 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. Public data sourced from Fiverr's own server-rendered seller profile pages via a real browser-rendering backend. 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 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": "Fiverr seller username, e.g. from a search result's seller_username field", - "in": "path", - "name": "username", + "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": "section", "required": true, "type": "string", - "x-example": "inshape_studio" + "x-example": "canada" } ], "produces": [ @@ -265895,7 +295375,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiverr.sellerResponseDoc" + "$ref": "#/definitions/globeandmail.headlinesResponseDoc" } }, "400": { @@ -265910,8 +295390,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -265928,37 +295408,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fiverr seller profile", + "summary": "Get the latest stories in a Globe and Mail section", "tags": [ - "Fiverr" + "GlobeAndMail" ] } }, - "/flashscore/calendar": { + "/globeandmail/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public tournament calendar entries, dates, winners when available, and competition paths for the current season.", - "operationId": "flashscore-calendar", - "parameters": [ - { - "description": "Calendar category from flashscore-calendar-categories", - "enum": [ - "tennis-atp", - "tennis-wta", - "golf-pga", - "golf-dp-world", - "badminton-bwf", - "motorsport-f1" - ], - "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "tennis-atp" - } - ], + "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" ], @@ -265966,17 +295425,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.calendarResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/globeandmail.newsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -265993,19 +295446,16 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore season calendar", + "summary": "Get the latest Globe and Mail stories", "tags": [ - "Flashscore" + "GlobeAndMail" ] } }, - "/flashscore/calendar-categories": { + "/globeandmail/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the current ATP, WTA, golf, badminton, and Formula 1 calendar pages.", - "operationId": "flashscore-calendar-categories", + "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" ], @@ -266013,7 +295463,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.calendarCategoriesResponseDoc" + "$ref": "#/definitions/globeandmail.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -266028,73 +295484,24 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore season calendar categories", + "summary": "List Globe and Mail sections", "tags": [ - "Flashscore" + "GlobeAndMail" ] } }, - "/flashscore/competitions": { + "/gmanews/article": { "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", + "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": "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" - ], + "description": "Canonical GMA News article URL", "in": "query", - "name": "sport", + "name": "url", "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 + "x-example": "https://www.gmanetwork.com/news/topstories/world/1003638/at-un-netanyahu-defends-israel-as-delegates-storm-out/story/" } ], "produces": [ @@ -266104,7 +295511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.competitionsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -266113,6 +295520,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -266125,27 +295538,70 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore competitions by sport and date", + "summary": "Get GMA News article content", "tags": [ - "Flashscore" + "GMA News" ] } }, - "/flashscore/match-h2h": { + "/gmanews/headlines": { "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", + "description": "Returns fresh GMA News Online headlines from one public section RSS feed.", + "operationId": "gmanews-headlines", "parameters": [ { - "description": "Eight-character Flashscore match id", + "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" + ], "in": "query", - "name": "id", + "name": "section", "required": true, "type": "string", - "x-example": "xtmHKGT0" + "x-example": "topstories" } ], "produces": [ @@ -266155,7 +295611,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -266164,12 +295620,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -266182,29 +295632,16 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match head-to-head and recent results", + "summary": "Get GMA News section headlines", "tags": [ - "Flashscore" + "GMA News" ] } }, - "/flashscore/match-highlights": { + "/gmanews/news": { "get": { - "consumes": [ - "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", - "parameters": [ - { - "description": "Eight-character Flashscore match id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "j52jHsN8" - } - ], + "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" ], @@ -266212,23 +295649,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$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": "Returns the public GMA News Online section feeds accepted by the headlines endpoint.", + "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" } @@ -266239,27 +295702,48 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match highlights", + "summary": "Get GMA News sections", "tags": [ - "Flashscore" + "GMA News" ] } }, - "/flashscore/match-info": { + "/goat/collection": { "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 a page of one of GOAT's curated product collections (an editorial rail like \"top trending\" or \"new arrivals\"), the same call GOAT's own product-page \"you may also like\" rails and homepage modules use. Collection slugs are not enumerable by this API -- capture one from a live GOAT page. Credential-free public data.", + "operationId": "goat-collection", "parameters": [ { - "description": "Eight-character Flashscore match id", + "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": "xtmHKGT0" + "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": [ @@ -266269,7 +295753,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/goat.collectionResponseDoc" } }, "400": { @@ -266284,6 +295768,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -266296,29 +295786,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match venue and broadcast information", + "summary": "Get a GOAT curated product collection", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/match-lineups": { + "/goat/countries": { "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", - "parameters": [ - { - "description": "Eight-character Flashscore match id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "j52jHsN8" - } - ], + "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. Credential-free public data.", + "operationId": "goat-countries", "produces": [ "application/json" ], @@ -266326,17 +295806,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goat.countriesResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -266353,29 +295827,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match lineups and formations", + "summary": "Get GOAT countries", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/match-news": { + "/goat/curated": { "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", - "parameters": [ - { - "description": "Eight-character Flashscore match id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "xtmHKGT0" - } - ], + "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. Credential-free public data.", + "operationId": "goat-curated", "produces": [ "application/json" ], @@ -266383,11 +295847,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchNewsResponseDoc" + "$ref": "#/definitions/goat.curatedResponseDoc" } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -266404,52 +295868,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match news references", + "summary": "Get GOAT curated links", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/match-standings": { + "/goat/listings/count": { "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", - "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" - } - ], + "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. Credential-free public data.", + "operationId": "goat-listings-count", "produces": [ "application/json" ], @@ -266457,17 +295888,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goat.listingsCountResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -266484,27 +295909,34 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match league standings", + "summary": "Get GOAT live listing count", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/match-stats": { + "/goat/product/{slug}": { "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 a normalized 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). Credential-free public data combining GOAT's own product-page payload with its live pricing and offers APIs.", + "operationId": "goat-product", "parameters": [ { - "description": "Eight-character Flashscore match 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": "xtmHKGT0" + "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", + "in": "query", + "name": "country_code", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -266514,7 +295946,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/goat.productResponseDoc" } }, "400": { @@ -266529,6 +295961,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -266541,26 +295979,34 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match statistics", + "summary": "Get GOAT product detail", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/navigation": { + "/goat/product/{slug}/recommended": { "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 the recommended/related products GOAT's own product page shows for a given product (other colorways, similar products) -- descriptive metadata only, no live pricing. Credential-free public data from GOAT's own product-page recommendation API.", + "operationId": "goat-product-recommended", "parameters": [ { - "description": "Relative Flashscore navigation path; defaults to /. Use a path returned by flashscore-sports or flashscore-navigation.", - "in": "query", - "name": "path", + "description": "GOAT product URL slug to find related products for", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "/basketball/usa/" + "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 } ], "produces": [ @@ -266570,7 +296016,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.navigationResponseDoc" + "$ref": "#/definitions/goat.recommendedResponseDoc" } }, "400": { @@ -266585,6 +296031,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -266597,77 +296049,239 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore sport, category, country, and competition navigation", + "summary": "Get GOAT recommended products for a product", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/news": { + "/goat/search": { "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": "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 normalized 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. Credential-free public data from the same JSON API backing GOAT's own search page.", + "operationId": "goat-search", "parameters": [ { - "description": "News section key; defaults to all", + "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", "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", + "footwear", + "apparel", + "accessories", + "bags", + "collectibles", + "media", + "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": [ + "lifestyle", "basketball", - "cricket", - "rugby-union", - "athletics", - "baseball", - "fifa", - "rugby-league", - "motorsport", - "aussie-rules", - "flashscore-ratings", - "american-sports", - "african-football", - "combat-sports", - "winter-sports", - "transfer-news" + "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": "category", + "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": "football" + "x-example": "2025-08-31" }, { - "description": "1-based page, 1 to 100; defaults to 1", + "description": "1-indexed result page, defaults to 1", "in": "query", - "maximum": 100, - "minimum": 1, "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": [ @@ -266677,7 +296291,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.newsListResponseDoc" + "$ref": "#/definitions/goat.searchResponseDoc" } }, "400": { @@ -266686,8 +296300,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -266704,29 +296318,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore News listings by section", + "summary": "Search GOAT products", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/news-article": { + "/goat/search/facets": { "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 the accepted values for goat_search's filter parameters: categories, colors, genders, conditions, brands, and years are read live from GOAT's own search API 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. Credential-free public data.", + "operationId": "goat-search-facets", "produces": [ "application/json" ], @@ -266734,17 +296338,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.newsArticleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goat.facetsResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -266761,19 +296359,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore news article metadata", + "summary": "Get GOAT search facet values", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/news-categories": { + "/goat/searches/trending": { "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 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. Credential-free public data.", + "operationId": "goat-trending-searches", "produces": [ "application/json" ], @@ -266781,36 +296379,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.newsCategoriesResponseDoc" + "$ref": "#/definitions/goat.trendingSearchesResponseDoc" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Flashscore News categories", - "tags": [ - "Flashscore" - ] - } - }, - "/flashscore/ranking-categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the live-verified public ranking categories, including tennis live rankings.", - "operationId": "flashscore-ranking-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "500": { + "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/flashscore.rankingCategoriesResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -266825,64 +296400,34 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore ranking categories", + "summary": "Get GOAT trending searches", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/rankings": { + "/goat/suggest": { "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 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. Credential-free public data.", + "operationId": "goat-suggest", "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" - ], + "description": "Partial search text to autocomplete", "in": "query", - "name": "category", + "name": "query", "required": true, "type": "string", - "x-example": "tennis-atp" + "x-example": "jord" + }, + { + "description": "Maximum curated collections to return. Defaults to 8, maximum 20. Does not affect the product count, which upstream fixes at 25", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 8 } ], "produces": [ @@ -266892,7 +296437,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.rankingResponseDoc" + "$ref": "#/definitions/goat.suggestResponseDoc" } }, "400": { @@ -266901,8 +296446,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -266919,73 +296464,29 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore rankings", + "summary": "Autocomplete a GOAT search", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/scores": { + "/goldin/auctions": { "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": "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": "Sport key", + "description": "asc (oldest first) or desc (newest first, default)", "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" + "asc", + "desc" ], "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 + "name": "order", + "type": "string" } ], "produces": [ @@ -266995,7 +296496,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/goldin.auctionsResponseDoc" } }, "400": { @@ -267004,6 +296505,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -267016,29 +296523,29 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore scores and fixtures by sport", + "summary": "List Goldin's full auction history", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/search": { + "/goldin/categories": { "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": "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": "Search phrase (2 to 80 characters)", + "description": "Auction (default) or Fixed_Price -- selects which lot pool to discover enums for", + "enum": [ + "Auction", + "Fixed_Price" + ], "in": "query", - "maxLength": 80, - "minLength": 2, - "name": "q", - "required": true, - "type": "string", - "x-example": "Champions League" + "name": "auction_type", + "type": "string" } ], "produces": [ @@ -267048,7 +296555,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.searchResponseDoc" + "$ref": "#/definitions/goldin.categoriesResponseDoc" } }, "400": { @@ -267057,78 +296564,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Flashscore search", - "tags": [ - "Flashscore" - ] - } - }, - "/flashscore/sports": { - "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", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/flashscore.sportsResponseDoc" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Flashscore sports and live category counts", - "tags": [ - "Flashscore" - ] - } - }, - "/flashscore/top-search": { - "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", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/flashscore.topSearchResponseDoc" - } - }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -267139,36 +296576,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore top search entities", + "summary": "List Goldin's search filter enums", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/tournament-events": { + "/goldin/listing": { "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": "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": "Relative Flashscore competition season results or fixtures path", + "description": "The lot's meta_slug, from a goldin-search result", "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": "2002-03-upper-deck-mj-tribute-michael-jordan-milestones-m2-michael-jor1lwys" } ], "produces": [ @@ -267178,7 +296606,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.tournamentEventsResponseDoc" + "$ref": "#/definitions/goldin.listingResponseDoc" } }, "400": { @@ -267193,6 +296621,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -267205,27 +296639,99 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore tournament season results or fixtures", + "summary": "Get one Goldin lot's full public detail", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/tournament-seasons": { + "/goldin/search": { "get": { "consumes": [ "application/json" ], - "description": "Lists the seasons and winners 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": "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": "Relative Flashscore competition archive path ending in /archive/", + "description": "Auction (default) or Fixed_Price -- selects which lot pool to search", + "enum": [ + "Auction", + "Fixed_Price" + ], "in": "query", - "name": "path", - "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": "/football/europe/champions-league/archive/" + "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", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 24, capped at 96", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -267235,7 +296741,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.tournamentSeasonsResponseDoc" + "$ref": "#/definitions/goldin.searchResponseDoc" } }, "400": { @@ -267244,8 +296750,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -267262,49 +296768,31 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore tournament archive seasons", + "summary": "Search Goldin's lot auction inventory", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/tournament-standings": { + "/goldin/suggest": { "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", + "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": "Relative Flashscore competition path from flashscore-navigation or flashscore-competitions; omit /standings/", + "description": "Partial search query, e.g. \\", "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "/football/england/premier-league/" + "name": "keyword", + "type": "string" }, { - "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" - ], + "description": "Max suggestions to return, defaults to 8, capped at 20", "in": "query", - "name": "view", - "type": "string", - "x-example": "overall" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -267314,7 +296802,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.tournamentStandingsResponseDoc" + "$ref": "#/definitions/goldin.suggestResponseDoc" } }, "400": { @@ -267323,8 +296811,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -267341,27 +296829,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore competition standings table", + "summary": "Get Goldin's search suggestions for a keyword", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/tournament-standings-views": { + "/goodreads/author/{id}": { "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 normalized Goodreads author profile: bio, birth/death dates, website, genres, photo, and aggregate rating stats. Credential-free public Goodreads data.", + "operationId": "goodreads-author", "parameters": [ { - "description": "Relative Flashscore competition path from flashscore-navigation or flashscore-competitions; omit /standings/", - "in": "query", - "name": "path", + "description": "Goodreads author id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "/football/england/premier-league/" + "x-example": "153394" } ], "produces": [ @@ -267371,7 +296859,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.tournamentStandingsViewsResponseDoc" + "$ref": "#/definitions/goodreads.authorResponseDoc" } }, "400": { @@ -267386,6 +296874,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -267398,60 +296892,33 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore competition standings view discovery", + "summary": "Get a Goodreads author", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/foodpanda/restaurant": { + "/goodreads/author/{id}/books": { "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 an author's paginated works list (title, author, average rating, ratings count). Credential-free public Goodreads data.", + "operationId": "goodreads-author-books", "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", + "description": "Goodreads author id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "dxpr" - }, - { - "description": "Caller latitude, optional", - "in": "query", - "name": "latitude", - "type": "number", - "x-example": 1.3521 + "x-example": "153394" }, { - "description": "Caller longitude, optional", + "description": "1-based page number, default 1", "in": "query", - "name": "longitude", - "type": "number", - "x-example": 103.8198 + "name": "page", + "type": "integer" } ], "produces": [ @@ -267461,7 +296928,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.restaurantResponseDoc" + "$ref": "#/definitions/goodreads.authorBooksResponseDoc" } }, "400": { @@ -267476,6 +296943,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -267488,46 +296961,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get one foodpanda restaurant's detail", + "summary": "List a Goodreads author's books", "tags": [ - "Foodpanda" + "Goodreads" ] } }, - "/foodpanda/restaurant/menu": { + "/goodreads/author/{id}/quotes": { "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", + "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). Credential-free public Goodreads data.", + "operationId": "goodreads-author-quotes", "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", + "description": "Goodreads author id", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "sg" + "x-example": "153394" }, { - "description": "Restaurant code, from /foodpanda/search's code field", + "description": "1-based page number, default 1", "in": "query", - "name": "code", - "required": true, - "type": "string", - "x-example": "dxpr" + "name": "page", + "type": "integer" } ], "produces": [ @@ -267537,7 +296997,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.menuResponseDoc" + "$ref": "#/definitions/goodreads.authorQuotesResponseDoc" } }, "400": { @@ -267552,6 +297012,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -267564,46 +297030,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one foodpanda restaurant's menu with prices", + "summary": "List a Goodreads author's attributed quotes", "tags": [ - "Foodpanda" + "Goodreads" ] } }, - "/foodpanda/restaurant/reviews": { + "/goodreads/book/{id}": { "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 a normalized Goodreads book: description, authors, series, genres, format, pages, publisher, publication date, ISBNs, and aggregate rating with the full 1-5 star distribution. Credential-free public Goodreads data (goodreads.com), parsed from the book page's embedded GraphQL cache.", + "operationId": "goodreads-book", "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", + "description": "Goodreads book id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "dxpr" + "x-example": "2767052" } ], "produces": [ @@ -267613,7 +297060,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.reviewsResponseDoc" + "$ref": "#/definitions/goodreads.bookResponseDoc" } }, "400": { @@ -267628,6 +297075,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -267640,75 +297093,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a sample of one foodpanda restaurant's customer reviews", + "summary": "Get a Goodreads book", "tags": [ - "Foodpanda" + "Goodreads" ] } }, - "/foodpanda/search": { + "/goodreads/book/{id}/editions": { "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 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, so this makes one extra internal request to resolve it; requests against a book with no editions data return an upstream error.", + "operationId": "goodreads-book-editions", "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", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 1.3521 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", + "description": "Goodreads book id", + "in": "path", + "name": "id", "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 + "type": "string", + "x-example": "2767052" }, { - "description": "Result offset for pagination (default 0)", + "description": "1-based page number, default 1", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "page", + "type": "integer" } ], "produces": [ @@ -267718,7 +297129,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.searchResponseDoc" + "$ref": "#/definitions/goodreads.editionsResponseDoc" } }, "400": { @@ -267727,80 +297138,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Search foodpanda restaurants near a location", - "tags": [ - "Foodpanda" - ] - } - }, - "/foodpanda/search/cuisines": { - "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", - "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", - "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 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/foodpanda.cuisinesResponseDoc" - } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -267817,24 +297162,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get foodpanda's live cuisine filter catalog for a location", + "summary": "List a Goodreads book's editions", "tags": [ - "Foodpanda" + "Goodreads" ] } }, - "/forbes/article": { + "/goodreads/book/{id}/reviews": { "get": { - "description": "Returns public Forbes article metadata and body content from Forbes's same-host content JSON endpoint. The response preserves rich body HTML, normalized 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 a book's featured reviews (reviewer, rating, text, date, like/comment counts, spoiler flag), sorted by like count. Credential-free public Goodreads data.", + "operationId": "goodreads-book-reviews", "parameters": [ { - "description": "Canonical HTTPS Forbes article URL", - "in": "query", - "name": "url", + "description": "Goodreads book id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.forbes.com/sites/example/2026/09/21/example-story/" + "x-example": "2767052" + }, + { + "description": "Max reviews, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -267844,7 +297198,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.articleResponseDoc" + "$ref": "#/definitions/goodreads.reviewsResponseDoc" } }, "400": { @@ -267859,12 +297213,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -267883,30 +297231,27 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes article content", + "summary": "Get a Goodreads book's featured reviews", "tags": [ - "Forbes" + "Goodreads" ] } }, - "/forbes/author": { + "/goodreads/genre/{name}": { "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 up to 50 books on a Goodreads genre/shelf tag page (e.g. fantasy, romance, science-fiction), Goodreads' credential-free 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": "Forbes contributor slug, e.g. alisondurkee", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "alisondurkee" - }, - { - "description": "Canonical forbes.com/sites// URL, as an alternative to slug", - "in": "query", - "name": "url", + "description": "Goodreads genre/shelf tag", + "in": "path", + "name": "name", + "required": true, "type": "string", - "x-example": "https://www.forbes.com/sites/alisondurkee/" + "x-example": "fantasy" } ], "produces": [ @@ -267916,7 +297261,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.authorResponseDoc" + "$ref": "#/definitions/goodreads.genreResponseDoc" } }, "400": { @@ -267931,12 +297276,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -267955,36 +297294,32 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes contributor/staff author profile", + "summary": "Get a Goodreads genre shelf", "tags": [ - "Forbes" + "Goodreads" ] } }, - "/forbes/billionaires": { + "/goodreads/list/{id}": { "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": "Returns a Goodreads Listopia list (ranked book list) by id, paginated. Credential-free public Goodreads data; page 1 of well-known lists may be served from a faster live source, with the public list page itself as fallback for every other case.", + "operationId": "goodreads-list", "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" + "description": "Goodreads list id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1" }, { - "default": 0, - "description": "Zero-based offset", + "description": "1-based page number, default 1", "in": "query", - "name": "start", + "name": "page", "type": "integer" } ], @@ -267995,7 +297330,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.billionairesResponseDoc" + "$ref": "#/definitions/goodreads.listResponseDoc" } }, "400": { @@ -268010,12 +297345,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -268034,70 +297363,19 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes billionaires list", + "summary": "Get a Goodreads Listopia list", "tags": [ - "Forbes" + "Goodreads" ] } }, - "/forbes/categories": { + "/goodreads/lists": { "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", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/forbes.categoriesResponseDoc" - } - }, - "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": "Forbes public editorial sections", - "tags": [ - "Forbes" - ] - } - }, - "/forbes/headlines": { - "get": { - "description": "Returns current Forbes article-card metadata from a public Forbes navigation path. Use /forbes/categories to discover paths.", - "operationId": "forbes-headlines", - "parameters": [ - { - "description": "Forbes navigation path from /forbes/categories", - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "/business/" - } - ], + "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" ], @@ -268105,19 +297383,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodreads.listsResponseDoc" } }, "429": { @@ -268131,12 +297397,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -268144,24 +297404,33 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes section headlines", + "summary": "List curated Goodreads Listopia lists", "tags": [ - "Forbes" + "Goodreads" ] } }, - "/forbes/person": { + "/goodreads/search": { "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": "Searches Goodreads books by title/author. Credential-free public Goodreads data via the autocomplete endpoint (book results only).", + "operationId": "goodreads-search", "parameters": [ { - "description": "Forbes person URI", + "description": "Search query", "in": "query", - "name": "uri", + "name": "q", "required": true, "type": "string", - "x-example": "vladimir-lisin" + "x-example": "hunger games" + }, + { + "description": "Max results, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -268171,7 +297440,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.personResponseDoc" + "$ref": "#/definitions/goodreads.searchResponseDoc" } }, "400": { @@ -268180,18 +297449,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": { @@ -268210,24 +297467,27 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes person profile", + "summary": "Search Goodreads books", "tags": [ - "Forbes" + "Goodreads" ] } }, - "/foreignaffairs/article": { + "/goodrx/answer": { "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", + "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", "parameters": [ { - "description": "Canonical Foreign Affairs article URL", + "description": "Question slug from /goodrx/answers", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.foreignaffairs.com/united-states/americas-attrition-trap" + "x-example": "is-viagra-available-over-the-counter" } ], "produces": [ @@ -268237,7 +297497,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignaffairs.articleResponseDoc" + "$ref": "#/definitions/goodrx.answerResponseDoc" } }, "400": { @@ -268270,32 +297530,19 @@ "ApiKeyAuth": [] } ], - "summary": "Extract a Foreign Affairs article", + "summary": "Get a GoodRx health question and answer", "tags": [ - "ForeignAffairs" + "GoodRx" ] } }, - "/foreignaffairs/author": { + "/goodrx/answers": { "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", - "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", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.foreignaffairs.com/authors/robert-kagan" - } + "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", "produces": [ "application/json" ], @@ -268303,19 +297550,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignaffairs.authorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodrx.answersResponseDoc" } }, "429": { @@ -268336,16 +297571,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Affairs author profile", + "summary": "List GoodRx health questions", "tags": [ - "ForeignAffairs" + "GoodRx" ] } }, - "/foreignaffairs/headlines": { + "/goodrx/brands": { "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": "Returns the brand-name medications GoodRx features on its brand-name drugs page, with price-page slugs.", + "operationId": "goodrx-brands", "produces": [ "application/json" ], @@ -268353,7 +297591,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignaffairs.headlinesResponseDoc" + "$ref": "#/definitions/goodrx.brandsResponseDoc" } }, "429": { @@ -268374,24 +297612,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Foreign Affairs site-wide headlines", + "summary": "List GoodRx featured brand-name drugs", "tags": [ - "ForeignAffairs" + "GoodRx" ] } }, - "/foreignaffairs/topic": { + "/goodrx/class": { "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 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": "Foreign Affairs topic slug from foreignaffairs-topics", + "description": "Class slug from /goodrx/classes", "in": "query", - "name": "topic", + "name": "slug", "required": true, "type": "string", - "x-example": "economics" + "x-example": "statins" } ], "produces": [ @@ -268401,7 +297642,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignaffairs.topicResponseDoc" + "$ref": "#/definitions/goodrx.classResponseDoc" } }, "400": { @@ -268410,6 +297651,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -268428,52 +297675,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Affairs topic feed", + "summary": "List drugs in a GoodRx drug class", "tags": [ - "ForeignAffairs" + "GoodRx" ] } }, - "/foreignaffairs/topics": { + "/goodrx/classes": { "get": { - "description": "Returns the complete research-backed directory of topic values accepted by foreignaffairs-topic, including each topic's public RSS feed URL.", - "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", - "parameters": [ - { - "description": "Canonical foreignpolicy.com article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://foreignpolicy.com/2026/04/15/china-ports-maritime-power/" - } - ], + "description": "Returns every drug class in GoodRx's class directory with slugs for /goodrx/class.", + "operationId": "goodrx-classes", "produces": [ "application/json" ], @@ -268481,19 +297695,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodrx.classesResponseDoc" } }, "429": { @@ -268514,30 +297716,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Foreign Policy article content", + "summary": "List GoodRx drug classes", "tags": [ - "ForeignPolicy" + "GoodRx" ] } }, - "/foreignpolicy/author": { + "/goodrx/comparison": { "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 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": "Author slug, e.g. anne-applebaum", + "description": "Comparison slug", "in": "query", "name": "slug", + "required": true, "type": "string", - "x-example": "anne-applebaum" - }, - { - "description": "Canonical foreignpolicy.com/author// URL; alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://foreignpolicy.com/author/anne-applebaum/" + "x-example": "lipitor-vs-zetia" } ], "produces": [ @@ -268547,7 +297746,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.authorResponseDoc" + "$ref": "#/definitions/goodrx.comparisonResponseDoc" } }, "400": { @@ -268580,16 +297779,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Policy author profile", + "summary": "Get a GoodRx drug comparison", "tags": [ - "ForeignPolicy" + "GoodRx" ] } }, - "/foreignpolicy/headlines": { + "/goodrx/comparisons": { "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 GoodRx's head-to-head drug comparisons grouped by health topic, with slugs for /goodrx/comparison.", + "operationId": "goodrx-comparisons", "produces": [ "application/json" ], @@ -268597,7 +297799,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.headlinesResponseDoc" + "$ref": "#/definitions/goodrx.comparisonsResponseDoc" } }, "429": { @@ -268618,16 +297820,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Foreign Policy site-wide headlines", + "summary": "List GoodRx drug comparisons", "tags": [ - "ForeignPolicy" + "GoodRx" ] } }, - "/foreignpolicy/live": { + "/goodrx/condition": { "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", + "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", + "parameters": [ + { + "description": "Condition slug from /goodrx/conditions", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "acne" + } + ], "produces": [ "application/json" ], @@ -268635,7 +297850,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.liveResponseDoc" + "$ref": "#/definitions/goodrx.conditionResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -268656,24 +297883,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Foreign Policy Live conversations", + "summary": "Get a GoodRx health condition overview", "tags": [ - "ForeignPolicy" + "GoodRx" ] } }, - "/foreignpolicy/live-detail": { + "/goodrx/condition-drugs": { "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": "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": "Foreign Policy FP Live conversation slug", + "description": "Condition slug from /goodrx/conditions", "in": "query", - "name": "live", + "name": "slug", "required": true, "type": "string", - "x-example": "ama-ask-me-anything-ukraine" + "x-example": "acne" } ], "produces": [ @@ -268683,7 +297913,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.liveDetailResponseDoc" + "$ref": "#/definitions/goodrx.conditionDrugsResponseDoc" } }, "400": { @@ -268716,26 +297946,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Policy Live conversation", + "summary": "List GoodRx medications for a condition", "tags": [ - "ForeignPolicy" + "GoodRx" ] } }, - "/foreignpolicy/project": { + "/goodrx/conditions": { "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": "Foreign Policy project slug", - "in": "query", - "name": "project", - "required": true, - "type": "string", - "x-example": "asia" - } + "consumes": [ + "application/json" ], + "description": "Returns every health condition in GoodRx's conditions directory, with slugs and whether GoodRx publishes a medications list for /goodrx/condition-drugs.", + "operationId": "goodrx-conditions", "produces": [ "application/json" ], @@ -268743,19 +297966,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.projectResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodrx.conditionsResponseDoc" } }, "429": { @@ -268776,25 +297987,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Policy project hub", + "summary": "List GoodRx health conditions", "tags": [ - "ForeignPolicy" + "GoodRx" ] } }, - "/foreignpolicy/projects": { + "/goodrx/drug-guide": { "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 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": [ { - "default": 1, - "description": "1-based project-directory page, defaults to 1", + "description": "Drug slug from /goodrx/drug-guides", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "slug", + "required": true, + "type": "string", + "x-example": "torsemide" + }, + { + "description": "Guide topic", + "enum": [ + "side-effects", + "dosage", + "interactions" + ], + "in": "query", + "name": "topic", + "required": true, + "type": "string", + "x-example": "side-effects" } ], "produces": [ @@ -268804,7 +298030,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.projectsResponseDoc" + "$ref": "#/definitions/goodrx.drugGuideResponseDoc" } }, "400": { @@ -268813,6 +298039,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -268831,44 +298063,37 @@ "ApiKeyAuth": [] } ], - "summary": "List Foreign Policy project hubs", + "summary": "Get a GoodRx drug guide", "tags": [ - "ForeignPolicy" + "GoodRx" ] } }, - "/foreignpolicy/topic": { + "/goodrx/drug-guides": { "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": "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": [ { - "default": "category", - "description": "Archive namespace, defaults to category", + "description": "Guide topic", "enum": [ - "category", - "tag" + "side-effects", + "dosage", + "interactions" ], "in": "query", - "name": "type", + "name": "topic", "type": "string" }, { - "description": "Foreign Policy category or tag slug", + "description": "First character of the drug slug: a-z or 0-9", "in": "query", - "name": "topic", - "required": true, + "name": "letter", "type": "string", - "x-example": "world-brief" - }, - { - "default": 1, - "description": "1-based archive page, defaults to 1", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "a" } ], "produces": [ @@ -268878,7 +298103,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.topicResponseDoc" + "$ref": "#/definitions/goodrx.drugGuidesResponseDoc" } }, "400": { @@ -268887,12 +298112,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -268911,24 +298130,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get Foreign Policy category or tag archive", + "summary": "List GoodRx drug guides", "tags": [ - "ForeignPolicy" + "GoodRx" ] } }, - "/fortune/article": { + "/goodrx/drug-info": { "get": { - "description": "Returns public Fortune article metadata and body paragraphs from a canonical article URL.", - "operationId": "fortune-article", + "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", "parameters": [ { - "description": "Canonical Fortune article URL", + "description": "Drug slug from /goodrx/drugs (or /goodrx/pet-medications for audience=pets)", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://fortune.com/2026/09/21/example/" + "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" } ], "produces": [ @@ -268938,7 +298171,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/goodrx.drugInfoResponseDoc" } }, "400": { @@ -268953,6 +298186,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -268965,37 +298204,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fortune article content", + "summary": "Get GoodRx drug information", "tags": [ - "Fortune" + "GoodRx" ] } }, - "/fortune/author": { + "/goodrx/drug-options": { "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", + "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": "Author slug, e.g. sheryl-estrada", + "description": "Drug slug from /goodrx/drugs", "in": "query", "name": "slug", + "required": true, "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" + "x-example": "atorvastatin" } ], "produces": [ @@ -269005,7 +298234,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneAuthorResponseDoc" + "$ref": "#/definitions/goodrx.drugOptionsResponseDoc" } }, "400": { @@ -269020,6 +298249,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -269032,86 +298267,83 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fortune author profile", + "summary": "List a GoodRx drug's prescription options", "tags": [ - "Fortune" + "GoodRx" ] } }, - "/fortune/companies": { + "/goodrx/drug-prices": { "get": { - "description": "Returns companies from Fortune's public company directory (9,000+ companies as of 2026-09-23) with search, filtering, and pagination.", - "operationId": "fortune-companies", + "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": "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", + "description": "Drug slug from /goodrx/drugs, /goodrx/class, or /goodrx/condition-drugs", "in": "query", - "name": "country", + "name": "slug", + "required": true, "type": "string", - "x-example": "china" + "x-example": "atorvastatin" }, { - "description": "Exact industry title; call fortune-company-filters for the complete accepted set", + "description": "Brand or generic label slug from /goodrx/drug-options", "in": "query", - "name": "industry", + "name": "label", "type": "string", - "x-example": "Computer Software" + "x-example": "atorvastatin" }, { - "description": "Fortune ranking slug to filter companies that appear on it; call fortune-company-filters for the accepted set", + "description": "Form slug from /goodrx/drug-options", "in": "query", - "name": "ranking", + "name": "form", "type": "string", - "x-example": "fortune500" + "x-example": "tablet" }, { - "description": "Ranking year the ranking filter is evaluated against; defaults to the current year", + "description": "Dosage slug from /goodrx/drug-options", "in": "query", - "name": "year", + "name": "dosage", "type": "string", - "x-example": "2026" + "x-example": "20mg" }, { - "description": "Minimum revenue in $M", + "description": "Quantity (1-999999); /goodrx/drug-options lists GoodRx's standard quantities", "in": "query", - "name": "min_revenue", + "name": "quantity", "type": "integer", - "x-example": 1000 + "x-example": 30 }, { - "description": "Maximum revenue in $M", + "description": "Latitude of a US location to price at (requires longitude)", "in": "query", - "name": "max_revenue", - "type": "integer", - "x-example": 500000 + "name": "latitude", + "type": "number", + "x-example": 40.7506 }, { - "description": "Minimum employee count", + "description": "Longitude of a US location to price at (requires latitude)", "in": "query", - "name": "min_employees", - "type": "integer", - "x-example": 1000 + "name": "longitude", + "type": "number", + "x-example": -73.9972 }, { - "description": "Maximum employee count", + "description": "Five-digit ZIP code of that location", "in": "query", - "name": "max_employees", - "type": "integer", - "x-example": 500000 + "name": "zip_code", + "type": "string", + "x-example": "10001" }, { - "default": 1, - "description": "1-based page number; 30 companies per page", + "description": "Two-letter state code of that location", "in": "query", - "name": "page", - "type": "integer" + "name": "state", + "type": "string", + "x-example": "NY" } ], "produces": [ @@ -269121,7 +298353,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneCompaniesResponseDoc" + "$ref": "#/definitions/goodrx.drugPricesResponseDoc" } }, "400": { @@ -269130,36 +298362,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Search the Fortune company directory", - "tags": [ - "Fortune" - ] - } - }, - "/fortune/companies/filters": { - "get": { - "description": "Returns the complete country, industry, and ranking filter inventory (exact values) and revenue/employee ranges accepted by fortune/companies.", - "operationId": "fortune-company-filters", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.fortuneCompanyFiltersResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -269174,30 +298386,55 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Fortune company directory filters", + "summary": "Get GoodRx drug prices by pharmacy", "tags": [ - "Fortune" + "GoodRx" ] } }, - "/fortune/company": { + "/goodrx/drugs": { "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": "Returns every drug in one letter of GoodRx's A-Z drug directory, with the price-page slug and drug-information URL.", + "operationId": "goodrx-drugs", "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", + "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": "url", + "name": "letter", + "required": true, "type": "string", - "x-example": "https://fortune.com/company/alphabet/" + "x-example": "a" } ], "produces": [ @@ -269207,7 +298444,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneCompanyResponseDoc" + "$ref": "#/definitions/goodrx.drugsResponseDoc" } }, "400": { @@ -269216,8 +298453,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -269234,61 +298471,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fortune company profile", + "summary": "List GoodRx drugs by letter", "tags": [ - "Fortune" + "GoodRx" ] } }, - "/fortune/headlines": { + "/goodrx/health-article": { "get": { - "description": "Returns fresh headlines from one public Fortune section.", - "operationId": "fortune-headlines", + "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": "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": "Article path from /goodrx/health-articles (or a www.goodrx.com article URL)", "in": "query", - "name": "section", + "name": "path", "required": true, - "type": "string" + "type": "string", + "x-example": "well-being/sleep/cbd-for-sleep" } ], "produces": [ @@ -269298,7 +298501,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/goodrx.healthArticleResponseDoc" } }, "400": { @@ -269307,36 +298510,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Fortune section headlines", - "tags": [ - "Fortune" - ] - } - }, - "/fortune/news": { - "get": { - "description": "Returns fresh Fortune stories from the public RSS feed.", - "operationId": "fortune-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -269351,107 +298534,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fortune top stories", + "summary": "Get a GoodRx Health article", "tags": [ - "Fortune" + "GoodRx" ] } }, - "/fortune/ranking": { + "/goodrx/health-articles": { "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 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": [ { - "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", + "description": "Article section", + "enum": [ + "conditions", + "health-topic", + "well-being", + "pet-health", + "insurance", + "classes", + "drugs", + "healthcare-access", + "corporate", + "hcp", + "drug" + ], "in": "query", - "name": "profitable", + "name": "section", + "required": true, "type": "string", - "x-example": "true" + "x-example": "conditions" }, { - "description": "For fortune-china-500: Company, Rank, Rank of last year, Revenues ($M), Profits ($M); otherwise discover sortable fields with fortune-ranking-filters", + "description": "Topic slug from /goodrx/health-topics", "in": "query", - "name": "sort_by", + "name": "topic", "type": "string", - "x-example": "revenues" - }, - { - "default": "asc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_order", - "type": "string" + "x-example": "sleep" }, { - "default": 0, - "description": "Zero-based result offset", + "default": 1, + "description": "Page number, starting at 1", "in": "query", - "name": "offset", + "name": "page", "type": "integer" }, { - "default": 100, - "description": "Number of rows to return; 0 uses the default 100, maximum 1000", + "default": 50, + "description": "Articles per page (1-200)", "in": "query", - "name": "limit", + "name": "page_size", "type": "integer" } ], @@ -269462,7 +298598,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneRankingResponseDoc" + "$ref": "#/definitions/goodrx.healthArticlesResponseDoc" } }, "400": { @@ -269471,6 +298607,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": { @@ -269483,30 +298631,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search a Fortune ranking", + "summary": "List GoodRx Health articles", "tags": [ - "Fortune" + "GoodRx" ] } }, - "/fortune/ranking/filters": { + "/goodrx/health-topics": { "get": { - "description": "Returns the complete list/year-specific filter fields, exact options, and sortable columns from Fortune's public ranking source.", - "operationId": "fortune-ranking-filters", + "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": [ { - "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.", + "description": "Article section", + "enum": [ + "conditions", + "health-topic", + "well-being", + "pet-health", + "insurance", + "classes", + "drugs", + "healthcare-access", + "corporate", + "hcp", + "drug" + ], "in": "query", - "name": "list", + "name": "section", "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", - "type": "string", - "x-example": "2026" } ], "produces": [ @@ -269516,7 +298672,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneRankingFiltersResponseDoc" + "$ref": "#/definitions/goodrx.healthTopicsResponseDoc" } }, "400": { @@ -269525,6 +298681,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -269537,16 +298699,19 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Fortune ranking filters", + "summary": "List GoodRx Health article topics", "tags": [ - "Fortune" + "GoodRx" ] } }, - "/fortune/ranking/lists": { + "/goodrx/pet-medications": { "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. Fortune China 500 is parsed from its public server-rendered English list page.", - "operationId": "fortune-ranking-lists", + "consumes": [ + "application/json" + ], + "description": "Returns the drugs that have a GoodRx cat and dog information page, with slugs for /goodrx/drug-info with audience=pets.", + "operationId": "goodrx-pet-medications", "produces": [ "application/json" ], @@ -269554,7 +298719,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneRankingListsResponseDoc" + "$ref": "#/definitions/goodrx.petMedicationsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -269563,23 +298740,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Fortune ranking lists", + "summary": "List GoodRx pet medications", "tags": [ - "Fortune" + "GoodRx" ] } }, - "/fortune/ranking/years": { + "/google-jobs/job": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns one Google Careers posting by its numeric job id (the `id` field returned by search). Parsed from careers.google.com's server-rendered job detail page.", + "operationId": "google-jobs-job", "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.", + "description": "Numeric Google job id", "in": "query", - "name": "list", - "type": "string" + "name": "id", + "required": true, + "type": "string", + "x-example": "85207000467546822" } ], "produces": [ @@ -269589,7 +298770,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneRankingYearsResponseDoc" + "$ref": "#/definitions/googlejobs.jobResponseDoc" } }, "400": { @@ -269598,6 +298779,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": { @@ -269610,16 +298803,43 @@ "ApiKeyAuth": [] } ], - "summary": "List Fortune ranking years", + "summary": "Google Jobs single posting", "tags": [ - "Fortune" + "Google Jobs" ] } }, - "/fortune/sections": { + "/google-jobs/search": { "get": { - "description": "Returns the public Fortune editorial section inventory.", - "operationId": "fortune-sections", + "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" ], @@ -269627,7 +298847,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/googlejobs.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" } } }, @@ -269636,19 +298874,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fortune sections", + "summary": "Google Jobs search", "tags": [ - "Fortune" + "Google Jobs" ] } }, - "/fotmob/audio-matches": { + "/google/finance/analyst-articles/{quote}": { "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 normalized analyst article results for a quote.", + "operationId": "google-finance-analyst-articles", + "parameters": [ + { + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", + "required": true, + "type": "string", + "x-example": "AAPL:NASDAQ" + } + ], "produces": [ "application/json" ], @@ -269656,7 +298904,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.articlesResponseDoc" + } + }, + "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": { @@ -269671,31 +298937,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob matches with audio commentary", + "summary": "Google Finance analyst articles", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/fifa-ranking-periods": { + "/google/finance/chart/{quote}": { "get": { "consumes": [ "application/json" ], - "description": "Returns every ranking period currently offered by FotMob for the selected gender. Use a returned periodId with /fotmob/fifa-rankings.", - "operationId": "fotmob-fifa-ranking-periods", + "description": "Returns normalized chart points for a quote and window.", + "operationId": "google-finance-chart", "parameters": [ { - "description": "Ranking gender", - "enum": [ - "men", - "women" - ], - "in": "query", - "name": "gender", + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", "required": true, "type": "string", - "x-example": "men" + "x-example": "AAPL:NASDAQ" + }, + { + "description": "Window: 1d, 5d, 1m, 6m, ytd, 1y, 5y, max", + "in": "query", + "name": "window", + "type": "string" } ], "produces": [ @@ -269705,7 +298973,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.fifaRankingPeriodsResponseDoc" + "$ref": "#/definitions/finance.chartResponseDoc" } }, "400": { @@ -269714,6 +298982,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": { @@ -269726,39 +299006,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob FIFA ranking period directory", + "summary": "Google Finance chart data", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/fifa-rankings": { + "/google/finance/classification/{quote}": { "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 normalized classification strings for a quote.", + "operationId": "google-finance-classification", "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": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", "required": true, "type": "string", - "x-example": "20260720" + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -269768,7 +299036,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.fifaRankingsResponseDoc" + "$ref": "#/definitions/finance.classificationResponseDoc" } }, "400": { @@ -269783,6 +299051,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -269795,27 +299069,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob FIFA national-team rankings", + "summary": "Google Finance classification data", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/latest-news": { + "/google/finance/company/{quote}": { "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 normalized company information from Google Finance.", + "operationId": "google-finance-company", "parameters": [ { - "description": "Zero-based news offset; defaults to 0", - "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "start_index", - "type": "integer" + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", + "required": true, + "type": "string", + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -269825,7 +299099,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.newsListResponseDoc" + "$ref": "#/definitions/finance.companyResponseDoc" } }, "400": { @@ -269840,6 +299114,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -269852,41 +299132,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob latest football news", + "summary": "Google Finance company data", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/league": { + "/google/finance/context": { "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": "Searches Google Finance for instruments matching a company name or ticker query and returns normalized 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": "Numeric FotMob league id from /fotmob/leagues", + "description": "Search query", "in": "query", - "name": "league_id", + "name": "q", "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" - }, - { - "default": false, - "description": "Include the optional overview shot map; increases response size", - "in": "query", - "name": "shotmap", - "type": "boolean" + "x-example": "apple" } ], "produces": [ @@ -269896,7 +299162,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.contextResponseDoc" } }, "400": { @@ -269911,6 +299177,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -269923,19 +299195,29 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league details and sections", + "summary": "Find Google Finance instruments by query", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/leagues": { + "/google/finance/financials/{quote}": { "get": { "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": "Returns normalized annual and quarterly financial rows when Google Finance has statement data for the quote.", + "operationId": "google-finance-financials", + "parameters": [ + { + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", + "required": true, + "type": "string", + "x-example": "AAPL:NASDAQ" + } + ], "produces": [ "application/json" ], @@ -269943,7 +299225,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.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": { @@ -269958,27 +299258,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob competition directory", + "summary": "Google Finance financial statements", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/lineup-builder-players": { + "/google/finance/markets/categories/{category}/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 normalized news for a Google Finance category.", + "operationId": "google-finance-markets-category-news", "parameters": [ { - "description": "Comma-separated list of 1 to 11 numeric FotMob player ids", - "in": "query", - "name": "player_ids", + "description": "Google Finance category id", + "in": "path", + "name": "category", "required": true, "type": "string", - "x-example": "961995,562727" + "x-example": "2" + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -269988,7 +299294,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.categoryNewsResponseDoc" } }, "400": { @@ -270003,6 +299309,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -270015,27 +299327,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob lineup builder player metadata", + "summary": "Google Finance category news", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/lineup-builder-team": { + "/google/finance/markets/categories/{category}/stocks": { "get": { "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": "Returns normalized instruments for a Google Finance category.", + "operationId": "google-finance-markets-category-stocks", "parameters": [ { - "description": "Numeric FotMob team id discoverable through /fotmob/search", - "in": "query", - "name": "team_id", + "description": "Google Finance category id", + "in": "path", + "name": "category", "required": true, "type": "string", - "x-example": "9825" + "x-example": "2" + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -270045,7 +299363,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.categoryStocksResponseDoc" } }, "400": { @@ -270060,6 +299378,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -270072,29 +299396,19 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob lineup builder team data", + "summary": "Google Finance category stocks", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/match": { + "/google/finance/markets/earnings": { "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", - "parameters": [ - { - "description": "Numeric FotMob match id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "5181825" - } - ], + "description": "Returns normalized earnings calendar instruments.", + "operationId": "google-finance-markets-earnings", "produces": [ "application/json" ], @@ -270102,17 +299416,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } - }, - "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" } @@ -270129,29 +299437,19 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob match details", + "summary": "Google Finance earnings calendar", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/match-media": { + "/google/finance/markets/featured": { "get": { "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": "Numeric FotMob match id, discoverable from /fotmob/matches or /fotmob/search", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "5795457" - } - ], + "description": "Returns normalized featured instruments.", + "operationId": "google-finance-markets-featured", "produces": [ "application/json" ], @@ -270159,17 +299457,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } - }, - "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" } @@ -270186,36 +299478,19 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob match videos and media metadata", + "summary": "Google Finance featured stocks", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/matches": { + "/google/finance/markets/headline": { "get": { "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" - } - ], + "description": "Returns the top Google Finance headline.", + "operationId": "google-finance-markets-headline", "produces": [ "application/json" ], @@ -270223,11 +299498,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.headlineResponseDoc" } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -270244,37 +299519,19 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob matches for a date", + "summary": "Google Finance top headline", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/news": { + "/google/finance/markets/indices": { "get": { "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" - } - ], + "description": "Returns normalized market index instruments.", + "operationId": "google-finance-markets-indices", "produces": [ "application/json" ], @@ -270282,17 +299539,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } - }, - "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" } @@ -270309,27 +299560,37 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league news", + "summary": "Google Finance market indices", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/news-article": { + "/google/finance/markets/movers": { "get": { "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 normalized market mover instruments.", + "operationId": "google-finance-markets-movers", "parameters": [ { - "description": "Complete FotMob top-news article id and slug from the public article URL", + "description": "Comma-separated numeric categories", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "29776-fotmob-totw-premier-league-matchday-5s-best-xi" + "name": "categories", + "type": "string" + }, + { + "description": "Result count", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -270339,7 +299600,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.marketMoversResponseDoc" } }, "400": { @@ -270354,6 +299615,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -270366,34 +299633,31 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob full top-news article", + "summary": "Google Finance market movers", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/player": { + "/google/finance/markets/top": { "get": { "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 normalized top instruments for a Google Finance metric.", + "operationId": "google-finance-markets-top", "parameters": [ { - "description": "Numeric FotMob player id from fotmob/search", + "description": "Google Finance metric id", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "961995" + "name": "metric", + "type": "integer" }, { - "default": true, - "description": "Include market-value history; defaults to true", + "description": "Page number", "in": "query", - "name": "include_market_values", - "type": "boolean" + "name": "page", + "type": "integer" } ], "produces": [ @@ -270403,17 +299667,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/finance.topStocksResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -270430,35 +299688,25 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob player profile", + "summary": "Google Finance top stocks by metric", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/player-match-stats": { + "/google/finance/markets/trending": { "get": { "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 normalized trending instruments.", + "operationId": "google-finance-markets-trending", "parameters": [ { - "description": "Numeric FotMob player id", - "in": "query", - "name": "player_id", - "required": true, - "type": "string", - "x-example": "961995" - }, - { - "description": "Numeric FotMob match id", + "description": "Result limit", "in": "query", - "name": "match_id", - "required": true, - "type": "string", - "x-example": "5795457" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -270468,17 +299716,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } - }, - "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" } @@ -270495,50 +299737,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob player match stats", + "summary": "Google Finance trending stocks", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/player-matches": { + "/google/finance/news/{quote}": { "get": { "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 normalized news articles for a quote.", + "operationId": "google-finance-news", "parameters": [ { - "description": "Numeric FotMob player id from fotmob/search", - "in": "query", - "name": "player_id", + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", "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" + "x-example": "AAPL:NASDAQ" }, { - "description": "Numeric before timestamp from the upstream previous URL; omit for the newest page", + "description": "Article limit", "in": "query", - "name": "before", - "type": "string", - "x-example": "1767902400" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -270548,7 +299773,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.articlesResponseDoc" } }, "400": { @@ -270563,6 +299788,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -270575,35 +299806,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob player match history", + "summary": "Google Finance quote news", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/player-stats": { + "/google/finance/quote/{quote}": { "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": "Fetches the latest quote data for a provided stock symbol from Google Finance https://www.google.com/finance/quote/AAPL:NASDAQ?hl=en.", + "operationId": "google-finance-quote", "parameters": [ { - "description": "Numeric FotMob player id from fotmob/search", - "in": "query", - "name": "player_id", - "required": true, - "type": "string", - "x-example": "961995" - }, - { - "description": "Player-specific entryId from fotmob/player statSeasons", - "in": "query", - "name": "season_id", + "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": "0-1" + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -270611,25 +299834,19 @@ ], "responses": { "200": { - "description": "OK", + "description": "Latest stock quote data", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.quoteResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -270640,29 +299857,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob player season statistics", + "summary": "Google Finance Quote API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/search": { + "/google/finance/related/{quote}": { "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", + "description": "Returns normalized related instruments for a quote.", + "operationId": "google-finance-related", "parameters": [ { - "description": "Search phrase, 1 to 50 characters", - "in": "query", - "maxLength": 50, - "minLength": 1, - "name": "term", + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", "required": true, "type": "string", - "x-example": "Arsenal" + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -270672,7 +299887,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.relatedResponseDoc" } }, "400": { @@ -270681,6 +299896,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": { @@ -270693,27 +299920,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search FotMob entities", + "summary": "Google Finance related instruments", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/seasons": { + "/google/finance/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete list of season values accepted by the FotMob league endpoint for one competition.", - "operationId": "fotmob-seasons", + "description": "Fetches normalized search results for a provided keyword from Google Finance.", + "operationId": "google-finance-search", "parameters": [ { - "description": "Numeric FotMob league id from /fotmob/leagues", + "description": "Keyword to search for (e.g., Apple)", "in": "query", - "name": "league_id", + "name": "q", "required": true, - "type": "integer", - "x-example": 47 + "type": "string", + "x-example": "Apple" } ], "produces": [ @@ -270721,25 +299948,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Search results", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.searchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "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" } @@ -270750,77 +299977,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league season discovery", + "summary": "Google Finance Search API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/stats": { + "/google/finance/ticker/{ticker}": { "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": "Fetches chart ticker data from Google Finance based on a provided ticker and window period.", + "operationId": "google-finance-ticker", "parameters": [ { - "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", + "description": "Ticker symbol to fetch data for example:AAPL:NASDAQ, BTC-USD ", + "in": "path", + "name": "ticker", "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" + "x-example": "AAPL:NASDAQ" }, { - "description": "Optional client-side player position filter", - "enum": [ - "all", - "striker", - "winger", - "attackingMidfielder", - "midfielder", - "fullback", - "centerBack" - ], + "description": "Time window for the ticker data (default: 1d), options: 1d, 5d, 1m, 6m, 1y, 5y, max", "in": "query", - "name": "position", - "type": "string", - "x-example": "striker" + "name": "window", + "type": "string" } ], "produces": [ @@ -270828,25 +300011,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Ticker time series", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.tickerResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "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" } @@ -270857,46 +300040,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league player or team statistics", + "summary": "Google Finance Ticker API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/stats-categories": { - "get": { + "/google/jobs": { + "post": { "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 normalized Google Jobs results parsed from public Google web responses.", + "operationId": "google-jobs", "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" - ], - "in": "query", - "name": "type", + "description": "Google Jobs search payload", + "in": "body", + "name": "option", "required": true, - "type": "string", - "x-example": "players" + "schema": { + "$ref": "#/definitions/google.JobsOption" + } } ], "produces": [ @@ -270906,7 +300071,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/google.JobsResponse" } }, "400": { @@ -270915,8 +300080,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -270933,27 +300098,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league stat categories and seasons", + "summary": "Search Google Jobs", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/table": { + "/google/map/place/{place_id}": { "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", + "description": "Returns detailed information for a specified place_id. Rate limit is enforced at 1 request per second.", + "operationId": "google-map-place", "parameters": [ { - "description": "Numeric FotMob league id", - "in": "query", - "name": "league_id", + "description": "Google Place ID", + "in": "path", + "name": "place_id", "required": true, "type": "string", - "x-example": "47" + "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" } ], "produces": [ @@ -270962,18 +300127,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.mapPlaceResponseDoc" } }, "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" } @@ -270984,27 +300161,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league table", + "summary": "Google Maps place details API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/team": { + "/google/map/place/{place_id}/photos": { "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", + "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": "Numeric FotMob team id", - "in": "query", - "name": "id", + "description": "Google Place ID", + "in": "path", + "name": "place_id", "required": true, "type": "string", - "x-example": "9825" + "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" + }, + { + "description": "Maximum number of photos to return. Omit or 0 for all captured.", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -271013,24 +300196,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.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" } @@ -271041,34 +300230,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob team details", + "summary": "Google Maps place photos API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/team-fixtures": { + "/google/map/place/{place_id}/reviews": { "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 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 team id", - "in": "query", - "name": "team_id", + "description": "Google Place ID", + "in": "path", + "name": "place_id", "required": true, "type": "string", - "x-example": "9825" + "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" }, { - "description": "Opaque cursor copied from fixtures.previousFixturesUrl in /fotmob/team or previous in the preceding response", + "description": "Maximum number of reviews to return. Omit or 0 for all captured.", "in": "query", - "name": "cursor", - "required": true, - "type": "string" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -271077,24 +300265,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" } @@ -271105,36 +300299,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob paginated team fixtures", + "summary": "Google Maps place reviews API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/team-news": { - "get": { + "/google/map/search": { + "post": { "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 results from Google Maps based on search options. Rate limit is enforced at 1 request per second.", + "operationId": "google-map-search", "parameters": [ { - "description": "Numeric FotMob team id", - "in": "query", - "name": "team_id", + "description": "Search options", + "in": "body", + "name": "mapSearchOption", "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 + "schema": { + "$ref": "#/definitions/google.MapSearchOption" + } } ], "produces": [ @@ -271143,24 +300329,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.mapSearchResponseDoc" } }, "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" } @@ -271171,122 +300363,58 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob team news", + "summary": "Google Maps search API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/transfers": { + "/google/news": { "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": "Returns current Google News search results using anonymous HTTP requests with fresh proxy profiles, without browser rendering. 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": [ { - "default": "all", - "description": "Feed mode", - "enum": [ - "all", - "rumours", - "popular" - ], + "description": "Search query", "in": "query", - "name": "mode", - "type": "string" + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" }, { - "default": 1, - "description": "One-based result page; 50 rows per page", + "description": "1-based page within the current finite result snapshot; defaults to 1", "in": "query", - "maximum": 200, "minimum": 1, "name": "page", - "type": "integer" - }, - { - "default": "6months", - "description": "Time window", - "enum": [ - "6months", - "1year", - "2years", - "3years" - ], - "in": "query", - "name": "last", - "type": "string" - }, - { - "default": "all", - "description": "Transfer direction; applied when league_ids or team_ids is supplied", - "enum": [ - "all", - "in", - "out" - ], - "in": "query", - "name": "direction", - "type": "string" - }, - { - "description": "Minimum transfer fee in EUR", - "in": "query", - "minimum": 0, - "name": "min_fee", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Maximum transfer fee in EUR", + "description": "Results per page; defaults to 10, clamped to 1..50", "in": "query", - "minimum": 0, - "name": "max_fee", - "type": "integer" + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 }, { - "description": "Comma-separated numeric FotMob league ids, up to 50; discover with /fotmob/leagues", + "description": "Two-letter country code; defaults to us", "in": "query", - "name": "league_ids", + "name": "country", "type": "string", - "x-example": "47" + "x-example": "us" }, { - "description": "Comma-separated numeric FotMob team ids, up to 50; discover with /fotmob/search", + "description": "Google UI language; defaults to en", "in": "query", - "name": "team_ids", + "name": "lang", "type": "string", - "x-example": "8456" - }, - { - "default": "lastModified", - "description": "Sort column", - "enum": [ - "lastModified", - "fee", - "date", - "name", - "fromClubName", - "toClubName" - ], - "in": "query", - "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" + "x-example": "en" } ], "produces": [ @@ -271296,23 +300424,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" } @@ -271323,60 +300457,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob transfer center", + "summary": "Search Google News", "tags": [ - "FotMob" + "Google" ] - } - }, - "/fotmob/trending-news": { - "get": { + }, + "post": { "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", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "description": "Restored JSON compatibility endpoint. Returns current Google News articles using anonymous HTTP requests with fresh proxy profiles, without browser rendering. 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": "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/app.Response" + "$ref": "#/definitions/google.SearchOption" } } - }, - "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" ], @@ -271384,11 +300486,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/google.newsSearchResponseDoc" + } + }, + "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" } }, "503": { - "description": "Service Unavailable", + "description": "Google upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -271399,117 +300519,50 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob trending search suggestions", + "summary": "Search Google News with JSON", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/tv-guide": { + "/google/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 autosuggest query completions from the public unauthenticated suggest JSON endpoint.", + "operationId": "google-suggest", "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": "Search query prefix", "in": "query", - "name": "country", + "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", + "in": "query", + "name": "country", + "type": "string", "x-example": "us" }, { - "description": "IANA timezone for local times", + "description": "Google UI language; defaults to en", "in": "query", - "name": "timezone", + "name": "lang", "type": "string", - "x-example": "America/New_York" + "x-example": "en" } ], "produces": [ @@ -271519,23 +300572,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" } @@ -271546,112 +300605,16 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob football TV guide", + "summary": "Suggest Google search queries", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/tv-guide-channels": { + "/google/trends/categories": { "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", - "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" - ], - "in": "query", - "name": "country", - "required": true, - "type": "string", - "x-example": "us" - } - ], + "description": "Returns supported top-level Google Trends category ids and labels for Trending Now category filters.", + "operationId": "google-trends-categories", "produces": [ "application/json" ], @@ -271659,23 +300622,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/trends.trendsCategoriesResponseDoc" } }, - "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" } @@ -271686,19 +300643,16 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob TV guide channels", + "summary": "Google Trends categories", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/tv-guide-countries": { + "/google/trends/enums": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists all country codes exposed by FotMob's public football TV guide country selector.", - "operationId": "fotmob-tv-guide-countries", + "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" ], @@ -271706,11 +300660,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.trendsEnumsResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -271721,24 +300681,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob TV guide country directory", + "summary": "Google Trends enum metadata", "tags": [ - "FotMob" + "Google" ] } }, - "/foxnews/article": { - "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", + "/google/trends/explore": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized Google Trends keyword analytics from internal Trends widget requests: interest over time, interest by region, related queries, and related topics when available.", + "operationId": "google-trends-explore", "parameters": [ { - "description": "Canonical Fox News article URL", - "in": "query", - "name": "url", + "description": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "https://www.foxnews.com/us/example-story" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -271748,29 +300712,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.articleResponseDoc" + "$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" } }, - "429": { - "description": "Too Many Requests", + "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" } @@ -271781,30 +300745,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fox News article content", + "summary": "Google Trends explore data", "tags": [ - "Fox News" + "Google" ] } }, - "/foxnews/author": { - "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", + "/google/trends/explore/interest-by-region": { + "post": { + "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", "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": "Explore request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -271814,29 +300776,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.authorResponseDoc" + "$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" } }, - "429": { - "description": "Too Many Requests", + "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" } @@ -271847,37 +300809,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fox News author profile", + "summary": "Google Trends interest by region", "tags": [ - "Fox News" + "Google" ] } }, - "/foxnews/headlines": { - "get": { - "description": "Returns fresh headlines from one public Fox News article RSS section. Use foxnews-sections for the current value space.", - "operationId": "foxnews-headlines", + "/google/trends/explore/interest-over-time": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Returns only the interest-over-time timeline from the Google Trends Explore widget flow. Supports multiple comparison terms.", + "operationId": "google-trends-explore-interest-over-time", "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": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -271887,29 +300840,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.headlinesResponseDoc" + "$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" } }, - "429": { - "description": "Too Many Requests", + "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" } @@ -271920,16 +300873,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fox News section headlines", + "summary": "Google Trends interest over time", "tags": [ - "Fox News" + "Google" ] } }, - "/foxnews/news": { - "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", + "/google/trends/explore/related-topics": { + "post": { + "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", + "parameters": [ + { + "description": "Explore request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } + } + ], "produces": [ "application/json" ], @@ -271937,17 +300904,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.newsResponseDoc" + "$ref": "#/definitions/trends.relatedTopicsResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "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": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -271958,45 +300937,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fox News top stories", + "summary": "Google Trends related topics", "tags": [ - "Fox News" + "Google" ] } }, - "/foxnews/search": { - "get": { - "description": "Searches Fox News' public credential-free Moxie search surface. Results may include article, video, or slideshow records; use type to restrict the result kind.", - "operationId": "foxnews-search", + "/google/trends/explore/rising-queries": { + "post": { + "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", "parameters": [ { - "description": "Search query", - "in": "query", - "maxLength": 200, - "minLength": 1, - "name": "q", + "description": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string" - }, - { - "default": 1, - "description": "1-based result offset", - "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "start", - "type": "integer" - }, - { - "description": "Result type", - "enum": [ - "article", - "video", - "slideshow" - ], - "in": "query", - "name": "type", - "type": "string" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -272006,23 +300968,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.searchResponseDoc" + "$ref": "#/definitions/trends.exploreQueriesResponseDoc" } }, "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" + } + }, + "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" } @@ -272033,16 +301001,30 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fox News public content", + "summary": "Google Trends explore rising queries", "tags": [ - "Fox News" + "Google" ] } }, - "/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", + "/google/trends/explore/top-queries": { + "post": { + "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", + "parameters": [ + { + "description": "Explore request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } + } + ], "produces": [ "application/json" ], @@ -272050,11 +301032,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.sectionsResponseDoc" + "$ref": "#/definitions/trends.exploreQueriesResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "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": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -272065,26 +301065,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fox News RSS sections", + "summary": "Google Trends explore top queries", "tags": [ - "Fox News" + "Google" ] } }, - "/foxsports/article": { + "/google/trends/locations": { "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": "Canonical FOX Sports story URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.foxsports.com/stories/nfl/how-to-watch-eagles-vs-bears-tv-channel-live-stream-time-2026-week-3" - } - ], + "description": "Returns supported Google Trends location codes. Explore endpoints also accept WORLDWIDE.", + "operationId": "google-trends-locations", "produces": [ "application/json" ], @@ -272092,29 +301082,17 @@ "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" + "$ref": "#/definitions/trends.trendsLocationsResponseDoc" } }, "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" } @@ -272125,48 +301103,384 @@ "ApiKeyAuth": [] } ], - "summary": "Get FOX Sports article content", + "summary": "Google Trends locations", "tags": [ - "FOX Sports" + "Google" ] } }, - "/foxsports/headlines": { + "/google/trends/trending": { "get": { - "description": "Returns current headlines from one public FOX Sports editorial RSS feed.", - "operationId": "foxsports-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized Google Trends Trending Now rows from the internal TrendsUi batch RPC replay.", + "operationId": "google-trends-trending", "parameters": [ { - "description": "FOX Sports section slug", + "default": "US", + "description": "Country/territory location code", "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" + "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": "section", - "required": true, + "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": [ @@ -272176,23 +301490,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/trends.trendingResponseDoc" } }, "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" + } + }, + "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" } @@ -272203,16 +301523,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get FOX Sports section headlines", + "summary": "Google Trends trending now data", "tags": [ - "FOX Sports" + "Google" ] } }, - "/foxsports/news": { - "get": { - "description": "Returns current FOX Sports top stories from the official public All Headlines RSS feed.", - "operationId": "foxsports-news", + "/google/trends/trending/detail": { + "post": { + "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", + "parameters": [ + { + "description": "Trending detail request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/trends.TrendingDetailRequest" + } + } + ], "produces": [ "application/json" ], @@ -272220,17 +301554,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/trends.exploreResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "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": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -272241,50 +301587,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get FOX Sports top stories", + "summary": "Google Trends trending term detail", "tags": [ - "FOX Sports" + "Google" ] } }, - "/foxsports/sections": { + "/google/videos": { "get": { - "description": "Returns the live-verified public editorial RSS feed inventory used by foxsports-headlines.", - "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 normalized Google video vertical results (title, platform, link, duration, age) parsed from the public Google video results page. Locale defaults to country=us and lang=en. Returns 503 when Google serves a challenge page or unusable HTML.", + "operationId": "google-videos", "parameters": [ { - "description": "Canonical France 24 article URL", + "description": "Search query", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.france24.com/en/europe/20260924-eu-sanctions-russian-pundit-xenia-fedorova-after-expulsion-from-france" + "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": "Google UI language; defaults to en", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -272294,23 +301648,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$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" } @@ -272321,24 +301681,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get France 24 article content", + "summary": "Search Google video results", "tags": [ - "France 24" + "Google" ] } }, - "/france24/author": { + "/googlepatents/classification": { "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", + "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", "parameters": [ { - "description": "Canonical www.france24.com/en/author// URL", + "description": "CPC classification symbol", "in": "query", - "name": "url", + "name": "code", "required": true, "type": "string", - "x-example": "https://www.france24.com/en/author/france-24/" + "x-example": "A61K31/00" } ], "produces": [ @@ -272348,7 +301711,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.france24AuthorResponseDoc" + "$ref": "#/definitions/googlepatents.classificationResponseDoc" } }, "400": { @@ -272363,6 +301726,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": { @@ -272375,39 +301750,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a France 24 author profile", + "summary": "Look up a Cooperative Patent Classification (CPC) symbol", "tags": [ - "France 24" + "Google Patents" ] } }, - "/france24/headlines": { + "/googlepatents/coverage": { "get": { - "description": "Returns fresh headlines from one public France 24 English-edition section.", - "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" - } + "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", "produces": [ "application/json" ], @@ -272415,46 +301770,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/googlepatents.coverageResponseDoc" } }, - "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" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get France 24 section headlines", - "tags": [ - "France 24" - ] - } - }, - "/france24/news": { - "get": { - "description": "Returns fresh France 24 English-edition stories from the public RSS feed.", - "operationId": "france24-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -272468,42 +301797,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get France 24 top stories", + "summary": "Google Patents database coverage: grants and applications indexed per country per year", "tags": [ - "France 24" + "Google Patents" ] } }, - "/france24/sections": { + "/googlepatents/detail": { "get": { - "description": "Returns the complete public France 24 English-edition section inventory (regions, topics, and other public hubs) accepted by /france24/headlines.", - "operationId": "france24-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Returns a single patent's normalized 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`. Public data, sourced from Google Patents' server-rendered detail pages. To search or browse by keyword, inventor, or assignee instead of a known publication number, use `/googlepatents/search`.", + "operationId": "googlepatents-detail", + "parameters": [ { - "ApiKeyAuth": [] + "description": "Publication number, e.g. US10758101B2", + "in": "query", + "name": "number", + "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" } ], - "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" ], @@ -272511,46 +301834,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/freemalaysiatoday.newsResponseDoc" + "$ref": "#/definitions/googlepatents.detailResponseDoc" } }, - "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 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" - } }, "429": { "description": "Too Many Requests", @@ -272558,6 +301855,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -272570,24 +301873,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Free Malaysia Today sections", + "summary": "A single patent's bibliographic data, abstract, claims, description, citations, and family", "tags": [ - "Free Malaysia Today" + "Google Patents" ] } }, - "/ft/article": { + "/googlepatents/recent": { "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", + "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", "parameters": [ { - "description": "Canonical FT article URL", + "description": "ISO 8601 week, format YYYY-Www", "in": "query", - "name": "url", + "name": "week", "required": true, "type": "string", - "x-example": "https://www.ft.com/content/018aa34c-2498-4120-906b-5baf36e98c77" + "x-example": "2026-W20" } ], "produces": [ @@ -272597,7 +301903,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ft.articleResponseDoc" + "$ref": "#/definitions/googlepatents.recentResponseDoc" } }, "400": { @@ -272606,12 +301912,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -272624,6 +301924,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -272636,37 +301942,147 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Financial Times article's content", + "summary": "Browse patent publications indexed by Google Patents for one ISO week", "tags": [ - "FT" + "Google Patents" ] } }, - "/ft/author": { + "/googlepatents/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 Patents' full index by free-text query, with optional inventor, assignee, patent office, status, type, language, and date filters. Returns a page of normalized hits plus top-assignee/top-inventor/top-classification breakdowns over the full result set. Public data, sourced from Google Patents' own search API.", + "operationId": "googlepatents-search", "parameters": [ { - "description": "Author URL slug, e.g. martin-wolf", + "description": "Free-text search query", "in": "query", - "name": "slug", + "name": "q", + "required": true, "type": "string", - "x-example": "martin-wolf" + "x-example": "battery" }, { - "description": "Canonical www.ft.com/ author URL; alternative to slug", + "description": "Filter by inventor name", "in": "query", - "name": "url", + "name": "inventor", "type": "string", - "x-example": "https://www.ft.com/martin-wolf" + "x-example": "Thomas Fogarty" }, { - "default": 1, - "description": "1-based page number of the author's article list", + "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": [ + "GRANT", + "APPLICATION" + ], + "in": "query", + "name": "status", + "type": "string", + "x-example": "GRANT" + }, + { + "description": "Filter by document type. Allowed values: PATENT, DESIGN", + "enum": [ + "PATENT", + "DESIGN" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "PATENT" + }, + { + "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" + }, + { + "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", + "name": "date_field", + "type": "string", + "x-example": "priority" + }, + { + "description": "Only results dated on or before this date (YYYY-MM-DD)", + "in": "query", + "name": "before", + "type": "string", + "x-example": "2021-12-31" + }, + { + "description": "Only results dated on or after this date (YYYY-MM-DD)", + "in": "query", + "name": "after", + "type": "string", + "x-example": "2020-01-01" + }, + { + "description": "Sort order. Allowed values: relevance, new, old. Defaults to relevance", + "enum": [ + "relevance", + "new", + "old" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "relevance" + }, + { + "description": "Results per page, default 10, max 100", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 10 + }, + { + "description": "Page number, 0-indexed, default 0", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -272676,7 +302092,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ft.authorResponseDoc" + "$ref": "#/definitions/googlepatents.searchResponseDoc" } }, "400": { @@ -272685,14 +302101,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" } @@ -272709,16 +302125,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get an FT author profile", + "summary": "Search Google Patents by keyword, inventor, assignee, and other filters", "tags": [ - "FT" + "Google Patents" ] } }, - "/ft/categories": { + "/googlepatents/suggest": { "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", + "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", + "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", + "in": "query", + "name": "value", + "required": true, + "type": "string", + "x-example": "John" + } + ], "produces": [ "application/json" ], @@ -272726,7 +302167,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ft.categoriesResponseDoc" + "$ref": "#/definitions/googlepatents.suggestResponseDoc" } }, "400": { @@ -272741,6 +302182,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -272753,32 +302200,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Financial Times sections", + "summary": "Autocomplete an inventor or assignee name for Google Patents search", "tags": [ - "FT" + "Google Patents" ] } }, - "/ft/headlines": { + "/googleplay/app": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns normalized 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": "Section slug from /ft/categories", + "description": "Google Play package name", "in": "query", - "name": "section", + "name": "app_id", "required": true, "type": "string", - "x-example": "world" + "x-example": "com.openai.chatgpt" }, { - "description": "Results page", + "description": "Two-letter storefront country code", "in": "query", - "maximum": 20, - "minimum": 1, - "name": "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": [ @@ -272786,9 +302242,9 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped app details payload", "schema": { - "$ref": "#/definitions/ft.headlinesResponseDoc" + "$ref": "#/definitions/googleplay.AppDetailsResponse" } }, "400": { @@ -272809,8 +302265,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -272821,98 +302277,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Financial Times section", + "summary": "Retrieve full Google Play app details", "tags": [ - "FT" + "GooglePlay" ] } }, - "/ft/news": { + "/googleplay/categories": { "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 category ids found in the Google Play apps navigation.", + "operationId": "googleplay-categories", "parameters": [ { - "description": "Search keywords", + "description": "Two-letter country code", "in": "query", - "name": "q", - "required": true, + "name": "country", "type": "string", - "x-example": "climate" - }, - { - "description": "Results page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "description": "Result ordering", - "enum": [ - "relevance", - "date" - ], - "in": "query", - "name": "sort", - "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": [ @@ -272922,7 +302313,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ft.searchResponseDoc" + "$ref": "#/definitions/googleplay.categoriesResponseDoc" } }, "400": { @@ -272943,8 +302334,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -272955,24 +302346,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search Financial Times articles", + "summary": "Retrieve Google Play app categories", "tags": [ - "FT" + "GooglePlay" ] } }, - "/gamerant/article": { + "/googleplay/datasafety": { "get": { - "description": "Returns public Game Rant article metadata and body paragraphs from a canonical article URL.", - "operationId": "gamerant-article", + "consumes": [ + "application/json" + ], + "description": "Returns the data safety information displayed on Google Play.", + "operationId": "googleplay-datasafety", "parameters": [ { - "description": "Canonical Game Rant article URL", + "description": "Google Play app id", "in": "query", - "name": "url", + "name": "app_id", "required": true, "type": "string", - "x-example": "https://gamerant.com/xbox-console-update-patch-notes-september-2026/" + "x-example": "com.openai.chatgpt" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -272982,7 +302383,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/googleplay.dataSafetyResponseDoc" } }, "400": { @@ -273003,8 +302404,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -273015,24 +302416,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get Game Rant article content", + "summary": "Retrieve Google Play data safety details", "tags": [ - "Game Rant" + "GooglePlay" ] } }, - "/gamerant/author": { + "/googleplay/developer/{dev_id}": { "get": { - "description": "Returns a Game Rant author's byline metadata, biography, social links, and recent articles from a canonical author URL.", - "operationId": "gamerant-author", + "consumes": [ + "application/json" + ], + "description": "Returns apps published by a developer id or developer name.", + "operationId": "googleplay-developer", "parameters": [ { - "description": "Canonical Game Rant author URL", - "in": "query", - "name": "url", + "description": "Developer id or name", + "in": "path", + "name": "dev_id", "required": true, "type": "string", - "x-example": "https://gamerant.com/author/dominik-bosnjak/" + "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": [ @@ -273042,7 +302474,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gamerantAuthorResponseDoc" + "$ref": "#/definitions/googleplay.developerResultsResponseDoc" } }, "400": { @@ -273057,8 +302489,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" } @@ -273069,203 +302507,91 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Game Rant author profile", + "summary": "Retrieve apps by Google Play developer", "tags": [ - "Game Rant" + "GooglePlay" ] } }, - "/gamerant/headlines": { + "/googleplay/list": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns apps from a Google Play collection and category.", + "operationId": "googleplay-list", "parameters": [ { - "description": "Game Rant RSS section slug", + "description": "Collection: TOP_FREE, TOP_PAID, GROSSING, NEW_FREE, NEW_PAID", "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" + "TOP_FREE", + "TOP_PAID", + "GROSSING", + "NEW_FREE", + "NEW_PAID" + ], + "in": "query", + "name": "collection", + "type": "string", + "x-example": "TOP_FREE" + }, + { + "description": "Category id", + "in": "query", + "name": "category", + "type": "string", + "x-example": "TOOLS" + }, + { + "description": "Google Play device tab: phone, tablet, tv, chromebook, watch, xr, car", + "enum": [ + "phone", + "tablet", + "tv", + "chromebook", + "watch", + "xr", + "car" ], "in": "query", - "name": "section", - "required": true, - "type": "string" + "name": "device", + "type": "string", + "x-example": "tablet" + }, + { + "description": "Family age range", + "in": "query", + "name": "age", + "type": "string", + "x-example": "AGE_RANGE1" + }, + { + "description": "Number of apps", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 50 + }, + { + "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": [ @@ -273275,7 +302601,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/googleplay.listResultsResponseDoc" } }, "400": { @@ -273284,14 +302610,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" } @@ -273302,16 +302634,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Game Rant section headlines", + "summary": "Retrieve apps from a Google Play top collection", "tags": [ - "Game Rant" + "GooglePlay" ] } }, - "/gamerant/news": { + "/googleplay/permissions": { "get": { - "description": "Returns fresh Game Rant top stories from its public RSS feed.", - "operationId": "gamerant-news", + "consumes": [ + "application/json" + ], + "description": "Returns Google Play permission groups or a short permission name list.", + "operationId": "googleplay-permissions", + "parameters": [ + { + "description": "Google Play app id", + "in": "query", + "name": "app_id", + "required": true, + "type": "string", + "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": [ "application/json" ], @@ -273319,7 +302685,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/googleplay.permissionsResultsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -273328,8 +302706,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -273340,16 +302718,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Game Rant top stories", + "summary": "Retrieve Google Play app permissions", "tags": [ - "Game Rant" + "GooglePlay" ] } }, - "/gamerant/sections": { + "/googleplay/ratings": { "get": { - "description": "Returns the public Game Rant RSS section inventory used by the headlines endpoint.", - "operationId": "gamerant-sections", + "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", + "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", + "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" ], @@ -273357,7 +302762,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/googleplay.ratingsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -273365,6 +302782,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -273372,24 +302795,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get Game Rant RSS sections", + "summary": "Get Google Play ratings by device", "tags": [ - "Game Rant" + "GooglePlay" ] } }, - "/gamesradar/article": { + "/googleplay/reviews": { "get": { - "description": "Returns public GamesRadar+ article metadata and body paragraphs from a canonical article URL.", - "operationId": "gamesradar-article", + "consumes": [ + "application/json" + ], + "description": "Returns one or more pages of app reviews. Set `paginate=true` to fetch only the requested page.", + "operationId": "googleplay-reviews", "parameters": [ { - "description": "Canonical GamesRadar+ article URL", + "description": "Google Play app id", "in": "query", - "name": "url", + "name": "app_id", "required": true, "type": "string", - "x-example": "https://www.gamesradar.com/games/silent-hill/silent-hill-townfall-review/" + "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" } ], "produces": [ @@ -273399,7 +302871,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/googleplay.reviewsResponseDoc" } }, "400": { @@ -273414,8 +302886,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" } @@ -273426,37 +302904,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get GamesRadar+ article content", + "summary": "Retrieve Google Play reviews", "tags": [ - "GamesRadar+" + "GooglePlay" ] } }, - "/gamesradar/author": { + "/googleplay/search": { "get": { - "description": "Returns one GamesRadar+ author's public profile: name, job title, biography, social links, and one page of their recent articles.", - "operationId": "gamesradar-author", + "consumes": [ + "application/json" + ], + "description": "Returns Google Play search results for a term.", + "operationId": "googleplay-search", "parameters": [ { - "description": "Author slug, e.g. rosalie-newcombe", + "description": "Search term", "in": "query", - "name": "slug", + "name": "term", + "required": true, "type": "string", - "x-example": "rosalie-newcombe" + "x-example": "chatgpt" }, { - "description": "Canonical gamesradar.com/author/ URL, optionally with a /page/ segment; 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.gamesradar.com/author/rosalie-newcombe/" + "x-example": "us" }, { - "default": 1, - "description": "1-based page number; overrides any page number in url", + "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": [ @@ -273466,7 +302974,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gamesradarAuthorResponseDoc" + "$ref": "#/definitions/googleplay.searchResultsResponseDoc" } }, "400": { @@ -273481,8 +302989,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" } @@ -273493,46 +303007,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GamesRadar+ author profile", + "summary": "Search Google Play", "tags": [ - "GamesRadar+" + "GooglePlay" ] } }, - "/gamesradar/headlines": { + "/googleplay/similar": { "get": { - "description": "Returns fresh GamesRadar+ headlines from one public section hub page.", - "operationId": "gamesradar-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns apps from the \"Similar apps\" cluster on an app details page.", + "operationId": "googleplay-similar", "parameters": [ { - "description": "GamesRadar+ section slug", - "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" - ], + "description": "Google Play app id", "in": "query", - "name": "section", + "name": "app_id", "required": true, - "type": "string" + "type": "string", + "x-example": "com.openai.chatgpt" + }, + { + "description": "Number of apps", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 24 + }, + { + "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": [ @@ -273542,7 +303065,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/googleplay.similarResultsResponseDoc" } }, "400": { @@ -273551,37 +303074,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get GamesRadar+ section headlines", - "tags": [ - "GamesRadar+" - ] - } - }, - "/gamesradar/news": { - "get": { - "description": "Returns fresh GamesRadar+ top stories from the public RSS feed.", - "operationId": "gamesradar-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -273589,8 +303086,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -273601,16 +303098,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get GamesRadar+ top stories", + "summary": "Retrieve similar Google Play apps", "tags": [ - "GamesRadar+" + "GooglePlay" ] } }, - "/gamesradar/sections": { + "/googleplay/suggest/{term}": { "get": { - "description": "Returns the public GamesRadar+ editorial taxonomy used by the headlines endpoint.", - "operationId": "gamesradar-sections", + "consumes": [ + "application/json" + ], + "description": "Returns up to 10 suggestions for a search term.", + "operationId": "googleplay-suggest", + "parameters": [ + { + "description": "Search term prefix", + "in": "path", + "name": "term", + "required": true, + "type": "string", + "x-example": "chatg" + }, + { + "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" + } + ], "produces": [ "application/json" ], @@ -273618,7 +303142,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/googleplay.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" } } }, @@ -273627,24 +303175,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get GamesRadar+ sections", + "summary": "Retrieve Google Play query suggestions", "tags": [ - "GamesRadar+" + "GooglePlay" ] } }, - "/gbnews/article": { + "/gq/article": { "get": { - "description": "Returns public GB News article metadata and body paragraphs from a canonical story URL.", - "operationId": "gbnews-article", + "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": "Canonical GB News story URL", + "description": "Canonical GQ story URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.gbnews.com/news/north-yorkshire-gaza-barracks-fire-catterick-garrison" + "x-example": "https://www.gq.com/story/how-to-unclog-your-ear" } ], "produces": [ @@ -273663,6 +303211,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -273681,30 +303235,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get GB News article content", + "summary": "Get GQ article content", "tags": [ - "GB News" + "GQ" ] } }, - "/gbnews/author": { + "/gq/author": { "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", + "description": "Returns one GQ contributor's public profile: name, biography, headshot, social links, and one page of their recent articles.", + "operationId": "gq-author", "parameters": [ { - "description": "Author slug, e.g. peter-stevens-a", + "description": "Contributor slug, e.g. tom-ward; provide slug or url", "in": "query", "name": "slug", "type": "string", - "x-example": "peter-stevens-a" + "x-example": "tom-ward" }, { - "description": "Canonical gbnews.com/authors/ URL; alternative to slug", + "description": "Canonical www.gq.com/contributor/ URL; alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.gbnews.com/authors/peter-stevens-a" + "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" } ], "produces": [ @@ -273714,7 +303275,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gbnewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.gqAuthorResponseDoc" } }, "400": { @@ -273741,417 +303302,115 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GB News author profile", + "summary": "Get a GQ contributor profile", "tags": [ - "GB News" + "GQ" ] } }, - "/gbnews/headlines": { + "/gq/headlines": { "get": { - "description": "Returns fresh GB News headlines from one public section or topic feed.", - "operationId": "gbnews-headlines", + "description": "Returns the current story cards from one GQ section page: headline, standfirst, byline, publish date, and image.", + "operationId": "gq-headlines", "parameters": [ { - "description": "GB News section or topic path", + "description": "GQ section slug", "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", + "culture", + "entertainment", + "fitness", + "gq-hype", + "gq-recommends", + "gqsports", + "grooming", "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" + "style", + "watches", + "wellness" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "culture" + } + ], + "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 GQ section headlines", + "tags": [ + "GQ" + ] + } + }, + "/gq/news": { + "get": { + "description": "Returns fresh GQ top stories from the public RSS feed.", + "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" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] } ], + "summary": "Get GQ top stories", + "tags": [ + "GQ" + ] + } + }, + "/gq/sections": { + "get": { + "description": "Returns the GQ section (channel) slugs accepted by the headlines endpoint, each verified to list live stories.", + "operationId": "gq-sections", "produces": [ "application/json" ], @@ -274159,11 +303418,40 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/grailed.categoriesResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -274180,16 +303468,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get GB News section headlines", + "summary": "List Grailed's facet taxonomy", "tags": [ - "GB News" + "Grailed" ] } }, - "/gbnews/news": { + "/grailed/collection": { "get": { - "description": "Returns fresh GB News top stories from the public news feed.", - "operationId": "gbnews-news", + "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", + "parameters": [ + { + "description": "Collection id, from grailed-collections' own collections[].id field", + "in": "query", + "name": "id", + "required": true, + "type": "integer", + "x-example": 20 + } + ], "produces": [ "application/json" ], @@ -274197,7 +303498,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/grailed.collectionResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -274218,16 +303531,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get GB News top stories", + "summary": "Get one Grailed curated collection's listings", "tags": [ - "GB News" + "Grailed" ] } }, - "/gbnews/sections": { + "/grailed/collections": { "get": { - "description": "Returns the public GB News section and topic taxonomy accepted by the headlines endpoint.", - "operationId": "gbnews-sections", + "consumes": [ + "application/json" + ], + "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" ], @@ -274235,7 +303551,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/grailed.collectionsResponseDoc" } }, "429": { @@ -274256,89 +303572,97 @@ "ApiKeyAuth": [] } ], - "summary": "Get GB News sections", + "summary": "List Grailed's curated homepage collections", "tags": [ - "GB News" + "Grailed" ] } }, - "/gdelt/context": { + "/grailed/designers": { "get": { "consumes": [ "application/json" ], - "description": "Search recent (last 72 hours) GDELT-monitored news for", - "operationId": "gdelt-context", + "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": "GDELT query string. All terms must co-occur in the same sentence. Supports quoted phrases, (a OR b), domain:example.com.", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "climate change" - }, - { - "description": "Convenience domain filter, appended to the query as domain:VALUE.", - "in": "query", - "name": "domain", - "type": "string", - "x-example": "bbc.com" - }, - { - "description": "Source-language filter (GDELT's searchlang parameter). Space-segmented languages only (excludes CJK and similar).", + "description": "Free-text designer name filter", "in": "query", - "name": "language", + "name": "q", "type": "string", - "x-example": "english" + "x-example": "gucci" }, { - "description": "Only return sentences GDELT identified as a quotation.", + "description": "One-based page number, defaults to 1", "in": "query", - "name": "is_quote", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "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.", + "description": "Results per page, defaults to 24, maximum 100", "in": "query", - "name": "timespan", - "type": "string", - "x-example": "24h" + "name": "limit", + "type": "integer", + "x-example": 24 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/grailed.designersResponseDoc" + } }, - { - "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": "from", - "type": "string", - "x-example": "2026-08-19" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "End of an absolute time window. Same formats as from.", - "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-20" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "relevance", - "description": "Result order.", - "enum": [ - "relevance", - "datedesc", - "dateasc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List or search Grailed's designer/brand taxonomy", + "tags": [ + "Grailed" + ] + } + }, + "/grailed/listing": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns full normalized 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": [ { - "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.", + "description": "Listing id, from a search or sold-listings result's own listings[].id field", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "maxrecords", - "type": "integer" + "name": "id", + "required": true, + "type": "integer", + "x-example": 105379689 } ], "produces": [ @@ -274348,7 +303672,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.contextResponseDoc" + "$ref": "#/definitions/grailed.listingResponseDoc" } }, "400": { @@ -274357,8 +303681,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" } @@ -274375,92 +303705,124 @@ "ApiKeyAuth": [] } ], - "summary": "Sentence-level co-occurrence search across recent GDELT coverage", + "summary": "Get a Grailed listing", "tags": [ - "GDELT" + "Grailed" ] } }, - "/gdelt/search": { + "/grailed/search": { "get": { "consumes": [ "application/json" ], - "description": "Search the GDELT Project's continuously updated global news", - "operationId": "gdelt-search", + "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 is Algolia's own 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": "GDELT query string. Supports GDELT's own search operators: quoted phrases, (a OR b), theme:NAME, toneN, near20:\\", + "description": "Free-text search query", "in": "query", - "name": "query", - "required": true, + "name": "q", "type": "string", - "x-example": "climate change" + "x-example": "gucci" }, { - "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.", + "description": "Designer/brand name filter, from grailed-designers' own designers[].name field", "in": "query", - "name": "country", + "name": "designer", "type": "string", - "x-example": "unitedkingdom" + "x-example": "Gucci" }, { - "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE. Accepts a GDELT-recognized language name or 3-letter code.", + "description": "Department filter", + "enum": [ + "menswear", + "womenswear" + ], "in": "query", - "name": "language", + "name": "department", "type": "string", - "x-example": "english" + "x-example": "menswear" }, { - "description": "Convenience domain filter, appended to the query as domain:VALUE.", + "description": "Category facet filter, from grailed-categories' own categories[].value field", "in": "query", - "name": "domain", + "name": "category", "type": "string", - "x-example": "bbc.com" + "x-example": "tops" }, { - "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", + "description": "Size facet filter, from grailed-categories' own sizes[].value field", "in": "query", - "name": "timespan", + "name": "size", "type": "string", - "x-example": "1w" + "x-example": "m" }, { - "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.", + "description": "Color facet filter, from grailed-categories' own colors[].value field", "in": "query", - "name": "from", + "name": "color", "type": "string", - "x-example": "2026-08-01" + "x-example": "black" }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "Condition filter", + "enum": [ + "is_new", + "is_gently_used", + "is_used", + "is_worn", + "is_not_specified" + ], "in": "query", - "name": "to", + "name": "condition", "type": "string", - "x-example": "2026-08-19" + "x-example": "is_gently_used" }, { - "default": "relevance", - "description": "Result order.", + "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": [ - "relevance", - "datedesc", - "dateasc", - "tonedesc", - "toneasc" + "heat", + "heat_recency", + "followers", + "newest", + "price_asc", + "price_desc", + "recently_updated", + "quality" ], "in": "query", "name": "sort", - "type": "string" + "type": "string", + "x-example": "heat" }, { - "default": 75, - "description": "Rows to return. GDELT's own hard cap is 250; there is no pagination cursor beyond it.", + "description": "One-based page number, defaults to 1", "in": "query", - "maximum": 250, - "minimum": 1, - "name": "maxrecords", - "type": "integer" + "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": [ @@ -274470,7 +303832,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.searchResponseDoc" + "$ref": "#/definitions/grailed.searchResponseDoc" } }, "400": { @@ -274479,8 +303841,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -274497,92 +303859,181 @@ "ApiKeyAuth": [] } ], - "summary": "Search global news coverage indexed by GDELT", + "summary": "Search or browse Grailed active listings", "tags": [ - "GDELT" + "Grailed" ] } }, - "/gdelt/timeline": { + "/grailed/seller": { "get": { "consumes": [ "application/json" ], - "description": "Return how a query's global news coverage has trended over", - "operationId": "gdelt-timeline", + "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": "GDELT query string. Same syntax as gdelt-search's query.", + "description": "Grailed username", "in": "query", - "name": "query", + "name": "username", "required": true, "type": "string", - "x-example": "climate change" + "x-example": "woodlandstepps" }, { - "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" - ], + "description": "One-based page number for the seller's listings, defaults to 1", "in": "query", - "name": "metric", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Convenience source-country filter, appended to the query as sourcecountry:VALUE.", + "description": "Listings per page, defaults to 24, maximum 100", "in": "query", - "name": "country", - "type": "string", - "x-example": "unitedkingdom" + "name": "limit", + "type": "integer", + "x-example": 24 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/grailed.sellerResponseDoc" + } }, - { - "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE.", - "in": "query", - "name": "language", - "type": "string", - "x-example": "english" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Convenience domain filter, appended to the query as domain:VALUE.", - "in": "query", - "name": "domain", - "type": "string", - "x-example": "bbc.com" + "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": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", + "ApiKeyAuth": [] + } + ], + "summary": "Get a Grailed seller's profile and active listings", + "tags": [ + "Grailed" + ] + } + }, + "/grailed/seller-reviews": { + "get": { + "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": "Grailed username", "in": "query", - "name": "timespan", + "name": "username", + "required": true, "type": "string", - "x-example": "1w" + "x-example": "woodlandstepps" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "One-based page number, defaults to 1", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-01" + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/grailed.sellerReviewsResponseDoc" + } + }, + "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": "End of an absolute time window. Same formats as from.", + "ApiKeyAuth": [] + } + ], + "summary": "Get a Grailed seller's buyer feedback", + "tags": [ + "Grailed" + ] + } + }, + "/grailed/similar-listings": { + "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", + "parameters": [ + { + "description": "Listing id to find similar listings for", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "name": "id", + "required": true, + "type": "integer", + "x-example": 105379689 }, { - "default": 0, - "description": "Moving-window smoothing applied to the timeline, in steps. 0 disables smoothing.", + "description": "Results to return, defaults to 30, maximum 99", "in": "query", - "maximum": 30, - "minimum": 0, - "name": "smooth", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 30 } ], "produces": [ @@ -274592,7 +304043,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.timelineResponseDoc" + "$ref": "#/definitions/grailed.similarListingsResponseDoc" } }, "400": { @@ -274601,8 +304052,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" } @@ -274619,69 +304076,119 @@ "ApiKeyAuth": [] } ], - "summary": "Coverage volume or tone over time for a GDELT query", + "summary": "Get listings similar to a Grailed listing", "tags": [ - "GDELT" + "Grailed" ] } }, - "/gdelt/tonechart": { + "/grailed/sold-listings": { "get": { "consumes": [ "application/json" ], - "description": "Return a sentiment (tone) histogram for a query's matching", - "operationId": "gdelt-tonechart", + "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": "GDELT query string. Same syntax as gdelt-search's query.", + "description": "Free-text search query", "in": "query", - "name": "query", - "required": true, + "name": "q", "type": "string", - "x-example": "climate change" + "x-example": "gucci" }, { - "description": "Convenience source-country filter, appended to the query as sourcecountry:VALUE.", + "description": "Designer/brand name filter, from grailed-designers' own designers[].name field", "in": "query", - "name": "country", + "name": "designer", "type": "string", - "x-example": "unitedkingdom" + "x-example": "Gucci" }, { - "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE.", + "description": "Department filter", + "enum": [ + "menswear", + "womenswear" + ], "in": "query", - "name": "language", + "name": "department", "type": "string", - "x-example": "english" + "x-example": "menswear" }, { - "description": "Convenience domain filter, appended to the query as domain:VALUE.", + "description": "Category facet filter, from grailed-categories' own categories[].value field", "in": "query", - "name": "domain", + "name": "category", "type": "string", - "x-example": "bbc.com" + "x-example": "footwear" }, { - "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", + "description": "Size facet filter, from grailed-categories' own sizes[].value field", "in": "query", - "name": "timespan", + "name": "size", "type": "string", - "x-example": "1w" + "x-example": "9" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "Color facet filter, from grailed-categories' own colors[].value field", "in": "query", - "name": "from", + "name": "color", "type": "string", - "x-example": "2026-08-01" + "x-example": "white" }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "Condition filter", + "enum": [ + "is_new", + "is_gently_used", + "is_used", + "is_worn", + "is_not_specified" + ], "in": "query", - "name": "to", + "name": "condition", "type": "string", - "x-example": "2026-08-19" + "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": [ @@ -274691,7 +304198,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.toneChartResponseDoc" + "$ref": "#/definitions/grailed.soldListingsResponseDoc" } }, "400": { @@ -274700,8 +304207,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -274718,28 +304225,27 @@ "ApiKeyAuth": [] } ], - "summary": "Sentiment histogram for a GDELT query", + "summary": "Search Grailed sold listings (sale price history)", "tags": [ - "GDELT" + "Grailed" ] } }, - "/gdelt/tv-concept-entities": { + "/grailed/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Return GDELT's own catalog of Google Knowledge Graph concept", - "operationId": "gdelt-tv-concept-entities", + "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": [ { - "default": 100, - "description": "Maximum entries to return, most-frequent first.", + "description": "Partial search query", "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "q", + "required": true, + "type": "string", + "x-example": "guc" } ], "produces": [ @@ -274749,7 +304255,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvCapNlpEntityDetailsResponseDoc" + "$ref": "#/definitions/grailed.suggestResponseDoc" } }, "400": { @@ -274758,8 +304264,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -274776,202 +304282,288 @@ "ApiKeyAuth": [] } ], - "summary": "List GDELT Television 2.0 AI concept entities", + "summary": "Grailed search-box typeahead suggestions", "tags": [ - "GDELT" + "Grailed" ] } }, - "/gdelt/tv-search": { + "/greystar/articles": { "get": { "consumes": [ "application/json" ], - "description": "Search GDELT's Television 2.0 AI index of US television news", - "operationId": "gdelt-tv-search", + "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": [ { - "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).", + "description": "Content section", + "enum": [ + "applying-and-leasing", + "general-guides", + "moving", + "blog" + ], "in": "query", - "items": { - "type": "string" - }, - "name": "transcript", - "type": "array", - "x-example": "climate change" + "name": "section", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", + "description": "Text matched against the slug", "in": "query", - "items": { - "type": "string" - }, - "name": "caption", - "type": "array", - "x-example": "climate change" + "name": "query", + "type": "string" }, { - "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.", + "default": 1, + "description": "1-based page", "in": "query", - "items": { - "type": "string" - }, - "name": "concept", - "type": "array", - "x-example": "/M/0d063v" + "name": "page", + "type": "integer" }, { - "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).", + "default": 50, + "description": "Entries per page, 1-100", "in": "query", - "items": { - "type": "string" - }, - "name": "onscreen_text", - "type": "array", - "x-example": "breaking news" + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/greystar.ContentList" + } }, - { - "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" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "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" + "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 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" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List Greystar renter guides and blog posts", + "tags": [ + "Greystar" + ] + } + }, + "/greystar/articles/{section}/{slug}": { + "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": [ { - "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" + "description": "Content section", + "enum": [ + "applying-and-leasing", + "general-guides", + "moving", + "blog" + ], + "in": "path", + "name": "section", + "required": true, + "type": "string", + "x-example": "blog" }, { - "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" + "description": "Article slug from /greystar/articles", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "the-best-plants-for-apartment-living" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/greystar.Article" + } }, - { - "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" + "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": "Station to search.", - "enum": [ - "CNN", - "MSNBC", - "FOXNEWS", - "BBCNEWS", - "KGO", - "KPIX", - "KNTV" - ], + "ApiKeyAuth": [] + } + ], + "summary": "Get a Greystar renter guide or blog post", + "tags": [ + "Greystar" + ] + } + }, + "/greystar/location": { + "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", + "parameters": [ + { + "description": "State slug from /greystar/locations, e.g. tx", "in": "query", - "name": "station", + "name": "state", "required": true, "type": "string", - "x-example": "CNN" + "x-example": "tx" }, { - "description": "Limit to an exact show name.", + "description": "City slug from /greystar/locations", "in": "query", - "name": "show", - "type": "string", - "x-example": "Inside Politics" + "name": "city", + "type": "string" }, { - "description": "Limit to a day of week, 0 (Sunday) through 7 (Saturday), PST.", + "description": "Neighborhood slug from /greystar/locations; requires city", "in": "query", - "maximum": 7, - "minimum": 0, - "name": "day_of_week", - "type": "integer" + "name": "neighborhood", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/greystar.LocationDetail" + } + }, + "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": "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.", + "ApiKeyAuth": [] + } + ], + "summary": "Get a Greystar rental hub page", + "tags": [ + "Greystar" + ] + } + }, + "/greystar/locations": { + "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", + "parameters": [ + { + "description": "Hub level", + "enum": [ + "state", + "city", + "neighborhood" + ], "in": "query", - "name": "timespan", - "type": "string", - "x-example": "7d" + "name": "level", + "type": "string" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "State slug from this list, e.g. tx", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-01" + "name": "state", + "type": "string" }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "City slug from this list; requires state", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "name": "city", + "type": "string" }, { - "default": "relevance", - "description": "Result order.", - "enum": [ - "relevance", - "datedesc", - "dateasc" - ], + "default": 1, + "description": "1-based page", "in": "query", - "name": "sort", - "type": "string" + "name": "page", + "type": "integer" }, { - "default": 50, - "description": "Rows to return. GDELT's own hard cap is 3000 for this endpoint; there is no pagination cursor beyond it.", + "default": 100, + "description": "Entries per page, 1-200", "in": "query", - "maximum": 3000, - "minimum": 1, - "name": "maxrecords", + "name": "per_page", "type": "integer" } ], @@ -274982,7 +304574,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvSearchResponseDoc" + "$ref": "#/definitions/greystar.LocationList" } }, "400": { @@ -274991,8 +304583,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -275009,178 +304601,137 @@ "ApiKeyAuth": [] } ], - "summary": "Search US television news coverage (transcripts, captions, OCR, visual labels)", + "summary": "List Greystar rental hub locations", "tags": [ - "GDELT" + "Greystar" ] } }, - "/gdelt/tv-showchart": { + "/greystar/markets": { "get": { "consumes": [ "application/json" ], - "description": "Return the top shows by result percentage for a query", - "operationId": "gdelt-tv-showchart", - "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" + "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/greystar.Markets" + } }, - { - "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" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "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" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List Greystar markets, neighborhoods, cities, and states", + "tags": [ + "Greystar" + ] + } + }, + "/greystar/newsroom": { + "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", + "parameters": [ { - "collectionFormat": "csv", - "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", + "description": "Text matched against the slug", "in": "query", - "items": { - "type": "string" - }, - "name": "visual", - "type": "array", - "x-example": "flood" + "name": "query", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", + "default": 1, + "description": "1-based page", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_transcript", - "type": "array", - "x-example": "campaign ad" + "name": "page", + "type": "integer" }, { - "collectionFormat": "csv", - "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", + "default": 50, + "description": "Entries per page, 1-100", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_caption", - "type": "array", - "x-example": "sanders" + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/greystar.ContentList" + } }, - { - "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" + "400": { + "description": "Bad Request", + "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": "List Greystar newsroom releases", + "tags": [ + "Greystar" + ] + } + }, + "/greystar/newsroom/{slug}": { + "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", + "parameters": [ { - "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", + "description": "Newsroom slug from /greystar/newsroom", + "in": "path", + "name": "slug", "required": true, - "type": "array", - "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).", - "in": "query", - "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" + "x-example": "kenzie-tolbert-rising-star" } ], "produces": [ @@ -275190,7 +304741,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvShowChartResponseDoc" + "$ref": "#/definitions/greystar.Article" } }, "400": { @@ -275199,8 +304750,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" } @@ -275217,178 +304774,157 @@ "ApiKeyAuth": [] } ], - "summary": "Top US television shows by coverage share for a query", + "summary": "Get a Greystar newsroom release", "tags": [ - "GDELT" + "Greystar" ] } }, - "/gdelt/tv-stationchart": { + "/greystar/properties/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Return a result-count comparison across the requested", - "operationId": "gdelt-tv-stationchart", + "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": [ { - "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" + "description": "Numeric Greystar property id, e.g. 10124", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "10124" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/greystar.PropertyDetails" + } }, - { - "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" + "400": { + "description": "Bad Request", + "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" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "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" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "collectionFormat": "csv", - "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", + "ApiKeyAuth": [] + } + ], + "summary": "Get a Greystar apartment community", + "tags": [ + "Greystar" + ] + } + }, + "/greystar/search": { + "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 a snapshot refreshed every few minutes.", + "operationId": "greystar-search", + "parameters": [ + { + "description": "Free-text match on name, address, city, neighborhood, market area, or postal code (max 160 characters)", "in": "query", - "items": { - "type": "string" - }, - "name": "visual", - "type": "array", - "x-example": "flood" + "name": "query", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", + "description": "Exact market area from /greystar/markets, e.g. Greater Austin", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_transcript", - "type": "array", - "x-example": "campaign ad" + "name": "market_area", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", + "description": "Exact neighborhood from /greystar/markets", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_caption", - "type": "array", - "x-example": "sanders" + "name": "neighborhood", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", + "description": "Exact city from /greystar/markets", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_concept", - "type": "array", - "x-example": "/M/081pw" + "name": "city", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", + "description": "State or region abbreviation from /greystar/markets, e.g. TX", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_onscreen_text", - "type": "array", - "x-example": "sponsored" + "name": "state", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", + "description": "ISO country code from /greystar/markets, e.g. US", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_visual", - "type": "array", - "x-example": "advertisement" + "name": "country_code", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Required, repeatable. One or more stations, OR'd together.", + "description": "Minimum starting monthly rent; excludes communities with no published price", "in": "query", - "items": { - "enum": [ - "CNN", - "MSNBC", - "FOXNEWS", - "BBCNEWS", - "KGO", - "KPIX", - "KNTV" - ], - "type": "string" - }, - "name": "station", - "required": true, - "type": "array", - "x-example": "CNN" + "name": "min_price", + "type": "number" }, { - "description": "Limit to an exact show name.", + "description": "Maximum starting monthly rent; excludes communities with no published price", "in": "query", - "name": "show", - "type": "string", - "x-example": "Inside Politics" + "name": "max_price", + "type": "number" }, { - "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).", + "default": "relevance", + "description": "Result order", + "enum": [ + "relevance", + "name", + "price_asc", + "price_desc" + ], "in": "query", - "name": "timespan", - "type": "string", - "x-example": "30d" + "name": "sort", + "type": "string" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "default": 1, + "description": "1-based page", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-07-01" + "name": "page", + "type": "integer" }, { - "description": "End of an absolute time window. Same formats as from.", + "default": 20, + "description": "Results per page, 1-100", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -275398,7 +304934,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvStationChartResponseDoc" + "$ref": "#/definitions/greystar.SearchResult" } }, "400": { @@ -275407,8 +304943,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -275425,19 +304961,45 @@ "ApiKeyAuth": [] } ], - "summary": "Compare US television news coverage across stations", + "summary": "Search Greystar apartment communities", "tags": [ - "GDELT" + "Greystar" ] } }, - "/gdelt/tv-stationdetails": { + "/grubhub/availability": { "get": { "consumes": [ "application/json" ], - "description": "Return GDELT's own current list of Television 2.0 AI", - "operationId": "gdelt-tv-stationdetails", + "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", + "parameters": [ + { + "description": "Comma-separated Grubhub restaurant ids, up to 20", + "in": "query", + "name": "restaurant_ids", + "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 + } + ], "produces": [ "application/json" ], @@ -275445,11 +305007,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvStationDetailsResponseDoc" + "$ref": "#/definitions/grubhub.availabilityResponseDoc" } }, - "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" } @@ -275466,174 +305040,43 @@ "ApiKeyAuth": [] } ], - "summary": "List GDELT Television 2.0 AI stations", + "summary": "Check ordering availability for a batch of Grubhub restaurants", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tv-timeline": { + "/grubhub/offers": { "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 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": [ { - "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 restaurant id", "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": "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": "timespan", - "type": "string", - "x-example": "30d" + "x-example": "1338141" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "Diner location latitude", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-07-01" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7128 }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "Diner location longitude", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 } ], "produces": [ @@ -275643,7 +305086,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvTimelineResponseDoc" + "$ref": "#/definitions/grubhub.offersResponseDoc" } }, "400": { @@ -275652,8 +305095,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" } @@ -275670,28 +305119,27 @@ "ApiKeyAuth": [] } ], - "summary": "Airtime volume over time for US television news coverage", + "summary": "Get one Grubhub restaurant's currently active promotions", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tv-visual-entities": { + "/grubhub/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Return GDELT's own catalog of computer-vision object/activity", - "operationId": "gdelt-tv-visual-entities", + "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": [ { - "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" } ], "produces": [ @@ -275701,7 +305149,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvVisualEntityDetailsResponseDoc" + "$ref": "#/definitions/grubhub.restaurantResponseDoc" } }, "400": { @@ -275710,8 +305158,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" } @@ -275728,196 +305182,122 @@ "ApiKeyAuth": [] } ], - "summary": "List GDELT Television 2.0 AI visual entities", + "summary": "Get one Grubhub restaurant's detail", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tv-wordcloud": { + "/grubhub/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Return a frequency-ranked word/label cloud for one match", - "operationId": "gdelt-tv-wordcloud", + "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": [ { - "description": "Required. Which match channel to build a word cloud from.", - "enum": [ - "transcript", - "caption", - "concept", - "onscreen_text", - "visual" - ], + "description": "Grubhub's numeric restaurant id, from /grubhub/search", "in": "query", - "name": "channel", + "name": "restaurant_id", "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" + "x-example": "6238960" }, { - "collectionFormat": "csv", - "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", + "description": "Include items the restaurant currently has unavailable (default false)", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_transcript", - "type": "array", - "x-example": "campaign ad" + "name": "include_unavailable", + "type": "boolean", + "x-example": true + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/grubhub.menuResponseDoc" + } }, - { - "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 one Grubhub restaurant's menu with prices", + "tags": [ + "Grubhub" + ] + } + }, + "/grubhub/restaurant/reviews": { + "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", + "parameters": [ { - "description": "Required. 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", - "name": "day_of_week", - "type": "string", - "x-example": "1" + "x-example": "6238960" }, { - "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.", + "description": "Reviews per page, 1-50 (default 20)", "in": "query", - "name": "timespan", - "type": "string", - "x-example": "7d" + "name": "page_size", + "type": "integer", + "x-example": 20 }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "1-based page number (default 1)", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-01" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "One of timeCreated_desc, ratingValue_desc. Default timeCreated_desc.", + "enum": [ + "timeCreated_desc", + "ratingValue_desc" + ], "in": "query", - "name": "to", + "name": "sort", "type": "string", - "x-example": "2026-08-19" + "x-example": "timeCreated_desc" } ], "produces": [ @@ -275927,7 +305307,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvWordCloudResponseDoc" + "$ref": "#/definitions/grubhub.reviewsResponseDoc" } }, "400": { @@ -275936,8 +305316,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" } @@ -275954,50 +305340,67 @@ "ApiKeyAuth": [] } ], - "summary": "Word cloud for US television news coverage", + "summary": "Get one Grubhub restaurant's reviews and rating histogram", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/geocoding/lookup": { + "/grubhub/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns typed Nominatim JSONv2 places for comma-separated OSM ids such as W34633854,N123,R456.", - "operationId": "geocoding-lookup", + "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": [ { - "description": "Comma-separated OSM ids such as W34633854,N123,R456", + "description": "Search center latitude", "in": "query", - "name": "osm_ids", + "name": "latitude", "required": true, - "type": "string" + "type": "number", + "x-example": 40.7128 }, { - "description": "Preferred result language, forwarded to Nominatim", + "description": "Search center longitude", "in": "query", - "name": "accept_language", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 }, { - "description": "Include address details, defaults to true", + "description": "Keyword over restaurant names, cuisines and dishes", "in": "query", - "name": "addressdetails", - "type": "boolean" + "name": "search", + "type": "string", + "x-example": "pizza" }, { - "description": "Include OSM extra tags", + "description": "One of delivery, pickup. Default delivery.", + "enum": [ + "delivery", + "pickup" + ], "in": "query", - "name": "extratags", - "type": "boolean" + "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 }, { - "description": "Include multilingual name details", + "description": "1-based page number (default 1)", "in": "query", - "name": "namedetails", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -276007,7 +305410,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/geocoding.lookupResponseDoc" + "$ref": "#/definitions/grubhub.searchResponseDoc" } }, "400": { @@ -276022,8 +305425,8 @@ "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "Bad Gateway", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -276040,63 +305443,62 @@ "ApiKeyAuth": [] } ], - "summary": "Lookup Nominatim OSM ids", + "summary": "Search Grubhub restaurants near a location", "tags": [ - "Geocoding" + "Grubhub" ] } }, - "/geocoding/reverse": { + "/grubhub/timepicker": { "get": { "consumes": [ "application/json" ], - "description": "Returns the nearest typed Nominatim JSONv2 place for latitude and longitude.", - "operationId": "geocoding-reverse", + "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": [ { - "description": "Latitude", + "description": "Grubhub restaurant id", "in": "query", - "name": "lat", + "name": "restaurant_id", "required": true, - "type": "number" + "type": "string", + "x-example": "698307" }, { - "description": "Longitude", + "description": "Diner location latitude", "in": "query", - "name": "lon", + "name": "latitude", "required": true, - "type": "number" - }, - { - "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" + "type": "number", + "x-example": 40.7128 }, { - "description": "Include address details, defaults to true", + "description": "Diner location longitude", "in": "query", - "name": "addressdetails", - "type": "boolean" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 }, { - "description": "Include OSM extra tags", + "description": "Which slot grid to return", + "enum": [ + "DELIVERY", + "PICKUP" + ], "in": "query", - "name": "extratags", - "type": "boolean" + "name": "location_mode", + "required": true, + "type": "string", + "x-example": "DELIVERY" }, { - "description": "Include multilingual name details", + "description": "How many days ahead to fetch, 1-7 (default 7)", "in": "query", - "name": "namedetails", - "type": "boolean" + "name": "days", + "type": "integer", + "x-example": 7 } ], "produces": [ @@ -276106,7 +305508,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/geocoding.reverseResponseDoc" + "$ref": "#/definitions/grubhub.timepickerResponseDoc" } }, "400": { @@ -276121,8 +305523,8 @@ "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "Bad Gateway", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -276139,97 +305541,24 @@ "ApiKeyAuth": [] } ], - "summary": "Reverse geocode coordinates", + "summary": "Get one Grubhub restaurant's future orderable time-slot calendar", "tags": [ - "Geocoding" + "Grubhub" ] } }, - "/geocoding/search": { + "/guardian/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns typed Nominatim JSONv2 forward geocoding results. Use either q or structured fields, not both.", - "operationId": "geocoding-search", + "description": "Returns a Guardian article's public metadata and body paragraphs from a canonical article URL. Live-blog timelines are not supported.", + "operationId": "guardian-article", "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", - "in": "query", - "name": "extratags", - "type": "boolean" - }, - { - "description": "Include multilingual name details", + "description": "Canonical www.theguardian.com article URL", "in": "query", - "name": "namedetails", - "type": "boolean" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.theguardian.com/world/2026/aug/26/us-military-kills-four-boat-strike-caribbean" } ], "produces": [ @@ -276239,7 +305568,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/geocoding.searchResponseDoc" + "$ref": "#/definitions/guardian.articleResponseDoc" } }, "400": { @@ -276254,8 +305583,8 @@ "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "Bad Gateway", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -276272,34 +305601,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search Nominatim places", + "summary": "Get Guardian article content", "tags": [ - "Geocoding" + "Guardian" ] } }, - "/ghanaweb/archive": { + "/guardian/author": { "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", + "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": [ { - "description": "A YYYYMM value returned by ghanaweb-archive-months", + "description": "Guardian contributor profile slug, e.g. hannah-devlin", "in": "query", - "name": "month", - "required": true, - "type": "string" + "name": "slug", + "type": "string", + "x-example": "hannah-devlin" }, { - "description": "Page number (default 1)", + "description": "Canonical https://www.theguardian.com/profile/ page URL, as an alternative to slug", "in": "query", - "name": "page", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.theguardian.com/profile/hannah-devlin" }, { - "description": "Items per page, 1–100 (default 50)", + "default": 1, + "description": "1-based article-history page, 1 to 100, defaults to 1", "in": "query", - "name": "limit", + "maximum": 100, + "minimum": 1, + "name": "page", "type": "integer" } ], @@ -276310,7 +305643,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebArchiveResponseDoc" + "$ref": "#/definitions/guardian.authorResponseDoc" } }, "400": { @@ -276325,6 +305658,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -276337,16 +305676,38 @@ "ApiKeyAuth": [] } ], - "summary": "List GhanaWeb archive article URLs", + "summary": "Get Guardian contributor profile", "tags": [ - "GhanaWeb" + "Guardian" ] } }, - "/ghanaweb/archive/months": { + "/guardian/headlines": { "get": { - "description": "Returns every YYYYMM month currently advertised by GhanaWeb's official article-sitemap index. Use one of these values with ghanaweb-archive.", - "operationId": "ghanaweb-archive-months", + "description": "Returns fresh headlines from a public Guardian RSS section. section defaults to world.", + "operationId": "guardian-headlines", + "parameters": [ + { + "description": "Guardian RSS section, defaults to world", + "enum": [ + "world", + "uk-news", + "us-news", + "politics", + "business", + "technology", + "environment", + "science", + "sport", + "culture", + "lifeandstyle", + "commentisfree" + ], + "in": "query", + "name": "section", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -276354,7 +305715,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebArchiveMonthsResponseDoc" + "$ref": "#/definitions/guardian.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": { @@ -276369,23 +305748,24 @@ "ApiKeyAuth": [] } ], - "summary": "Discover GhanaWeb archive months", + "summary": "Get Guardian section headlines", "tags": [ - "GhanaWeb" + "Guardian" ] } }, - "/ghanaweb/article": { + "/guardian/live": { "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", + "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": "Canonical GhanaWeb article URL ending in its numeric story ID", + "description": "Canonical www.theguardian.com live-blog URL", "in": "query", "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.theguardian.com/sport/live/2026/aug/08/japan-vs-australia-live-updates-wallabies-nations-championship-rugby-union" } ], "produces": [ @@ -276395,7 +305775,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/guardian.liveResponseDoc" } }, "400": { @@ -276404,6 +305784,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": { @@ -276416,40 +305808,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb article content", + "summary": "Get Guardian live blog snapshot", "tags": [ - "GhanaWeb" + "Guardian" ] } }, - "/ghanaweb/headlines": { + "/guardian/topic": { "get": { - "description": "Returns article cards from a verified GhanaWeb section page.", - "operationId": "ghanaweb-headlines", + "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": "Section slug from ghanaweb-sections", - "enum": [ - "news", - "sports", - "business", - "entertainment", - "africa", - "opinions", - "editorial", - "crime", - "regional", - "health", - "politics", - "tabloid", - "world", - "lifestyle", - "features" - ], + "description": "Guardian tag or section slug", "in": "query", - "name": "section", + "name": "topic", "required": true, - "type": "string" + "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" } ], "produces": [ @@ -276459,7 +305844,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/guardian.topicResponseDoc" } }, "400": { @@ -276468,6 +305853,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": { @@ -276480,16 +305877,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb section headlines", + "summary": "Get Guardian topic archive", "tags": [ - "GhanaWeb" + "Guardian" ] } }, - "/ghanaweb/news": { + "/gucci/categories": { "get": { - "description": "Returns GhanaWeb's current public stories from its Google News sitemap, including canonical URL, headline, and publication time.", - "operationId": "ghanaweb-news", + "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": "department", + "type": "string", + "x-example": "women" + } + ], "produces": [ "application/json" ], @@ -276497,7 +305906,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/gucci.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -276518,16 +305933,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb latest stories", + "summary": "List Gucci's category and subcategory taxonomy", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/sections": { + "/gucci/category": { "get": { - "description": "Returns the complete verified article-bearing section set accepted by ghanaweb-headlines. Static, media, and non-article destinations are excluded.", - "operationId": "ghanaweb-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one Gucci category/browse listing: normalized 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": "Category path from gucci-categories' own category field", + "in": "query", + "name": "category", + "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 + } + ], "produces": [ "application/json" ], @@ -276535,7 +305970,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/gucci.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" } } }, @@ -276544,23 +306003,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb article sections", + "summary": "Browse a Gucci category listing", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/video": { + "/gucci/product": { "get": { - "description": "Returns public GhanaWeb TV metadata and the page's YouTube embed URL. The media itself is not retrieved.", - "operationId": "ghanaweb-video", + "consumes": [ + "application/json" + ], + "description": "Returns full normalized product detail for one style: name, marketing description, breadcrumb trail, brand line, gender, colors, materials, sizes, price, images, and stock -- combining Gucci's own structured product record with the product page's own marketing copy. style_code comes from gucci-search's or gucci-category's own style_code field.", + "operationId": "gucci-product", "parameters": [ { - "description": "Numeric GhanaWeb TV video ID", + "description": "Product style code, from gucci-search's or gucci-category's own style_code field", "in": "query", - "name": "id", + "name": "style_code", "required": true, - "type": "string" + "type": "string", + "x-example": "A005Y8AAG231096" } ], "produces": [ @@ -276570,7 +306033,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebVideoResponseDoc" + "$ref": "#/definitions/gucci.productResponseDoc" } }, "400": { @@ -276585,6 +306048,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -276597,16 +306066,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb TV video metadata", + "summary": "Get a Gucci product", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/video-sections": { + "/gucci/recommendations": { "get": { - "description": "Returns the complete four-value video category set accepted by ghanaweb-videos.", - "operationId": "ghanaweb-video-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one Gucci recommendations shelf: normalized 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": "Product style code to get related items for; omit for the site's general trending-items shelf instead", + "in": "query", + "name": "style_code", + "type": "string", + "x-example": "A005Y8AAG231096" + }, + { + "description": "Maximum products to return, defaults to 10, maximum 20", + "in": "query", + "name": "max", + "type": "integer", + "x-example": 10 + } + ], "produces": [ "application/json" ], @@ -276614,7 +306102,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebVideoSectionsResponseDoc" + "$ref": "#/definitions/gucci.recommendationsResponseDoc" + } + }, + "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" } } }, @@ -276623,29 +306129,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb TV video sections", + "summary": "Gucci product recommendations", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/videos": { + "/gucci/search": { "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", + "consumes": [ + "application/json" + ], + "description": "Searches Gucci's product catalog by keyword: normalized product summaries (name, price, colors, materials, sizes, gender, stock) with the search index's own live total result count. A genuinely empty result (e.g. a nonsense query) returns a well-formed empty products list, not an error. The response's own size_facets field lists every size value present in the result set (with live counts) -- pass one of those values as size on a follow-up call to filter to just that size.", + "operationId": "gucci-search", "parameters": [ { - "description": "Video category from ghanaweb-video-sections", - "enum": [ - "news", - "sports", - "business", - "entertainment" - ], + "description": "Search keyword", "in": "query", - "name": "section", + "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "belt" + }, + { + "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": "Filter to products listing this exact size as available (e.g. \\", + "in": "query", + "name": "size", + "type": "string", + "x-example": "9 = 9.5 US" } ], "produces": [ @@ -276655,7 +306180,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebVideosResponseDoc" + "$ref": "#/definitions/gucci.searchResponseDoc" } }, "400": { @@ -276664,6 +306189,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -276676,26 +306207,27 @@ "ApiKeyAuth": [] } ], - "summary": "List GhanaWeb TV videos", + "summary": "Search Gucci's product catalog", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/github/org/{org}": { + "/gucci/size-guide": { "get": { "consumes": [ "application/json" ], - "description": "Returns a public GitHub organization profile (company-side enrichment).", - "operationId": "github-org", + "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": "GitHub organization login", - "in": "path", - "name": "org", + "description": "Product style code", + "in": "query", + "name": "style_code", "required": true, - "type": "string" + "type": "string", + "x-example": "757892AACAG9055" } ], "produces": [ @@ -276703,25 +306235,25 @@ ], "responses": { "200": { - "description": "Wrapped organization profile", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/gucci.sizeGuideResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Organization not found", + "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" } @@ -276732,73 +306264,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a GitHub organization profile", + "summary": "Gucci product size chart", "tags": [ - "GitHub" + "Gucci" ] } }, - "/github/org/{org}/repos": { + "/gucci/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of an organization's public repositories (company tech stack).", - "operationId": "github-org-repos", + "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": "GitHub organization login", - "in": "path", - "name": "org", - "required": true, - "type": "string" - }, - { - "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", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (max 100)", + "description": "Store slug, from gucci-stores' own slug field", "in": "query", - "name": "per_page", - "type": "integer" + "name": "slug", + "required": true, + "type": "string", + "x-example": "900-north-michigan-avenue" } ], "produces": [ @@ -276806,19 +306292,31 @@ ], "responses": { "200": { - "description": "Wrapped repository list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/gucci.storeResponseDoc" } }, "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" } @@ -276829,33 +306327,26 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub organization's public repositories", + "summary": "Get a Gucci store's detail", "tags": [ - "GitHub" + "Gucci" ] } }, - "/github/repo/{owner}/{repo}": { + "/gucci/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns public detail for a single repository (the core project object).", - "operationId": "github-repo", + "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": "Repository owner (user or org login)", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Repository name", - "in": "path", - "name": "repo", - "required": true, - "type": "string" + "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": "department", + "type": "string", + "x-example": "jewelry" } ], "produces": [ @@ -276863,25 +306354,25 @@ ], "responses": { "200": { - "description": "Wrapped repository detail", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/gucci.storesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Repository not found", + "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" } @@ -276892,45 +306383,82 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a GitHub repository", + "summary": "List Gucci store locations", "tags": [ - "GitHub" + "Gucci" ] } }, - "/github/repo/{owner}/{repo}/contributors": { + "/gucci/stores/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a repository's contributors (who builds a project).", - "operationId": "github-repo-contributors", + "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": "Repository owner (user or org login)", - "in": "path", - "name": "owner", + "description": "Gucci storefront locale; controls localization only, not geographic filtering", + "enum": [ + "ca", + "fr", + "jp", + "uk", + "us" + ], + "in": "query", + "name": "market", "required": true, - "type": "string" + "type": "string", + "x-example": "us" }, { - "description": "Repository name", - "in": "path", - "name": "repo", + "description": "Viewport northern latitude", + "in": "query", + "name": "north", "required": true, - "type": "string" + "type": "number", + "x-example": 40.917705 }, { - "description": "Page number", + "description": "Viewport western longitude", "in": "query", - "name": "page", - "type": "integer" + "name": "west", + "required": true, + "type": "number", + "x-example": -74.258843 }, { - "description": "Results per page (max 100)", + "description": "Viewport southern latitude", "in": "query", - "name": "per_page", - "type": "integer" + "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": [ @@ -276938,19 +306466,25 @@ ], "responses": { "200": { - "description": "Wrapped contributor list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/gucci.storeSearchResponseDoc" } }, "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" } @@ -276961,57 +306495,34 @@ "ApiKeyAuth": [] } ], - "summary": "List a repository's contributors", + "summary": "Search Gucci stores in a map viewport", "tags": [ - "GitHub" + "Gucci" ] } }, - "/github/repo/{owner}/{repo}/forks": { + "/gucci/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a repository's public forks (adopter signal).", - "operationId": "github-repo-forks", + "description": "Returns Gucci's own search-box typeahead suggestions for a partial query, each with its own live total result count on the search index. Not product data -- pass a suggestion's own query value straight into gucci-search for results.", + "operationId": "gucci-suggest", "parameters": [ { - "description": "Repository owner (user or org login)", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Repository name", - "in": "path", - "name": "repo", - "required": true, - "type": "string" - }, - { - "description": "Sort order", - "enum": [ - "newest", - "oldest", - "stargazers", - "watchers" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number", + "description": "Partial search query", "in": "query", - "name": "page", - "type": "integer" + "name": "q", + "required": true, + "type": "string", + "x-example": "bel" }, { - "description": "Results per page (max 100)", + "description": "Maximum suggestions to return, defaults to 5, maximum 20", "in": "query", - "name": "per_page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 5 } ], "produces": [ @@ -277019,19 +306530,25 @@ ], "responses": { "200": { - "description": "Wrapped fork list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/gucci.suggestResponseDoc" } }, "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" } @@ -277042,33 +306559,24 @@ "ApiKeyAuth": [] } ], - "summary": "List a repository's public forks", + "summary": "Gucci search-box suggestions", "tags": [ - "GitHub" + "Gucci" ] } }, - "/github/repo/{owner}/{repo}/languages": { + "/gulfnews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the language byte breakdown for a repository, sorted by bytes descending (tech fingerprint).", - "operationId": "github-repo-languages", + "description": "Returns public Gulf News article metadata and body paragraphs from a canonical article URL.", + "operationId": "gulfnews-article", "parameters": [ { - "description": "Repository owner (user or org login)", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Repository name", - "in": "path", - "name": "repo", + "description": "Canonical Gulf News article URL", + "in": "query", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://gulfnews.com/business/aviation/air-india-flydubai-tie-up-opens-52-more-destinations-via-dubai-1.500686930" } ], "produces": [ @@ -277076,19 +306584,25 @@ ], "responses": { "200": { - "description": "Wrapped language breakdown", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -277099,45 +306613,105 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a repository's language breakdown", + "summary": "Get Gulf News article content", "tags": [ - "GitHub" + "Gulf News" ] } }, - "/github/repo/{owner}/{repo}/releases": { + "/gulfnews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of a repository's releases (momentum/health signal).", - "operationId": "github-repo-releases", + "description": "Returns one Gulf News author's public profile: name, job title, bio, and their recent articles.", + "operationId": "gulfnews-author", "parameters": [ { - "description": "Repository owner (user or org login)", - "in": "path", - "name": "owner", - "required": true, - "type": "string" - }, - { - "description": "Repository name", - "in": "path", - "name": "repo", - "required": true, - "type": "string" + "description": "Author slug, e.g. nathaniel-lacsina", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "nathaniel-lacsina" }, { - "description": "Page number", + "description": "Canonical gulfnews.com/author/ URL; alternative to slug", "in": "query", - "name": "page", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://gulfnews.com/author/nathaniel-lacsina" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$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" + } + } + }, + "security": [ { - "description": "Results per page (max 100)", + "ApiKeyAuth": [] + } + ], + "summary": "Get a Gulf News author profile", + "tags": [ + "Gulf News" + ] + } + }, + "/gulfnews/headlines": { + "get": { + "description": "Returns fresh headlines from one public Gulf News section.", + "operationId": "gulfnews-headlines", + "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" + ], "in": "query", - "name": "per_page", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "latest-news" } ], "produces": [ @@ -277145,19 +306719,19 @@ ], "responses": { "200": { - "description": "Wrapped release list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -277168,82 +306742,56 @@ "ApiKeyAuth": [] } ], - "summary": "List a repository's releases", + "summary": "Get Gulf News section headlines", "tags": [ - "GitHub" + "Gulf News" ] } }, - "/github/search/repositories": { + "/gulfnews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches public GitHub repositories (market/competitive discovery). Unauthenticated search is rate limited to roughly 10 requests per minute.", - "operationId": "github-search-repositories", - "parameters": [ - { - "description": "GitHub repository search query", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "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" - } - ], + "description": "Returns fresh Gulf News stories from the public site-wide RSS feed.", + "operationId": "gulfnews-news", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped repository search result", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Missing or invalid parameters", + "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": "Returns the public Gulf News editorial section inventory.", + "operationId": "gulfnews-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -277252,59 +306800,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search public GitHub repositories", + "summary": "Get Gulf News sections", "tags": [ - "GitHub" + "Gulf News" ] } }, - "/github/search/users": { + "/gymshark/collections": { "get": { "consumes": [ "application/json" ], - "description": "Searches public GitHub users (developer discovery). Unauthenticated search is rate limited to roughly 10 requests per minute.", - "operationId": "github-search-users", + "description": "Returns normalized 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 user search query", - "in": "query", - "name": "q", - "required": true, - "type": "string" - }, - { - "description": "Sort field", - "enum": [ - "followers", - "repositories", - "joined" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Sort order", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "order", - "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": [ @@ -277312,19 +306834,25 @@ ], "responses": { "200": { - "description": "Wrapped user search result", + "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" } @@ -277335,36 +306863,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search public GitHub users", + "summary": "List Gymshark collections", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/trending": { + "/gymshark/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns the repositories on GitHub's trending page (market discovery).", - "operationId": "github-trending", + "description": "Returns normalized 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": "Programming language filter (e.g. go, python)", + "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": "language", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Time window", - "enum": [ - "daily", - "weekly", - "monthly" - ], + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "since", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -277372,19 +306905,31 @@ ], "responses": { "200": { - "description": "Wrapped trending repository list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { - "description": "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", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -277395,36 +306940,33 @@ "ApiKeyAuth": [] } ], - "summary": "List trending GitHub repositories", + "summary": "List Gymshark collection products", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/trending/developers": { + "/gymshark/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns the developers on GitHub's trending developers page (market discovery).", - "operationId": "github-trending-developers", + "description": "Returns normalized static pages from Gymshark (https://row.gymshark.com). The storefront URL is fixed server-side.", + "operationId": "gymshark-pages", "parameters": [ { - "description": "Programming language filter (e.g. go, python)", + "description": "1-based page, defaults to 1", "in": "query", - "name": "language", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Time window", - "enum": [ - "daily", - "weekly", - "monthly" - ], + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "since", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -277432,19 +306974,25 @@ ], "responses": { "200": { - "description": "Wrapped trending developer list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "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" } @@ -277455,26 +307003,27 @@ "ApiKeyAuth": [] } ], - "summary": "List trending GitHub developers", + "summary": "List Gymshark static pages", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/user/{username}": { + "/gymshark/pages/{handle}": { "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 normalized static page detail for one Gymshark (https://row.gymshark.com) page handle. The storefront URL is fixed server-side.", + "operationId": "gymshark-page", "parameters": [ { - "description": "GitHub username", + "description": "Page handle", "in": "path", - "name": "username", + "name": "handle", "required": true, - "type": "string" + "type": "string", + "x-example": "page-handle" } ], "produces": [ @@ -277482,25 +307031,31 @@ ], "responses": { "200": { - "description": "Wrapped user profile", + "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": "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" } @@ -277511,38 +307066,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a GitHub user profile", + "summary": "Get a Gymshark static page", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/user/{username}/events": { + "/gymshark/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a user's recent public events, normalized to type, repository, and timestamp (freshness signal).", - "operationId": "github-user-events", + "description": "Returns normalized 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": "GitHub username", - "in": "path", - "name": "username", - "required": true, - "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 products, defaults to 50 and supports up to 250", "in": "query", - "name": "per_page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -277550,19 +307100,25 @@ ], "responses": { "200": { - "description": "Wrapped event list", + "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" } @@ -277573,38 +307129,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub user's recent public activity", + "summary": "List Gymshark products", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/user/{username}/followers": { + "/gymshark/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of the public accounts following a GitHub user.", - "operationId": "github-user-followers", + "description": "Returns normalized 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": "GitHub username", + "description": "Product handle", "in": "path", - "name": "username", + "name": "handle", "required": true, - "type": "string" - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (max 100)", - "in": "query", - "name": "per_page", - "type": "integer" + "type": "string", + "x-example": "product-handle" } ], "produces": [ @@ -277612,19 +307157,31 @@ ], "responses": { "200": { - "description": "Wrapped follower 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" } @@ -277635,38 +307192,45 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub user's followers", + "summary": "Get a Gymshark product", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/user/{username}/following": { + "/gymshark/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of the public accounts a GitHub user follows.", - "operationId": "github-user-following", + "description": "Returns normalized recommended products for one Gymshark (https://row.gymshark.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "gymshark-product-recommendations", "parameters": [ { - "description": "GitHub username", + "description": "Product handle", "in": "path", - "name": "username", + "name": "handle", "required": true, - "type": "string" + "type": "string", + "x-example": "product-handle" }, { - "description": "Page number", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Results per page (max 100)", + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], "in": "query", - "name": "per_page", - "type": "integer" + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -277674,19 +307238,31 @@ ], "responses": { "200": { - "description": "Wrapped following list", + "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" } @@ -277697,26 +307273,42 @@ "ApiKeyAuth": [] } ], - "summary": "List who a GitHub user follows", + "summary": "List Gymshark product recommendations", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/user/{username}/pinned": { + "/gymshark/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns the repositories a user pinned on their public profile (showcase signal). Empty when the user pinned nothing.", - "operationId": "github-user-pinned", + "description": "Returns capped URL entries from Gymshark's (https://row.gymshark.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "gymshark-sitemap-urls", "parameters": [ { - "description": "GitHub username", - "in": "path", - "name": "username", - "required": true, - "type": "string" + "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": [ @@ -277724,19 +307316,25 @@ ], "responses": { "200": { - "description": "Wrapped pinned repository list", + "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" } @@ -277747,91 +307345,43 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub user's pinned repositories", + "summary": "List Gymshark sitemap URLs", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/user/{username}/repos": { + "/gymshark/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a user's public repositories (tech-stack signal).", - "operationId": "github-user-repos", - "parameters": [ - { - "description": "GitHub username", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "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" - } - ], + "description": "Returns child sitemap URLs from Gymshark's (https://row.gymshark.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "gymshark-sitemaps", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped repository list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "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" } @@ -277842,26 +307392,19 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub user's public repositories", + "summary": "List Gymshark sitemaps", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/gizmodo/article": { + "/gymshark/store": { "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", - "parameters": [ - { - "description": "Canonical Gizmodo article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://gizmodo.com/meta-muse-charm-ai-keychain-2000816515" - } + "consumes": [ + "application/json" ], + "description": "Returns normalized storefront metadata for Gymshark (https://row.gymshark.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "gymshark-store", "produces": [ "application/json" ], @@ -277869,7 +307412,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -277878,8 +307421,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -277896,24 +307439,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gizmodo article content", + "summary": "Get Gymshark store metadata", "tags": [ - "Gizmodo" + "Gymshark" ] } }, - "/gizmodo/author": { + "/hbr/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", + "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": "Canonical Gizmodo author URL", + "description": "Canonical hbr.org article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://gizmodo.com/author/jpero" + "x-example": "https://hbr.org/2026/09/is-your-strategic-plan-too-ambitious-or-not-ambitious-enough" } ], "produces": [ @@ -277923,7 +307466,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gizmodoAuthorResponseDoc" + "$ref": "#/definitions/hbr.articleResponseDoc" } }, "400": { @@ -277938,6 +307481,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -277950,76 +307499,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gizmodo author profile", + "summary": "Get Harvard Business Review article content", "tags": [ - "Gizmodo" + "Harvard Business Review" ] } }, - "/gizmodo/headlines": { + "/hbr/categories": { "get": { - "description": "Returns fresh headlines from one Gizmodo section's public RSS feed.", - "operationId": "gizmodo-headlines", - "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" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string" - } - ], + "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" ], @@ -278027,11 +307516,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/hbr.categoriesResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -278048,16 +307537,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gizmodo section headlines", + "summary": "Get Harvard Business Review topic taxonomy", "tags": [ - "Gizmodo" + "Harvard Business Review" ] } }, - "/gizmodo/news": { + "/hbr/headlines": { "get": { - "description": "Returns fresh Gizmodo stories from its public RSS feed.", - "operationId": "gizmodo-news", + "description": "Returns fresh entries from Harvard Business Review's public, site-wide \"The Latest\" content stream.", + "operationId": "hbr-headlines", "produces": [ "application/json" ], @@ -278065,7 +307554,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/hbr.headlinesResponseDoc" } }, "429": { @@ -278086,16 +307575,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gizmodo top stories", + "summary": "Get Harvard Business Review latest headlines", "tags": [ - "Gizmodo" + "Harvard Business Review" ] } }, - "/gizmodo/sections": { + "/hbr/topic": { "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", + "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": "Harvard Business Review topic slug", + "in": "query", + "name": "topic", + "required": true, + "type": "string", + "x-example": "subject/strategy" + } + ], "produces": [ "application/json" ], @@ -278103,7 +307602,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/hbr.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" } } }, @@ -278112,24 +307635,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gizmodo sections", + "summary": "Get Harvard Business Review topic archive", "tags": [ - "Gizmodo" + "Harvard Business Review" ] } }, - "/globalnews/article": { + "/healthgrades/autocomplete": { "get": { - "description": "Returns public Global News article metadata and body paragraphs from a canonical article URL.", - "operationId": "globalnews-article", + "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", "parameters": [ { - "description": "Canonical Global News article URL", + "description": "Free-text provider, specialty, condition, or procedure query", "in": "query", - "name": "url", + "name": "term", "required": true, "type": "string", - "x-example": "https://globalnews.ca/news/12070709/example-article-slug/" + "x-example": "orthopedic surgeon" } ], "produces": [ @@ -278139,7 +307665,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" } }, "400": { @@ -278148,8 +307674,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -278166,24 +307692,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Global News article content", + "summary": "Get Healthgrades search suggestions", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globalnews/author": { + "/healthgrades/facilities/filters": { "get": { - "description": "Returns a Global News author's byline metadata, biography, and recent articles from a canonical author URL.", - "operationId": "globalnews-author", + "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", "parameters": [ { - "description": "Canonical Global News author URL", + "description": "Facility type", + "enum": [ + "hospital", + "pharmacy", + "group_practice", + "urgent_care" + ], "in": "query", - "name": "url", + "name": "type", "required": true, "type": "string", - "x-example": "https://globalnews.ca/author/jane-doe/" + "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": [ @@ -278193,7 +307742,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.globalnewsAuthorResponseDoc" + "$ref": "#/definitions/healthgrades.facilityFiltersResponseDoc" } }, "400": { @@ -278202,8 +307751,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -278220,58 +307769,96 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Global News author profile", + "summary": "List Healthgrades facility search filters", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globalnews/headlines": { + "/healthgrades/facilities/search": { "get": { - "description": "Returns fresh headlines from one public Global News RSS section.", - "operationId": "globalnews-headlines", + "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", "parameters": [ { - "description": "Global News RSS section slug", + "description": "Facility type", "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" + "hospital", + "pharmacy", + "group_practice", + "urgent_care" ], "in": "query", - "name": "section", + "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", + "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": [ + "bestmatch", + "distance", + "patientsatisfaction" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Search radius in miles", + "enum": [ + "0.5", + "1", + "5", + "10", + "25", + "50", + "100", + "national" + ], + "in": "query", + "name": "distance", "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)", + "in": "query", + "name": "award", + "type": "string", + "x-example": "Critical Care Excellence Award|CCU" } ], "produces": [ @@ -278281,7 +307868,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/healthgrades.facilitySearchResponseDoc" } }, "400": { @@ -278290,6 +307877,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -278302,16 +307895,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Global News section headlines", + "summary": "Search Healthgrades hospitals, pharmacies, group practices, and urgent care", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globalnews/news": { + "/healthgrades/facility": { "get": { - "description": "Returns fresh Global News (globalnews.ca) top stories from its public RSS feed.", - "operationId": "globalnews-news", + "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": "Healthgrades pharmacy, urgent care, or group practice profile URL from /healthgrades/facilities/search", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.healthgrades.com/pharmacy/walgreens-12805-pas6pu" + } + ], "produces": [ "application/json" ], @@ -278319,7 +307925,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/healthgrades.facilityResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -278340,16 +307958,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Global News top stories", + "summary": "Get a Healthgrades pharmacy, urgent care, or group practice profile", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globalnews/sections": { + "/healthgrades/health-article": { "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", + "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": "Article URL from /healthgrades/health-articles", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://resources.healthgrades.com/drugs/atenolol" + } + ], "produces": [ "application/json" ], @@ -278357,7 +307988,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/healthgrades.healthArticleResponseDoc" + } + }, + "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" } } }, @@ -278366,24 +308021,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Global News RSS sections", + "summary": "Get a Healthgrades Health A-Z article", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globeandmail/article": { + "/healthgrades/health-articles": { "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", + "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": "Canonical Globe and Mail article URL", + "description": "Topic slug from /healthgrades/health-topics", "in": "query", - "name": "url", + "name": "topic", "required": true, "type": "string", - "x-example": "https://www.theglobeandmail.com/canada/article-example-story/" + "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": [ @@ -278393,17 +308065,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.articleResponseDoc" + "$ref": "#/definitions/healthgrades.healthArticlesResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "403": { - "description": "Forbidden", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -278432,26 +308098,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Globe and Mail article's content", + "summary": "List Healthgrades Health A-Z articles in a topic", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/globeandmail/author": { + "/healthgrades/health-topics": { "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", - "parameters": [ - { - "description": "Canonical Globe and Mail author URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.theglobeandmail.com/authors/example-reporter/" - } + "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" ], @@ -278459,19 +308118,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.authorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/healthgrades.healthTopicsResponseDoc" } }, "429": { @@ -278492,38 +308139,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Globe and Mail reporter profile", + "summary": "List Healthgrades Health A-Z topics", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/globeandmail/headlines": { + "/healthgrades/hospital": { "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 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": "Globe and Mail section slug from /globeandmail/sections", - "enum": [ - "canada", - "world", - "business", - "investing", - "personal-finance", - "politics", - "opinion", - "culture", - "sports", - "life", - "real-estate", - "drive" - ], + "description": "Healthgrades hospital profile URL from /healthgrades/facilities/search", "in": "query", - "name": "section", + "name": "url", "required": true, "type": "string", - "x-example": "canada" + "x-example": "https://www.healthgrades.com/hospital/massachusetts-general-hospital-60c282" } ], "produces": [ @@ -278533,7 +308169,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.headlinesResponseDoc" + "$ref": "#/definitions/healthgrades.hospitalResponseDoc" } }, "400": { @@ -278566,16 +308202,147 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Globe and Mail section", + "summary": "Get a Healthgrades hospital profile", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/globeandmail/news": { + "/healthgrades/hospital-awards": { "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 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": "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": "award", + "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" + }, + { + "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": [ "application/json" ], @@ -278583,46 +308350,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.newsResponseDoc" + "$ref": "#/definitions/healthgrades.hospitalAwardsResponseDoc" } }, - "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 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" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/globeandmail.sectionsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -278642,24 +308383,49 @@ "ApiKeyAuth": [] } ], - "summary": "List Globe and Mail sections", + "summary": "List Healthgrades hospital award recipients", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/gmanews/article": { + "/healthgrades/hospital-awards/filters": { "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 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": "Canonical GMA News article 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://www.gmanetwork.com/news/topstories/world/1003638/at-un-netanyahu-defends-israel-as-delegates-storm-out/story/" + "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": [ @@ -278669,7 +308435,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/healthgrades.hospitalAwardFiltersResponseDoc" } }, "400": { @@ -278684,6 +308450,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -278696,69 +308468,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get GMA News article content", + "summary": "List Healthgrades hospital award filters", "tags": [ - "GMA News" + "Healthgrades" ] } }, - "/gmanews/headlines": { + "/healthgrades/locations": { "get": { - "description": "Returns fresh GMA News Online headlines from one public section RSS feed.", - "operationId": "gmanews-headlines", + "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": "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": "City, state, or ZIP code", "in": "query", - "name": "section", + "name": "term", "required": true, - "type": "string" + "type": "string", + "x-example": "Boston" } ], "produces": [ @@ -278768,7 +308498,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" } }, "400": { @@ -278777,6 +308507,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -278789,16 +308525,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get GMA News section headlines", + "summary": "Get Healthgrades location suggestions", "tags": [ - "GMA News" + "Healthgrades" ] } }, - "/gmanews/news": { + "/healthgrades/physician": { "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 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 Healthgrades physician profile URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.healthgrades.com/physician/dr-example-abcde" + } + ], "produces": [ "application/json" ], @@ -278806,7 +308555,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/healthgrades.physicianResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -278827,16 +308588,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get GMA News top stories", + "summary": "Get a Healthgrades physician profile", "tags": [ - "GMA News" + "Healthgrades" ] } }, - "/gmanews/sections": { + "/healthgrades/physicians/filters": { "get": { - "description": "Returns the public GMA News Online section feeds accepted by the headlines endpoint.", - "operationId": "gmanews-sections", + "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": "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" + } + ], "produces": [ "application/json" ], @@ -278844,7 +308625,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/healthgrades.physicianFiltersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -278852,6 +308639,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -278859,48 +308652,164 @@ "ApiKeyAuth": [] } ], - "summary": "Get GMA News sections", + "summary": "List Healthgrades physician search filters", "tags": [ - "GMA News" + "Healthgrades" ] } }, - "/goat/collection": { + "/healthgrades/physicians/search": { "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\"), the same call GOAT's own product-page \"you may also like\" rails and homepage modules use. Collection slugs are not enumerable by this API -- capture one from a live GOAT page. Credential-free public data.", - "operationId": "goat-collection", + "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": "GOAT collection slug, e.g. as seen in a curated rail on GOAT's own site", + "description": "Specialty, condition, procedure, or provider name", "in": "query", - "name": "slug", + "name": "query", "required": true, "type": "string", - "x-example": "top-trending-uk" + "x-example": "Cardiology" }, { - "description": "1-indexed result page, defaults to 1", + "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", - "x-example": 1 + "type": "integer" }, { - "description": "Results per page, defaults to 12, maximum 100", + "default": "bestmatch", + "description": "Result order", + "enum": [ + "bestmatch", + "distance", + "ratings" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 12 + "name": "sort", + "type": "string" }, { - "description": "Omit specific products by id, comma-separated", + "description": "Provider gender", + "enum": [ + "F", + "M" + ], "in": "query", - "name": "exclude_product_ids", + "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": "1481726" + "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": [ @@ -278910,7 +308819,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.collectionResponseDoc" + "$ref": "#/definitions/healthgrades.physicianSearchResponseDoc" } }, "400": { @@ -278919,14 +308828,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" } @@ -278943,19 +308846,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GOAT curated product collection", + "summary": "Search Healthgrades physicians", "tags": [ - "GOAT" + "Healthgrades" ] } }, - "/goat/countries": { + "/healthgrades/specialties": { "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. Credential-free public data.", - "operationId": "goat-countries", + "description": "Returns every specialty name and directory URL shown on Healthgrades' public A-Z specialty directory. Requests use US egress and Safari browser impersonation because the site restricts some content by region.", + "operationId": "healthgrades-specialties", "produces": [ "application/json" ], @@ -278963,11 +308866,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.countriesResponseDoc" + "$ref": "#/definitions/healthgrades.specialtiesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -278984,19 +308887,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT countries", + "summary": "List Healthgrades physician specialties", "tags": [ - "GOAT" + "Healthgrades" ] } }, - "/goat/curated": { + "/healthgrades/top-searches": { "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. Credential-free public data.", - "operationId": "goat-curated", + "description": "Returns Healthgrades' current popular specialty search suggestions.", + "operationId": "healthgrades-top-searches", "produces": [ "application/json" ], @@ -279004,11 +308907,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.curatedResponseDoc" + "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -279025,19 +308928,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT curated links", + "summary": "List popular Healthgrades searches", "tags": [ - "GOAT" + "Healthgrades" ] } }, - "/goat/listings/count": { + "/hermes/categories": { "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. Credential-free public data.", - "operationId": "goat-listings-count", + "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": "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" ], @@ -279045,11 +308996,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.listingsCountResponseDoc" + "$ref": "#/definitions/hermes.categoriesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -279066,34 +309023,93 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT live listing count", + "summary": "List Hermès category codes", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/product/{slug}": { + "/hermes/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized 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). Credential-free public data combining GOAT's own product-page payload with its live pricing and offers APIs.", - "operationId": "goat-product", + "description": "Browses one Hermès product category and returns a page of normalized 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": "GOAT product URL slug, the path segment of a https://www.goat.com/sneakers/{slug} product page", - "in": "path", - "name": "slug", + "description": "Hermès category code, from hermes-categories", + "in": "query", + "name": "category", "required": true, "type": "string", - "x-example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104" + "x-example": "WOMEN_SHOES_SNEAKERS" }, { - "description": "ISO 3166-1 alpha-2 country code used to localize per-size pricing, defaults to US", + "default": "relevance", + "description": "Result order. One of: relevance, priceasc, pricedsc. Non-default sorts are best-effort", + "enum": [ + "relevance", + "priceasc", + "pricedsc" + ], "in": "query", - "name": "country_code", - "type": "string", - "x-example": "US" + "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": [ @@ -279103,7 +309119,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.productResponseDoc" + "$ref": "#/definitions/hermes.categoryResponseDoc" } }, "400": { @@ -279112,14 +309128,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" } @@ -279136,34 +309146,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT product detail", + "summary": "Browse a Hermès category", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/product/{slug}/recommended": { + "/hermes/product": { "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. Credential-free public data from GOAT's own product-page recommendation API.", - "operationId": "goat-product-recommended", + "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": "GOAT product URL slug to find related products for", - "in": "path", - "name": "slug", + "description": "Hermès product sku, in any of the accepted forms", + "in": "query", + "name": "sku", "required": true, "type": "string", - "x-example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104" + "x-example": "H252013Z BM" }, { - "description": "Number of recommended products to return, defaults to 8, maximum 24", + "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": "count", - "type": "integer", - "x-example": 8 + "name": "locale", + "type": "string" } ], "produces": [ @@ -279173,7 +309222,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.recommendedResponseDoc" + "$ref": "#/definitions/hermes.productResponseDoc" } }, "400": { @@ -279188,8 +309237,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -279206,239 +309255,198 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT recommended products for a product", + "summary": "Get a Hermès product", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/search": { + "/hermes/product/recommendations": { "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 normalized 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. Credential-free public data from the same JSON API backing GOAT's own search page.", - "operationId": "goat-search", + "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 normalized 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": "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", - "enum": [ - "footwear", - "apparel", - "accessories", - "bags", - "collectibles", - "media", - "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" - ], + "description": "Hermès product sku, in any of the forms hermes-product accepts", "in": "query", - "name": "product_types", + "name": "sku", + "required": true, "type": "string", - "x-example": "sneakers" + "x-example": "H252013Z BM" }, { - "description": "Filter by activity (sneakers only), comma-separated for multiple values", + "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": [ - "lifestyle", - "basketball", - "running", - "skateboarding" + "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": "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" + "name": "locale", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/hermes.recommendationsResponseDoc" + } }, - { - "description": "Only include results priced at or above this amount, in cents", - "in": "query", - "name": "price_cents_min", - "type": "integer", - "x-example": 10000 + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Only include results priced at or below this amount, in cents", - "in": "query", - "name": "price_cents_max", - "type": "integer", - "x-example": 20000 + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Only include products currently trading below original retail price", - "in": "query", - "name": "under_retail", - "type": "boolean", - "x-example": false + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Only include products with GOAT Instant Ship availability", - "in": "query", - "name": "instant_ship", - "type": "boolean", - "x-example": false - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a Hermès product's recommended items", + "tags": [ + "Hermes" + ] + } + }, + "/hermes/products": { + "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", + "parameters": [ { - "description": "Result sort order, defaults to relevance", + "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": [ - "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)", + "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": "released_after", - "type": "string", - "x-example": "2025-08-01" + "name": "locale", + "type": "string" }, { - "description": "Only include products released on or before this date (YYYY-MM-DD, UTC)", + "default": 1, + "description": "One-based result page", "in": "query", - "name": "released_before", - "type": "string", - "x-example": "2025-08-31" + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "1-indexed result page, defaults to 1", + "default": 100, + "description": "Results per page, 1-500", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "description": "Results per page, defaults to 12, maximum 100", + "description": "Return only products last modified on or after this YYYY-MM-DD date", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 12 + "name": "changed_since", + "type": "string", + "x-example": "2026-09-01" } ], "produces": [ @@ -279448,7 +309456,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.searchResponseDoc" + "$ref": "#/definitions/hermes.productsResponseDoc" } }, "400": { @@ -279457,8 +309465,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -279475,19 +309483,83 @@ "ApiKeyAuth": [] } ], - "summary": "Search GOAT products", + "summary": "List the Hermès catalogue index", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/search/facets": { + "/hermes/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the accepted values for goat_search's filter parameters: categories, colors, genders, conditions, brands, and years are read live from GOAT's own search API 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. Credential-free public data.", - "operationId": "goat-search-facets", + "description": "Searches the Hermès catalogue by keyword and returns a page of normalized 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" ], @@ -279495,11 +309567,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.facetsResponseDoc" + "$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" } @@ -279516,19 +309594,81 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT search facet values", + "summary": "Search the Hermès catalogue", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/searches/trending": { + "/hermes/stores": { "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. Credential-free public data.", - "operationId": "goat-trending-searches", + "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" ], @@ -279536,11 +309676,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.trendingSearchesResponseDoc" + "$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" } @@ -279557,34 +309703,72 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT trending searches", + "summary": "List Hermès stores", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/suggest": { + "/hermes/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. Credential-free public data.", - "operationId": "goat-suggest", + "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 text to autocomplete", + "description": "Partial search term; may be empty for Hermès' default suggestions", "in": "query", "name": "query", - "required": true, "type": "string", - "x-example": "jord" + "x-example": "bel" }, { - "description": "Maximum curated collections to return. Defaults to 8, maximum 20. Does not affect the product count, which upstream fixes at 25", + "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": "limit", - "type": "integer", - "x-example": 8 + "name": "locale", + "type": "string" } ], "produces": [ @@ -279594,7 +309778,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.suggestResponseDoc" + "$ref": "#/definitions/hermes.suggestResponseDoc" } }, "400": { @@ -279603,8 +309787,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -279621,29 +309805,24 @@ "ApiKeyAuth": [] } ], - "summary": "Autocomplete a GOAT search", + "summary": "Hermès search suggestions", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goldin/auctions": { + "/hindustantimes/article": { "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", + "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": "asc (oldest first) or desc (newest first, default)", - "enum": [ - "asc", - "desc" - ], + "description": "Canonical Hindustan Times article URL", "in": "query", - "name": "order", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.hindustantimes.com/india-news/example-article-slug-101790241314039.html" } ], "produces": [ @@ -279653,7 +309832,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.auctionsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -279662,8 +309841,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -279680,29 +309865,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Goldin's full auction history", + "summary": "Get Hindustan Times article content", "tags": [ - "Goldin" + "Hindustan Times" ] } }, - "/goldin/categories": { + "/hindustantimes/author": { "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 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": "Auction (default) or Fixed_Price -- selects which lot pool to discover enums for", - "enum": [ - "Auction", - "Fixed_Price" - ], + "description": "Canonical Hindustan Times author URL", "in": "query", - "name": "auction_type", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.hindustantimes.com/author/ht-news-desk-101650005059496" } ], "produces": [ @@ -279712,7 +309892,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.hindustanTimesAuthorResponseDoc" } }, "400": { @@ -279721,8 +309901,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" } @@ -279733,26 +309919,50 @@ "ApiKeyAuth": [] } ], - "summary": "List Goldin's search filter enums", + "summary": "Get a Hindustan Times author profile", "tags": [ - "Goldin" + "Hindustan Times" ] } }, - "/goldin/listing": { + "/hindustantimes/headlines": { "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 fresh headlines from one public Hindustan Times section.", + "operationId": "hindustantimes-headlines", "parameters": [ { - "description": "The lot's meta_slug, from a goldin-search result", + "description": "Hindustan Times section slug", + "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" + ], "in": "query", - "name": "slug", + "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "india-news" } ], "produces": [ @@ -279762,7 +309972,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.listingResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -279771,14 +309981,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "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 fresh Hindustan Times top stories from its public \"Latest News\" feed.", + "operationId": "hindustantimes-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" } @@ -279795,99 +310031,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Goldin lot's full public detail", + "summary": "Get Hindustan Times top stories", "tags": [ - "Goldin" + "Hindustan Times" ] } }, - "/goldin/search": { + "/hindustantimes/sections": { + "get": { + "description": "Returns the public Hindustan Times section inventory used by the headlines endpoint.", + "operationId": "hindustantimes-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Hindustan Times sections", + "tags": [ + "Hindustan Times" + ] + } + }, + "/hm/categories": { "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 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": "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", + "description": "Filter to one storefront department", "enum": [ - "Featured", - "Ending_Soonest", - "Highest_Bids", - "Lowest_Bids", - "Most_Bids", - "Least_Bids", - "Most_Recent_Bids", - "Highest_Lot_Number", - "Recently_Started", - "Recently_Created" + "women", + "men", + "kids", + "home", + "beauty" ], "in": "query", - "name": "sort", + "name": "department", "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": [ @@ -279897,7 +310092,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.searchResponseDoc" + "$ref": "#/definitions/hm.categoriesResponseDoc" } }, "400": { @@ -279906,8 +310101,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -279924,31 +310119,59 @@ "ApiKeyAuth": [] } ], - "summary": "Search Goldin's lot auction inventory", + "summary": "Browse H&M's storefront category navigation", "tags": [ - "Goldin" + "H&M" ] } }, - "/goldin/suggest": { + "/hm/listing": { "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": "Returns one H&M category's product listing page: normalized products with pricing, images, colors, and per-size stock, sourced from H&M's own app-backend listing data. category_id is an H&M category slug (e.g. ladies_newarrivals_all, men_newarrivals_all, ladies_jeans) -- this build does not expose a category/nav-tree discovery endpoint, so category_id values are currently sourced 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": "Partial search query, e.g. \\", + "description": "H&M category slug", "in": "query", - "name": "keyword", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "ladies_newarrivals_all" + }, + { + "description": "Page number, one-based, defaults to 1", + "in": "query", + "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 + }, + { + "description": "Sort order, defaults to RELEVANCE", + "enum": [ + "RELEVANCE", + "NEWEST_FIRST", + "PRICE_ASCENDING", + "PRICE_DESCENDING" + ], + "in": "query", + "name": "sort", "type": "string" }, { - "description": "Max suggestions to return, defaults to 8, capped at 20", + "description": "Optional filter for newly added items only", "in": "query", - "name": "limit", - "type": "integer" + "name": "is_new", + "type": "boolean" } ], "produces": [ @@ -279958,7 +310181,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.suggestResponseDoc" + "$ref": "#/definitions/hm.listingResponseDoc" } }, "400": { @@ -279967,8 +310190,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -279985,27 +310208,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Goldin's search suggestions for a keyword", + "summary": "Browse an H&M category's product listing", "tags": [ - "Goldin" + "H&M" ] } }, - "/goodreads/author/{id}": { + "/hm/product/{product_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Goodreads author profile: bio, birth/death dates, website, genres, photo, and aggregate rating stats. Credential-free public Goodreads data.", - "operationId": "goodreads-author", + "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 author 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": "153394" + "x-example": "1268470004" } ], "produces": [ @@ -280015,7 +310238,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.authorResponseDoc" + "$ref": "#/definitions/hm.productDetailResponseDoc" } }, "400": { @@ -280030,8 +310253,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -280048,33 +310271,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads author", + "summary": "Get an H&M product's full detail", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/author/{id}/books": { + "/hm/product/{product_id}/related": { "get": { "consumes": [ "application/json" ], - "description": "Returns an author's paginated works list (title, author, average rating, ratings count). Credential-free public Goodreads data.", - "operationId": "goodreads-author-books", + "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 author 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": "153394" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "1268470004" } ], "produces": [ @@ -280084,7 +310301,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.authorBooksResponseDoc" + "$ref": "#/definitions/hm.relatedResponseDoc" } }, "400": { @@ -280093,14 +310310,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" } @@ -280117,33 +310328,41 @@ "ApiKeyAuth": [] } ], - "summary": "List a Goodreads author's books", + "summary": "Get an H&M product's related items", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/author/{id}/quotes": { + "/hm/search": { "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). Credential-free public Goodreads data.", - "operationId": "goodreads-author-quotes", + "description": "Runs a free-text keyword search against H&M's own app-backend search data and returns normalized 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 author id", - "in": "path", - "name": "id", + "description": "Free-text search keyword", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "153394" + "x-example": "jeans" }, { - "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 } ], "produces": [ @@ -280153,7 +310372,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.authorQuotesResponseDoc" + "$ref": "#/definitions/hm.searchResponseDoc" } }, "400": { @@ -280162,14 +310381,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" } @@ -280186,27 +310399,26 @@ "ApiKeyAuth": [] } ], - "summary": "List a Goodreads author's attributed quotes", + "summary": "Search H&M product listings by free-text keyword", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/book/{id}": { + "/hm/search/suggestions": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Goodreads book: description, authors, series, genres, format, pages, publisher, publication date, ISBNs, and aggregate rating with the full 1-5 star distribution. Credential-free public Goodreads data (goodreads.com), parsed from the book page's embedded GraphQL cache.", - "operationId": "goodreads-book", + "description": "Returns H&M's own search-box typeahead suggestions, sourced from the same credential-free app-backend host as hm-listing/hm-search. 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 part of the real upstream response but confirmed NOT session-scoped -- it returned the identical list across separate cookie-free requests, so treat it as fixed default content rather than a real per-caller history.", + "operationId": "hm-search-suggestions", "parameters": [ { - "description": "Goodreads book id", - "in": "path", - "name": "id", - "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": "2767052" + "x-example": "jean" } ], "produces": [ @@ -280216,23 +310428,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.bookResponseDoc" - } - }, - "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" } @@ -280249,33 +310449,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads book", + "summary": "Get H&M search-box suggestions", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/book/{id}/editions": { + "/hm/stores": { "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, so this makes one extra internal request to resolve it; requests against a book with no editions data return an upstream error.", - "operationId": "goodreads-book-editions", + "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 book 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": "2767052" + "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": [ @@ -280285,7 +310499,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.editionsResponseDoc" + "$ref": "#/definitions/hm.storesResponseDoc" } }, "400": { @@ -280294,14 +310508,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" } @@ -280318,33 +310526,24 @@ "ApiKeyAuth": [] } ], - "summary": "List a Goodreads book's editions", + "summary": "Find nearby H&M physical stores", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/book/{id}/reviews": { + "/hollywoodreporter/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a book's featured reviews (reviewer, rating, text, date, like/comment counts, spoiler flag), sorted by like count. Credential-free public Goodreads data.", - "operationId": "goodreads-book-reviews", + "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": "Goodreads book id", - "in": "path", - "name": "id", + "description": "Canonical Hollywood Reporter article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "2767052" - }, - { - "description": "Max reviews, default 10, max 50", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "https://www.hollywoodreporter.com/movies/movie-news/example-story-1236709066/" } ], "produces": [ @@ -280354,7 +310553,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.reviewsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -280369,12 +310568,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -280387,27 +310580,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads book's featured reviews", + "summary": "Get The Hollywood Reporter article content", "tags": [ - "Goodreads" + "Hollywood Reporter" ] } }, - "/goodreads/genre/{name}": { + "/hollywoodreporter/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns up to 50 books on a Goodreads genre/shelf tag page (e.g. fantasy, romance, science-fiction), Goodreads' credential-free 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 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": "Goodreads genre/shelf tag", - "in": "path", - "name": "name", + "description": "Canonical hollywoodreporter.com/author/ URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "fantasy" + "x-example": "https://www.hollywoodreporter.com/author/borys-kit/" + }, + { + "description": "1-based page of recent articles to return; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -280417,7 +310614,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.genreResponseDoc" + "$ref": "#/definitions/publicnews.hollywoodReporterAuthorResponseDoc" } }, "400": { @@ -280432,12 +310629,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -280450,33 +310641,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads genre shelf", + "summary": "Get a Hollywood Reporter author profile", "tags": [ - "Goodreads" + "Hollywood Reporter" ] } }, - "/goodreads/list/{id}": { + "/hollywoodreporter/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Goodreads Listopia list (ranked book list) by id, paginated. Credential-free public Goodreads data; page 1 of well-known lists may be served from a faster live source, with the public list page itself as fallback for every other case.", - "operationId": "goodreads-list", + "description": "Returns fresh headlines from one public The Hollywood Reporter section or editorial-vertical feed.", + "operationId": "hollywoodreporter-headlines", "parameters": [ { - "description": "Goodreads list id", - "in": "path", - "name": "id", + "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": "section", "required": true, "type": "string", - "x-example": "1" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "arts" } ], "produces": [ @@ -280486,7 +310707,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.listResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -280495,18 +310716,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": { @@ -280519,19 +310728,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads Listopia list", + "summary": "Get The Hollywood Reporter section headlines", "tags": [ - "Goodreads" + "Hollywood Reporter" ] } }, - "/goodreads/lists": { + "/hollywoodreporter/news": { "get": { - "consumes": [ - "application/json" - ], - "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", + "description": "Returns fresh The Hollywood Reporter entertainment-industry top stories from its public RSS feed.", + "operationId": "hollywoodreporter-news", "produces": [ "application/json" ], @@ -280539,7 +310745,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.listsResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -280548,8 +310754,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -280560,61 +310766,24 @@ "ApiKeyAuth": [] } ], - "summary": "List curated Goodreads Listopia lists", + "summary": "Get The Hollywood Reporter top stories", "tags": [ - "Goodreads" + "Hollywood Reporter" ] } }, - "/goodreads/search": { + "/hollywoodreporter/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Goodreads books by title/author. Credential-free public Goodreads data via the autocomplete endpoint (book results only).", - "operationId": "goodreads-search", - "parameters": [ - { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "hunger games" - }, - { - "description": "Max results, default 10, max 50", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "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/goodreads.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -280623,29 +310792,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Goodreads books", + "summary": "Get The Hollywood Reporter sections", "tags": [ - "Goodreads" + "Hollywood Reporter" ] } }, - "/google-jobs/job": { + "/homedepot/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Google Careers posting by its numeric job id (the `id` field returned by search). Parsed from careers.google.com's server-rendered job detail page.", - "operationId": "google-jobs-job", - "parameters": [ - { - "description": "Numeric Google job id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "85207000467546822" - } - ], + "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" ], @@ -280653,19 +310812,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlejobs.jobResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/homedepot.categoriesResponseDoc" } }, "429": { @@ -280686,37 +310833,46 @@ "ApiKeyAuth": [] } ], - "summary": "Google Jobs single posting", + "summary": "Home Depot department taxonomy", "tags": [ - "Google Jobs" + "Home Depot" ] } }, - "/google-jobs/search": { + "/homedepot/category": { "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 one page of a Home Depot category or brand browse page's product grid: normalized 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": "Search query", + "description": "Home Depot category/brand browse path, e.g. \\", "in": "query", - "name": "q", + "name": "path", "required": true, "type": "string", - "x-example": "software engineer" + "x-example": "Tools-Power-Tools-Drills-Impact-Drivers/N-5yc1vZc29x" }, { - "description": "Location filter (free text)", + "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": "location", + "name": "sort", "type": "string", - "x-example": "Singapore" + "x-example": "top_sellers" }, { - "description": "Page number, 1-based", + "description": "1-indexed page number, default 1, maximum 42 (12 products per page)", "in": "query", "name": "page", "type": "integer", @@ -280730,7 +310886,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlejobs.searchResponseDoc" + "$ref": "#/definitions/homedepot.categoryResponseDoc" } }, "400": { @@ -280739,6 +310895,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -280757,26 +310919,27 @@ "ApiKeyAuth": [] } ], - "summary": "Google Jobs search", + "summary": "Browse a Home Depot category or brand page", "tags": [ - "Google Jobs" + "Home Depot" ] } }, - "/google/finance/analyst-articles/{quote}": { + "/homedepot/product/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized analyst article results for a quote.", - "operationId": "google-finance-analyst-articles", + "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": "Quote identifier such as AAPL:NASDAQ", + "description": "Home Depot product/internet id, e.g. 320326875", "in": "path", - "name": "quote", + "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "320326875" } ], "produces": [ @@ -280786,7 +310949,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.articlesResponseDoc" + "$ref": "#/definitions/homedepot.productResponseDoc" } }, "400": { @@ -280801,8 +310964,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -280819,32 +310982,27 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance analyst articles", + "summary": "Home Depot product detail", "tags": [ - "Google" + "Home Depot" ] } }, - "/google/finance/chart/{quote}": { + "/homedepot/product/{id}/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized chart points for a quote and window.", - "operationId": "google-finance-chart", + "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": "Quote identifier such as AAPL:NASDAQ", + "description": "Home Depot product/internet id, e.g. 328425526", "in": "path", - "name": "quote", + "name": "id", "required": true, - "type": "string" - }, - { - "description": "Window: 1d, 5d, 1m, 6m, ytd, 1y, 5y, max", - "in": "query", - "name": "window", - "type": "string" + "type": "string", + "x-example": "328425526" } ], "produces": [ @@ -280854,7 +311012,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.chartResponseDoc" + "$ref": "#/definitions/homedepot.productQuestionsResponseDoc" } }, "400": { @@ -280863,14 +311021,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" } @@ -280887,26 +311039,34 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance chart data", + "summary": "Home Depot product questions and answers", "tags": [ - "Google" + "Home Depot" ] } }, - "/google/finance/classification/{quote}": { + "/homedepot/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized classification strings for a quote.", - "operationId": "google-finance-classification", + "description": "Returns one page (up to 12 products) of a Home Depot keyword search's product listing: normalized products with title, image, model, current/original price, and rating/review count, plus the search's total result count. 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": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", + "description": "Free-text search keywords, e.g. \\", + "in": "query", + "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "impact driver" + }, + { + "description": "1-indexed page number, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -280916,7 +311076,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.classificationResponseDoc" + "$ref": "#/definitions/homedepot.searchResponseDoc" } }, "400": { @@ -280925,14 +311085,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" } @@ -280949,26 +311103,27 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance classification data", + "summary": "Home Depot keyword search", "tags": [ - "Google" + "Home Depot" ] } }, - "/google/finance/company/{quote}": { + "/homedepot/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized company information from Google Finance.", - "operationId": "google-finance-company", + "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": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", + "description": "Partial search text, e.g. \\", + "in": "query", + "name": "term", "required": true, - "type": "string" + "type": "string", + "x-example": "drill" } ], "produces": [ @@ -280978,7 +311133,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.companyResponseDoc" + "$ref": "#/definitions/homedepot.suggestResponseDoc" } }, "400": { @@ -280987,14 +311142,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" } @@ -281011,26 +311160,24 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance company data", + "summary": "Home Depot search suggestions", "tags": [ - "Google" + "Home Depot" ] } }, - "/google/finance/context": { + "/hotels/autocomplete": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Google Finance for instruments matching a company name or ticker query and returns normalized 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 anonymous Hotels.com search-box suggestions for a partial destination or property name. Availability and prices are not included.", + "operationId": "hotels-autocomplete", "parameters": [ { - "description": "Search query", + "description": "Partial destination or property name", "in": "query", "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "New York" } ], "produces": [ @@ -281040,7 +311187,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.contextResponseDoc" + "$ref": "#/definitions/hotels.autocompleteResponseDoc" } }, "400": { @@ -281049,8 +311196,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -281073,26 +311220,28 @@ "ApiKeyAuth": [] } ], - "summary": "Find Google Finance instruments by query", + "summary": "Get Hotels.com destination suggestions", "tags": [ - "Google" + "Hotels.com" ] } }, - "/google/finance/financials/{quote}": { - "get": { + "/hotels/offers": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized annual and quarterly financial rows when Google Finance has statement data for the quote.", - "operationId": "google-finance-financials", + "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": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", + "description": "Room offers request", + "in": "body", + "name": "request", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/hotels.OffersOption" + } } ], "produces": [ @@ -281102,7 +311251,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.financialsResponseDoc" + "$ref": "#/definitions/hotels.offersResponseDoc" } }, "400": { @@ -281117,6 +311266,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -281135,32 +311290,28 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance financial statements", + "summary": "Get Hotels.com room offers", "tags": [ - "Google" + "Hotels.com" ] } }, - "/google/finance/markets/categories/{category}/news": { - "get": { + "/hotels/property": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized news for a Google Finance category.", - "operationId": "google-finance-markets-category-news", + "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": "Google Finance category id", - "in": "path", - "name": "category", + "description": "Canonical Hotels.com property URL", + "in": "body", + "name": "request", "required": true, - "type": "string" - }, - { - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer" + "schema": { + "$ref": "#/definitions/hotels.PropertyOption" + } } ], "produces": [ @@ -281170,7 +311321,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.categoryNewsResponseDoc" + "$ref": "#/definitions/hotels.propertyResponseDoc" } }, "400": { @@ -281179,8 +311330,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -281203,32 +311354,28 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance category news", + "summary": "Get Hotels.com property details", "tags": [ - "Google" + "Hotels.com" ] } }, - "/google/finance/markets/categories/{category}/stocks": { - "get": { + "/hotels/rates": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized instruments for a Google Finance category.", - "operationId": "google-finance-markets-category-stocks", + "description": "Returns one Hotels.com property's date-bound rates and availability: the same normalized 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": "Google Finance category id", - "in": "path", - "name": "category", + "description": "Rates request", + "in": "body", + "name": "request", "required": true, - "type": "string" - }, - { - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer" + "schema": { + "$ref": "#/definitions/hotels.RatesOption" + } } ], "produces": [ @@ -281238,7 +311385,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.categoryStocksResponseDoc" + "$ref": "#/definitions/hotels.ratesResponseDoc" } }, "400": { @@ -281253,6 +311400,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -281271,19 +311424,30 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance category stocks", + "summary": "Get Hotels.com rates for one property", "tags": [ - "Google" + "Hotels.com" ] } }, - "/google/finance/markets/earnings": { - "get": { + "/hotels/reviews": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized earnings calendar instruments.", - "operationId": "google-finance-markets-earnings", + "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" + } + } + ], "produces": [ "application/json" ], @@ -281291,48 +311455,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.earningsResponseDoc" + "$ref": "#/definitions/hotels.reviewsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "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": "Google Finance earnings calendar", - "tags": [ - "Google" - ] - } - }, - "/google/finance/markets/featured": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized featured instruments.", - "operationId": "google-finance-markets-featured", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/finance.instrumentsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "500": { @@ -281353,19 +311494,30 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance featured stocks", + "summary": "Get Hotels.com guest reviews", "tags": [ - "Google" + "Hotels.com" ] } }, - "/google/finance/markets/headline": { - "get": { + "/hotels/reviews/archive": { + "post": { "consumes": [ "application/json" ], - "description": "Returns the top Google Finance headline.", - "operationId": "google-finance-markets-headline", + "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" + } + } + ], "produces": [ "application/json" ], @@ -281373,48 +311525,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.headlineResponseDoc" + "$ref": "#/definitions/hotels.reviewsArchiveResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "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": "Google Finance top headline", - "tags": [ - "Google" - ] - } - }, - "/google/finance/markets/indices": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized market index instruments.", - "operationId": "google-finance-markets-indices", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/finance.instrumentsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "500": { @@ -281435,37 +311564,28 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance market indices", + "summary": "List Hotels.com guest reviews", "tags": [ - "Google" + "Hotels.com" ] } }, - "/google/finance/markets/movers": { - "get": { + "/hotels/search": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized market mover instruments.", - "operationId": "google-finance-markets-movers", + "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: normalized 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": "Comma-separated numeric categories", - "in": "query", - "name": "categories", - "type": "string" - }, - { - "description": "Result count", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer" + "description": "Search request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/hotels.SearchOption" + } } ], "produces": [ @@ -281475,7 +311595,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.marketMoversResponseDoc" + "$ref": "#/definitions/hotels.searchResponseDoc" } }, "400": { @@ -281490,60 +311610,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": "Google Finance market movers", - "tags": [ - "Google" - ] - } - }, - "/google/finance/markets/top": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized top instruments for a Google Finance metric.", - "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" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/finance.topStocksResponseDoc" - } }, "500": { "description": "Internal Server Error", @@ -281563,25 +311634,24 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance top stocks by metric", + "summary": "Search Hotels.com hotels", "tags": [ - "Google" + "Hotels.com" ] } }, - "/google/finance/markets/trending": { + "/houston-chronicle/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized trending instruments.", - "operationId": "google-finance-markets-trending", + "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": "Result limit", + "description": "Canonical Houston Chronicle article URL", "in": "query", - "name": "limit", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.houstonchronicle.com/news/article/example-story-22400001.php" } ], "produces": [ @@ -281591,11 +311661,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.instrumentsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -281612,32 +311688,24 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance trending stocks", + "summary": "Get Houston Chronicle article content", "tags": [ - "Google" + "Houston Chronicle" ] } }, - "/google/finance/news/{quote}": { + "/houston-chronicle/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized news articles for a quote.", - "operationId": "google-finance-news", + "description": "Returns an author's public profile and recent story cards from a canonical Houston Chronicle author URL.", + "operationId": "houston-chronicle-author", "parameters": [ { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", - "required": true, - "type": "string" - }, - { - "description": "Article limit", + "description": "Canonical Houston Chronicle author URL", "in": "query", - "name": "limit", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.houstonchronicle.com/author/example-writer/" } ], "produces": [ @@ -281647,7 +311715,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.articlesResponseDoc" + "$ref": "#/definitions/publicnews.houstonChronicleAuthorResponseDoc" } }, "400": { @@ -281662,12 +311730,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -281680,26 +311742,61 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance quote news", + "summary": "Get a Houston Chronicle author profile", "tags": [ - "Google" + "Houston Chronicle" ] } }, - "/google/finance/quote/{quote}": { + "/houston-chronicle/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches the latest quote data for a provided stock symbol from Google Finance https://www.google.com/finance/quote/AAPL:NASDAQ?hl=en.", - "operationId": "google-finance-quote", + "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": "Stock symbol to fetch the latest quote for (e.g., AAPL:NASDAQ, BTC-USD)", - "in": "path", - "name": "quote", + "description": "Houston Chronicle public section slug", + "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" + ], + "in": "query", + "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news-houston-texas" } ], "produces": [ @@ -281707,19 +311804,19 @@ ], "responses": { "200": { - "description": "Latest stock quote data", + "description": "OK", "schema": { - "$ref": "#/definitions/finance.quoteResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Invalid input parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281730,28 +311827,16 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance Quote API", + "summary": "Get Houston Chronicle section headlines", "tags": [ - "Google" + "Houston Chronicle" ] } }, - "/google/finance/related/{quote}": { + "/houston-chronicle/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized related instruments for a quote.", - "operationId": "google-finance-related", - "parameters": [ - { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", - "required": true, - "type": "string" - } - ], + "description": "Returns current public Houston Chronicle homepage stories. The public RSS endpoint returned no usable items; this uses the credential-free homepage and preserves publisher premium markers on article responses.", + "operationId": "houston-chronicle-news", "produces": [ "application/json" ], @@ -281759,23 +311844,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.relatedResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -281792,54 +311865,24 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance related instruments", + "summary": "Get Houston Chronicle top stories", "tags": [ - "Google" + "Houston Chronicle" ] } }, - "/google/finance/search": { + "/houston-chronicle/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches normalized search results for a provided keyword from Google Finance.", - "operationId": "google-finance-search", - "parameters": [ - { - "description": "Keyword to search for (e.g., Apple)", - "in": "query", - "name": "q", - "required": true, - "type": "string" - } - ], + "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" ], "responses": { "200": { - "description": "Search results", - "schema": { - "$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", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -281848,58 +311891,34 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance Search API", + "summary": "Get Houston Chronicle sections", "tags": [ - "Google" + "Houston Chronicle" ] } }, - "/google/finance/ticker/{ticker}": { + "/howtogeek/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches chart ticker data from Google Finance based on a provided ticker and window period.", - "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" - }, - { - "description": "Time window for the ticker data (default: 1d), options: 1d, 5d, 1m, 6m, 1y, 5y, max", - "in": "query", - "name": "window", - "type": "string" - } - ], + "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" ], "responses": { "200": { - "description": "Ticker time series", - "schema": { - "$ref": "#/definitions/finance.tickerResponseDoc" - } - }, - "400": { - "description": "Invalid input parameters", + "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": "Google Finance upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281910,28 +311929,24 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance Ticker API", + "summary": "Get How-To Geek top stories", "tags": [ - "Google" + "How-To Geek" ] } }, - "/google/jobs": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Google Jobs results parsed from public Google web responses.", - "operationId": "google-jobs", + "/huffpost/article": { + "get": { + "description": "Returns public HuffPost article metadata and body paragraphs from a canonical article URL.", + "operationId": "huffpost-article", "parameters": [ { - "description": "Google Jobs search payload", - "in": "body", - "name": "option", + "description": "Canonical HuffPost article URL", + "in": "query", + "name": "url", "required": true, - "schema": { - "$ref": "#/definitions/google.JobsOption" - } + "type": "string", + "x-example": "https://www.huffpost.com/entry/example-story_n_1234567890abcdef12345678" } ], "produces": [ @@ -281941,7 +311956,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.JobsResponse" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -281950,8 +311965,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -281968,26 +311983,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google Jobs", + "summary": "Get HuffPost article content", "tags": [ - "Google" + "HuffPost" ] } }, - "/google/map/place/{place_id}": { + "/huffpost/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detailed information for a specified place_id. Rate limit is enforced at 1 request per second.", - "operationId": "google-map-place", + "description": "Returns one HuffPost author or contributor's public profile: name, job title, headshot, biography, social links, and their recent articles.", + "operationId": "huffpost-author", "parameters": [ { - "description": "Google Place ID", - "in": "path", - "name": "place_id", + "description": "Canonical huffpost.com/author/ URL", + "in": "query", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.huffpost.com/author/lee-moran" } ], "produces": [ @@ -281996,30 +312009,24 @@ "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/publicnews.huffPostAuthorResponseDoc" } }, "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" } @@ -282030,32 +312037,66 @@ "ApiKeyAuth": [] } ], - "summary": "Google Maps place details API", + "summary": "Get a HuffPost author profile", "tags": [ - "Google" + "HuffPost" ] } }, - "/google/map/place/{place_id}/photos": { + "/huffpost/headlines": { "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 fresh headlines from one public HuffPost topic hub.", + "operationId": "huffpost-headlines", "parameters": [ { - "description": "Google Place ID", - "in": "path", - "name": "place_id", - "required": true, - "type": "string" - }, - { - "description": "Maximum number of photos to return. Omit or 0 for all captured.", + "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": "limit", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" } ], "produces": [ @@ -282064,30 +312105,18 @@ "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/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" } @@ -282098,64 +312127,28 @@ "ApiKeyAuth": [] } ], - "summary": "Google Maps place photos API", + "summary": "Get HuffPost section headlines", "tags": [ - "Google" + "HuffPost" ] } }, - "/google/map/place/{place_id}/reviews": { + "/huffpost/news": { "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", - "parameters": [ - { - "description": "Google Place ID", - "in": "path", - "name": "place_id", - "required": true, - "type": "string" - }, - { - "description": "Maximum number of reviews to return. Omit or 0 for all captured.", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Returns fresh HuffPost top stories from its public homepage.", + "operationId": "huffpost-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/google.mapPlaceReviewsResponseDoc" - } - }, - "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282166,62 +312159,24 @@ "ApiKeyAuth": [] } ], - "summary": "Google Maps place reviews API", + "summary": "Get HuffPost top stories", "tags": [ - "Google" + "HuffPost" ] } }, - "/google/map/search": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns results from Google Maps based on search options. Rate limit is enforced at 1 request per second.", - "operationId": "google-map-search", - "parameters": [ - { - "description": "Search options", - "in": "body", - "name": "mapSearchOption", - "required": true, - "schema": { - "$ref": "#/definitions/google.MapSearchOption" - } - } - ], + "/huffpost/sections": { + "get": { + "description": "Returns the live-verified public HuffPost topic-hub inventory used by the headlines endpoint.", + "operationId": "huffpost-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/google.mapSearchResponseDoc" - } - }, - "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" } } }, @@ -282230,58 +312185,24 @@ "ApiKeyAuth": [] } ], - "summary": "Google Maps search API", + "summary": "Get HuffPost sections", "tags": [ - "Google" + "HuffPost" ] } }, - "/google/news": { + "/ign/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns current Google News search results using anonymous HTTP requests with fresh proxy profiles, without browser rendering. 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 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": "Search query", + "description": "Canonical IGN article or review URL", "in": "query", - "name": "q", + "name": "url", "required": true, "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 - }, - { - "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" + "x-example": "https://www.ign.com/articles/brothers-season-1-review" } ], "produces": [ @@ -282291,29 +312212,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.newsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282324,26 +312239,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google News", + "summary": "Get IGN article or review content", "tags": [ - "Google" + "IGN" ] - }, - "post": { - "consumes": [ - "application/json" - ], - "description": "Restored JSON compatibility endpoint. Returns current Google News articles using anonymous HTTP requests with fresh proxy profiles, without browser rendering. 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", + } + }, + "/ign/author": { + "get": { + "description": "Returns one IGN author's public profile: name, job title, location, biography, social links, and their recent articles.", + "operationId": "ign-author", "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", + "description": "Canonical www.ign.com/person/ URL", + "in": "query", + "name": "url", "required": true, - "schema": { - "$ref": "#/definitions/google.SearchOption" - } + "type": "string", + "x-example": "https://www.ign.com/person/tomphillipsIGN" } ], "produces": [ @@ -282353,29 +312266,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.newsSearchResponseDoc" + "$ref": "#/definitions/publicnews.ignAuthorResponseDoc" } }, "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", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282386,50 +312293,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google News with JSON", + "summary": "Get an IGN author profile", "tags": [ - "Google" + "IGN" ] } }, - "/google/suggest": { + "/ign/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Google autosuggest query completions from the public unauthenticated suggest JSON endpoint.", - "operationId": "google-suggest", + "description": "Returns fresh IGN headlines from one public section feed.", + "operationId": "ign-headlines", "parameters": [ { - "description": "Search query prefix", + "description": "IGN section slug", + "enum": [ + "news", + "reviews", + "games", + "movies", + "tv", + "tech", + "nintendo", + "playstation", + "xbox", + "pc", + "mobile", + "comics" + ], "in": "query", - "name": "q", + "name": "section", "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", - "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" + "x-example": "news" } ], "produces": [ @@ -282439,29 +312334,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.suggestResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "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", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282472,16 +312355,16 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Google search queries", + "summary": "Get IGN section headlines", "tags": [ - "Google" + "IGN" ] } }, - "/google/trends/categories": { + "/ign/news": { "get": { - "description": "Returns supported top-level Google Trends category ids and labels for Trending Now category filters.", - "operationId": "google-trends-categories", + "description": "Returns fresh IGN top stories (gaming and entertainment news) from the public RSS feed.", + "operationId": "ign-news", "produces": [ "application/json" ], @@ -282489,17 +312372,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.trendsCategoriesResponseDoc" + "$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" } @@ -282510,16 +312393,16 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends categories", + "summary": "Get IGN top stories", "tags": [ - "Google" + "IGN" ] } }, - "/google/trends/enums": { + "/ign/sections": { "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", + "description": "Returns the public IGN section taxonomy used by the headlines endpoint.", + "operationId": "ign-sections", "produces": [ "application/json" ], @@ -282527,19 +312410,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.trendsEnumsResponseDoc" - } - }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -282548,28 +312419,31 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends enum metadata", + "summary": "Get IGN sections", "tags": [ - "Google" + "IGN" ] } }, - "/google/trends/explore": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Google Trends keyword analytics from internal Trends widget requests: interest over time, interest by region, related queries, and related topics when available.", - "operationId": "google-trends-explore", + "/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": "Explore request", - "in": "body", - "name": "request", + "description": "IKEA item number", + "in": "query", + "name": "item_no", "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "type": "string", + "x-example": "80213074" + }, + { + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", + "in": "query", + "name": "country", + "type": "string" } ], "produces": [ @@ -282579,29 +312453,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.exploreResponseDoc" + "$ref": "#/definitions/ikea.availabilityResponseDoc" } }, "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282612,28 +312486,54 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends explore data", + "summary": "Get an IKEA item's real-time stock availability", "tags": [ - "Google" + "IKEA" ] } }, - "/google/trends/explore/interest-by-region": { - "post": { - "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", + "/ikea/categories": { + "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", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "description": "Case-insensitive substring filter on category name", + "in": "query", + "name": "q", + "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" } ], "produces": [ @@ -282643,29 +312543,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.interestByRegionResponseDoc" + "$ref": "#/definitions/ikea.categoriesResponseDoc" } }, "400": { - "description": "Invalid input", + "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": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282676,28 +312570,76 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends interest by region", + "summary": "Discover IKEA category keys", "tags": [ - "Google" + "IKEA" ] } }, - "/google/trends/explore/interest-over-time": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Returns only the interest-over-time timeline from the Google Trends Explore widget flow. Supports multiple comparison terms.", - "operationId": "google-trends-explore-interest-over-time", + "/ikea/category": { + "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", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", + "description": "IKEA category key", + "in": "query", + "name": "category", "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "type": "string", + "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": [ @@ -282707,29 +312649,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.interestOverTimeResponseDoc" + "$ref": "#/definitions/ikea.categoryResponseDoc" } }, "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282740,28 +312682,38 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends interest over time", + "summary": "Browse an IKEA category", "tags": [ - "Google" + "IKEA" ] } }, - "/google/trends/explore/related-topics": { - "post": { - "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", + "/ikea/product": { + "get": { + "description": "Returns one IKEA item's full normalized 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": "Explore request", - "in": "body", - "name": "request", + "description": "IKEA item number", + "in": "query", + "name": "item_no", "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "type": "string", + "x-example": "80213074" + }, + { + "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" } ], "produces": [ @@ -282771,29 +312723,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.relatedTopicsResponseDoc" + "$ref": "#/definitions/ikea.productResponseDoc" } }, "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282804,28 +312756,38 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends related topics", + "summary": "Get an IKEA product's detail", "tags": [ - "Google" + "IKEA" ] } }, - "/google/trends/explore/rising-queries": { - "post": { - "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", + "/ikea/reviews": { + "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", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", + "description": "IKEA item number", + "in": "query", + "name": "item_no", "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "type": "string", + "x-example": "80213074" + }, + { + "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" } ], "produces": [ @@ -282835,29 +312797,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.exploreQueriesResponseDoc" + "$ref": "#/definitions/ikea.reviewsResponseDoc" } }, "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282868,28 +312830,47 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends explore rising queries", + "summary": "Get an IKEA item's highlighted customer reviews", "tags": [ - "Google" + "IKEA" ] } }, - "/google/trends/explore/top-queries": { - "post": { - "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", + "/ikea/search": { + "get": { + "description": "Searches IKEA products and returns normalized 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": "Explore request", - "in": "body", - "name": "request", + "description": "Free-text product search query", + "in": "query", + "name": "q", "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "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" } ], "produces": [ @@ -282899,67 +312880,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.exploreQueriesResponseDoc" + "$ref": "#/definitions/ikea.searchResponseDoc" } }, "400": { - "description": "Invalid input", + "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": "Google Trends upstream request failed", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Google Trends explore top queries", - "tags": [ - "Google" - ] - } - }, - "/google/trends/locations": { - "get": { - "description": "Returns supported Google Trends location codes. Explore endpoints also accept WORLDWIDE.", - "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", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -282970,384 +312907,38 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends locations", + "summary": "Search IKEA products", "tags": [ - "Google" + "IKEA" ] } }, - "/google/trends/trending": { + "/ikea/store": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Google Trends Trending Now rows from the internal TrendsUi batch RPC replay.", - "operationId": "google-trends-trending", + "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": [ { - "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" - ], + "description": "IKEA store URL slug", "in": "query", - "name": "status", - "type": "string" + "name": "slug", + "required": true, + "type": "string", + "x-example": "burbank" }, { - "default": "relevance", - "description": "Sort mode", - "enum": [ - "relevance", - "title", - "recency", - "search_volume" - ], + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", "in": "query", - "name": "sort_by", + "name": "country", "type": "string" }, { - "default": 20, - "description": "Maximum rows to return", + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", "in": "query", - "name": "limit", - "type": "integer" + "name": "language", + "type": "string" } ], "produces": [ @@ -283357,29 +312948,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.trendingResponseDoc" + "$ref": "#/definitions/ikea.storeResponseDoc" } }, "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -283390,28 +312981,30 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends trending now data", + "summary": "Get an IKEA store's detail", "tags": [ - "Google" + "IKEA" ] } }, - "/google/trends/trending/detail": { - "post": { - "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", + "/ikea/stores": { + "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", "parameters": [ { - "description": "Trending detail request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.TrendingDetailRequest" - } + "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" } ], "produces": [ @@ -283421,29 +313014,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.exploreResponseDoc" + "$ref": "#/definitions/ikea.storesResponseDoc" } }, "400": { - "description": "Invalid input", + "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": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -283454,58 +313041,47 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends trending term detail", + "summary": "List IKEA physical store locations", "tags": [ - "Google" + "IKEA" ] } }, - "/google/videos": { + "/ikea/suggest": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Google video vertical results (title, platform, link, duration, age) parsed from the public Google video results page. Locale defaults to country=us and lang=en. Returns 503 when Google serves a challenge page or unusable HTML.", - "operationId": "google-videos", + "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": "Search query", + "description": "Partial or full search term", "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 + "x-example": "des" }, { - "description": "Results per page; defaults to 10, clamped to 1..50", + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", "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", + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "language", + "type": "string" }, { - "description": "Google UI language; defaults to en", + "default": 5, + "description": "Top-product count (1-20)", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "maximum": 20, + "minimum": 1, + "name": "size", + "type": "integer" } ], "produces": [ @@ -283515,29 +313091,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.videosResponseDoc" + "$ref": "#/definitions/ikea.suggestResponseDoc" } }, "400": { - "description": "Missing or invalid query 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": "Google upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -283548,27 +313118,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google video results", + "summary": "Get IKEA search-box typeahead suggestions", "tags": [ - "Google" + "IKEA" ] } }, - "/googlepatents/classification": { + "/imdb/charts": { "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 normalized rows from public IMDb title charts. Chart values: `top_rated_movies`, `top_rated_tv_shows`, `most_popular_movies`, `most_popular_tv_shows`, `top_rated_english_movies`, `lowest_rated_movies`.", + "operationId": "imdb-charts", "parameters": [ { - "description": "CPC classification symbol", + "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": "code", - "required": true, - "type": "string", - "x-example": "A61K31/00" + "name": "chart", + "type": "string" + }, + { + "default": 25, + "description": "Rows to return, default 25, max 250", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -283578,7 +313162,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.classificationResponseDoc" + "$ref": "#/definitions/imdb.chartsResponseDoc" } }, "400": { @@ -283587,8 +313171,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "schema": { "$ref": "#/definitions/app.Response" } @@ -283617,19 +313201,19 @@ "ApiKeyAuth": [] } ], - "summary": "Look up a Cooperative Patent Classification (CPC) symbol", + "summary": "IMDb title charts", "tags": [ - "Google Patents" + "IMDb" ] } }, - "/googlepatents/coverage": { + "/imdb/image-types": { "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": "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" ], @@ -283637,7 +313221,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.coverageResponseDoc" + "$ref": "#/definitions/imdb.imageTypesResponseDoc" } }, "429": { @@ -283651,12 +313235,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -283664,34 +313242,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Patents database coverage: grants and applications indexed per country per year", + "summary": "IMDb image types", "tags": [ - "Google Patents" + "IMDb" ] } }, - "/googlepatents/detail": { + "/imdb/name": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single patent's normalized 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`. Public data, sourced from Google Patents' server-rendered detail pages. To search or browse by keyword, inventor, or assignee instead of a known publication number, use `/googlepatents/search`.", - "operationId": "googlepatents-detail", + "description": "Returns normalized public IMDb person metadata and known-for rows. Pass exactly one of `id` or `url`.", + "operationId": "imdb-name", "parameters": [ { - "description": "Publication number, e.g. US10758101B2", + "description": "IMDb name id", "in": "query", - "name": "number", - "required": true, + "name": "id", "type": "string", - "x-example": "US10758101B2" + "x-example": "nm0634240" }, { - "description": "Language code for the translated page, default en", + "description": "Absolute https://www.imdb.com/name// URL", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en" + "x-example": "https://www.imdb.com/name/nm0634240/" } ], "produces": [ @@ -283701,7 +313278,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.detailResponseDoc" + "$ref": "#/definitions/imdb.nameResponseDoc" } }, "400": { @@ -283740,27 +313317,33 @@ "ApiKeyAuth": [] } ], - "summary": "A single patent's bibliographic data, abstract, claims, description, citations, and family", + "summary": "IMDb name detail", "tags": [ - "Google Patents" + "IMDb" ] } }, - "/googlepatents/recent": { + "/imdb/name/awards": { "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 normalized public IMDb award rows for a person. Pass exactly one of `id` or `url`.", + "operationId": "imdb-name-awards", "parameters": [ { - "description": "ISO 8601 week, format YYYY-Www", + "description": "IMDb name id", "in": "query", - "name": "week", - "required": true, + "name": "id", "type": "string", - "x-example": "2026-W20" + "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": [ @@ -283770,7 +313353,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.recentResponseDoc" + "$ref": "#/definitions/imdb.nameAwardsResponseDoc" } }, "400": { @@ -283809,147 +313392,214 @@ "ApiKeyAuth": [] } ], - "summary": "Browse patent publications indexed by Google Patents for one ISO week", + "summary": "IMDb name awards", "tags": [ - "Google Patents" + "IMDb" ] } }, - "/googlepatents/search": { + "/imdb/name/credits": { "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 normalized hits plus top-assignee/top-inventor/top-classification breakdowns over the full result set. Public data, sourced from Google Patents' own search API.", - "operationId": "googlepatents-search", + "description": "Returns normalized public IMDb filmography sections for a person. Pass exactly one of `id` or `url`.", + "operationId": "imdb-name-credits", "parameters": [ { - "description": "Free-text search query", + "description": "IMDb name id", "in": "query", - "name": "q", - "required": true, + "name": "id", "type": "string", - "x-example": "battery" + "x-example": "nm0634240" }, { - "description": "Filter by inventor name", + "description": "Absolute https://www.imdb.com/name// URL", "in": "query", - "name": "inventor", + "name": "url", "type": "string", - "x-example": "Thomas Fogarty" + "x-example": "https://www.imdb.com/name/nm0634240/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/imdb.nameCreditsResponseDoc" + } }, - { - "description": "Filter by assignee/applicant name", - "in": "query", - "name": "assignee", - "type": "string", - "x-example": "Emerson Electric" + "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": [ { - "description": "Filter by patent office/authority code, e.g. US, EP, WO, CN, JP", + "ApiKeyAuth": [] + } + ], + "summary": "IMDb name credits", + "tags": [ + "IMDb" + ] + } + }, + "/imdb/name/images": { + "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", + "parameters": [ + { + "description": "IMDb name id", "in": "query", - "name": "country", + "name": "id", "type": "string", - "x-example": "US" + "x-example": "nm0000151" }, { - "description": "Filter by legal status. Allowed values: GRANT, APPLICATION", - "enum": [ - "GRANT", - "APPLICATION" - ], + "description": "Absolute https://www.imdb.com/name// URL", "in": "query", - "name": "status", + "name": "url", "type": "string", - "x-example": "GRANT" + "x-example": "https://www.imdb.com/name/nm0000151/" }, { - "description": "Filter by document type. Allowed values: PATENT, DESIGN", + "description": "Image type filter, single value or comma-separated list", "enum": [ - "PATENT", - "DESIGN" + "behind_the_scenes", + "event", + "poster", + "product", + "production_art", + "publicity", + "still_frame", + "unknown" ], "in": "query", "name": "type", "type": "string", - "x-example": "PATENT" + "x-example": "still_frame" }, { - "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" - ], + "description": "Rows to return, default 50, max 1000", "in": "query", - "name": "language", - "type": "string", - "x-example": "ENGLISH" + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/imdb.nameImagesResponseDoc" + } }, - { - "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", - "name": "date_field", - "type": "string", - "x-example": "priority" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Only results dated on or before this date (YYYY-MM-DD)", - "in": "query", - "name": "before", - "type": "string", - "x-example": "2021-12-31" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Only results dated on or after this date (YYYY-MM-DD)", - "in": "query", - "name": "after", - "type": "string", - "x-example": "2020-01-01" + "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": [ { - "description": "Sort order. Allowed values: relevance, new, old. Defaults to relevance", - "enum": [ - "relevance", - "new", - "old" - ], + "ApiKeyAuth": [] + } + ], + "summary": "IMDb name images", + "tags": [ + "IMDb" + ] + } + }, + "/imdb/name/videos": { + "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", + "parameters": [ + { + "description": "IMDb name id", "in": "query", - "name": "sort", + "name": "id", "type": "string", - "x-example": "relevance" + "x-example": "nm0000151" }, { - "description": "Results per page, default 10, max 100", + "description": "Absolute https://www.imdb.com/name// URL", "in": "query", - "name": "num", - "type": "integer", - "x-example": 10 + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/name/nm0000151/" }, { - "description": "Page number, 0-indexed, default 0", + "description": "Rows to return, default 50, max 100", "in": "query", - "name": "page", + "name": "limit", "type": "integer", - "x-example": 0 + "x-example": 50 } ], "produces": [ @@ -283959,7 +313609,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.searchResponseDoc" + "$ref": "#/definitions/imdb.nameVideosResponseDoc" } }, "400": { @@ -283968,6 +313618,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -283992,39 +313648,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google Patents by keyword, inventor, assignee, and other filters", + "summary": "IMDb name video metadata", "tags": [ - "Google Patents" + "IMDb" ] } }, - "/googlepatents/suggest": { + "/imdb/search": { "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 normalized IMDb title search rows from credential-free public IMDb pages. Limit defaults to 10 and clamps to 20.", + "operationId": "imdb-search", "parameters": [ { - "description": "Which field to autocomplete. Allowed values: inventor, assignee", - "enum": [ - "inventor", - "assignee" - ], + "description": "Search query", "in": "query", - "name": "field", + "name": "query", "required": true, "type": "string", - "x-example": "inventor" + "x-example": "inception" }, { - "description": "Partial name typed so far", + "description": "Rows to return, default 10, max 20", "in": "query", - "name": "value", - "required": true, - "type": "string", - "x-example": "John" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -284034,7 +313685,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.suggestResponseDoc" + "$ref": "#/definitions/imdb.searchResponseDoc" } }, "400": { @@ -284043,6 +313694,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -284067,41 +313724,207 @@ "ApiKeyAuth": [] } ], - "summary": "Autocomplete an inventor or assignee name for Google Patents search", + "summary": "IMDb title search", "tags": [ - "Google Patents" + "IMDb" ] } }, - "/googleplay/app": { + "/imdb/search/title": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 normalized IMDb advanced title-search results (imdb.com/search/title/) from a credential-free public IMDb page. At least one filter is required; sort/limit alone are not enough. Limit defaults to 25 and clamps to 50; only IMDb's first rendered 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 Play package name", + "description": "Title-name substring match", "in": "query", - "name": "app_id", - "required": true, + "name": "title", "type": "string", - "x-example": "com.openai.chatgpt" + "x-example": "matrix" }, { - "description": "Two-letter storefront country code", + "description": "Comma-separated title types: `feature`, `tvSeries`, `short`, `tvEpisode`, `tvMiniSeries`, `tvMovie`, `tvSpecial`, `tvShort`, `videoGame`, `video`, `musicVideo`, `podcastSeries`, `podcastEpisode`", "in": "query", - "name": "country", + "name": "title_type", "type": "string", - "x-example": "us" + "x-example": "feature" }, { - "description": "Two-letter language code", + "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": "lang", + "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": [ @@ -284109,9 +313932,9 @@ ], "responses": { "200": { - "description": "Wrapped app details payload", + "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.AppDetailsResponse" + "$ref": "#/definitions/imdb.searchTitleResponseDoc" } }, "400": { @@ -284137,6 +313960,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284144,33 +313973,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve full Google Play app details", + "summary": "IMDb advanced title search", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/categories": { + "/imdb/title": { "get": { "consumes": [ "application/json" ], - "description": "Returns category ids found in the Google Play apps navigation.", - "operationId": "googleplay-categories", + "description": "Returns normalized IMDb title metadata from a credential-free public IMDb title page. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title", "parameters": [ { - "description": "Two-letter country code", + "description": "IMDb title id", "in": "query", - "name": "country", + "name": "id", "type": "string", - "x-example": "us" + "x-example": "tt1375666" }, { - "description": "Two-letter language code", + "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": [ @@ -284180,7 +314009,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.categoriesResponseDoc" + "$ref": "#/definitions/imdb.titleResponseDoc" } }, "400": { @@ -284206,6 +314035,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284213,34 +314048,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play app categories", + "summary": "IMDb title detail", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/datasafety": { + "/imdb/title/awards": { "get": { "consumes": [ "application/json" ], - "description": "Returns the data safety information displayed on Google Play.", - "operationId": "googleplay-datasafety", + "description": "Returns normalized public IMDb award rows for a title. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-awards", "parameters": [ { - "description": "Google Play app id", + "description": "IMDb title id", "in": "query", - "name": "app_id", - "required": true, + "name": "id", "type": "string", - "x-example": "com.openai.chatgpt" + "x-example": "tt1375666" }, { - "description": "Two-letter language code", + "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": [ @@ -284250,7 +314084,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.dataSafetyResponseDoc" + "$ref": "#/definitions/imdb.titleAwardsResponseDoc" } }, "400": { @@ -284276,6 +314110,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284283,55 +314123,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play data safety details", + "summary": "IMDb title awards", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/developer/{dev_id}": { + "/imdb/title/box-office": { "get": { "consumes": [ "application/json" ], - "description": "Returns apps published by a developer id or developer name.", - "operationId": "googleplay-developer", + "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": "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", + "description": "IMDb title id", "in": "query", - "name": "country", + "name": "id", "type": "string", - "x-example": "us" + "x-example": "tt0111161" }, { - "description": "Two-letter language code", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en" - }, - { - "default": false, - "description": "Resolve each app to full detail", - "in": "query", - "name": "full_detail", - "type": "boolean" + "x-example": "https://www.imdb.com/title/tt0111161/" } ], "produces": [ @@ -284341,7 +314159,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.developerResultsResponseDoc" + "$ref": "#/definitions/imdb.titleBoxOfficeResponseDoc" } }, "400": { @@ -284367,6 +314185,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284374,91 +314198,115 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve apps by Google Play developer", + "summary": "IMDb title box office summary", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/list": { + "/imdb/title/company-credits": { "get": { "consumes": [ "application/json" ], - "description": "Returns apps from a Google Play collection and category.", - "operationId": "googleplay-list", + "description": "Returns normalized public IMDb company-credit sections for a title. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-company-credits", "parameters": [ { - "description": "Collection: TOP_FREE, TOP_PAID, GROSSING, NEW_FREE, NEW_PAID", - "enum": [ - "TOP_FREE", - "TOP_PAID", - "GROSSING", - "NEW_FREE", - "NEW_PAID" - ], + "description": "IMDb title id", "in": "query", - "name": "collection", + "name": "id", "type": "string", - "x-example": "TOP_FREE" + "x-example": "tt1375666" }, { - "description": "Category id", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "category", + "name": "url", "type": "string", - "x-example": "TOOLS" + "x-example": "https://www.imdb.com/title/tt1375666/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + } }, - { - "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" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Family age range", - "in": "query", - "name": "age", - "type": "string", - "x-example": "AGE_RANGE1" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Number of apps", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 + "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": [ { - "description": "Two-letter country code", + "ApiKeyAuth": [] + } + ], + "summary": "IMDb title company credits", + "tags": [ + "IMDb" + ] + } + }, + "/imdb/title/connections": { + "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", + "parameters": [ + { + "description": "IMDb title id", "in": "query", - "name": "country", + "name": "id", "type": "string", - "x-example": "us" + "x-example": "tt0111161" }, { - "description": "Two-letter language code", + "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/tt0111161/" }, { - "default": false, - "description": "Resolve each app to full detail", + "description": "Rows to return, default 50, max 250", "in": "query", - "name": "full_detail", - "type": "boolean" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -284468,7 +314316,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.listResultsResponseDoc" + "$ref": "#/definitions/imdb.titleConnectionsResponseDoc" } }, "400": { @@ -284494,6 +314342,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284501,48 +314355,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve apps from a Google Play top collection", + "summary": "IMDb title connections", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/permissions": { + "/imdb/title/credits": { "get": { "consumes": [ "application/json" ], - "description": "Returns Google Play permission groups or a short permission name list.", - "operationId": "googleplay-permissions", + "description": "Returns normalized public IMDb full cast and crew sections. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-credits", "parameters": [ { - "description": "Google Play app id", - "in": "query", - "name": "app_id", - "required": true, - "type": "string", - "x-example": "com.openai.chatgpt" - }, - { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", + "description": "IMDb title id", "in": "query", - "name": "lang", + "name": "id", "type": "string", - "x-example": "en" + "x-example": "tt1375666" }, { - "default": false, - "description": "Return only permission names", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "short", - "type": "boolean" + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -284552,7 +314391,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.permissionsResultsResponseDoc" + "$ref": "#/definitions/imdb.creditsResponseDoc" } }, "400": { @@ -284578,6 +314417,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284585,41 +314430,47 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play app permissions", + "summary": "IMDb title credits", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/ratings": { + "/imdb/title/episodes": { "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 normalized public IMDb episode rows for a series title. Limit defaults to 10 and clamps to 20. Optional `season` filters the upstream episodes page. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-episodes", "parameters": [ { - "description": "Google Play package name", + "description": "IMDb title id", "in": "query", - "name": "app_id", - "required": true, + "name": "id", "type": "string", - "x-example": "com.openai.chatgpt" + "x-example": "tt0944947" }, { - "description": "Two-letter storefront country code", + "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/tt0944947/" }, { - "description": "Two-letter language code", + "description": "Season number to request", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "name": "season", + "type": "integer", + "x-example": 1 + }, + { + "description": "Rows to return, default 10, max 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -284629,7 +314480,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.ratingsResponseDoc" + "$ref": "#/definitions/imdb.episodesResponseDoc" } }, "400": { @@ -284655,6 +314506,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284662,73 +314519,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Google Play ratings by device", + "summary": "IMDb title episodes", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/reviews": { + "/imdb/title/filming-locations": { "get": { "consumes": [ "application/json" ], - "description": "Returns one or more pages of app reviews. Set `paginate=true` to fetch only the requested page.", - "operationId": "googleplay-reviews", + "description": "Returns normalized public IMDb filming-location rows for a title. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-filming-locations", "parameters": [ { - "description": "Google Play app id", - "in": "query", - "name": "app_id", - "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", + "description": "IMDb title id", "in": "query", - "name": "country", + "name": "id", "type": "string", - "x-example": "us" + "x-example": "tt1375666" }, { - "description": "Two-letter language code", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "lang", + "name": "url", "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://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -284738,7 +314555,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.reviewsResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { @@ -284764,6 +314581,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284771,67 +314594,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play reviews", + "summary": "IMDb title filming locations", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/search": { + "/imdb/title/goofs": { "get": { "consumes": [ "application/json" ], - "description": "Returns Google Play search results for a term.", - "operationId": "googleplay-search", + "description": "Returns normalized public IMDb goof rows for a title. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-goofs", "parameters": [ { - "description": "Search term", - "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "chatgpt" - }, - { - "description": "Number of apps", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 20 - }, - { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", + "description": "IMDb title id", "in": "query", - "name": "lang", + "name": "id", "type": "string", - "x-example": "en" - }, - { - "default": false, - "description": "Resolve each app to full detail", - "in": "query", - "name": "full_detail", - "type": "boolean" + "x-example": "tt1375666" }, { - "description": "Price filter: all, free, paid", - "enum": [ - "all", - "free", - "paid" - ], + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "price", + "name": "url", "type": "string", - "x-example": "all" + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -284841,7 +314630,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.searchResultsResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { @@ -284867,6 +314656,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284874,55 +314669,57 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google Play", + "summary": "IMDb title goofs", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/similar": { + "/imdb/title/images": { "get": { "consumes": [ "application/json" ], - "description": "Returns apps from the \"Similar apps\" cluster on an app details page.", - "operationId": "googleplay-similar", + "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": "Google Play app id", + "description": "IMDb title id", "in": "query", - "name": "app_id", - "required": true, + "name": "id", "type": "string", - "x-example": "com.openai.chatgpt" - }, - { - "description": "Number of apps", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 24 + "x-example": "tt0089753" }, { - "description": "Two-letter country code", + "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/tt0089753/" }, { - "description": "Two-letter language code", + "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": "lang", + "name": "type", "type": "string", - "x-example": "en" + "x-example": "still_frame" }, { - "default": false, - "description": "Resolve each app to full detail", + "description": "Rows to return, default 50, max 1000", "in": "query", - "name": "full_detail", - "type": "boolean" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -284932,7 +314729,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.similarResultsResponseDoc" + "$ref": "#/definitions/imdb.titleImagesResponseDoc" } }, "400": { @@ -284958,6 +314755,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -284965,41 +314768,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve similar Google Play apps", + "summary": "IMDb title images", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/googleplay/suggest/{term}": { + "/imdb/title/keywords": { "get": { "consumes": [ "application/json" ], - "description": "Returns up to 10 suggestions for a search term.", - "operationId": "googleplay-suggest", + "description": "Returns normalized public IMDb keyword rows for a title. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-keywords", "parameters": [ { - "description": "Search term prefix", - "in": "path", - "name": "term", - "required": true, - "type": "string", - "x-example": "chatg" - }, - { - "description": "Two-letter country code", + "description": "IMDb title id", "in": "query", - "name": "country", + "name": "id", "type": "string", - "x-example": "us" + "x-example": "tt1375666" }, { - "description": "Two-letter language code", + "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": [ @@ -285009,7 +314804,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.suggestResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { @@ -285035,6 +314830,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -285042,24 +314843,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play query suggestions", + "summary": "IMDb title keywords", "tags": [ - "GooglePlay" + "IMDb" ] } }, - "/gq/article": { + "/imdb/title/parental-guide": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns normalized public IMDb parental-guide categories and severity signals. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-parental-guide", "parameters": [ { - "description": "Canonical GQ story URL", + "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", - "required": true, "type": "string", - "x-example": "https://www.gq.com/story/how-to-unclog-your-ear" + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -285069,7 +314879,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/imdb.parentalGuideResponseDoc" } }, "400": { @@ -285078,14 +314888,20 @@ "$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" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -285102,37 +314918,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get GQ article content", + "summary": "IMDb title parental guide", "tags": [ - "GQ" + "IMDb" ] } }, - "/gq/author": { + "/imdb/title/public-facts-analysis": { "get": { - "description": "Returns one GQ contributor's public profile: name, biography, headshot, social links, and one page of their recent articles.", - "operationId": "gq-author", + "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", "parameters": [ { - "description": "Contributor slug, e.g. tom-ward; provide slug or url", + "description": "IMDb title id", "in": "query", - "name": "slug", + "name": "id", "type": "string", - "x-example": "tom-ward" + "x-example": "tt1375666" }, { - "description": "Canonical www.gq.com/contributor/ URL; alternative to slug", + "description": "Absolute https://www.imdb.com/title// URL", "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://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -285142,7 +314954,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gqAuthorResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsAnalysisResponseDoc" } }, "400": { @@ -285157,6 +314969,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": { @@ -285169,36 +314993,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GQ contributor profile", + "summary": "IMDb title public facts analysis", "tags": [ - "GQ" + "IMDb" ] } }, - "/gq/headlines": { + "/imdb/title/quotes": { "get": { - "description": "Returns the current story cards from one GQ section page: headline, standfirst, byline, publish date, and image.", - "operationId": "gq-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized public IMDb quote rows for a title. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-quotes", "parameters": [ { - "description": "GQ section slug", - "enum": [ - "culture", - "entertainment", - "fitness", - "gq-hype", - "gq-recommends", - "gqsports", - "grooming", - "politics", - "style", - "watches", - "wellness" - ], + "description": "IMDb title id", "in": "query", - "name": "section", - "required": true, - "type": "string" + "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": [ @@ -285208,7 +315029,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { @@ -285217,6 +315038,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": { @@ -285229,16 +315068,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get GQ section headlines", + "summary": "IMDb title quotes", "tags": [ - "GQ" + "IMDb" ] } }, - "/gq/news": { + "/imdb/title/ratings": { "get": { - "description": "Returns fresh GQ top stories from the public RSS feed.", - "operationId": "gq-news", + "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" ], @@ -285246,11 +315104,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/imdb.ratingsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -285267,45 +315125,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get GQ top stories", + "summary": "IMDb title ratings breakdown", "tags": [ - "GQ" + "IMDb" ] } }, - "/gq/sections": { + "/imdb/title/release-info": { "get": { - "description": "Returns the GQ section (channel) slugs accepted by the headlines endpoint, each verified to list live stories.", - "operationId": "gq-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Returns normalized public IMDb release date rows and alternate titles. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-release-info", + "parameters": [ { - "ApiKeyAuth": [] + "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/" } ], - "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" ], @@ -285313,7 +315161,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.categoriesResponseDoc" + "$ref": "#/definitions/imdb.releaseInfoResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -285322,6 +315182,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -285334,27 +315200,40 @@ "ApiKeyAuth": [] } ], - "summary": "List Grailed's facet taxonomy", + "summary": "IMDb title release info", "tags": [ - "Grailed" + "IMDb" ] } }, - "/grailed/collection": { + "/imdb/title/reviews": { "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 normalized 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": "Collection id, from grailed-collections' own collections[].id field", + "description": "IMDb title id", "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/" + }, + { + "description": "Rows to return, default 10, max 20", + "in": "query", + "name": "limit", "type": "integer", - "x-example": 20 + "x-example": 10 } ], "produces": [ @@ -285364,7 +315243,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.collectionResponseDoc" + "$ref": "#/definitions/imdb.reviewsResponseDoc" } }, "400": { @@ -285385,6 +315264,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -285397,19 +315282,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grailed curated collection's listings", + "summary": "IMDb title user reviews", "tags": [ - "Grailed" + "IMDb" ] } }, - "/grailed/collections": { + "/imdb/title/similar": { "get": { "consumes": [ "application/json" ], - "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", + "description": "Returns normalized titles from IMDb's public More like this recommendations. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-similar", + "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" ], @@ -285417,11 +315318,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.collectionsResponseDoc" + "$ref": "#/definitions/imdb.similarResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -285438,40 +315339,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Grailed's curated homepage collections", + "summary": "IMDb similar titles", "tags": [ - "Grailed" + "IMDb" ] } }, - "/grailed/designers": { + "/imdb/title/technical-specs": { "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", + "description": "Returns normalized 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": "Free-text designer name filter", + "description": "IMDb title id", "in": "query", - "name": "q", + "name": "id", "type": "string", - "x-example": "gucci" - }, - { - "description": "One-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "tt1375666" }, { - "description": "Results per page, defaults to 24, maximum 100", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -285481,7 +315375,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.designersResponseDoc" + "$ref": "#/definitions/imdb.technicalSpecsResponseDoc" } }, "400": { @@ -285490,12 +315384,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": { @@ -285508,27 +315414,33 @@ "ApiKeyAuth": [] } ], - "summary": "List or search Grailed's designer/brand taxonomy", + "summary": "IMDb title technical specs", "tags": [ - "Grailed" + "IMDb" ] } }, - "/grailed/listing": { + "/imdb/title/trivia": { "get": { "consumes": [ "application/json" ], - "description": "Returns full normalized 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", + "description": "Returns normalized public IMDb trivia rows for a title. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-trivia", "parameters": [ { - "description": "Listing id, from a search or sold-listings result's own listings[].id field", + "description": "IMDb title id", "in": "query", "name": "id", - "required": true, - "type": "integer", - "x-example": 105379689 + "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": [ @@ -285538,7 +315450,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.listingResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { @@ -285559,6 +315471,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -285571,124 +315489,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Grailed listing", + "summary": "IMDb title trivia", "tags": [ - "Grailed" + "IMDb" ] } }, - "/grailed/search": { + "/imdb/title/videos": { "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 is Algolia's own 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 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": "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" - ], + "description": "IMDb title id", "in": "query", - "name": "condition", + "name": "id", "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 + "x-example": "tt1375666" }, { - "description": "Sort order, defaults to heat", - "enum": [ - "heat", - "heat_recency", - "followers", - "newest", - "price_asc", - "price_desc", - "recently_updated", - "quality" - ], + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "sort", + "name": "url", "type": "string", - "x-example": "heat" - }, - { - "description": "One-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://www.imdb.com/title/tt1375666/" }, { - "description": "Results per page, defaults to 24, maximum 100", + "description": "Rows to return, default 50, max 100", "in": "query", "name": "limit", "type": "integer", - "x-example": 24 + "x-example": 50 } ], "produces": [ @@ -285698,7 +315532,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.searchResponseDoc" + "$ref": "#/definitions/imdb.titleVideosResponseDoc" } }, "400": { @@ -285707,12 +315541,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": { @@ -285725,41 +315571,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search or browse Grailed active listings", + "summary": "IMDb title video metadata", "tags": [ - "Grailed" + "IMDb" ] } }, - "/grailed/seller": { + "/importyeti/company": { "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 a normalized 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. Credential-free public data, rendered from the company report page through proxied browser renderers.", + "operationId": "importyeti-company", "parameters": [ { - "description": "Grailed username", + "description": "ImportYeti company slug, the last path segment of a /company/{slug} URL", "in": "query", - "name": "username", + "name": "slug", "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": "target" } ], "produces": [ @@ -285769,7 +315601,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.sellerResponseDoc" + "$ref": "#/definitions/importyeti.companyResponseDoc" } }, "400": { @@ -285784,8 +315616,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -285802,30 +315634,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Grailed seller's profile and active listings", + "summary": "Get an ImportYeti company report", "tags": [ - "Grailed" + "ImportYeti" ] } }, - "/grailed/seller-reviews": { + "/importyeti/search": { "get": { "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", + "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. Credential-free public data, sourced from ImportYeti's own JSON search API (distinct from its human-facing /search results page, which does not render due to a client-side bug in ImportYeti's own app).", + "operationId": "importyeti-search", "parameters": [ { - "description": "Grailed username", + "description": "Company or supplier name to search for", "in": "query", - "name": "username", + "name": "q", "required": true, "type": "string", - "x-example": "woodlandstepps" + "x-example": "nike" }, { - "description": "One-based page number, defaults to 1", + "description": "1-indexed result page, defaults to 1", "in": "query", "name": "page", "type": "integer", @@ -285839,7 +315671,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.sellerReviewsResponseDoc" + "$ref": "#/definitions/importyeti.searchResponseDoc" } }, "400": { @@ -285848,14 +315680,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" } @@ -285872,34 +315698,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Grailed seller's buyer feedback", + "summary": "Search ImportYeti companies and suppliers by name", "tags": [ - "Grailed" + "ImportYeti" ] } }, - "/grailed/similar-listings": { + "/indeed/job": { "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 one Indeed job posting by its job key (the `job_key` field returned by search). Primary transport is Indeed's own credential-free GraphQL API; falls back to the original web-page transport if that fails.", + "operationId": "indeed-job", "parameters": [ { - "description": "Listing id to find similar listings for", + "description": "Indeed job key (16-character hex)", "in": "query", - "name": "id", + "name": "jk", "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", + "x-example": "a055dc6ab3a91a3b" } ], "produces": [ @@ -285909,7 +315728,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.similarListingsResponseDoc" + "$ref": "#/definitions/indeed.jobResponseDoc" } }, "400": { @@ -285942,119 +315761,129 @@ "ApiKeyAuth": [] } ], - "summary": "Get listings similar to a Grailed listing", + "summary": "Indeed job detail", "tags": [ - "Grailed" + "Indeed" ] } }, - "/grailed/sold-listings": { + "/indeed/locations/suggest": { "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": "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. Credential-free GraphQL only; there is no page-based fallback for this endpoint.", + "operationId": "indeed-locations-suggest", "parameters": [ { - "description": "Free-text search query", + "description": "Partial location text", "in": "query", "name": "q", + "required": true, "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" + "x-example": "Austin" }, { - "description": "Department filter", - "enum": [ - "menswear", - "womenswear" - ], + "description": "Max suggestions to return, defaults to 10, maxes at 25", "in": "query", - "name": "department", - "type": "string", - "x-example": "menswear" + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/indeed.locationSuggestResponseDoc" + } }, - { - "description": "Category facet filter, from grailed-categories' own categories[].value field", - "in": "query", - "name": "category", - "type": "string", - "x-example": "footwear" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Size facet filter, from grailed-categories' own sizes[].value field", - "in": "query", - "name": "size", - "type": "string", - "x-example": "9" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Color facet filter, from grailed-categories' own colors[].value field", - "in": "query", - "name": "color", - "type": "string", - "x-example": "white" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Indeed location suggestions", + "tags": [ + "Indeed" + ] + } + }, + "/indeed/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Indeed job postings by keyword and location. Primary transport is Indeed's own credential-free GraphQL API; a page 1, unfiltered-by-date request uses it directly. Requesting page 2+ or the `fromage` filter (not yet expressible over the primary transport) uses the original web-page transport instead, with the same normalized response shape either way. `sort` enum: `relevance` (default), `date`.", + "operationId": "indeed-search", + "parameters": [ { - "description": "Condition filter", - "enum": [ - "is_new", - "is_gently_used", - "is_used", - "is_worn", - "is_not_specified" - ], + "description": "Search keywords", "in": "query", - "name": "condition", + "name": "q", + "required": true, "type": "string", - "x-example": "is_used" + "x-example": "software engineer" }, { - "description": "Minimum SOLD price (inclusive), in USD", + "description": "Location (city, state, or zip)", "in": "query", - "name": "min_price", - "type": "number", - "x-example": 100 + "name": "l", + "type": "string", + "x-example": "New York, NY" }, { - "description": "Maximum SOLD price (inclusive), in USD", + "description": "Page number, 1-based, defaults to 1", "in": "query", - "name": "max_price", - "type": "number", - "x-example": 500 + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Sort order, defaults to recent", + "description": "Sort order: relevance, date", "enum": [ - "recent", - "price_asc", - "price_desc" + "relevance", + "date" ], "in": "query", "name": "sort", - "type": "string", - "x-example": "recent" + "type": "string" }, { - "description": "One-based page number, defaults to 1", + "description": "Search radius in miles", "in": "query", - "name": "page", + "name": "radius", "type": "integer", - "x-example": 1 + "x-example": 25 }, { - "description": "Results per page, defaults to 24, maximum 100", + "description": "Only jobs posted within this many days", "in": "query", - "name": "limit", + "name": "fromage", "type": "integer", - "x-example": 24 + "x-example": 7 } ], "produces": [ @@ -286064,7 +315893,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.soldListingsResponseDoc" + "$ref": "#/definitions/indeed.searchResponseDoc" } }, "400": { @@ -286091,27 +315920,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Grailed sold listings (sale price history)", + "summary": "Indeed job search", "tags": [ - "Grailed" + "Indeed" ] } }, - "/grailed/suggest": { + "/independent/article": { "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": "Returns public The Independent article metadata and body paragraphs from a canonical article URL.", + "operationId": "independent-article", "parameters": [ { - "description": "Partial search query", + "description": "Canonical The Independent article URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "guc" + "x-example": "https://www.independent.co.uk/news/world/example-b1234567.html" } ], "produces": [ @@ -286121,7 +315947,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.suggestResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -286130,8 +315956,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -286148,43 +315974,30 @@ "ApiKeyAuth": [] } ], - "summary": "Grailed search-box typeahead suggestions", + "summary": "Get The Independent article content", "tags": [ - "Grailed" + "The Independent" ] } }, - "/grubhub/availability": { + "/independent/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 one Independent author's public profile: name, job title, bio, X/Twitter handle, and their recent articles.", + "operationId": "independent-author", "parameters": [ { - "description": "Comma-separated Grubhub restaurant ids, up to 20", + "description": "Author slug, e.g. lizzie-dearden", "in": "query", - "name": "restaurant_ids", - "required": true, + "name": "slug", "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 + "x-example": "lizzie-dearden" }, { - "description": "Diner location longitude", + "description": "Canonical independent.co.uk/author/ URL; alternative to slug", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -74.006 + "name": "url", + "type": "string", + "x-example": "https://www.independent.co.uk/author/lizzie-dearden" } ], "produces": [ @@ -286194,7 +316007,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.availabilityResponseDoc" + "$ref": "#/definitions/publicnews.independentAuthorResponseDoc" } }, "400": { @@ -286209,12 +316022,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -286227,43 +316034,43 @@ "ApiKeyAuth": [] } ], - "summary": "Check ordering availability for a batch of Grubhub restaurants", + "summary": "Get an Independent author profile", "tags": [ - "Grubhub" + "The Independent" ] } }, - "/grubhub/offers": { + "/independent/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 fresh headlines from one public The Independent RSS section.", + "operationId": "independent-headlines", "parameters": [ { - "description": "Grubhub restaurant id", + "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": "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" } ], "produces": [ @@ -286273,7 +316080,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.offersResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -286282,11 +316089,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 fresh The Independent top stories from its public RSS feed.", + "operationId": "independent-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -286306,27 +316139,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's currently active promotions", + "summary": "Get The Independent top stories", "tags": [ - "Grubhub" + "The Independent" ] } }, - "/grubhub/restaurant": { + "/independent/sections": { "get": { - "consumes": [ + "description": "Returns the live-verified public RSS section inventory for The Independent.", + "operationId": "independent-sections", + "produces": [ "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", + "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": "Grubhub's numeric restaurant id, from /grubhub/search", + "description": "Canonical The Indian Express article URL", "in": "query", - "name": "restaurant_id", + "name": "url", "required": true, "type": "string", - "x-example": "6238960" + "x-example": "https://indianexpress.com/article/cities/delhi/example-article-slug-10892304/" } ], "produces": [ @@ -286336,7 +316192,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.restaurantResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -286345,14 +316201,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" } @@ -286369,34 +316225,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's detail", + "summary": "Get The Indian Express article content", "tags": [ - "Grubhub" + "The Indian Express" ] } }, - "/grubhub/restaurant/menu": { + "/indianexpress/author": { "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 a The Indian Express author's byline metadata, biography, and recent articles from a canonical author URL.", + "operationId": "indianexpress-author", "parameters": [ { - "description": "Grubhub's numeric restaurant id, from /grubhub/search", + "description": "Canonical The Indian Express author URL", "in": "query", - "name": "restaurant_id", + "name": "url", "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 + "x-example": "https://indianexpress.com/profile/author/jane-doe/" } ], "produces": [ @@ -286406,7 +316252,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.menuResponseDoc" + "$ref": "#/definitions/publicnews.indianExpressAuthorResponseDoc" } }, "400": { @@ -286421,12 +316267,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -286439,52 +316279,82 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's menu with prices", + "summary": "Get a The Indian Express author profile", "tags": [ - "Grubhub" + "The Indian Express" ] } }, - "/grubhub/restaurant/reviews": { + "/indianexpress/headlines": { "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 fresh headlines from one public The Indian Express RSS section.", + "operationId": "indianexpress-headlines", "parameters": [ { - "description": "Grubhub's numeric restaurant id, from /grubhub/search", - "in": "query", - "name": "restaurant_id", - "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 - }, - { - "description": "One of timeCreated_desc, ratingValue_desc. Default timeCreated_desc.", + "description": "The Indian Express RSS section slug", "enum": [ - "timeCreated_desc", - "ratingValue_desc" + "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": "sort", + "name": "section", + "required": true, "type": "string", - "x-example": "timeCreated_desc" + "x-example": "politics" } ], "produces": [ @@ -286494,7 +316364,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.reviewsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -286503,11 +316373,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 fresh The Indian Express top stories from its public RSS feed.", + "operationId": "indianexpress-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -286527,67 +316423,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's reviews and rating histogram", + "summary": "Get The Indian Express top stories", "tags": [ - "Grubhub" + "The Indian Express" ] } }, - "/grubhub/search": { + "/indianexpress/sections": { "get": { - "consumes": [ + "description": "Returns the public The Indian Express RSS section inventory used by the headlines endpoint.", + "operationId": "indianexpress-sections", + "produces": [ "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", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 - }, + "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": "Search center longitude", + "description": "Canonical India Today story URL", "in": "query", - "name": "longitude", + "name": "url", "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" - }, - { - "description": "One of delivery, pickup. Default delivery.", - "enum": [ - "delivery", - "pickup" - ], - "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 - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://www.indiatoday.in/world/story/example-story-slug-3002364-2026-09-24" } ], "produces": [ @@ -286597,7 +316476,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.searchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -286612,12 +316491,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -286630,62 +316503,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Grubhub restaurants near a location", + "summary": "Get India Today article content", "tags": [ - "Grubhub" + "India Today" ] } }, - "/grubhub/timepicker": { + "/indiatoday/author": { "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": "Returns an India Today author's name, job title, headshot, biography, and recent stories from a canonical author URL.", + "operationId": "indiatoday-author", "parameters": [ { - "description": "Grubhub restaurant id", - "in": "query", - "name": "restaurant_id", - "required": true, - "type": "string", - "x-example": "698307" - }, - { - "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 - }, - { - "description": "Which slot grid to return", - "enum": [ - "DELIVERY", - "PICKUP" - ], + "description": "Canonical India Today author URL", "in": "query", - "name": "location_mode", + "name": "url", "required": true, "type": "string", - "x-example": "DELIVERY" - }, - { - "description": "How many days ahead to fetch, 1-7 (default 7)", - "in": "query", - "name": "days", - "type": "integer", - "x-example": 7 + "x-example": "https://www.indiatoday.in/author/jane-doe" } ], "produces": [ @@ -286695,7 +316530,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.timepickerResponseDoc" + "$ref": "#/definitions/publicnews.indiaTodayAuthorResponseDoc" } }, "400": { @@ -286710,12 +316545,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -286728,24 +316557,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's future orderable time-slot calendar", + "summary": "Get an India Today author profile", "tags": [ - "Grubhub" + "India Today" ] } }, - "/guardian/article": { + "/indiatoday/headlines": { "get": { - "description": "Returns a Guardian article's public metadata and body paragraphs from a canonical article URL. Live-blog timelines are not supported.", - "operationId": "guardian-article", + "description": "Returns current headlines from one India Today section hub page.", + "operationId": "indiatoday-headlines", "parameters": [ { - "description": "Canonical www.theguardian.com article URL", + "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": "url", + "name": "section", "required": true, "type": "string", - "x-example": "https://www.theguardian.com/world/2026/aug/26/us-military-kills-four-boat-strike-caribbean" + "x-example": "top-news" } ], "produces": [ @@ -286755,7 +316621,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.articleResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -286764,11 +316630,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", @@ -286788,39 +316680,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian article content", + "summary": "Get India Today top stories", "tags": [ - "Guardian" + "India Today" ] } }, - "/guardian/author": { + "/indiatoday/sections": { "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", - "parameters": [ + "description": "Returns the live-verified India Today section inventory used by the headlines endpoint.", + "operationId": "indiatoday-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Guardian contributor profile slug, e.g. hannah-devlin", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "hannah-devlin" - }, + "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": "Canonical https://www.theguardian.com/profile/ page URL, as an alternative to slug", + "description": "Canonical IndieWire article URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.theguardian.com/profile/hannah-devlin" - }, - { - "default": 1, - "description": "1-based article-history page, 1 to 100, defaults to 1", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "https://www.indiewire.com/features/interviews/handle-with-care-dvd-traveling-indie-film-physical-media-1235216158/" } ], "produces": [ @@ -286830,7 +316733,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.authorResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -286845,12 +316748,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -286863,36 +316760,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian contributor profile", + "summary": "Get IndieWire article content", "tags": [ - "Guardian" + "IndieWire" ] } }, - "/guardian/headlines": { + "/indiewire/author": { "get": { - "description": "Returns fresh headlines from a public Guardian RSS section. section defaults to world.", - "operationId": "guardian-headlines", + "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": "Guardian RSS section, defaults to world", - "enum": [ - "world", - "uk-news", - "us-news", - "politics", - "business", - "technology", - "environment", - "science", - "sport", - "culture", - "lifeandstyle", - "commentisfree" - ], + "description": "Canonical indiewire.com/author/ URL", "in": "query", - "name": "section", - "type": "string" + "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 } ], "produces": [ @@ -286902,7 +316794,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.indiewireAuthorResponseDoc" } }, "400": { @@ -286917,12 +316809,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -286935,24 +316821,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian section headlines", + "summary": "Get an IndieWire author profile", "tags": [ - "Guardian" + "IndieWire" ] } }, - "/guardian/live": { + "/indiewire/headlines": { "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 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": "Canonical www.theguardian.com live-blog URL", + "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": "url", + "name": "section", "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": "analysis" } ], "produces": [ @@ -286962,7 +316882,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.liveResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -286971,11 +316891,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 fresh IndieWire independent film, TV and awards top stories from its public RSS feed.", + "operationId": "indiewire-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -286995,33 +316941,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian live blog snapshot", + "summary": "Get IndieWire top stories", "tags": [ - "Guardian" + "IndieWire" ] } }, - "/guardian/topic": { + "/indiewire/sections": { "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 the complete public section inventory accepted by /api/v1/indiewire/headlines (IndieWire's 32 editorial categories).", + "operationId": "indiewire-sections", + "produces": [ + "application/json" + ], + "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": "Guardian tag or section slug", + "description": "Canonical i article 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://inews.co.uk/news/world/withering-remark-humiliated-trump-court-failure-4786703" } ], "produces": [ @@ -287031,7 +316994,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.topicResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -287040,14 +317003,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" } @@ -287064,26 +317027,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian topic archive", + "summary": "Get i article content", "tags": [ - "Guardian" + "i" ] } }, - "/gucci/categories": { + "/inews/author": { "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 an i author's name, biography, social links, and most recent articles from a canonical author URL.", + "operationId": "inews-author", "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": "Canonical i author URL", "in": "query", - "name": "department", + "name": "url", + "required": true, "type": "string", - "x-example": "women" + "x-example": "https://inews.co.uk/author/simon-kelner" } ], "produces": [ @@ -287093,7 +317054,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.inewsAuthorResponseDoc" } }, "400": { @@ -287102,8 +317063,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -287120,34 +317081,71 @@ "ApiKeyAuth": [] } ], - "summary": "List Gucci's category and subcategory taxonomy", + "summary": "Get an i author profile", "tags": [ - "Gucci" + "i" ] } }, - "/gucci/category": { + "/inews/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Gucci category/browse listing: normalized 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 fresh headlines from one public i section feed. The section must be a slug returned by the sections endpoint.", + "operationId": "inews-headlines", "parameters": [ { - "description": "Category path from gucci-categories' own category field", + "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" + ], "in": "query", - "name": "category", + "name": "section", "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": "home" } ], "produces": [ @@ -287157,7 +317155,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.categoryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -287166,16 +317164,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 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" } }, "503": { @@ -287190,27 +317208,50 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Gucci category listing", + "summary": "Get i top stories", "tags": [ - "Gucci" + "i" ] } }, - "/gucci/product": { + "/inews/sections": { "get": { - "consumes": [ + "description": "Returns every i section slug accepted by the headlines endpoint, with its display name and public RSS feed URL.", + "operationId": "inews-sections", + "produces": [ "application/json" ], - "description": "Returns full normalized product detail for one style: name, marketing description, breadcrumb trail, brand line, gender, colors, materials, sizes, price, images, and stock -- combining Gucci's own structured product record with the product page's own marketing copy. style_code comes from gucci-search's or gucci-category's own style_code field.", - "operationId": "gucci-product", + "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": "Product style code, from gucci-search's or gucci-category's own style_code field", + "description": "Canonical Philippine Daily Inquirer article URL", "in": "query", - "name": "style_code", + "name": "url", "required": true, "type": "string", - "x-example": "A005Y8AAG231096" + "x-example": "https://newsinfo.inquirer.net/2311358/18-mindanawons-top-2026-nursing-licensure-exam" } ], "produces": [ @@ -287220,7 +317261,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.productResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -287235,12 +317276,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -287253,33 +317288,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gucci product", + "summary": "Get Philippine Daily Inquirer article content", "tags": [ - "Gucci" + "Philippine Daily Inquirer" ] } }, - "/gucci/recommendations": { + "/inquirer/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Gucci recommendations shelf: normalized 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 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": "Product style code to get related items for; omit for the site's general trending-items shelf instead", + "description": "Canonical Philippine Daily Inquirer byline URL", "in": "query", - "name": "style_code", + "name": "url", + "required": true, "type": "string", - "x-example": "A005Y8AAG231096" + "x-example": "https://newsinfo.inquirer.net/byline/ivana-janlee-a-otoc" }, { - "description": "Maximum products to return, defaults to 10, maximum 20", + "description": "1-based page number of articles to return; defaults to 1 and overrides any page number already present in url", "in": "query", - "name": "max", - "type": "integer", - "x-example": 10 + "name": "page", + "type": "integer" } ], "produces": [ @@ -287289,7 +317321,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.recommendationsResponseDoc" + "$ref": "#/definitions/publicnews.inquirerAuthorResponseDoc" } }, "400": { @@ -287298,8 +317330,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -287316,48 +317348,36 @@ "ApiKeyAuth": [] } ], - "summary": "Gucci product recommendations", + "summary": "Get a Philippine Daily Inquirer author profile", "tags": [ - "Gucci" + "Philippine Daily Inquirer" ] } }, - "/gucci/search": { + "/inquirer/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Gucci's product catalog by keyword: normalized product summaries (name, price, colors, materials, sizes, gender, stock) with the search index's own live total result count. A genuinely empty result (e.g. a nonsense query) returns a well-formed empty products list, not an error. The response's own size_facets field lists every size value present in the result set (with live counts) -- pass one of those values as size on a follow-up call to filter to just that size.", - "operationId": "gucci-search", + "description": "Returns fresh headlines from one Philippine Daily Inquirer section's public RSS feed.", + "operationId": "inquirer-headlines", "parameters": [ { - "description": "Search keyword", + "description": "Philippine Daily Inquirer section slug", + "enum": [ + "newsinfo", + "globalnation", + "business", + "sports", + "entertainment", + "lifestyle", + "technology", + "opinion", + "usa", + "cebudailynews" + ], "in": "query", - "name": "q", + "name": "section", "required": true, "type": "string", - "x-example": "belt" - }, - { - "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": "Filter to products listing this exact size as available (e.g. \\", - "in": "query", - "name": "size", - "type": "string", - "x-example": "9 = 9.5 US" + "x-example": "newsinfo" } ], "produces": [ @@ -287367,7 +317387,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.searchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -287376,12 +317396,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -287394,29 +317408,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Gucci's product catalog", + "summary": "Get Philippine Daily Inquirer section headlines", "tags": [ - "Gucci" + "Philippine Daily Inquirer" ] } }, - "/gucci/size-guide": { + "/inquirer/news": { "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", - "parameters": [ - { - "description": "Product style code", - "in": "query", - "name": "style_code", - "required": true, - "type": "string", - "x-example": "757892AACAG9055" - } - ], + "description": "Returns fresh Philippine Daily Inquirer top stories from its public news RSS feed.", + "operationId": "inquirer-news", "produces": [ "application/json" ], @@ -287424,13 +317425,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.sizeGuideResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -287451,29 +317446,16 @@ "ApiKeyAuth": [] } ], - "summary": "Gucci product size chart", + "summary": "Get Philippine Daily Inquirer top stories", "tags": [ - "Gucci" + "Philippine Daily Inquirer" ] } }, - "/gucci/store": { + "/inquirer/sections": { "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", - "parameters": [ - { - "description": "Store slug, from gucci-stores' own slug field", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "900-north-michigan-avenue" - } - ], + "description": "Returns the Philippine Daily Inquirer section inventory: the ten public news subdomains accepted by inquirer-headlines.", + "operationId": "inquirer-sections", "produces": [ "application/json" ], @@ -287481,31 +317463,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.storeResponseDoc" - } - }, - "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" } } }, @@ -287514,26 +317472,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gucci store's detail", + "summary": "Get Philippine Daily Inquirer sections", "tags": [ - "Gucci" + "Philippine Daily Inquirer" ] } }, - "/gucci/stores": { + "/instacart/departments": { "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": "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": "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": "Store's opaque shop id, from GET /instacart/stores", "in": "query", - "name": "department", + "name": "shop_id", + "required": true, "type": "string", - "x-example": "jewelry" + "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": "Postal code to localize the taxonomy for", + "in": "query", + "name": "postal_code", + "required": true, + "type": "string", + "x-example": "94105" } ], "produces": [ @@ -287543,7 +317518,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.storesResponseDoc" + "$ref": "#/definitions/instacart.departmentsResponseDoc" } }, "400": { @@ -287552,8 +317527,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -287570,82 +317545,59 @@ "ApiKeyAuth": [] } ], - "summary": "List Gucci store locations", + "summary": "Get Instacart store department taxonomy", "tags": [ - "Gucci" + "Instacart" ] } }, - "/gucci/stores/search": { + "/instacart/item": { "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": "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": "Gucci storefront locale; controls localization only, not geographic filtering", - "enum": [ - "ca", - "fr", - "jp", - "uk", - "us" - ], + "description": "Store's opaque shop id, from GET /instacart/stores", "in": "query", - "name": "market", + "name": "shop_id", "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 + "x-example": "9501" }, { - "description": "Viewport southern latitude", + "description": "Store's retailer slug, from GET /instacart/stores", "in": "query", - "name": "south", + "name": "store_slug", "required": true, - "type": "number", - "x-example": 40.476578 + "type": "string", + "x-example": "safeway" }, { - "description": "Viewport eastern longitude", + "description": "Store's opaque retailer location id, from GET /instacart/stores", "in": "query", - "name": "east", + "name": "retailer_location_id", "required": true, - "type": "number", - "x-example": -73.700169 + "type": "string", + "x-example": "53" }, { - "description": "Viewport center latitude", + "description": "Instacart's opaque product id", "in": "query", - "name": "latitude", + "name": "product_id", "required": true, - "type": "number", - "x-example": 40.7127753 + "type": "string", + "x-example": "17830663" }, { - "description": "Viewport center longitude", + "description": "Postal code to price/localize the lookup for", "in": "query", - "name": "longitude", + "name": "postal_code", "required": true, - "type": "number", - "x-example": -74.0059728 + "type": "string", + "x-example": "94105" } ], "produces": [ @@ -287655,7 +317607,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.storeSearchResponseDoc" + "$ref": "#/definitions/instacart.itemResponseDoc" } }, "400": { @@ -287664,8 +317616,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" } @@ -287682,34 +317640,43 @@ "ApiKeyAuth": [] } ], - "summary": "Search Gucci stores in a map viewport", + "summary": "Get Instacart product detail at a store", "tags": [ - "Gucci" + "Instacart" ] } }, - "/gucci/suggest": { + "/instacart/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Gucci's own search-box typeahead suggestions for a partial query, each with its own live total result count on the search index. Not product data -- pass a suggestion's own query value straight into gucci-search for results.", - "operationId": "gucci-suggest", + "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": "Partial search query", + "description": "Store's opaque shop id, from GET /instacart/stores", "in": "query", - "name": "q", + "name": "shop_id", "required": true, "type": "string", - "x-example": "bel" + "x-example": "9501" }, { - "description": "Maximum suggestions to return, defaults to 5, maximum 20", + "description": "Store's retailer slug, from GET /instacart/stores", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 + "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": [ @@ -287719,7 +317686,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.suggestResponseDoc" + "$ref": "#/definitions/instacart.searchResponseDoc" } }, "400": { @@ -287728,8 +317695,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -287746,24 +317713,35 @@ "ApiKeyAuth": [] } ], - "summary": "Gucci search-box suggestions", + "summary": "Search Instacart product terms at a store", "tags": [ - "Gucci" + "Instacart" ] } }, - "/gulfnews/article": { + "/instacart/search-nearby": { "get": { - "description": "Returns public Gulf News article metadata and body paragraphs from a canonical article URL.", - "operationId": "gulfnews-article", + "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", "parameters": [ { - "description": "Canonical Gulf News article URL", + "description": "US postal/ZIP code to search near", "in": "query", - "name": "url", + "name": "postal_code", "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": "94105" + }, + { + "description": "Free-text search term", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "milk" } ], "produces": [ @@ -287773,7 +317751,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/instacart.searchNearbyResponseDoc" } }, "400": { @@ -287788,6 +317766,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -287800,30 +317784,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gulf News article content", + "summary": "Search Instacart product terms near a postal code", "tags": [ - "Gulf News" + "Instacart" ] } }, - "/gulfnews/author": { + "/instacart/stores": { "get": { - "description": "Returns one Gulf News author's public profile: name, job title, bio, and their recent articles.", - "operationId": "gulfnews-author", + "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", "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", + "description": "US postal/ZIP code to search near", "in": "query", - "name": "url", + "name": "postal_code", + "required": true, "type": "string", - "x-example": "https://gulfnews.com/author/nathaniel-lacsina" + "x-example": "94105" } ], "produces": [ @@ -287833,7 +317814,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gulfNewsAuthorResponseDoc" + "$ref": "#/definitions/instacart.storesResponseDoc" } }, "400": { @@ -287848,6 +317829,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -287860,44 +317847,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gulf News author profile", + "summary": "Find Instacart stores near a postal code", "tags": [ - "Gulf News" + "Instacart" ] } }, - "/gulfnews/headlines": { + "/instacart/trending": { "get": { - "description": "Returns fresh headlines from one public Gulf News section.", - "operationId": "gulfnews-headlines", + "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", "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": "US postal/ZIP code to search near", "in": "query", - "name": "section", + "name": "postal_code", "required": true, - "type": "string" + "type": "string", + "x-example": "94105" } ], "produces": [ @@ -287907,7 +317877,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/instacart.trendingResponseDoc" } }, "400": { @@ -287916,36 +317886,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Gulf News section headlines", - "tags": [ - "Gulf News" - ] - } - }, - "/gulfnews/news": { - "get": { - "description": "Returns fresh Gulf News stories from the public site-wide RSS feed.", - "operationId": "gulfnews-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "500": { + "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -287960,59 +317910,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gulf News top stories", - "tags": [ - "Gulf News" - ] - } - }, - "/gulfnews/sections": { - "get": { - "description": "Returns the public Gulf News editorial section inventory.", - "operationId": "gulfnews-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Gulf News sections", + "summary": "Get Instacart trending search terms near a postal code", "tags": [ - "Gulf News" + "Instacart" ] } }, - "/gymshark/collections": { + "/instagram/post/{id}/{post_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "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": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "description": "Instagram user ID retained for route compatibility; ownership is not verified", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1067259270" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "description": "Instagram URL shortcode (media.code), not a numeric media ID", + "in": "path", + "name": "post_id", + "required": true, + "type": "string", + "x-example": "DNBxHTZRigP" } ], "produces": [ @@ -288020,25 +317946,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped media item payload", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$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" } @@ -288049,41 +317981,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark collections", + "summary": "Retrieve a specific Instagram post by URL shortcode", "tags": [ - "Gymshark" + "Instagram" ] } }, - "/gymshark/collections/{handle}/products": { + "/instagram/profile/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 public profile details for a specified Instagram username.", + "operationId": "instagram-profile", "parameters": [ { - "description": "Collection handle", + "description": "Instagram username", "in": "path", - "name": "handle", + "name": "username", "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": "google" } ], "produces": [ @@ -288091,31 +318009,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile payload", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/instagram.profileResponseDoc" } }, "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" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -288126,33 +318044,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark collection products", + "summary": "Retrieve an Instagram user profile by username", "tags": [ - "Gymshark" + "Instagram" ] } }, - "/gymshark/pages": { + "/instagram/reels/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Gymshark (https://row.gymshark.com). The storefront URL is fixed server-side.", - "operationId": "gymshark-pages", + "description": "Returns a feed of Instagram Reels for the specified user ID. Supports pagination via `max_id`.", + "operationId": "instagram-reels", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "description": "Numeric Instagram user ID (not a username)", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "45374573700" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Pagination cursor for fetching the next page of Reels", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "max_id", + "type": "string" } ], "produces": [ @@ -288160,25 +318078,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped Reels feed payload", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$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" } @@ -288189,27 +318119,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark static pages", + "summary": "Retrieve Instagram Reels for a user", "tags": [ - "Gymshark" + "Instagram" ] } }, - "/gymshark/pages/{handle}": { + "/investopedia/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized static page detail for one Gymshark (https://row.gymshark.com) page handle. The storefront URL is fixed server-side.", - "operationId": "gymshark-page", + "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": "Page handle", - "in": "path", - "name": "handle", + "description": "Canonical Investopedia article, term, or explainer URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "https://www.investopedia.com/terms/c/compoundinterest.asp" } ], "produces": [ @@ -288219,7 +318146,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -288234,12 +318161,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -288252,33 +318173,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gymshark static page", + "summary": "Get Investopedia article content", "tags": [ - "Gymshark" + "Investopedia" ] } }, - "/gymshark/products": { + "/investopedia/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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": "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": "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 Investopedia author URL (/- or /contributors//)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.investopedia.com/diccon-hyatt-7100294" } ], "produces": [ @@ -288288,7 +318200,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/publicnews.investopediaAuthorResponseDoc" } }, "400": { @@ -288297,8 +318209,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -288315,27 +318227,69 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark products", + "summary": "Get an Investopedia author or expert profile", "tags": [ - "Gymshark" + "Investopedia" ] } }, - "/gymshark/products/{handle}": { + "/investopedia/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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 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": "Product handle", - "in": "path", - "name": "handle", + "description": "Investopedia section slug, from GET /investopedia/sections", + "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" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "news" } ], "produces": [ @@ -288345,7 +318299,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -288360,12 +318314,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -288378,47 +318326,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gymshark product", + "summary": "Get Investopedia section headlines", "tags": [ - "Gymshark" + "Investopedia" ] } }, - "/gymshark/products/{handle}/recommendations": { + "/investopedia/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized recommended products for one Gymshark (https://row.gymshark.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "gymshark-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" - } - ], + "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" ], @@ -288426,19 +318343,7 @@ "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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -288459,44 +318364,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark product recommendations", + "summary": "Get Investopedia latest news", "tags": [ - "Gymshark" + "Investopedia" ] } }, - "/gymshark/sitemap/urls": { + "/investopedia/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns capped URL entries from Gymshark's (https://row.gymshark.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "gymshark-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 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" ], @@ -288504,25 +318381,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" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -288531,19 +318390,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark sitemap URLs", + "summary": "Get Investopedia sections", "tags": [ - "Gymshark" + "Investopedia" ] } }, - "/gymshark/sitemaps": { + "/iol/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public IOL article metadata and body paragraphs from a canonical article URL.", + "operationId": "iol-article", + "parameters": [ + { + "description": "Canonical IOL article URL", + "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/" + } ], - "description": "Returns child sitemap URLs from Gymshark's (https://row.gymshark.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "gymshark-sitemaps", "produces": [ "application/json" ], @@ -288551,7 +318417,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -288560,8 +318426,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -288578,19 +318444,32 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark sitemaps", + "summary": "Get IOL article content", "tags": [ - "Gymshark" + "IOL" ] } }, - "/gymshark/store": { + "/iol/author": { "get": { - "consumes": [ - "application/json" + "description": "Returns one IOL author's public profile: name, role, photo, and the recent articles listed on their page.", + "operationId": "iol-author", + "parameters": [ + { + "description": "Author slug, e.g. xolile-mtembu", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "xolile-mtembu" + }, + { + "description": "Canonical iol.co.za/authors// URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://iol.co.za/authors/xolile-mtembu/" + } ], - "description": "Returns normalized storefront metadata for Gymshark (https://row.gymshark.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "gymshark-store", "produces": [ "application/json" ], @@ -288598,7 +318477,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/publicnews.iolAuthorResponseDoc" } }, "400": { @@ -288607,8 +318486,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -288625,24 +318504,149 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gymshark store metadata", + "summary": "Get an IOL author profile", "tags": [ - "Gymshark" + "IOL" ] } }, - "/hbr/article": { + "/iol/headlines": { "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", + "description": "Returns fresh headlines from one public IOL section feed.", + "operationId": "iol-headlines", "parameters": [ { - "description": "Canonical hbr.org article URL", + "description": "IOL section path", + "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" + ], "in": "query", - "name": "url", + "name": "section", "required": true, "type": "string", - "x-example": "https://hbr.org/2026/09/is-your-strategic-plan-too-ambitious-or-not-ambitious-enough" + "x-example": "news" } ], "produces": [ @@ -288652,7 +318656,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hbr.articleResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -288661,18 +318665,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": { @@ -288685,16 +318677,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Harvard Business Review article content", + "summary": "Get IOL section headlines", "tags": [ - "Harvard Business Review" + "IOL" ] } }, - "/hbr/categories": { + "/iol/news": { "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", + "description": "Returns fresh IOL (Independent Online, South Africa) stories from the public news feed.", + "operationId": "iol-news", "produces": [ "application/json" ], @@ -288702,13 +318694,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hbr.categoriesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -288723,16 +318709,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Harvard Business Review topic taxonomy", + "summary": "Get IOL top stories", "tags": [ - "Harvard Business Review" + "IOL" ] } }, - "/hbr/headlines": { + "/iol/sections": { "get": { - "description": "Returns fresh entries from Harvard Business Review's public, site-wide \"The Latest\" content stream.", - "operationId": "hbr-headlines", + "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" ], @@ -288740,19 +318726,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hbr.headlinesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -288761,24 +318735,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Harvard Business Review latest headlines", + "summary": "Get IOL sections", "tags": [ - "Harvard Business Review" + "IOL" ] } }, - "/hbr/topic": { + "/irishindependent/article": { "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", + "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": "Harvard Business Review topic slug", + "description": "Canonical Irish Independent article URL", "in": "query", - "name": "topic", + "name": "url", "required": true, "type": "string", - "x-example": "subject/strategy" + "x-example": "https://www.independent.ie/sport/golf/dream-start-for-defending-champion-michael-kim-at-open-de-france/a/162124102.html" } ], "produces": [ @@ -288788,7 +318762,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hbr.topicResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -288803,12 +318777,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -288821,65 +318789,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Harvard Business Review topic archive", + "summary": "Get Irish Independent article content", "tags": [ - "Harvard Business Review" + "Irish Independent" ] } }, - "/hermes/categories": { + "/irishindependent/author": { "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", + "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": [ { - "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": "Canonical Irish Independent author URL", "in": "query", - "name": "locale", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.independent.ie/authors/139084244-brian-keogh/" } ], "produces": [ @@ -288889,7 +318816,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.irishindependentAuthorResponseDoc" } }, "400": { @@ -288898,8 +318825,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -288916,93 +318843,154 @@ "ApiKeyAuth": [] } ], - "summary": "List Hermès category codes", + "summary": "Get an Irish Independent author profile", "tags": [ - "Hermes" + "Irish Independent" ] } }, - "/hermes/category": { + "/irishindependent/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Browses one Hermès product category and returns a page of normalized 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": "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": "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", - "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", + "description": "Irish Independent section slug", "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" + "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": "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" + "name": "section", + "required": true, + "type": "string", + "x-example": "home" } ], "produces": [ @@ -289012,7 +319000,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.categoryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -289021,12 +319009,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -289039,75 +319021,16 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Hermès category", + "summary": "Get Irish Independent section headlines", "tags": [ - "Hermes" + "Irish Independent" ] } }, - "/hermes/product": { + "/irishindependent/news": { "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", - "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" - } - ], + "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" ], @@ -289115,25 +319038,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -289148,75 +319053,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Hermès product", + "summary": "Get Irish Independent top stories", "tags": [ - "Hermes" + "Irish Independent" ] } }, - "/hermes/product/recommendations": { + "/irishindependent/sections": { "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 normalized 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" - } - ], + "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" ], @@ -289224,31 +319070,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -289257,89 +319079,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Hermès product's recommended items", + "summary": "Get Irish Independent sections", "tags": [ - "Hermes" + "Irish Independent" ] } }, - "/hermes/products": { + "/irishtimes/article": { "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 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": [ { - "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", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 100, - "description": "Results per page, 1-500", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Return only products last modified on or after this YYYY-MM-DD date", + "description": "Canonical Irish Times article URL", "in": "query", - "name": "changed_since", + "name": "url", + "required": true, "type": "string", - "x-example": "2026-09-01" + "x-example": "https://www.irishtimes.com/technology/2026/09/24/example-article-slug/" } ], "produces": [ @@ -289349,7 +319106,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.productsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -289358,8 +319115,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -289376,81 +319139,24 @@ "ApiKeyAuth": [] } ], - "summary": "List the Hermès catalogue index", + "summary": "Get Irish Times article content", "tags": [ - "Hermes" + "Irish Times" ] } }, - "/hermes/search": { + "/irishtimes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches the Hermès catalogue by keyword and returns a page of normalized 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 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": "Search keyword", + "description": "Canonical Irish Times author URL", "in": "query", - "name": "query", + "name": "url", "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": "https://www.irishtimes.com/author/jane-doe/" } ], "produces": [ @@ -289460,7 +319166,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.searchResponseDoc" + "$ref": "#/definitions/publicnews.irishtimesAuthorResponseDoc" } }, "400": { @@ -289469,8 +319175,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -289487,79 +319193,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Hermès catalogue", + "summary": "Get an Irish Times author profile", "tags": [ - "Hermes" + "Irish Times" ] } }, - "/hermes/stores": { + "/irishtimes/headlines": { "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": "Returns fresh headlines from one public Irish Times section.", + "operationId": "irishtimes-headlines", "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", + "description": "Irish Times section slug", "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" + "ireland", + "opinion", + "politics", + "business", + "your-money", + "world", + "sport", + "life-style", + "health", + "technology", + "culture", + "property", + "food", + "motors", + "history", + "abroad" ], "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", + "name": "section", + "required": true, "type": "string", - "x-example": "Paris" + "x-example": "ireland" } ], "produces": [ @@ -289569,7 +319238,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.storesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -289578,12 +319247,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -289596,74 +319259,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Hermès stores", + "summary": "Get Irish Times section headlines", "tags": [ - "Hermes" + "Irish Times" ] } }, - "/hermes/suggest": { + "/irishtimes/news": { "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", - "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" - } - ], + "description": "Returns fresh Irish Times top stories from its public Irish news feed.", + "operationId": "irishtimes-news", "produces": [ "application/json" ], @@ -289671,13 +319276,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.suggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -289698,24 +319297,50 @@ "ApiKeyAuth": [] } ], - "summary": "Hermès search suggestions", + "summary": "Get Irish Times top stories", "tags": [ - "Hermes" + "Irish Times" ] } }, - "/hindustantimes/article": { + "/irishtimes/sections": { "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", + "description": "Returns the public Irish Times section inventory used by the headlines endpoint.", + "operationId": "irishtimes-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Irish Times sections", + "tags": [ + "Irish Times" + ] + } + }, + "/japantimes/article": { + "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", "parameters": [ { - "description": "Canonical Hindustan Times article URL", + "description": "Canonical HTTPS The Japan Times article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.hindustantimes.com/india-news/example-article-slug-101790241314039.html" + "x-example": "https://www.japantimes.co.jp/news/2026/09/28/japan/explainer/etc-explainer/" } ], "produces": [ @@ -289734,12 +319359,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -289758,24 +319377,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hindustan Times article content", + "summary": "Get a The Japan Times article", "tags": [ - "Hindustan Times" + "The Japan Times" ] } }, - "/hindustantimes/author": { + "/japantimes/author": { "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", + "description": "Returns a public author name and linked article cards. Pagination paths are excluded because robots.txt disallows */page/*.", + "operationId": "japantimes-author", "parameters": [ { - "description": "Canonical Hindustan Times author URL", + "description": "Canonical HTTPS /author/// profile URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.hindustantimes.com/author/ht-news-desk-101650005059496" + "x-example": "https://www.japantimes.co.jp/author/162/kanako-takahara/" } ], "produces": [ @@ -289785,7 +319404,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.hindustanTimesAuthorResponseDoc" + "$ref": "#/definitions/publicnews.japantimesAuthorResponseDoc" } }, "400": { @@ -289812,49 +319431,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Hindustan Times author profile", + "summary": "Get a The Japan Times author profile", "tags": [ - "Hindustan Times" + "The Japan Times" ] } }, - "/hindustantimes/headlines": { + "/japantimes/headlines": { "get": { - "description": "Returns fresh headlines from one public Hindustan Times section.", - "operationId": "hindustantimes-headlines", + "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": "Hindustan Times section slug", + "description": "Canonical section slug from japantimes-sections", "enum": [ - "india-news", - "world-news", - "cities", + "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", - "cricket", - "entertainment", - "lifestyle", - "astrology", - "education", - "technology", + "sports-sumo", + "sports-soccer", + "sports-baseball", + "sports-basketball", + "sports-tennis", + "sports-olympics", + "sports-more-sports", "opinion", - "science", - "books", - "real-estate", - "car-bike", - "nri", - "htcity", - "ht-insight", - "ht-explainers", - "editorials", - "trending", - "india-and-the-elections", - "editors-pick" + "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", "required": true, - "type": "string" + "type": "string", + "x-example": "news-japan" } ], "produces": [ @@ -289885,16 +319541,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hindustan Times section headlines", + "summary": "Get The Japan Times section headlines", "tags": [ - "Hindustan Times" + "The Japan Times" ] } }, - "/hindustantimes/news": { + "/japantimes/news": { "get": { - "description": "Returns fresh Hindustan Times top stories from its public \"Latest News\" feed.", - "operationId": "hindustantimes-news", + "description": "Returns current top stories from the public RSS feed. RSS descriptions are short publisher-provided teasers.", + "operationId": "japantimes-news", "produces": [ "application/json" ], @@ -289905,12 +319561,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -289923,16 +319573,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hindustan Times top stories", + "summary": "Get The Japan Times top stories", "tags": [ - "Hindustan Times" + "The Japan Times" ] } }, - "/hindustantimes/sections": { + "/japantimes/sections": { "get": { - "description": "Returns the public Hindustan Times section inventory used by the headlines endpoint.", - "operationId": "hindustantimes-sections", + "description": "Returns the complete 60-link editorial navigation inventory used by japantimes-headlines.", + "operationId": "japantimes-sections", "produces": [ "application/json" ], @@ -289949,32 +319599,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hindustan Times sections", + "summary": "Get The Japan Times sections", "tags": [ - "Hindustan Times" + "The Japan Times" ] } }, - "/hm/categories": { + "/jcrew/categories": { "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 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": "Filter to one storefront department", + "default": "jcrew", + "description": "Storefront to list", "enum": [ - "women", - "men", - "kids", - "home", - "beauty" + "jcrew", + "factory" ], "in": "query", - "name": "department", + "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": "women" } ], "produces": [ @@ -289984,7 +319639,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.categoriesResponseDoc" + "$ref": "#/definitions/jcrew.categoriesResponseDoc" } }, "400": { @@ -290011,59 +319666,47 @@ "ApiKeyAuth": [] } ], - "summary": "Browse H&M's storefront category navigation", + "summary": "List J.Crew or J.Crew Factory categories", "tags": [ - "H&M" + "J.Crew" ] } }, - "/hm/listing": { + "/jcrew/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns one H&M category's product listing page: normalized products with pricing, images, colors, and per-size stock, sourced from H&M's own app-backend listing data. category_id is an H&M category slug (e.g. ladies_newarrivals_all, men_newarrivals_all, ladies_jeans) -- this build does not expose a category/nav-tree discovery endpoint, so category_id values are currently sourced 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 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": "H&M category slug", + "description": "Slash-separated category path -- see jcrew-categories", "in": "query", - "name": "category_id", + "name": "category", "required": true, "type": "string", - "x-example": "ladies_newarrivals_all" - }, - { - "description": "Page number, one-based, defaults to 1", - "in": "query", - "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 + "x-example": "womens/categories/clothing/sweaters" }, { - "description": "Sort order, defaults to RELEVANCE", + "default": "jcrew", + "description": "Storefront to browse", "enum": [ - "RELEVANCE", - "NEWEST_FIRST", - "PRICE_ASCENDING", - "PRICE_DESCENDING" + "jcrew", + "factory" ], "in": "query", - "name": "sort", + "name": "site", "type": "string" }, { - "description": "Optional filter for newly added items only", + "default": 1, + "description": "One-based page", "in": "query", - "name": "is_new", - "type": "boolean" + "maximum": 50, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -290073,7 +319716,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.listingResponseDoc" + "$ref": "#/definitions/jcrew.categoryResponseDoc" } }, "400": { @@ -290082,6 +319725,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -290100,27 +319749,38 @@ "ApiKeyAuth": [] } ], - "summary": "Browse an H&M category's product listing", + "summary": "Browse a J.Crew or J.Crew Factory category", "tags": [ - "H&M" + "J.Crew" ] } }, - "/hm/product/{product_id}": { + "/jcrew/product": { "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 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": "Numeric H&M product id, from a listing/search result's id field", - "in": "path", - "name": "product_id", + "description": "Style id, from a search result's id field", + "in": "query", + "name": "pid", "required": true, "type": "string", - "x-example": "1268470004" + "x-example": "CX415" + }, + { + "default": "jcrew", + "description": "Storefront the pid belongs to", + "enum": [ + "jcrew", + "factory" + ], + "in": "query", + "name": "site", + "type": "string" } ], "produces": [ @@ -290130,7 +319790,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.productDetailResponseDoc" + "$ref": "#/definitions/jcrew.productResponseDoc" } }, "400": { @@ -290163,27 +319823,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get an H&M product's full detail", + "summary": "Get a J.Crew or J.Crew Factory product", "tags": [ - "H&M" + "J.Crew" ] } }, - "/hm/product/{product_id}/related": { + "/jcrew/product/reviews": { "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 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": "Numeric H&M product id, from a listing/search result's id field", - "in": "path", - "name": "product_id", + "description": "Style id, from a search result's id field", + "in": "query", + "name": "pid", "required": true, "type": "string", - "x-example": "1268470004" + "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" } ], "produces": [ @@ -290193,7 +319873,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.relatedResponseDoc" + "$ref": "#/definitions/jcrew.productReviewsResponseDoc" } }, "400": { @@ -290220,41 +319900,75 @@ "ApiKeyAuth": [] } ], - "summary": "Get an H&M product's related items", + "summary": "Get reviews for a J.Crew or J.Crew Factory product", "tags": [ - "H&M" + "J.Crew" ] } }, - "/hm/search": { + "/jcrew/search": { "get": { "consumes": [ "application/json" ], - "description": "Runs a free-text keyword search against H&M's own app-backend search data and returns normalized 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": "Searches the product catalog for either storefront (select with site, default jcrew). Returns normalized 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 upstream 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": "Free-text search keyword", + "description": "Search keyword", "in": "query", - "name": "query", + "name": "keyword", "required": true, "type": "string", - "x-example": "jeans" + "x-example": "sweater" }, { - "description": "Page number, one-based, defaults to 1", + "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", - "x-example": 1 + "type": "integer" }, { - "description": "Results per page, 1 to 72, defaults to 36", + "default": 24, + "description": "Results per page", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 36 + "maximum": 100, + "minimum": 1, + "name": "per_page", + "type": "integer" + }, + { + "default": "relevance", + "description": "Sort order", + "enum": [ + "relevance", + "price_asc", + "price_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Comma-separated facet name:value pairs, e.g. productGender:Men,styleFabric:Cashmere", + "in": "query", + "name": "filter", + "type": "string", + "x-example": "productGender:Men" } ], "produces": [ @@ -290264,7 +319978,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.searchResponseDoc" + "$ref": "#/definitions/jcrew.searchResponseDoc" } }, "400": { @@ -290291,26 +320005,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search H&M product listings by free-text keyword", + "summary": "Search J.Crew or J.Crew Factory products", "tags": [ - "H&M" + "J.Crew" ] } }, - "/hm/search/suggestions": { + "/jcrew/size-chart": { "get": { "consumes": [ "application/json" ], - "description": "Returns H&M's own search-box typeahead suggestions, sourced from the same credential-free app-backend host as hm-listing/hm-search. 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 part of the real upstream response but confirmed NOT session-scoped -- it returned the identical list across separate cookie-free requests, so treat it as fixed default content rather than a real per-caller history.", - "operationId": "hm-search-suggestions", + "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": "Free-text search-box input; omit or leave empty for trending/popular searches instead", + "description": "Style id, from a search result's id field", "in": "query", - "name": "query", + "name": "pid", + "required": true, "type": "string", - "x-example": "jean" + "x-example": "CX415" + }, + { + "default": "jcrew", + "description": "Storefront the pid belongs to", + "enum": [ + "jcrew", + "factory" + ], + "in": "query", + "name": "site", + "type": "string" } ], "produces": [ @@ -290320,7 +320046,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.suggestResponseDoc" + "$ref": "#/definitions/jcrew.sizeChartResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -290341,47 +320079,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get H&M search-box suggestions", + "summary": "Get the size chart for a J.Crew or J.Crew Factory product", "tags": [ - "H&M" + "J.Crew" ] } }, - "/hm/stores": { + "/jcrew/stores": { "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": "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": "Free-text zip code or place name to resolve to coordinates", + "default": "jcrew", + "description": "Storefront whose stores to return", + "enum": [ + "jcrew", + "factory" + ], "in": "query", - "name": "search", - "type": "string", - "x-example": "10001" + "name": "site", + "type": "string" }, { - "description": "Latitude, requires lng", + "description": "Latitude to sort distance from (must be given together with lng)", "in": "query", "name": "lat", "type": "number", "x-example": 40.7128 }, { - "description": "Longitude, requires lat", + "description": "Longitude to sort distance from (must be given together with 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": [ @@ -290391,7 +320126,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.storesResponseDoc" + "$ref": "#/definitions/jcrew.storesResponseDoc" } }, "400": { @@ -290418,24 +320153,38 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby H&M physical stores", + "summary": "Find J.Crew or J.Crew Factory store locations", "tags": [ - "H&M" + "J.Crew" ] } }, - "/hollywoodreporter/article": { + "/jcrew/suggest": { "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": "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": "Canonical Hollywood Reporter article URL", + "description": "Partial search query", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://www.hollywoodreporter.com/movies/movie-news/example-story-1236709066/" + "x-example": "dress" + }, + { + "default": "jcrew", + "description": "Storefront to search", + "enum": [ + "jcrew", + "factory" + ], + "in": "query", + "name": "site", + "type": "string" } ], "produces": [ @@ -290445,7 +320194,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/jcrew.suggestResponseDoc" } }, "400": { @@ -290454,8 +320203,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -290472,31 +320221,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hollywood Reporter article content", + "summary": "Get J.Crew or J.Crew Factory search-box suggestions", "tags": [ - "Hollywood Reporter" + "J.Crew" ] } }, - "/hollywoodreporter/author": { + "/jerusalempost/article": { "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", + "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 hollywoodreporter.com/author/ URL", + "description": "Canonical Jerusalem Post article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.hollywoodreporter.com/author/borys-kit/" - }, - { - "description": "1-based page of recent articles to return; defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://www.jpost.com/middle-east/article-909945" } ], "produces": [ @@ -290506,7 +320248,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.hollywoodReporterAuthorResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -290533,62 +320275,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Hollywood Reporter author profile", + "summary": "Get Jerusalem Post article content", "tags": [ - "Hollywood Reporter" + "Jerusalem Post" ] } }, - "/hollywoodreporter/headlines": { + "/jerusalempost/author": { "get": { - "description": "Returns fresh headlines from one public The Hollywood Reporter section or editorial-vertical feed.", - "operationId": "hollywoodreporter-headlines", + "description": "Returns a public author or blogger profile and article cards from its first-party profile page.", + "operationId": "jerusalempost-author", "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": "Canonical Jerusalem Post /author/ or /blogger/ profile URL", "in": "query", - "name": "section", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.jpost.com/author/cameron-s-brown" } ], "produces": [ @@ -290598,7 +320302,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.jerusalemPostAuthorResponseDoc" } }, "400": { @@ -290607,6 +320311,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -290619,16 +320329,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hollywood Reporter section headlines", + "summary": "Get Jerusalem Post author profile", "tags": [ - "Hollywood Reporter" + "Jerusalem Post" ] } }, - "/hollywoodreporter/news": { + "/jerusalempost/authors": { "get": { - "description": "Returns fresh The Hollywood Reporter entertainment-industry top stories from its public RSS feed.", - "operationId": "hollywoodreporter-news", + "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" ], @@ -290636,13 +320346,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.jerusalemPostAuthorsResponseDoc" } }, "503": { @@ -290657,16 +320361,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hollywood Reporter top stories", + "summary": "List Jerusalem Post author profiles", "tags": [ - "Hollywood Reporter" + "Jerusalem Post" ] } }, - "/hollywoodreporter/sections": { + "/jerusalempost/headlines": { "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", + "description": "Returns fresh non-premium stories from one public Jerusalem Post RSS section. Premium feed snippets are omitted.", + "operationId": "jerusalempost-headlines", + "parameters": [ + { + "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": "section", + "required": true, + "type": "string", + "x-example": "aliyah" + } + ], "produces": [ "application/json" ], @@ -290674,7 +320430,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -290683,19 +320451,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hollywood Reporter sections", + "summary": "Get Jerusalem Post section headlines", "tags": [ - "Hollywood Reporter" + "Jerusalem Post" ] } }, - "/homedepot/categories": { + "/jerusalempost/news": { "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", + "description": "Returns fresh non-premium Jerusalem Post stories from its public front-page RSS feed. Premium feed snippets are omitted.", + "operationId": "jerusalempost-news", "produces": [ "application/json" ], @@ -290703,13 +320468,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.categoriesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -290724,52 +320483,16 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot department taxonomy", + "summary": "Get Jerusalem Post top stories", "tags": [ - "Home Depot" + "Jerusalem Post" ] } }, - "/homedepot/category": { + "/jerusalempost/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a Home Depot category or brand browse page's product grid: normalized 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": "Home Depot category/brand browse path, e.g. \\", - "in": "query", - "name": "path", - "required": true, - "type": "string", - "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 - } - ], + "description": "Returns the live-verified public RSS sections accepted by jerusalempost-headlines.", + "operationId": "jerusalempost-sections", "produces": [ "application/json" ], @@ -290777,31 +320500,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -290810,27 +320509,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Home Depot category or brand page", + "summary": "Get Jerusalem Post section inventory", "tags": [ - "Home Depot" + "Jerusalem Post" ] } }, - "/homedepot/product/{id}": { + "/jimmy-johns/menu": { "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 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": "Home Depot product/internet id, e.g. 320326875", - "in": "path", - "name": "id", + "description": "Olo restaurant id from /jimmy-johns/nearby", + "in": "query", + "name": "restaurant_id", "required": true, - "type": "string", - "x-example": "320326875" + "type": "integer", + "x-example": 67182 } ], "produces": [ @@ -290840,7 +320539,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.productResponseDoc" + "$ref": "#/definitions/jimmyjohns.menuResponseDoc" } }, "400": { @@ -290873,27 +320572,27 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot product detail", + "summary": "Get one Jimmy John's restaurant's full menu", "tags": [ - "Home Depot" + "JimmyJohns" ] } }, - "/homedepot/product/{id}/questions": { + "/jimmy-johns/modifiers": { "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 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": "Home Depot product/internet id, e.g. 328425526", - "in": "path", - "name": "id", + "description": "Product id from a /jimmy-johns/menu product", + "in": "query", + "name": "product_id", "required": true, - "type": "string", - "x-example": "328425526" + "type": "integer", + "x-example": 33276056 } ], "produces": [ @@ -290903,7 +320602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.productQuestionsResponseDoc" + "$ref": "#/definitions/jimmyjohns.modifiersResponseDoc" } }, "400": { @@ -290912,6 +320611,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -290930,34 +320635,49 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot product questions and answers", + "summary": "Get one Jimmy John's menu product's customization options", "tags": [ - "Home Depot" + "JimmyJohns" ] } }, - "/homedepot/search": { + "/jimmy-johns/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (up to 12 products) of a Home Depot keyword search's product listing: normalized products with title, image, model, current/original price, and rating/review count, plus the search's total result count. 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": "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": "Free-text search keywords, e.g. \\", + "description": "Search center latitude", "in": "query", - "name": "q", + "name": "latitude", "required": true, - "type": "string", - "x-example": "impact driver" + "type": "number", + "x-example": 39.9612 }, { - "description": "1-indexed page number, default 1", + "description": "Search center longitude", "in": "query", - "name": "page", + "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": 1 + "x-example": 15 + }, + { + "description": "Maximum restaurants to return, 1-50 (default 10)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -290967,7 +320687,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.searchResponseDoc" + "$ref": "#/definitions/jimmyjohns.nearbyResponseDoc" } }, "400": { @@ -290994,81 +320714,52 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot keyword search", + "summary": "Find Jimmy John's restaurants near a coordinate", "tags": [ - "Home Depot" + "JimmyJohns" ] } }, - "/homedepot/suggest": { + "/jimmy-johns/sitemap": { "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 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": "Partial search text, e.g. \\", + "description": "Sitemap shard index (default 0)", "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "drill" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/homedepot.suggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "shard", + "type": "integer", + "x-example": 0 }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "1-based page within the shard (default 1)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Home Depot search suggestions", - "tags": [ - "Home Depot" - ] - } - }, - "/hotels/autocomplete": { - "get": { - "description": "Returns anonymous Hotels.com search-box suggestions for a partial destination or property name. Availability and prices are not included.", - "operationId": "hotels-autocomplete", - "parameters": [ + "description": "Entries per page, 1-500 (default 100)", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 100 + }, { - "description": "Partial destination or property name", + "description": "Filter by page variant. One of sandwiches, delivery, catering. Default all.", + "enum": [ + "sandwiches", + "delivery", + "catering" + ], "in": "query", - "name": "q", - "required": true, + "name": "kind", "type": "string", - "x-example": "New York" + "x-example": "sandwiches" } ], "produces": [ @@ -291078,7 +320769,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.autocompleteResponseDoc" + "$ref": "#/definitions/jimmyjohns.sitemapResponseDoc" } }, "400": { @@ -291087,14 +320778,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" } @@ -291111,28 +320802,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com destination suggestions", + "summary": "Browse Jimmy John's store-URL index", "tags": [ - "Hotels.com" + "JimmyJohns" ] } }, - "/hotels/offers": { - "post": { + "/jimmy-johns/store": { + "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 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": "Room offers request", - "in": "body", - "name": "request", + "description": "Store path from a /jimmy-johns/sitemap entry", + "in": "query", + "name": "path", "required": true, - "schema": { - "$ref": "#/definitions/hotels.OffersOption" - } + "type": "string", + "x-example": "in/columbus/sandwiches-1414.html" } ], "produces": [ @@ -291142,7 +320832,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.offersResponseDoc" + "$ref": "#/definitions/jimmyjohns.storeResponseDoc" } }, "400": { @@ -291163,12 +320853,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -291181,28 +320865,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com room offers", + "summary": "Get one Jimmy John's store's detail", "tags": [ - "Hotels.com" + "JimmyJohns" ] } }, - "/hotels/property": { - "post": { + "/jobs/ashby/board": { + "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 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). Credential-free public ATS JSON.", + "operationId": "jobs-ashby-board", "parameters": [ { - "description": "Canonical Hotels.com property URL", - "in": "body", - "name": "request", + "description": "Ashby org slug (careers URL)", + "in": "query", + "name": "org", "required": true, - "schema": { - "$ref": "#/definitions/hotels.PropertyOption" - } + "type": "string", + "x-example": "openai" + }, + { + "description": "Include compensation summary", + "in": "query", + "name": "include_compensation", + "type": "boolean" } ], "produces": [ @@ -291212,7 +320901,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.propertyResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -291221,18 +320910,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": { @@ -291245,28 +320922,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com property details", + "summary": "List an organization's Ashby job board", "tags": [ - "Hotels.com" + "Jobs" ] } }, - "/hotels/rates": { - "post": { + "/jobs/company-search": { + "get": { "consumes": [ "application/json" ], - "description": "Returns one Hotels.com property's date-bound rates and availability: the same normalized 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": "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). Credential-free public ATS JSON.", + "operationId": "jobs-company-search", "parameters": [ { - "description": "Rates request", - "in": "body", - "name": "request", + "description": "Company careers slug to probe", + "in": "query", + "name": "slug", "required": true, - "schema": { - "$ref": "#/definitions/hotels.RatesOption" - } + "type": "string", + "x-example": "stripe" } ], "produces": [ @@ -291274,31 +320950,13 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/hotels.ratesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/jobs.searchResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -291315,28 +320973,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com rates for one property", + "summary": "Find which ATS a company uses by slug", "tags": [ - "Hotels.com" + "Jobs" ] } }, - "/hotels/reviews": { - "post": { + "/jobs/eightfold/board": { + "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", + "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. Tries the newer PCSX search first, falling back to the legacy SmartApply generation when PCSX is not enabled for the tenant. Credential-free public ATS JSON.", + "operationId": "jobs-eightfold-board", "parameters": [ { - "description": "Reviews request", - "in": "body", - "name": "request", + "description": "Eightfold tenant subdomain (careers URL)", + "in": "query", + "name": "tenant", "required": true, - "schema": { - "$ref": "#/definitions/hotels.ReviewsOption" - } + "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": "Page size, default 10, max 10 (upstream caps results per page regardless of a larger value)", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Page offset, default 0", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -291346,7 +321035,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.reviewsResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -291355,24 +321044,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": { @@ -291385,28 +321056,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com guest reviews", + "summary": "List an Eightfold tenant's job board", "tags": [ - "Hotels.com" + "Jobs" ] } }, - "/hotels/reviews/archive": { - "post": { + "/jobs/eightfold/job": { + "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", + "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. Tries the newer PCSX detail first, falling back to the legacy SmartApply detail generation. Credential-free public ATS JSON.", + "operationId": "jobs-eightfold-job", "parameters": [ { - "description": "Review archive request", - "in": "body", - "name": "request", + "description": "Eightfold tenant subdomain", + "in": "query", + "name": "tenant", "required": true, - "schema": { - "$ref": "#/definitions/hotels.ReviewsArchiveOption" - } + "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" } ], "produces": [ @@ -291416,7 +321102,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.reviewsArchiveResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -291431,18 +321117,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": { @@ -291455,28 +321129,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Hotels.com guest reviews", + "summary": "Get a single Eightfold position", "tags": [ - "Hotels.com" + "Jobs" ] } }, - "/hotels/search": { - "post": { + "/jobs/gem/board": { + "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: normalized 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", + "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. Credential-free public GraphQL.", + "operationId": "jobs-gem-board", "parameters": [ { - "description": "Search request", - "in": "body", - "name": "request", + "description": "Gem vanity URL slug (careers URL)", + "in": "query", + "name": "company", "required": true, - "schema": { - "$ref": "#/definitions/hotels.SearchOption" - } + "type": "string", + "x-example": "agora" } ], "produces": [ @@ -291486,7 +321159,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.searchResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -291501,18 +321174,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": { @@ -291525,16 +321186,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search Hotels.com hotels", + "summary": "List a company's Gem job board", "tags": [ - "Hotels.com" + "Jobs" ] } }, - "/howtogeek/news": { + "/jobs/greenhouse/board": { "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", + "consumes": [ + "application/json" + ], + "description": "Lists a company's public Greenhouse board postings, normalized to 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. Credential-free public ATS JSON.", + "operationId": "jobs-greenhouse-board", + "parameters": [ + { + "description": "Greenhouse board token (careers URL slug)", + "in": "query", + "name": "token", + "required": true, + "type": "string", + "x-example": "stripe" + }, + { + "description": "Include full HTML description per job", + "in": "query", + "name": "content", + "type": "boolean" + } + ], "produces": [ "application/json" ], @@ -291542,11 +321222,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$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" } @@ -291563,24 +321249,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get How-To Geek top stories", + "summary": "List a company's Greenhouse job board", "tags": [ - "How-To Geek" + "Jobs" ] } }, - "/huffpost/article": { + "/jobs/greenhouse/job": { "get": { - "description": "Returns public HuffPost article metadata and body paragraphs from a canonical article URL.", - "operationId": "huffpost-article", + "consumes": [ + "application/json" + ], + "description": "Returns a single Greenhouse job with its full HTML/text description, department, and offices. Credential-free public ATS JSON.", + "operationId": "jobs-greenhouse-job", "parameters": [ { - "description": "Canonical HuffPost article URL", + "description": "Greenhouse board token", "in": "query", - "name": "url", + "name": "token", "required": true, "type": "string", - "x-example": "https://www.huffpost.com/entry/example-story_n_1234567890abcdef12345678" + "x-example": "stripe" + }, + { + "description": "Greenhouse job id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "8172508" } ], "produces": [ @@ -291590,7 +321287,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -291617,24 +321314,99 @@ "ApiKeyAuth": [] } ], - "summary": "Get HuffPost article content", + "summary": "Get a single Greenhouse job", "tags": [ - "HuffPost" + "Jobs" ] } }, - "/huffpost/author": { + "/jobs/hiring-signals": { "get": { - "description": "Returns one HuffPost author or contributor's public profile: name, job title, headshot, biography, social links, and their recent articles.", - "operationId": "huffpost-author", + "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. Credential-free public ATS JSON.", + "operationId": "jobs-hiring-signals", "parameters": [ { - "description": "Canonical huffpost.com/author/ URL", + "description": "ATS provider", + "enum": [ + "greenhouse", + "lever", + "ashby", + "workday", + "smartrecruiters", + "workable", + "recruitee", + "rippling", + "personio", + "teamtailor", + "oracle", + "ukg", + "icims", + "eightfold", + "gem", + "pinpoint" + ], "in": "query", - "name": "url", + "name": "provider", "required": true, "type": "string", - "x-example": "https://www.huffpost.com/author/lee-moran" + "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" + }, + { + "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" } ], "produces": [ @@ -291644,7 +321416,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.huffPostAuthorResponseDoc" + "$ref": "#/definitions/jobs.signalsResponseDoc" } }, "400": { @@ -291671,65 +321443,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get a HuffPost author profile", + "summary": "Aggregate hiring signals for a company's board", "tags": [ - "HuffPost" + "Jobs" ] } }, - "/huffpost/headlines": { + "/jobs/icims/board": { "get": { - "description": "Returns fresh headlines from one public HuffPost topic hub.", - "operationId": "huffpost-headlines", + "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. Credential-free public ATS JSON.", + "operationId": "jobs-icims-board", "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" - ], + "description": "iCIMS tenant careers domain (careers URL)", "in": "query", - "name": "section", + "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" + }, + { + "description": "Page size, default 20, max 50", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -291739,7 +321497,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -291760,16 +321518,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get HuffPost section headlines", + "summary": "List an iCIMS tenant's job board", "tags": [ - "HuffPost" + "Jobs" ] } }, - "/huffpost/news": { + "/jobs/icims/job": { "get": { - "description": "Returns fresh HuffPost top stories from its public homepage.", - "operationId": "huffpost-news", + "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. Credential-free public ATS JSON.", + "operationId": "jobs-icims-job", + "parameters": [ + { + "description": "iCIMS tenant careers domain", + "in": "query", + "name": "domain", + "required": true, + "type": "string", + "x-example": "careers.costco.com" + }, + { + "description": "iCIMS job req_id/slug from a board listing", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "30341" + }, + { + "description": "Language code, default en-us", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], "produces": [ "application/json" ], @@ -291777,7 +321563,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -291792,50 +321590,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get HuffPost top stories", + "summary": "Get a single iCIMS job", "tags": [ - "HuffPost" + "Jobs" ] } }, - "/huffpost/sections": { + "/jobs/lever/posting": { "get": { - "description": "Returns the live-verified public HuffPost topic-hub inventory used by the headlines endpoint.", - "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": "Returns a single Lever posting with its full HTML/text description. Credential-free public ATS JSON.", + "operationId": "jobs-lever-posting", "parameters": [ { - "description": "Canonical IGN article or review URL", + "description": "Lever company slug", "in": "query", - "name": "url", + "name": "company", "required": true, "type": "string", - "x-example": "https://www.ign.com/articles/brothers-season-1-review" + "x-example": "spotify" + }, + { + "description": "Lever posting id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "2193db3f-77c5-43b8-b030-8f92c9882bf1" } ], "produces": [ @@ -291845,7 +321628,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -291872,24 +321655,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get IGN article or review content", + "summary": "Get a single Lever posting", "tags": [ - "IGN" + "Jobs" ] } }, - "/ign/author": { + "/jobs/lever/postings": { "get": { - "description": "Returns one IGN author's public profile: name, job title, location, biography, social links, and their recent articles.", - "operationId": "ign-author", + "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. Credential-free public ATS JSON.", + "operationId": "jobs-lever-postings", "parameters": [ { - "description": "Canonical www.ign.com/person/ URL", + "description": "Lever company slug (careers URL)", "in": "query", - "name": "url", + "name": "company", "required": true, "type": "string", - "x-example": "https://www.ign.com/person/tomphillipsIGN" + "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": [ @@ -291899,7 +321703,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ignAuthorResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -291926,37 +321730,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IGN author profile", + "summary": "List a company's Lever postings", "tags": [ - "IGN" + "Jobs" ] } }, - "/ign/headlines": { + "/jobs/oracle/board": { "get": { - "description": "Returns fresh IGN headlines from one public section feed.", - "operationId": "ign-headlines", + "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. Credential-free public ATS JSON.", + "operationId": "jobs-oracle-board", "parameters": [ { - "description": "IGN section slug", - "enum": [ - "news", - "reviews", - "games", - "movies", - "tv", - "tech", - "nintendo", - "playstation", - "xbox", - "pc", - "mobile", - "comics" - ], + "description": "Oracle Cloud host (careers URL, *.oraclecloud.com)", "in": "query", - "name": "section", + "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": "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": [ @@ -291966,7 +321786,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -291987,16 +321807,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get IGN section headlines", + "summary": "List an Oracle Recruiting (ORC) tenant's job board", "tags": [ - "IGN" + "Jobs" ] } }, - "/ign/news": { + "/jobs/oracle/job": { "get": { - "description": "Returns fresh IGN top stories (gaming and entertainment news) from the public RSS feed.", - "operationId": "ign-news", + "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. Credential-free public ATS JSON.", + "operationId": "jobs-oracle-job", + "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", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "331738" + } + ], "produces": [ "application/json" ], @@ -292004,11 +321853,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -292025,57 +321880,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get IGN top stories", + "summary": "Get a single Oracle Recruiting (ORC) requisition", "tags": [ - "IGN" + "Jobs" ] } }, - "/ign/sections": { + "/jobs/personio/feed": { "get": { - "description": "Returns the public IGN section taxonomy used by the headlines endpoint.", - "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 a company's public Personio board feed (XML), normalized to 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/. Credential-free public ATS feed.", + "operationId": "jobs-personio-feed", "parameters": [ { - "description": "IKEA item number", + "description": "Personio subdomain (careers URL)", "in": "query", - "name": "item_no", + "name": "company", "required": true, "type": "string", - "x-example": "80213074" + "x-example": "getquin" }, { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Filter: department contains", "in": "query", - "name": "country", + "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": [ @@ -292085,7 +321928,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.availabilityResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -292100,12 +321943,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -292118,53 +321955,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IKEA item's real-time stock availability", + "summary": "List a company's Personio job board", "tags": [ - "IKEA" + "Jobs" ] } }, - "/ikea/categories": { + "/jobs/phenom/board": { "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": "Searches a company's public Phenom People career site (a white-labeled domain such as careers.whataburger.com or jobs.cvshealth.com — Phenom serves the search-results page as server-rendered HTML with the job data embedded inline, not a JSON API, but this is still credential-free public data with no auth, cookie, or session required). 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": "Case-insensitive substring filter on category name", + "description": "Phenom tenant careers domain (careers URL)", "in": "query", - "name": "q", + "name": "domain", + "required": true, "type": "string", - "x-example": "desk" + "x-example": "careers.whataburger.com" }, { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Free-text keyword search", "in": "query", - "name": "country", + "name": "keywords", "type": "string" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Filter: location contains", "in": "query", - "name": "language", + "name": "location", "type": "string" }, { - "default": 1, - "description": "1-based page number", + "description": "Filter: category contains", "in": "query", - "minimum": 1, - "name": "page", + "name": "category", + "type": "string" + }, + { + "description": "Sort order, default relevant", + "enum": [ + "relevant", + "recent" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page offset, default 0", + "in": "query", + "name": "offset", "type": "integer" }, { - "default": 100, - "description": "Result count per page (1-1000)", + "description": "Page size hint, default 10, max 100 (some tenants ignore this and return their own configured page size regardless)", "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page_size", + "name": "limit", "type": "integer" } ], @@ -292175,7 +322025,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.categoriesResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -292184,12 +322034,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -292202,76 +322046,35 @@ "ApiKeyAuth": [] } ], - "summary": "Discover IKEA category keys", + "summary": "Search a Phenom People tenant's job board", "tags": [ - "IKEA" + "Jobs" ] } }, - "/ikea/category": { + "/jobs/phenom/job": { "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": "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": "IKEA category key", + "description": "Phenom tenant careers domain", "in": "query", - "name": "category", + "name": "domain", "required": true, "type": "string", - "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" + "x-example": "careers.whataburger.com" }, { - "default": "relevance", - "description": "Result order", - "enum": [ - "relevance", - "price-low", - "price-high", - "newest", - "rating", - "name", - "popular", - "width", - "height", - "depth", - "length" - ], + "description": "Phenom job id from a board listing", "in": "query", - "name": "sort", - "type": "string" + "name": "id", + "required": true, + "type": "string", + "x-example": "JR10002958" } ], "produces": [ @@ -292281,7 +322084,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.categoryResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -292296,12 +322099,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -292314,38 +322111,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse an IKEA category", + "summary": "Get a single Phenom People job", "tags": [ - "IKEA" + "Jobs" ] } }, - "/ikea/product": { + "/jobs/pinpoint/board": { "get": { - "description": "Returns one IKEA item's full normalized 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": "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/. Credential-free public JSON.", + "operationId": "jobs-pinpoint-board", "parameters": [ { - "description": "IKEA item number", + "description": "Pinpoint tenant subdomain (careers URL)", "in": "query", - "name": "item_no", + "name": "company", "required": true, "type": "string", - "x-example": "80213074" - }, - { - "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" + "x-example": "workwithus" } ], "produces": [ @@ -292355,7 +322141,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.productResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -292370,12 +322156,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -292388,38 +322168,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IKEA product's detail", + "summary": "List a tenant's Pinpoint job board", "tags": [ - "IKEA" + "Jobs" ] } }, - "/ikea/reviews": { + "/jobs/recruitee/offer": { "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 a single Recruitee offer with its full HTML/text description and structured compensation when the board exposes it. Credential-free public ATS JSON.", + "operationId": "jobs-recruitee-offer", "parameters": [ { - "description": "IKEA item number", + "description": "Recruitee subdomain", "in": "query", - "name": "item_no", + "name": "company", "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": "bunq" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Recruitee offer id", "in": "query", - "name": "language", - "type": "string" + "name": "id", + "required": true, + "type": "string", + "x-example": "2679762" } ], "produces": [ @@ -292429,7 +322206,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.reviewsResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -292444,12 +322221,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -292462,47 +322233,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IKEA item's highlighted customer reviews", + "summary": "Get a single Recruitee offer", "tags": [ - "IKEA" + "Jobs" ] } }, - "/ikea/search": { + "/jobs/recruitee/offers": { "get": { - "description": "Searches IKEA products and returns normalized 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": "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/. Credential-free public ATS JSON.", + "operationId": "jobs-recruitee-offers", "parameters": [ { - "description": "Free-text product search query", + "description": "Recruitee subdomain (careers URL)", "in": "query", - "name": "q", + "name": "company", "required": true, "type": "string", - "x-example": "desk" + "x-example": "bunq" }, { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Filter: department contains", "in": "query", - "name": "country", + "name": "department", "type": "string" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Filter: location contains", "in": "query", - "name": "language", + "name": "location", "type": "string" }, { - "default": 24, - "description": "Result count (1-100)", + "description": "Filter by remote (true or false)", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "size", - "type": "integer" + "name": "remote", + "type": "boolean" } ], "produces": [ @@ -292512,7 +322281,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.searchResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -292521,8 +322290,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -292539,38 +322308,45 @@ "ApiKeyAuth": [] } ], - "summary": "Search IKEA products", + "summary": "List a company's Recruitee offers", "tags": [ - "IKEA" + "Jobs" ] } }, - "/ikea/store": { + "/jobs/rippling/board": { "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": "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. Credential-free public ATS JSON.", + "operationId": "jobs-rippling-board", "parameters": [ { - "description": "IKEA store URL slug", + "description": "Rippling board slug (careers URL)", "in": "query", - "name": "slug", + "name": "company", "required": true, "type": "string", - "x-example": "burbank" + "x-example": "rippling" }, { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Filter: department contains", "in": "query", - "name": "country", + "name": "department", "type": "string" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Filter: location contains", "in": "query", - "name": "language", + "name": "location", "type": "string" + }, + { + "description": "Filter by remote (true or false)", + "in": "query", + "name": "remote", + "type": "boolean" } ], "produces": [ @@ -292580,7 +322356,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.storeResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -292595,12 +322371,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -292613,30 +322383,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IKEA store's detail", + "summary": "List a company's Rippling job board", "tags": [ - "IKEA" + "Jobs" ] } }, - "/ikea/stores": { + "/jobs/rippling/job": { "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 a single Rippling job with its full HTML/text description, employment type, and work locations. The id is the job uuid from a listing. Credential-free public ATS JSON.", + "operationId": "jobs-rippling-job", "parameters": [ { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Rippling board slug", "in": "query", - "name": "country", - "type": "string" + "name": "company", + "required": true, + "type": "string", + "x-example": "rippling" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Rippling job uuid", "in": "query", - "name": "language", - "type": "string" + "name": "id", + "required": true, + "type": "string", + "x-example": "2f0674e6-f01f-4ecd-b459-e947241c211f" } ], "produces": [ @@ -292646,7 +322421,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.storesResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -292655,8 +322430,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -292673,47 +322448,35 @@ "ApiKeyAuth": [] } ], - "summary": "List IKEA physical store locations", + "summary": "Get a single Rippling job", "tags": [ - "IKEA" + "Jobs" ] } }, - "/ikea/suggest": { + "/jobs/smartrecruiters/posting": { "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 a single SmartRecruiters posting with its jobAd description. Recruiter personal data is intentionally omitted. Credential-free public ATS JSON.", + "operationId": "jobs-smartrecruiters-posting", "parameters": [ { - "description": "Partial or full search term", + "description": "SmartRecruiters company id", "in": "query", - "name": "q", + "name": "company", "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" + "x-example": "Visa" }, { - "default": 5, - "description": "Top-product count (1-20)", + "description": "SmartRecruiters posting id", "in": "query", - "maximum": 20, - "minimum": 1, - "name": "size", - "type": "integer" + "name": "id", + "required": true, + "type": "string", + "x-example": "744000133907678" } ], "produces": [ @@ -292723,7 +322486,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.suggestResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -292732,8 +322495,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -292750,41 +322513,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get IKEA search-box typeahead suggestions", + "summary": "Get a single SmartRecruiters posting", "tags": [ - "IKEA" + "Jobs" ] } }, - "/imdb/charts": { + "/jobs/smartrecruiters/postings": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized rows from public IMDb title charts. Chart values: `top_rated_movies`, `top_rated_tv_shows`, `most_popular_movies`, `most_popular_tv_shows`, `top_rated_english_movies`, `lowest_rated_movies`.", - "operationId": "imdb-charts", + "description": "Lists a company's public SmartRecruiters postings, paged via limit/offset. The company is the SmartRecruiters identifier from its careers URL. Credential-free public ATS JSON.", + "operationId": "jobs-smartrecruiters-postings", "parameters": [ { - "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" - ], + "description": "SmartRecruiters company id (careers URL)", "in": "query", - "name": "chart", - "type": "string" + "name": "company", + "required": true, + "type": "string", + "x-example": "Visa" }, { - "default": 25, - "description": "Rows to return, default 25, max 250", + "description": "Page size, default 100, max 100", "in": "query", "name": "limit", "type": "integer" + }, + { + "description": "Page offset, default 0", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -292794,7 +322555,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.chartsResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -292803,20 +322564,8 @@ "$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", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -292833,19 +322582,47 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title charts", + "summary": "List a company's SmartRecruiters postings", "tags": [ - "IMDb" + "Jobs" ] } }, - "/imdb/image-types": { + "/jobs/teamtailor/jobs": { "get": { "consumes": [ "application/json" ], - "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", + "description": "Lists a company's public Teamtailor board feed (JSON Feed), normalized to 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/. Credential-free public ATS feed.", + "operationId": "jobs-teamtailor-jobs", + "parameters": [ + { + "description": "Teamtailor subdomain (careers URL)", + "in": "query", + "name": "company", + "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" + } + ], "produces": [ "application/json" ], @@ -292853,17 +322630,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.imageTypesResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, - "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" } @@ -292874,33 +322657,53 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb image types", + "summary": "List a company's Teamtailor job board", "tags": [ - "IMDb" + "Jobs" ] } }, - "/imdb/name": { + "/jobs/ukg/board": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb person metadata and known-for rows. Pass exactly one of `id` or `url`.", - "operationId": "imdb-name", + "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 (UKG's full detail page is HTML, not JSON). Credential-free public ATS JSON.", + "operationId": "jobs-ukg-board", "parameters": [ { - "description": "IMDb name id", + "description": "UKG tenant code (careers URL)", "in": "query", - "name": "id", + "name": "tenant", + "required": true, "type": "string", - "x-example": "nm0634240" + "x-example": "BUI1004BMDI" }, { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "UKG job-board UUID (careers URL)", "in": "query", - "name": "url", + "name": "board", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/name/nm0634240/" + "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": [ @@ -292910,7 +322713,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -292919,24 +322722,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": { @@ -292949,33 +322734,35 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name detail", + "summary": "List a UKG Pro Recruiting tenant's job board", "tags": [ - "IMDb" + "Jobs" ] } }, - "/imdb/name/awards": { + "/jobs/workable/posting": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb award rows for a person. Pass exactly one of `id` or `url`.", - "operationId": "imdb-name-awards", + "description": "Returns a single Workable posting with its full HTML/text description. The id is the posting shortcode from a listing. Credential-free public ATS JSON.", + "operationId": "jobs-workable-posting", "parameters": [ { - "description": "IMDb name id", + "description": "Workable account slug", "in": "query", - "name": "id", + "name": "company", + "required": true, "type": "string", - "x-example": "nm0634240" + "x-example": "zego" }, { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "Workable posting shortcode", "in": "query", - "name": "url", + "name": "id", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/name/nm0634240/" + "x-example": "DBB0F9D146" } ], "produces": [ @@ -292985,7 +322772,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameAwardsResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -293000,18 +322787,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": { @@ -293024,33 +322799,51 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name awards", + "summary": "Get a single Workable posting", "tags": [ - "IMDb" + "Jobs" ] } }, - "/imdb/name/credits": { + "/jobs/workable/postings": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb filmography sections for a person. Pass exactly one of `id` or `url`.", - "operationId": "imdb-name-credits", + "description": "Lists a company's public Workable postings, normalized to 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. Credential-free public ATS JSON.", + "operationId": "jobs-workable-postings", "parameters": [ { - "description": "IMDb name id", + "description": "Workable account slug (careers URL)", "in": "query", - "name": "id", + "name": "company", + "required": true, "type": "string", - "x-example": "nm0634240" + "x-example": "zego" }, { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "Free-text search", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/name/nm0634240/" + "name": "search", + "type": "string" + }, + { + "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": [ @@ -293060,7 +322853,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameCreditsResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -293075,18 +322868,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": { @@ -293099,57 +322880,61 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name credits", + "summary": "List a company's Workable postings", "tags": [ - "IMDb" + "Jobs" ] } }, - "/imdb/name/images": { + "/jobs/workday/board": { "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": "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}. Credential-free public ATS JSON.", + "operationId": "jobs-workday-board", "parameters": [ { - "description": "IMDb name id", + "description": "Workday tenant", "in": "query", - "name": "id", + "name": "tenant", + "required": true, "type": "string", - "x-example": "nm0000151" + "x-example": "nvidia" }, { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "Workday datacenter shard (wd1, wd3, wd5, ...)", "in": "query", - "name": "url", + "name": "datacenter", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/name/nm0000151/" + "x-example": "wd5" }, { - "description": "Image type filter, single value or comma-separated list", - "enum": [ - "behind_the_scenes", - "event", - "poster", - "product", - "production_art", - "publicity", - "still_frame", - "unknown" - ], + "description": "Workday career site", "in": "query", - "name": "type", + "name": "site", + "required": true, "type": "string", - "x-example": "still_frame" + "x-example": "NVIDIAExternalCareerSite" }, { - "description": "Rows to return, default 50, max 1000", + "description": "Free-text search", + "in": "query", + "name": "search", + "type": "string" + }, + { + "description": "Page size, default 20, max 20", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" + }, + { + "description": "Page offset, default 0", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -293159,7 +322944,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameImagesResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -293168,24 +322953,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": { @@ -293198,40 +322965,51 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name images", + "summary": "List a Workday tenant's job board", "tags": [ - "IMDb" + "Jobs" ] } }, - "/imdb/name/videos": { + "/jobs/workday/job": { "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 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. Credential-free public ATS JSON.", + "operationId": "jobs-workday-job", "parameters": [ { - "description": "IMDb name id", + "description": "Workday tenant", "in": "query", - "name": "id", + "name": "tenant", + "required": true, "type": "string", - "x-example": "nm0000151" + "x-example": "nvidia" }, { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "Workday datacenter shard", "in": "query", - "name": "url", + "name": "datacenter", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/name/nm0000151/" + "x-example": "wd5" }, { - "description": "Rows to return, default 50, max 100", + "description": "Workday career site", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "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": [ @@ -293241,7 +323019,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameVideosResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -293256,18 +323034,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": { @@ -293280,34 +323046,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name video metadata", + "summary": "Get a single Workday job", "tags": [ - "IMDb" + "Jobs" ] } }, - "/imdb/search": { + "/justeat/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized IMDb title search rows from credential-free public IMDb pages. Limit defaults to 10 and clamps to 20.", - "operationId": "imdb-search", + "description": "Returns one Just Eat restaurant's detail by unique_name: name, address, primary cuisine, rating, and whether it currently accepts orders.", + "operationId": "justeat-restaurant", "parameters": [ { - "description": "Search query", + "description": "Restaurant slug, from a search response's unique_name field", "in": "query", - "name": "query", + "name": "unique_name", "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": "mcdonalds-victorialondon" } ], "produces": [ @@ -293317,7 +323076,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.searchResponseDoc" + "$ref": "#/definitions/justeat.restaurantResponseDoc" } }, "400": { @@ -293332,18 +323091,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": { @@ -293356,207 +323103,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title search", + "summary": "Get one Just Eat restaurant's detail", "tags": [ - "IMDb" + "Just Eat" ] } }, - "/imdb/search/title": { + "/justeat/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized IMDb advanced title-search results (imdb.com/search/title/) from a credential-free public IMDb page. At least one filter is required; sort/limit alone are not enough. Limit defaults to 25 and clamps to 50; only IMDb's first rendered 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 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": "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", + "description": "Restaurant slug, from a search response's unique_name field", "in": "query", - "name": "sort_order", + "name": "unique_name", + "required": true, "type": "string", - "x-example": "desc" - }, - { - "description": "Rows to return, default 25, max 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "x-example": "mcdonalds-victorialondon" } ], "produces": [ @@ -293566,7 +323133,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.searchTitleResponseDoc" + "$ref": "#/definitions/justeat.menuResponseDoc" } }, "400": { @@ -293581,18 +323148,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": { @@ -293605,33 +323160,60 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb advanced title search", + "summary": "Get one Just Eat restaurant's menu with prices", "tags": [ - "IMDb" + "Just Eat" ] } }, - "/imdb/title": { + "/justeat/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized IMDb title metadata from a credential-free public IMDb title page. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title", + "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": [ { - "description": "IMDb title id", + "description": "UK postcode to search near", "in": "query", - "name": "id", + "name": "postcode", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "SW1A 1AA" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Restaurants to return, clamped to 100 (default 20)", "in": "query", - "name": "url", + "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": "https://www.imdb.com/title/tt1375666/" + "x-example": "distance" } ], "produces": [ @@ -293641,7 +323223,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleResponseDoc" + "$ref": "#/definitions/justeat.searchResponseDoc" } }, "400": { @@ -293650,24 +323232,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": { @@ -293680,33 +323244,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title detail", + "summary": "Search Just Eat restaurants near a UK postcode", "tags": [ - "IMDb" + "Just Eat" ] } }, - "/imdb/title/awards": { + "/justeat/search/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb award rows for a title. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-awards", + "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": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "UK postcode to look up", "in": "query", - "name": "url", + "name": "postcode", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "SW1A 1AA" } ], "produces": [ @@ -293716,7 +323274,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleAwardsResponseDoc" + "$ref": "#/definitions/justeat.filtersResponseDoc" } }, "400": { @@ -293725,24 +323283,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": { @@ -293755,33 +323295,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title awards", + "summary": "Get Just Eat's live filter slug catalog for a UK postcode", "tags": [ - "IMDb" + "Just Eat" ] } }, - "/imdb/title/box-office": { + "/justwatch/age-certifications": { "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 JustWatch age certification technical names for a country.", + "operationId": "justwatch-age-certifications", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt0111161" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt0111161/" + "x-example": "US" } ], "produces": [ @@ -293791,7 +323325,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleBoxOfficeResponseDoc" + "$ref": "#/definitions/justwatch.ageCertificationsResponseDoc" } }, "400": { @@ -293800,24 +323334,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": { @@ -293830,33 +323352,104 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title box office summary", + "summary": "Get JustWatch age certifications", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/company-credits": { + "/justwatch/discover": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb company-credit sections for a title. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-company-credits", + "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": "IMDb title id", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "id", + "name": "country", "type": "string", - "x-example": "tt1375666" + "x-example": "US" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "url", + "name": "language", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "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", + "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": [ @@ -293866,7 +323459,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/justwatch.discoverResponseDoc" } }, "400": { @@ -293875,24 +323468,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": { @@ -293905,40 +323486,43 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title company credits", + "summary": "Discover JustWatch titles", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/connections": { + "/justwatch/episode/by-id": { "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": "Looks up an episode by raw JustWatch GraphQL id such as `tse5550494` and returns normalized metadata and offers.", + "operationId": "justwatch-episode-by-id", "parameters": [ { - "description": "IMDb title id", + "description": "Raw JustWatch episode id matching tse[0-9]+", "in": "query", "name": "id", + "required": true, "type": "string", - "x-example": "tt0111161" + "x-example": "tse5550494" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt0111161/" + "x-example": "US" }, { - "description": "Rows to return, default 50, max 250", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -293948,7 +323532,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleConnectionsResponseDoc" + "$ref": "#/definitions/justwatch.episodeByIDResponseDoc" } }, "400": { @@ -293969,12 +323553,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -293987,33 +323565,43 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title connections", + "summary": "Get JustWatch episode by raw id", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/credits": { + "/justwatch/episode/offers": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb full cast and crew sections. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-credits", + "description": "Returns normalized offers for a raw JustWatch episode id across one to five comma-separated country codes.", + "operationId": "justwatch-episode-offers", "parameters": [ { - "description": "IMDb title id", + "description": "Raw JustWatch episode id matching tse[0-9]+", "in": "query", "name": "id", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "tse5550494" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "One to five comma-separated two-letter country codes", "in": "query", - "name": "url", + "name": "countries", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "US,GB" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -294023,7 +323611,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.creditsResponseDoc" + "$ref": "#/definitions/justwatch.episodeOffersResponseDoc" } }, "400": { @@ -294044,12 +323632,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -294062,47 +323644,63 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title credits", + "summary": "Get JustWatch episode offers", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/episodes": { + "/justwatch/genre/titles": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb episode rows for a series title. Limit defaults to 10 and clamps to 20. Optional `season` filters the upstream episodes page. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-episodes", + "description": "Returns popular titles for one JustWatch genre short name such as `act`. Type accepts only `all`, `movie`, or `show`.", + "operationId": "justwatch-genre-titles", "parameters": [ { - "description": "IMDb title id", + "description": "JustWatch genre short name", "in": "query", - "name": "id", + "name": "genre", + "required": true, "type": "string", - "x-example": "tt0944947" + "x-example": "act" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt0944947/" + "x-example": "US" }, { - "description": "Season number to request", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "season", - "type": "integer", - "x-example": 1 + "name": "language", + "type": "string", + "x-example": "en" }, { - "description": "Rows to return, default 10, max 20", + "description": "Maximum results, defaults to 20 and clamps to 50", "in": "query", "name": "limit", "type": "integer", - "x-example": 10 + "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": [ @@ -294112,7 +323710,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.episodesResponseDoc" + "$ref": "#/definitions/justwatch.genreTitlesResponseDoc" } }, "400": { @@ -294121,24 +323719,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": { @@ -294151,33 +323737,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title episodes", + "summary": "Get JustWatch genre titles", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/filming-locations": { + "/justwatch/genres": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb filming-location rows for a title. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-filming-locations", + "description": "Returns JustWatch genre short names and localized translations.", + "operationId": "justwatch-genres", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "url", + "name": "language", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "en" } ], "produces": [ @@ -294187,7 +323767,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/justwatch.genresResponseDoc" } }, "400": { @@ -294196,24 +323776,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": { @@ -294226,33 +323794,70 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title filming locations", + "summary": "Get JustWatch genres", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/goofs": { + "/justwatch/monetization/titles": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb goof rows for a title. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-goofs", + "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": "IMDb title id", + "description": "Monetization type: FLATRATE, FREE, ADS, RENT, BUY", + "enum": [ + "FLATRATE", + "FREE", + "ADS", + "RENT", + "BUY" + ], "in": "query", - "name": "id", + "name": "monetization_type", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "FLATRATE" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "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": [ @@ -294262,7 +323867,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/justwatch.monetizationTitlesResponseDoc" } }, "400": { @@ -294271,24 +323876,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": { @@ -294301,57 +323894,55 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title goofs", + "summary": "Get JustWatch monetization titles", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/images": { + "/justwatch/new": { "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 newly available movies and shows from the public JustWatch website GraphQL endpoint. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.", + "operationId": "justwatch-new", "parameters": [ { - "description": "IMDb title id", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "id", + "name": "country", "type": "string", - "x-example": "tt0089753" + "x-example": "US" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "url", + "name": "language", "type": "string", - "x-example": "https://www.imdb.com/title/tt0089753/" + "x-example": "en" }, { - "description": "Image type filter, single value or comma-separated list", + "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": [ - "behind_the_scenes", - "event", - "poster", - "product", - "production_art", - "publicity", - "still_frame", - "unknown" + "all", + "movie", + "show" ], "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 + "x-example": "all" } ], "produces": [ @@ -294361,7 +323952,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleImagesResponseDoc" + "$ref": "#/definitions/justwatch.newTitlesResponseDoc" } }, "400": { @@ -294370,24 +323961,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": { @@ -294400,33 +323979,62 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title images", + "summary": "Get new JustWatch titles", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/keywords": { + "/justwatch/popular": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb keyword rows for a title. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-keywords", + "description": "Returns popular movies and shows from the public JustWatch website GraphQL endpoint. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.", + "operationId": "justwatch-popular", "parameters": [ { - "description": "IMDb title id", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "id", + "name": "country", "type": "string", - "x-example": "tt1375666" + "x-example": "US" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "url", + "name": "language", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "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": [ @@ -294436,7 +324044,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/justwatch.popularResponseDoc" } }, "400": { @@ -294445,24 +324053,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": { @@ -294475,33 +324071,63 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title keywords", + "summary": "Get popular JustWatch titles", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/parental-guide": { + "/justwatch/provider/titles": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb parental-guide categories and severity signals. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-parental-guide", + "description": "Returns popular movie/show titles available through a JustWatch provider short name such as `nfx`.", + "operationId": "justwatch-provider-titles", "parameters": [ { - "description": "IMDb title id", + "description": "JustWatch provider short name", "in": "query", - "name": "id", + "name": "provider", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "nfx" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "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": [ @@ -294511,7 +324137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.parentalGuideResponseDoc" + "$ref": "#/definitions/justwatch.providerTitlesResponseDoc" } }, "400": { @@ -294520,24 +324146,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": { @@ -294550,33 +324164,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title parental guide", + "summary": "Get JustWatch provider titles", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/public-facts-analysis": { + "/justwatch/providers": { "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 the credential-free public JustWatch provider catalog for a country.", + "operationId": "justwatch-providers", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "US" } ], "produces": [ @@ -294586,7 +324194,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsAnalysisResponseDoc" + "$ref": "#/definitions/justwatch.providersResponseDoc" } }, "400": { @@ -294595,24 +324203,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": { @@ -294625,33 +324221,50 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title public facts analysis", + "summary": "Get JustWatch providers", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/quotes": { + "/justwatch/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb quote rows for a title. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-quotes", + "description": "Searches JustWatch titles using the public credential-free website GraphQL endpoint. 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": "IMDb title id", + "description": "Search query", "in": "query", - "name": "id", + "name": "query", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "inception" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "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": 10 } ], "produces": [ @@ -294661,7 +324274,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/justwatch.searchResponseDoc" } }, "400": { @@ -294682,12 +324295,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -294700,33 +324307,43 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title quotes", + "summary": "Search JustWatch titles", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/ratings": { + "/justwatch/season/by-id": { "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", + "description": "Looks up a season by raw JustWatch GraphQL id such as `tss297253`.", + "operationId": "justwatch-season-by-id", "parameters": [ { - "description": "IMDb title id", + "description": "Raw JustWatch season id matching tss[0-9]+", "in": "query", "name": "id", + "required": true, "type": "string", - "x-example": "tt0111161" + "x-example": "tss297253" }, { - "description": "Absolute IMDb title URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt0111161/" + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -294736,7 +324353,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.ratingsResponseDoc" + "$ref": "#/definitions/justwatch.seasonByIDResponseDoc" } }, "400": { @@ -294745,6 +324362,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": { @@ -294757,33 +324386,43 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title ratings breakdown", + "summary": "Get JustWatch season by raw id", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/release-info": { + "/justwatch/season/episodes": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb release date rows and alternate titles. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-release-info", + "description": "Returns episodes and normalized episode offers for a raw JustWatch season id such as `tss297253`.", + "operationId": "justwatch-season-episodes", "parameters": [ { - "description": "IMDb title id", + "description": "Raw JustWatch season id matching tss[0-9]+", "in": "query", - "name": "id", + "name": "season_id", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "tss297253" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -294793,7 +324432,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.releaseInfoResponseDoc" + "$ref": "#/definitions/justwatch.seasonEpisodesResponseDoc" } }, "400": { @@ -294814,12 +324453,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -294832,40 +324465,43 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title release info", + "summary": "Get JustWatch season episodes", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/reviews": { + "/justwatch/show/seasons": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 seasons for a raw JustWatch show id such as `ts287292`.", + "operationId": "justwatch-show-seasons", "parameters": [ { - "description": "IMDb title id", + "description": "Raw JustWatch show id matching ts[0-9]+", "in": "query", - "name": "id", + "name": "show_id", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "ts287292" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "US" }, { - "description": "Rows to return, default 10, max 20", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -294875,7 +324511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.reviewsResponseDoc" + "$ref": "#/definitions/justwatch.showSeasonsResponseDoc" } }, "400": { @@ -294896,12 +324532,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -294914,33 +324544,33 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title user reviews", + "summary": "Get JustWatch show seasons", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/similar": { + "/justwatch/title": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized titles from IMDb's public More like this recommendations. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-similar", + "description": "Fetches a JustWatch title page and returns normalized metadata and current offers. Pass exactly one of `path` or `url`.", + "operationId": "justwatch-title", "parameters": [ { - "description": "IMDb title id", + "description": "JustWatch title path", "in": "query", - "name": "id", + "name": "path", "type": "string", - "x-example": "tt0111161" + "x-example": "/us/movie/inception" }, { - "description": "Absolute IMDb title URL", + "description": "Absolute https://www.justwatch.com title URL", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.imdb.com/title/tt0111161/" + "x-example": "https://www.justwatch.com/us/movie/inception" } ], "produces": [ @@ -294950,7 +324580,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.similarResponseDoc" + "$ref": "#/definitions/justwatch.titleResponseDoc" } }, "400": { @@ -294959,6 +324589,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": { @@ -294971,33 +324613,33 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb similar titles", + "summary": "Get JustWatch title details", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/technical-specs": { + "/justwatch/title/analysis": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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", + "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": [ { - "description": "IMDb title id", + "description": "JustWatch title path", "in": "query", - "name": "id", + "name": "path", "type": "string", - "x-example": "tt1375666" + "x-example": "/us/movie/inception" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Absolute https://www.justwatch.com title URL", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "https://www.justwatch.com/us/movie/inception" } ], "produces": [ @@ -295007,7 +324649,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.technicalSpecsResponseDoc" + "$ref": "#/definitions/justwatch.analysisResponseDoc" } }, "400": { @@ -295028,12 +324670,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -295046,33 +324682,43 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title technical specs", + "summary": "Analyze JustWatch title availability", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/trivia": { + "/justwatch/title/by-id": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public IMDb trivia rows for a title. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-trivia", + "description": "Looks up a movie or show by raw JustWatch GraphQL id such as `tm92641` or `ts287292`.", + "operationId": "justwatch-title-by-id", "parameters": [ { - "description": "IMDb title id", + "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", "in": "query", "name": "id", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "tm92641" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -295082,7 +324728,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/justwatch.titleResponseDoc" } }, "400": { @@ -295103,12 +324749,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -295121,40 +324761,43 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title trivia", + "summary": "Get JustWatch title by raw id", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/imdb/title/videos": { + "/justwatch/title/media": { "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 normalized credits, clips, and backdrops for a raw JustWatch movie/show id such as `tm92641`.", + "operationId": "justwatch-title-media", "parameters": [ { - "description": "IMDb title id", + "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", "in": "query", "name": "id", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "tm92641" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "url", + "name": "country", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "US" }, { - "description": "Rows to return, default 50, max 100", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -295164,7 +324807,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleVideosResponseDoc" + "$ref": "#/definitions/justwatch.titleMediaResponseDoc" } }, "400": { @@ -295185,12 +324828,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -295203,27 +324840,43 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title video metadata", + "summary": "Get JustWatch title media", "tags": [ - "IMDb" + "JustWatch" ] } }, - "/importyeti/company": { + "/justwatch/title/offers": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized 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. Credential-free public data, rendered from the company report page through proxied browser renderers.", - "operationId": "importyeti-company", + "description": "Returns normalized offers for a raw JustWatch movie/show id across one to five comma-separated country codes.", + "operationId": "justwatch-title-offers", "parameters": [ { - "description": "ImportYeti company slug, the last path segment of a /company/{slug} URL", + "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", "in": "query", - "name": "slug", + "name": "id", "required": true, "type": "string", - "x-example": "target" + "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": [ @@ -295233,7 +324886,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/importyeti.companyResponseDoc" + "$ref": "#/definitions/justwatch.titleOffersResponseDoc" } }, "400": { @@ -295248,8 +324901,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -295266,34 +324919,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get an ImportYeti company report", + "summary": "Get JustWatch title offers", "tags": [ - "ImportYeti" + "JustWatch" ] } }, - "/importyeti/search": { + "/justwatch/title/similar": { "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. Credential-free public data, sourced from ImportYeti's own JSON search API (distinct from its human-facing /search results page, which does not render due to a client-side bug in ImportYeti's own app).", - "operationId": "importyeti-search", + "description": "Returns similar titles for a raw JustWatch movie/show id such as `tm92641`.", + "operationId": "justwatch-title-similar", "parameters": [ { - "description": "Company or supplier name to search for", + "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": "nike" + "x-example": "tm92641" }, { - "description": "1-indexed result page, defaults to 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": [ @@ -295303,7 +324972,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/importyeti.searchResponseDoc" + "$ref": "#/definitions/justwatch.similarTitlesResponseDoc" } }, "400": { @@ -295312,8 +324981,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" } @@ -295330,27 +325005,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search ImportYeti companies and suppliers by name", + "summary": "Get similar JustWatch titles", "tags": [ - "ImportYeti" + "JustWatch" ] } }, - "/indeed/job": { + "/kalshi/event/{event_ticker}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Indeed job posting by its job key (the `job_key` field returned by search). Primary transport is Indeed's own credential-free GraphQL API; falls back to the original web-page transport if that fails.", - "operationId": "indeed-job", + "description": "Returns one normalized Kalshi event row and its normalized markets from credential-free public market-data JSON.", + "operationId": "kalshi-event", "parameters": [ { - "description": "Indeed job key (16-character hex)", - "in": "query", - "name": "jk", + "description": "Kalshi event ticker", + "in": "path", + "name": "event_ticker", "required": true, "type": "string", - "x-example": "a055dc6ab3a91a3b" + "x-example": "KXELONMARS-99" } ], "produces": [ @@ -295360,7 +325035,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/indeed.jobResponseDoc" + "$ref": "#/definitions/kalshi.eventResponseDoc" } }, "400": { @@ -295381,6 +325056,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -295393,34 +325074,57 @@ "ApiKeyAuth": [] } ], - "summary": "Indeed job detail", + "summary": "Kalshi event detail", "tags": [ - "Indeed" + "Kalshi" ] } }, - "/indeed/locations/suggest": { + "/kalshi/event/{event_ticker}/history": { "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. Credential-free GraphQL only; there is no page-based fallback for this endpoint.", - "operationId": "indeed-locations-suggest", + "description": "Returns normalized Kalshi candlesticks grouped by market for one event from credential-free public market-data JSON.", + "operationId": "kalshi-event-history", "parameters": [ { - "description": "Partial location text", - "in": "query", - "name": "q", + "description": "Kalshi event ticker", + "in": "path", + "name": "event_ticker", "required": true, "type": "string", - "x-example": "Austin" + "x-example": "KXELONMARS-99" }, { - "description": "Max suggestions to return, defaults to 10, maxes at 25", + "description": "Kalshi series ticker. Defaults to the event ticker prefix before the last dash.", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "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": [ @@ -295430,7 +325134,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/indeed.locationSuggestResponseDoc" + "$ref": "#/definitions/kalshi.eventHistoryResponseDoc" } }, "400": { @@ -295439,12 +325143,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": { @@ -295457,65 +325173,27 @@ "ApiKeyAuth": [] } ], - "summary": "Indeed location suggestions", + "summary": "Kalshi event history", "tags": [ - "Indeed" + "Kalshi" ] } }, - "/indeed/search": { + "/kalshi/event/{event_ticker}/metadata": { "get": { "consumes": [ "application/json" ], - "description": "Searches Indeed job postings by keyword and location. Primary transport is Indeed's own credential-free GraphQL API; a page 1, unfiltered-by-date request uses it directly. Requesting page 2+ or the `fromage` filter (not yet expressible over the primary transport) uses the original web-page transport instead, with the same normalized response shape either way. `sort` enum: `relevance` (default), `date`.", - "operationId": "indeed-search", + "description": "Returns media, market metadata, settlement sources, and optional competition context for one Kalshi event from credential-free public market-data JSON.", + "operationId": "kalshi-event-metadata", "parameters": [ { - "description": "Search keywords", - "in": "query", - "name": "q", + "description": "Kalshi event ticker", + "in": "path", + "name": "event_ticker", "required": true, "type": "string", - "x-example": "software engineer" - }, - { - "description": "Location (city, state, or zip)", - "in": "query", - "name": "l", - "type": "string", - "x-example": "New York, NY" - }, - { - "description": "Page number, 1-based, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Sort order: relevance, date", - "enum": [ - "relevance", - "date" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Search radius in miles", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 25 - }, - { - "description": "Only jobs posted within this many days", - "in": "query", - "name": "fromage", - "type": "integer", - "x-example": 7 + "x-example": "KXELONMARS-99" } ], "produces": [ @@ -295525,7 +325203,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/indeed.searchResponseDoc" + "$ref": "#/definitions/kalshi.eventMetadataResponseDoc" } }, "400": { @@ -295534,12 +325212,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": { @@ -295552,24 +325242,78 @@ "ApiKeyAuth": [] } ], - "summary": "Indeed job search", + "summary": "Kalshi event metadata", "tags": [ - "Indeed" + "Kalshi" ] } }, - "/independent/article": { + "/kalshi/events": { "get": { - "description": "Returns public The Independent article metadata and body paragraphs from a canonical article URL.", - "operationId": "independent-article", + "consumes": [ + "application/json" + ], + "description": "Returns normalized Kalshi event rows from credential-free public market-data JSON.", + "operationId": "kalshi-events", "parameters": [ { - "description": "Canonical The Independent article URL", + "description": "Rows to return, default 25, max 200", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.independent.co.uk/news/world/example-b1234567.html" + "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": [ @@ -295579,7 +325323,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.eventsResponseDoc" } }, "400": { @@ -295594,6 +325338,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": { @@ -295606,30 +325362,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Independent article content", + "summary": "Kalshi events", "tags": [ - "The Independent" + "Kalshi" ] } }, - "/independent/author": { + "/kalshi/events/multivariate": { "get": { - "description": "Returns one Independent author's public profile: name, job title, bio, X/Twitter handle, and their recent articles.", - "operationId": "independent-author", + "consumes": [ + "application/json" + ], + "description": "Returns normalized Kalshi multivariate event rows from credential-free public market-data JSON. Kalshi's regular events endpoint excludes these MVE rows.", + "operationId": "kalshi-multivariate-events", "parameters": [ { - "description": "Author slug, e.g. lizzie-dearden", + "description": "Rows to return, default 25, max 200", "in": "query", - "name": "slug", - "type": "string", - "x-example": "lizzie-dearden" + "name": "limit", + "type": "integer" }, { - "description": "Canonical independent.co.uk/author/ URL; alternative to slug", + "description": "Pagination cursor from a previous Kalshi response", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.independent.co.uk/author/lizzie-dearden" + "name": "cursor", + "type": "string" } ], "produces": [ @@ -295639,7 +325396,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.independentAuthorResponseDoc" + "$ref": "#/definitions/kalshi.multivariateEventsResponseDoc" } }, "400": { @@ -295654,6 +325411,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": { @@ -295666,44 +325435,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Independent author profile", + "summary": "Kalshi multivariate events", "tags": [ - "The Independent" + "Kalshi" ] } }, - "/independent/headlines": { + "/kalshi/exchange/schedule": { "get": { - "description": "Returns fresh headlines from one public The Independent RSS 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" - } + "consumes": [ + "application/json" ], + "description": "Returns public exchange standard hours and maintenance windows from Kalshi market-data JSON.", + "operationId": "kalshi-exchange-schedule", "produces": [ "application/json" ], @@ -295711,7 +325455,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kalshi.exchangeScheduleResponseDoc" } }, "400": { @@ -295720,6 +325464,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": { @@ -295732,16 +325494,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Independent section headlines", + "summary": "Kalshi exchange schedule", "tags": [ - "The Independent" + "Kalshi" ] } }, - "/independent/news": { + "/kalshi/exchange/status": { "get": { - "description": "Returns fresh The Independent top stories from its public RSS feed.", - "operationId": "independent-news", + "consumes": [ + "application/json" + ], + "description": "Returns public exchange and trading active flags from Kalshi market-data JSON.", + "operationId": "kalshi-exchange-status", "produces": [ "application/json" ], @@ -295749,7 +325514,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/kalshi.exchangeStatusResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -295758,6 +325535,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -295770,52 +325553,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Independent top stories", + "summary": "Kalshi exchange status", "tags": [ - "The Independent" + "Kalshi" ] } }, - "/independent/sections": { + "/kalshi/historical/cutoff": { "get": { - "description": "Returns the live-verified public RSS section inventory for The Independent.", - "operationId": "independent-sections", - "produces": [ + "consumes": [ "application/json" ], - "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": "Canonical The Indian Express article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://indianexpress.com/article/cities/delhi/example-article-slug-10892304/" - } - ], + "description": "Returns the cutoff timestamps Kalshi uses for historical market, order, and trade data migration.", + "operationId": "kalshi-historical-cutoff", "produces": [ "application/json" ], @@ -295823,7 +325573,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.historicalCutoffResponseDoc" } }, "400": { @@ -295832,14 +325582,20 @@ "$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" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295856,24 +325612,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Indian Express article content", + "summary": "Kalshi historical data cutoff", "tags": [ - "The Indian Express" + "Kalshi" ] } }, - "/indianexpress/author": { + "/kalshi/historical/market/{ticker}": { "get": { - "description": "Returns a The Indian Express author's byline metadata, biography, and recent articles from a canonical author URL.", - "operationId": "indianexpress-author", + "consumes": [ + "application/json" + ], + "description": "Returns one normalized settled Kalshi historical market row from credential-free public market-data JSON.", + "operationId": "kalshi-historical-market", "parameters": [ { - "description": "Canonical The Indian Express author URL", - "in": "query", - "name": "url", + "description": "Kalshi historical market ticker", + "in": "path", + "name": "ticker", "required": true, "type": "string", - "x-example": "https://indianexpress.com/profile/author/jane-doe/" + "x-example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557" } ], "produces": [ @@ -295883,7 +325642,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.indianExpressAuthorResponseDoc" + "$ref": "#/definitions/kalshi.historicalMarketResponseDoc" } }, "400": { @@ -295898,6 +325657,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": { @@ -295910,81 +325681,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Indian Express author profile", + "summary": "Kalshi historical market detail", "tags": [ - "The Indian Express" + "Kalshi" ] } }, - "/indianexpress/headlines": { + "/kalshi/historical/market/{ticker}/history": { "get": { - "description": "Returns fresh headlines from one public The Indian Express RSS section.", - "operationId": "indianexpress-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized Kalshi candlesticks for one settled historical market from credential-free public market-data JSON.", + "operationId": "kalshi-historical-market-history", "parameters": [ { - "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": "section", + "description": "Kalshi historical market ticker", + "in": "path", + "name": "ticker", "required": true, - "type": "string" + "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" + }, + { + "description": "Candlestick interval in minutes. Default: 1440.", + "in": "query", + "name": "period_interval", + "type": "integer" } ], "produces": [ @@ -295994,7 +325729,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kalshi.marketHistoryResponseDoc" } }, "400": { @@ -296003,37 +325738,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The Indian Express section headlines", - "tags": [ - "The Indian Express" - ] - } - }, - "/indianexpress/news": { - "get": { - "description": "Returns fresh The Indian Express top stories from its public RSS feed.", - "operationId": "indianexpress-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -296041,6 +325750,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -296053,50 +325768,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Indian Express top stories", + "summary": "Kalshi historical market history", "tags": [ - "The Indian Express" + "Kalshi" ] } }, - "/indianexpress/sections": { + "/kalshi/historical/markets": { "get": { - "description": "Returns the public The Indian Express RSS section inventory used by the headlines endpoint.", - "operationId": "indianexpress-sections", - "produces": [ + "consumes": [ "application/json" ], - "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", + "description": "Returns normalized settled Kalshi historical market rows from credential-free public market-data JSON. `tickers`, `event_ticker`, and `series_ticker` are mutually exclusive. The `mve_filter` enum accepts `exclude`.", + "operationId": "kalshi-historical-markets", "parameters": [ { - "description": "Canonical India Today story URL", + "description": "Rows to return, default 25, max 1000", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.indiatoday.in/world/story/example-story-slug-3002364-2026-09-24" + "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": [ + "exclude" + ], + "in": "query", + "name": "mve_filter", + "type": "string" } ], "produces": [ @@ -296106,7 +325829,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.historicalMarketsResponseDoc" } }, "400": { @@ -296121,6 +325844,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": { @@ -296133,24 +325868,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get India Today article content", + "summary": "Kalshi historical markets", "tags": [ - "India Today" + "Kalshi" ] } }, - "/indiatoday/author": { + "/kalshi/historical/trades": { "get": { - "description": "Returns an India Today author's name, job title, headshot, biography, and recent stories from a canonical author URL.", - "operationId": "indiatoday-author", + "consumes": [ + "application/json" + ], + "description": "Returns normalized older Kalshi trades from credential-free historical market-data JSON.", + "operationId": "kalshi-historical-trades", "parameters": [ { - "description": "Canonical India Today author URL", + "description": "Rows to return, default 25, max 200", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.indiatoday.in/author/jane-doe" + "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" } ], "produces": [ @@ -296160,7 +325920,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.indiaTodayAuthorResponseDoc" + "$ref": "#/definitions/kalshi.historicalTradesResponseDoc" } }, "400": { @@ -296175,6 +325935,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": { @@ -296187,60 +325959,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an India Today author profile", + "summary": "Kalshi historical trades", "tags": [ - "India Today" + "Kalshi" ] } }, - "/indiatoday/headlines": { + "/kalshi/market/{ticker}": { "get": { - "description": "Returns current headlines from one India Today section hub page.", - "operationId": "indiatoday-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one normalized Kalshi market row from credential-free public market-data JSON.", + "operationId": "kalshi-market", "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" - ], - "in": "query", - "name": "section", + "description": "Kalshi market ticker", + "in": "path", + "name": "ticker", "required": true, - "type": "string" + "type": "string", + "x-example": "KXELONMARS-99" } ], "produces": [ @@ -296250,7 +325989,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kalshi.marketResponseDoc" } }, "400": { @@ -296259,37 +325998,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "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", @@ -296297,6 +326010,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -296309,50 +326028,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get India Today top stories", + "summary": "Kalshi market detail", "tags": [ - "India Today" + "Kalshi" ] } }, - "/indiatoday/sections": { + "/kalshi/market/{ticker}/history": { "get": { - "description": "Returns the live-verified India Today section inventory used by the headlines endpoint.", - "operationId": "indiatoday-sections", - "produces": [ + "consumes": [ "application/json" ], - "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", + "description": "Returns normalized Kalshi candlesticks for one market from credential-free public market-data JSON.", + "operationId": "kalshi-market-history", "parameters": [ { - "description": "Canonical IndieWire article URL", - "in": "query", - "name": "url", + "description": "Kalshi market ticker", + "in": "path", + "name": "ticker", "required": true, "type": "string", - "x-example": "https://www.indiewire.com/features/interviews/handle-with-care-dvd-traveling-indie-film-physical-media-1235216158/" + "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": [ @@ -296362,7 +326088,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.marketHistoryResponseDoc" } }, "400": { @@ -296377,6 +326103,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": { @@ -296389,31 +326127,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get IndieWire article content", + "summary": "Kalshi market history", "tags": [ - "IndieWire" + "Kalshi" ] } }, - "/indiewire/author": { + "/kalshi/market/{ticker}/orderbook": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns normalized yes/no bid levels for one Kalshi market ticker from public orderbook JSON.", + "operationId": "kalshi-market-orderbook", "parameters": [ { - "description": "Canonical indiewire.com/author/ URL", - "in": "query", - "name": "url", + "description": "Kalshi market ticker", + "in": "path", + "name": "ticker", "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": "KXELONMARS-99" } ], "produces": [ @@ -296423,7 +326157,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.indiewireAuthorResponseDoc" + "$ref": "#/definitions/kalshi.orderBookResponseDoc" } }, "400": { @@ -296438,6 +326172,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": { @@ -296450,56 +326196,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IndieWire author profile", + "summary": "Kalshi market orderbook", "tags": [ - "IndieWire" + "Kalshi" ] } }, - "/indiewire/headlines": { + "/kalshi/markets": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns normalized Kalshi market rows from credential-free public market-data JSON. The `status` enum accepts `unopened`, `open`, `closed`, and `settled`.", + "operationId": "kalshi-markets", "parameters": [ { - "description": "IndieWire section slug", + "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", "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" + "unopened", + "open", + "closed", + "settled" ], "in": "query", - "name": "section", - "required": true, + "name": "status", + "type": "string" + }, + { + "description": "Kalshi market ticker filter", + "in": "query", + "name": "ticker", "type": "string" } ], @@ -296510,7 +326260,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kalshi.marketsResponseDoc" } }, "400": { @@ -296519,37 +326269,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get IndieWire section headlines", - "tags": [ - "IndieWire" - ] - } - }, - "/indiewire/news": { - "get": { - "description": "Returns fresh IndieWire independent film, TV and awards top stories from its public RSS feed.", - "operationId": "indiewire-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -296557,6 +326281,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -296569,50 +326299,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get IndieWire top stories", + "summary": "Kalshi markets", "tags": [ - "IndieWire" + "Kalshi" ] } }, - "/indiewire/sections": { + "/kalshi/markets/history": { "get": { - "description": "Returns the complete public section inventory accepted by /api/v1/indiewire/headlines (IndieWire's 32 editorial categories).", - "operationId": "indiewire-sections", - "produces": [ + "consumes": [ "application/json" ], - "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", + "description": "Returns normalized Kalshi candlesticks for up to 25 market tickers from credential-free public market-data JSON.", + "operationId": "kalshi-markets-history", "parameters": [ { - "description": "Canonical i article URL", + "description": "Comma-separated Kalshi market tickers. Repeated query values are also accepted.", + "in": "query", + "name": "market_tickers", + "required": true, + "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": "url", - "required": true, - "type": "string", - "x-example": "https://inews.co.uk/news/world/withering-remark-humiliated-trump-court-failure-4786703" + "name": "include_latest_before_start", + "type": "boolean" } ], "produces": [ @@ -296622,7 +326353,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.batchMarketHistoryResponseDoc" } }, "400": { @@ -296631,14 +326362,20 @@ "$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" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296655,24 +326392,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get i article content", + "summary": "Kalshi batch market history", "tags": [ - "i" + "Kalshi" ] } }, - "/inews/author": { + "/kalshi/markets/orderbooks": { "get": { - "description": "Returns an i author's name, biography, social links, and most recent articles from a canonical author URL.", - "operationId": "inews-author", + "consumes": [ + "application/json" + ], + "description": "Returns normalized yes/no bid levels for up to 25 Kalshi market tickers from public orderbook JSON.", + "operationId": "kalshi-markets-orderbooks", "parameters": [ { - "description": "Canonical i author URL", + "description": "Comma-separated Kalshi market tickers. Repeated query values are also accepted.", "in": "query", - "name": "url", + "name": "tickers", "required": true, "type": "string", - "x-example": "https://inews.co.uk/author/simon-kelner" + "x-example": "KXELONMARS-99,KXNEWPOPE-70" } ], "produces": [ @@ -296682,7 +326422,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.inewsAuthorResponseDoc" + "$ref": "#/definitions/kalshi.batchOrderBookResponseDoc" } }, "400": { @@ -296697,6 +326437,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": { @@ -296709,69 +326461,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get an i author profile", + "summary": "Kalshi batch market orderbooks", "tags": [ - "i" + "Kalshi" ] } }, - "/inews/headlines": { + "/kalshi/series": { "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 normalized Kalshi series rows from credential-free public market-data JSON.", + "operationId": "kalshi-series", "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": "Rows to return, default 25, max 200", "in": "query", - "name": "section", - "required": true, + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor from a previous Kalshi response", + "in": "query", + "name": "cursor", "type": "string" } ], @@ -296782,7 +326495,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kalshi.seriesResponseDoc" } }, "400": { @@ -296791,36 +326504,22 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "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", + }, + "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": { @@ -296835,50 +326534,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get i top stories", + "summary": "Kalshi series", "tags": [ - "i" + "Kalshi" ] } }, - "/inews/sections": { + "/kalshi/series/{series_ticker}": { "get": { - "description": "Returns every i section slug accepted by the headlines endpoint, with its display name and public RSS feed URL.", - "operationId": "inews-sections", - "produces": [ + "consumes": [ "application/json" ], - "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", + "description": "Returns one normalized Kalshi series row from credential-free public market-data JSON.", + "operationId": "kalshi-series-detail", "parameters": [ { - "description": "Canonical Philippine Daily Inquirer article URL", - "in": "query", - "name": "url", + "description": "Kalshi series ticker", + "in": "path", + "name": "series_ticker", "required": true, "type": "string", - "x-example": "https://newsinfo.inquirer.net/2311358/18-mindanawons-top-2026-nursing-licensure-exam" + "x-example": "KXELONMARS" } ], "produces": [ @@ -296888,7 +326564,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.seriesDetailResponseDoc" } }, "400": { @@ -296903,6 +326579,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": { @@ -296915,29 +326603,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philippine Daily Inquirer article content", + "summary": "Kalshi series detail", "tags": [ - "Philippine Daily Inquirer" + "Kalshi" ] } }, - "/inquirer/author": { + "/kalshi/trades": { "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 normalized recent Kalshi market trades from credential-free public market-data JSON.", + "operationId": "kalshi-trades", "parameters": [ { - "description": "Canonical Philippine Daily Inquirer byline URL", + "description": "Rows to return, default 25, max 200", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://newsinfo.inquirer.net/byline/ivana-janlee-a-otoc" + "name": "limit", + "type": "integer" }, { - "description": "1-based page number of articles to return; defaults to 1 and overrides any page number already present in url", + "description": "Pagination cursor from a previous Kalshi response", "in": "query", - "name": "page", + "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" } ], @@ -296948,7 +326655,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.inquirerAuthorResponseDoc" + "$ref": "#/definitions/kalshi.tradesResponseDoc" } }, "400": { @@ -296963,6 +326670,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": { @@ -296975,35 +326694,116 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Philippine Daily Inquirer author profile", + "summary": "Kalshi trades", "tags": [ - "Philippine Daily Inquirer" + "Kalshi" ] } }, - "/inquirer/headlines": { + "/kfc/delivery-estimate": { "get": { - "description": "Returns fresh headlines from one Philippine Daily Inquirer section's public RSS feed.", - "operationId": "inquirer-headlines", + "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": "Philippine Daily Inquirer section slug", + "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", + "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": [ - "newsinfo", - "globalnation", - "business", - "sports", - "entertainment", - "lifestyle", - "technology", - "opinion", - "usa", - "cebudailynews" + "DOORDASH", + "MOCK_DOORDASH", + "INTERNAL" ], "in": "query", - "name": "section", - "required": true, - "type": "string" + "name": "delivery_provider", + "type": "string", + "x-example": "DOORDASH" } ], "produces": [ @@ -297013,7 +326813,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kfc.deliveryEstimateResponseDoc" } }, "400": { @@ -297022,6 +326822,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": { @@ -297034,16 +326846,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philippine Daily Inquirer section headlines", + "summary": "Check KFC delivery serviceability and estimated fee for one store and address", "tags": [ - "Philippine Daily Inquirer" + "KFC" ] } }, - "/inquirer/news": { + "/kfc/menu": { "get": { - "description": "Returns fresh Philippine Daily Inquirer top stories from its public news RSS feed.", - "operationId": "inquirer-news", + "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": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", + "in": "query", + "name": "store_number", + "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" + } + ], "produces": [ "application/json" ], @@ -297051,7 +326897,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/kfc.menuResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -297072,69 +326930,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philippine Daily Inquirer top stories", - "tags": [ - "Philippine Daily Inquirer" - ] - } - }, - "/inquirer/sections": { - "get": { - "description": "Returns the Philippine Daily Inquirer section inventory: the ten public news subdomains accepted by inquirer-headlines.", - "operationId": "inquirer-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Philippine Daily Inquirer sections", + "summary": "Get one KFC restaurant's full priced menu", "tags": [ - "Philippine Daily Inquirer" + "KFC" ] } }, - "/instacart/departments": { + "/kfc/nearby": { "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 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": "Store's opaque shop id, from GET /instacart/stores", + "description": "Search center latitude", "in": "query", - "name": "shop_id", + "name": "latitude", "required": true, - "type": "string", - "x-example": "9501" + "type": "number", + "x-example": 38.2527 }, { - "description": "Store's retailer slug, from GET /instacart/stores", + "description": "Search center longitude", "in": "query", - "name": "store_slug", + "name": "longitude", "required": true, - "type": "string", - "x-example": "safeway" + "type": "number", + "x-example": -85.7585 }, { - "description": "Postal code to localize the taxonomy for", + "description": "Search radius in miles, 0.1-100 (default 10)", "in": "query", - "name": "postal_code", - "required": true, + "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" + ], + "in": "query", + "name": "occasion", "type": "string", - "x-example": "94105" + "x-example": "DRIVE_THRU" + }, + { + "description": "Maximum restaurants to return, 1-50 (default 20)", + "in": "query", + "name": "max_results", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -297144,7 +326996,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.departmentsResponseDoc" + "$ref": "#/definitions/kfc.nearbyResponseDoc" } }, "400": { @@ -297153,8 +327005,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -297171,59 +327023,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Instacart store department taxonomy", + "summary": "Find KFC restaurants near a location", "tags": [ - "Instacart" + "KFC" ] } }, - "/instacart/item": { + "/kfc/promotion": { "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 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": "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", - "required": true, - "type": "string", - "x-example": "53" - }, - { - "description": "Instacart's opaque product id", + "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": "product_id", - "required": true, + "name": "code", "type": "string", - "x-example": "17830663" + "x-example": "WALMART5DOLLARSOFF" }, { - "description": "Postal code to price/localize the lookup for", + "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": "postal_code", - "required": true, + "name": "serialized_code", "type": "string", - "x-example": "94105" + "x-example": "deadbeef1234" } ], "produces": [ @@ -297233,7 +327059,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.itemResponseDoc" + "$ref": "#/definitions/kfc.promotionResponseDoc" } }, "400": { @@ -297248,8 +327074,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -297266,43 +327092,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Instacart product detail at a store", + "summary": "Look up one KFC promotion by its redemption code or serialized code", "tags": [ - "Instacart" + "KFC" ] } }, - "/instacart/search": { + "/kfc/promotions": { "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": "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": [ { - "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", + "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": "milk" + "x-example": "I824001" } ], "produces": [ @@ -297312,7 +327122,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.searchResponseDoc" + "$ref": "#/definitions/kfc.promotionsResponseDoc" } }, "400": { @@ -297321,8 +327131,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -297339,35 +327149,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Instacart product terms at a store", + "summary": "Get one KFC restaurant's current public promotions", "tags": [ - "Instacart" + "KFC" ] } }, - "/instacart/search-nearby": { + "/kfc/store": { "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 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": "US postal/ZIP code to search near", - "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "94105" - }, - { - "description": "Free-text 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": "milk" + "x-example": "I824001" } ], "produces": [ @@ -297377,7 +327179,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.searchNearbyResponseDoc" + "$ref": "#/definitions/kfc.storeResponseDoc" } }, "400": { @@ -297392,8 +327194,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -297410,27 +327212,90 @@ "ApiKeyAuth": [] } ], - "summary": "Search Instacart product terms near a postal code", + "summary": "Get one KFC restaurant by its store number", "tags": [ - "Instacart" + "KFC" ] } }, - "/instacart/stores": { + "/kfc/stores": { "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 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 -- confirmed live that a raw filter can otherwise return non-orderable administrative entries alongside real restaurants.", + "operationId": "kfc-stores", "parameters": [ { - "description": "US postal/ZIP code to search near", + "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", - "required": true, "type": "string", - "x-example": "94105" + "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": [ + "store_number_asc", + "store_number_desc", + "name_asc", + "name_desc", + "franchise_code_asc", + "franchise_code_desc" + ], + "in": "query", + "name": "sort", + "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 } ], "produces": [ @@ -297440,7 +327305,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.storesResponseDoc" + "$ref": "#/definitions/kfc.storesResponseDoc" } }, "400": { @@ -297449,14 +327314,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" } @@ -297473,27 +327332,24 @@ "ApiKeyAuth": [] } ], - "summary": "Find Instacart stores near a postal code", + "summary": "Search KFC restaurants by city, state, postal code, name, franchise code, or store number", "tags": [ - "Instacart" + "KFC" ] } }, - "/instacart/trending": { + "/khaleejtimes/article": { "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 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": "US postal/ZIP code to search near", + "description": "Canonical Khaleej Times article URL", "in": "query", - "name": "postal_code", + "name": "url", "required": true, "type": "string", - "x-example": "94105" + "x-example": "https://www.khaleejtimes.com/business/example-article-slug" } ], "produces": [ @@ -297503,7 +327359,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.trendingResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -297518,12 +327374,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -297536,33 +327386,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Instacart trending search terms near a postal code", + "summary": "Get Khaleej Times article content", "tags": [ - "Instacart" + "Khaleej Times" ] } }, - "/instagram/post/{id}/{post_id}": { + "/khaleejtimes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the media details of a specific post from an Instagram user.", - "operationId": "instagram-post", + "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": "Instagram user ID", - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Instagram post ID", - "in": "path", - "name": "post_id", + "description": "Canonical Khaleej Times author URL", + "in": "query", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.khaleejtimes.com/author/jane-doe" } ], "produces": [ @@ -297570,31 +327411,25 @@ ], "responses": { "200": { - "description": "Wrapped media item payload", + "description": "OK", "schema": { - "$ref": "#/definitions/instagram.postResponseDoc" + "$ref": "#/definitions/publicnews.khaleejTimesAuthorResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "No post 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" } @@ -297605,26 +327440,120 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a specific Instagram post by user ID and post ID", + "summary": "Get a Khaleej Times author profile", "tags": [ - "Instagram" + "Khaleej Times" ] } }, - "/instagram/profile/{username}": { + "/khaleejtimes/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public profile details for a specified Instagram username.", - "operationId": "instagram-profile", + "description": "Returns fresh headlines from one public Khaleej Times section (top-level sections and sub-sections).", + "operationId": "khaleejtimes-headlines", "parameters": [ { - "description": "Instagram username", - "in": "path", - "name": "username", + "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": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "business" } ], "produces": [ @@ -297632,33 +327561,85 @@ ], "responses": { "200": { - "description": "Wrapped profile payload", + "description": "OK", "schema": { - "$ref": "#/definitions/instagram.profileResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Profile not found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "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/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" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Khaleej Times top stories", + "tags": [ + "Khaleej Times" + ] + } + }, + "/khaleejtimes/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", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -297667,33 +327648,35 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an Instagram user profile by username", + "summary": "Get Khaleej Times sections", "tags": [ - "Instagram" + "Khaleej Times" ] } }, - "/instagram/reels/{id}": { + "/kickstarter/comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns a feed of Instagram Reels for the specified user ID. Supports pagination via `max_id`.", - "operationId": "instagram-reels", + "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": "Numeric Instagram user ID (not a username)", - "in": "path", - "name": "id", + "description": "Creator path segment of the project URL", + "in": "query", + "name": "creator", "required": true, "type": "string", - "x-example": "45374573700" + "x-example": "lookingglass" }, { - "description": "Pagination cursor for fetching the next page of Reels", + "description": "Project slug path segment of the project URL", "in": "query", - "name": "max_id", - "type": "string" + "name": "slug", + "required": true, + "type": "string", + "x-example": "musubi" } ], "produces": [ @@ -297701,31 +327684,31 @@ ], "responses": { "200": { - "description": "Wrapped Reels feed payload", + "description": "OK", "schema": { - "$ref": "#/definitions/instagram.reelsResponseDoc" + "$ref": "#/definitions/kickstarter.commentsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "No Reels 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" } @@ -297736,24 +327719,79 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Instagram Reels for a user", + "summary": "Get a Kickstarter campaign's comments", "tags": [ - "Instagram" + "Kickstarter" ] } }, - "/investopedia/article": { + "/kickstarter/discover": { "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", + "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", "parameters": [ { - "description": "Canonical Investopedia article, term, or explainer URL", + "description": "Kickstarter's own numeric category id (top-level or sub-category), e.g. 16 for Technology", "in": "query", - "name": "url", - "required": true, + "name": "category_id", + "type": "integer", + "x-example": 16 + }, + { + "description": "Free-text search query", + "in": "query", + "name": "term", "type": "string", - "x-example": "https://www.investopedia.com/terms/c/compoundinterest.asp" + "x-example": "hologram" + }, + { + "default": "magic", + "description": "Result order", + "enum": [ + "magic", + "popularity", + "newest", + "end_date", + "most_funded" + ], + "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" + }, + { + "default": false, + "description": "Restrict results to Kickstarter's own \\", + "in": "query", + "name": "staff_pick_only", + "type": "boolean" } ], "produces": [ @@ -297763,7 +327801,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kickstarter.discoverResponseDoc" } }, "400": { @@ -297772,8 +327810,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -297790,24 +327828,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Investopedia article content", + "summary": "Browse or search Kickstarter's Discover surface", "tags": [ - "Investopedia" + "Kickstarter" ] } }, - "/investopedia/author": { + "/kickstarter/project": { "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", + "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", "parameters": [ { - "description": "Canonical Investopedia author URL (/- or /contributors//)", + "description": "Creator path segment of the project URL", "in": "query", - "name": "url", + "name": "creator", "required": true, "type": "string", - "x-example": "https://www.investopedia.com/diccon-hyatt-7100294" + "x-example": "lookingglass" + }, + { + "description": "Project slug path segment of the project URL", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "musubi" } ], "produces": [ @@ -297817,7 +327866,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.investopediaAuthorResponseDoc" + "$ref": "#/definitions/kickstarter.projectResponseDoc" } }, "400": { @@ -297832,6 +327881,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -297844,68 +327899,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Investopedia author or expert profile", + "summary": "Get a Kickstarter campaign's detail", "tags": [ - "Investopedia" + "Kickstarter" ] } }, - "/investopedia/headlines": { + "/kickstarter/updates": { "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", + "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", "parameters": [ { - "description": "Investopedia section slug, from GET /investopedia/sections", - "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" - ], + "description": "Creator path segment of the project URL", "in": "query", - "name": "section", + "name": "creator", "required": true, - "type": "string" + "type": "string", + "x-example": "lookingglass" + }, + { + "description": "Project slug path segment of the project URL", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "musubi" } ], "produces": [ @@ -297915,7 +327937,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kickstarter.updatesResponseDoc" } }, "400": { @@ -297930,38 +327952,6 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Investopedia section headlines", - "tags": [ - "Investopedia" - ] - } - }, - "/investopedia/news": { - "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", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -297980,50 +327970,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Investopedia latest news", + "summary": "Get a Kickstarter campaign's updates feed", "tags": [ - "Investopedia" + "Kickstarter" ] } }, - "/investopedia/sections": { + "/kohls/category": { "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 public IOL article metadata and body paragraphs from a canonical article URL.", - "operationId": "iol-article", + "description": "Returns a Kohl's category or curated campaign page's product grid (page 1 only), with normalized 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 IOL article URL", + "description": "Kohl's catalog taxonomy string, e.g. \\", "in": "query", - "name": "url", + "name": "category", "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/" + "x-example": "Room:Dorm" } ], "produces": [ @@ -298033,7 +328000,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kohls.categoryResponseDoc" } }, "400": { @@ -298048,6 +328015,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -298060,30 +328033,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get IOL article content", + "summary": "Browse a Kohl's category or curated campaign page", "tags": [ - "IOL" + "Kohl's" ] } }, - "/iol/author": { + "/kohls/product/reviews": { "get": { - "description": "Returns one IOL author's public profile: name, role, photo, and the recent articles listed on their page.", - "operationId": "iol-author", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a Kohl's product's normalized 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": "Author slug, e.g. xolile-mtembu", + "description": "Kohl's product web id, e.g. from a GET /kohls/category response's products[].web_id", "in": "query", - "name": "slug", + "name": "web_id", + "required": true, "type": "string", - "x-example": "xolile-mtembu" + "x-example": "4569328" }, { - "description": "Canonical iol.co.za/authors// URL; alternative to slug", + "description": "Page number, 10 reviews per page (default 1)", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://iol.co.za/authors/xolile-mtembu/" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -298093,7 +328070,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.iolAuthorResponseDoc" + "$ref": "#/definitions/kohls.productReviewsResponseDoc" } }, "400": { @@ -298102,8 +328079,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -298120,148 +328097,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IOL author profile", + "summary": "Browse a Kohl's product's customer reviews", "tags": [ - "IOL" + "Kohl's" ] } }, - "/iol/headlines": { + "/kohls/stores": { "get": { - "description": "Returns fresh headlines from one public IOL section feed.", - "operationId": "iol-headlines", + "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": "IOL section path", - "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" - ], + "description": "Free-text location: city/state, zip code, or address", "in": "query", - "name": "section", + "name": "search", "required": true, - "type": "string" + "type": "string", + "x-example": "Seattle, WA" } ], "produces": [ @@ -298271,7 +328127,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kohls.storesResponseDoc" } }, "400": { @@ -298280,6 +328136,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -298292,16 +328154,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get IOL section headlines", + "summary": "Find nearby Kohl's store locations", "tags": [ - "IOL" + "Kohl's" ] } }, - "/iol/news": { + "/kohls/suggest": { "get": { - "description": "Returns fresh IOL (Independent Online, South Africa) stories from the public news feed.", - "operationId": "iol-news", + "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" ], @@ -298309,39 +328184,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/kohls.suggestResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get IOL top stories", - "tags": [ - "IOL" - ] - } - }, - "/iol/sections": { - "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": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -298350,24 +328211,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get IOL sections", + "summary": "Kohl's search-box typeahead suggestions", "tags": [ - "IOL" + "Kohl's" ] } }, - "/irishindependent/article": { + "/kotaku/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 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 Irish Independent article URL", + "description": "Canonical Kotaku 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" + "x-example": "https://kotaku.com/dressmaker-indie-hours-character-creators-2000736522" } ], "produces": [ @@ -298404,24 +328265,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Independent article content", + "summary": "Get Kotaku article content", "tags": [ - "Irish Independent" + "Kotaku" ] } }, - "/irishindependent/author": { + "/kotaku/author": { "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 a Kotaku author's name, biography, headshot, social links, and most recent articles from a canonical author URL.", + "operationId": "kotaku-author", "parameters": [ { - "description": "Canonical Irish Independent author URL", + "description": "Canonical Kotaku author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.independent.ie/authors/139084244-brian-keogh/" + "x-example": "https://kotaku.com/author/ethangach" } ], "produces": [ @@ -298431,7 +328292,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.irishindependentAuthorResponseDoc" + "$ref": "#/definitions/publicnews.kotakuAuthorResponseDoc" } }, "400": { @@ -298458,153 +328319,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Irish Independent author profile", + "summary": "Get a Kotaku author profile", "tags": [ - "Irish Independent" + "Kotaku" ] } }, - "/irishindependent/headlines": { + "/kotaku/headlines": { "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 fresh headlines from one Kotaku section's public RSS feed.", + "operationId": "kotaku-headlines", "parameters": [ { - "description": "Irish Independent section slug", + "description": "Kotaku 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" + "action", + "fantasy", + "horror", + "sci-fi", + "superhero", + "reviews", + "news", + "retro", + "kotaku-game-diary", + "youtube", + "odds-and-ends", + "feature", + "fine-art", + "game-tips", + "games", + "deals" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "entertainment" } ], "produces": [ @@ -298635,16 +328386,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Independent section headlines", + "summary": "Get Kotaku section headlines", "tags": [ - "Irish Independent" + "Kotaku" ] } }, - "/irishindependent/news": { + "/kotaku/news": { "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", + "description": "Returns fresh Kotaku gaming stories from its public RSS feed.", + "operationId": "kotaku-news", "produces": [ "application/json" ], @@ -298655,6 +328406,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -298667,16 +328424,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Independent top stories", + "summary": "Get Kotaku top stories", "tags": [ - "Irish Independent" + "Kotaku" ] } }, - "/irishindependent/sections": { + "/kotaku/sections": { "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", + "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" ], @@ -298693,24 +328450,152 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Independent sections", + "summary": "Get Kotaku sections", "tags": [ - "Irish Independent" + "Kotaku" ] } }, - "/irishtimes/article": { + "/kroger/categories": { "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", + "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/kroger.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Kroger's product-browse category taxonomy", + "tags": [ + "Kroger" + ] + } + }, + "/kroger/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Browses a Kroger product category and returns normalized 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. Served from Kroger's own search JSON API using category_id as a taxonomy filter, with real upstream pagination; it falls back to parsing the rendered category page if that path is unavailable, and the source field reports which path answered. Facet filters and sort apply to the JSON path only: when any of them is set, a JSON-path failure returns an error rather than silently falling back to unfiltered results.", + "operationId": "kroger-category", "parameters": [ { - "description": "Canonical Irish Times article 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://www.irishtimes.com/technology/2026/09/24/example-article-slug/" + "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": [ @@ -298720,7 +328605,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kroger.categoryResponseDoc" } }, "400": { @@ -298729,14 +328614,8 @@ "$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" } @@ -298753,24 +328632,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Times article content", + "summary": "Browse a Kroger category", "tags": [ - "Irish Times" + "Kroger" ] } }, - "/irishtimes/author": { + "/kroger/coupons": { "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 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": "Canonical Irish Times author URL", + "description": "Narrow to coupons applying to one Kroger product", "in": "query", - "name": "url", - "required": true, + "name": "upc", "type": "string", - "x-example": "https://www.irishtimes.com/author/jane-doe/" + "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": [ @@ -298780,7 +328692,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.irishtimesAuthorResponseDoc" + "$ref": "#/definitions/kroger.couponsResponseDoc" } }, "400": { @@ -298789,8 +328701,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -298807,41 +328719,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Irish Times author profile", + "summary": "Get Kroger digital coupons", "tags": [ - "Irish Times" + "Kroger" ] } }, - "/irishtimes/headlines": { + "/kroger/product": { "get": { - "description": "Returns fresh headlines from one public Irish Times section.", - "operationId": "irishtimes-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized product detail for one Kroger item: title, description, image, brand, category trail, price/availability, and rating, sourced from the product page's own schema.org structured data.", + "operationId": "kroger-product", "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" - ], + "description": "Kroger product UPC/id (the last path segment of the product page URL)", "in": "query", - "name": "section", + "name": "upc", "required": true, - "type": "string" + "type": "string", + "x-example": "0064519402151" } ], "produces": [ @@ -298851,7 +328749,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kroger.productResponseDoc" } }, "400": { @@ -298860,6 +328758,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": { @@ -298872,16 +328782,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Times section headlines", + "summary": "Get a Kroger product", "tags": [ - "Irish Times" + "Kroger" ] } }, - "/irishtimes/news": { + "/kroger/product/reviews": { "get": { - "description": "Returns fresh Irish Times top stories from its public Irish news feed.", - "operationId": "irishtimes-news", + "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" ], @@ -298889,7 +328829,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/kroger.reviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -298910,16 +328856,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Times top stories", + "summary": "Get a Kroger product's customer reviews", "tags": [ - "Irish Times" + "Kroger" ] } }, - "/irishtimes/sections": { + "/kroger/products": { "get": { - "description": "Returns the public Irish Times section inventory used by the headlines endpoint.", - "operationId": "irishtimes-sections", + "consumes": [ + "application/json" + ], + "description": "Returns full normalized detail for up to 50 Kroger products in one call, from Kroger's own product API. 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": "Comma-separated Kroger product UPCs, up to 50", + "in": "query", + "name": "upcs", + "required": true, + "type": "string", + "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": [ "application/json" ], @@ -298927,7 +328893,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/kroger.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" } } }, @@ -298936,37 +328920,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Times sections", + "summary": "Get full Kroger product detail in bulk", "tags": [ - "Irish Times" + "Kroger" ] } }, - "/jcrew/categories": { + "/kroger/related-tags": { "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 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": [ { - "default": "jcrew", - "description": "Storefront to list", - "enum": [ - "jcrew", - "factory" - ], + "description": "Search term to get refinement tags for", "in": "query", - "name": "site", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "chips ahoy" }, { - "description": "Department to filter to, e.g. women, men, boys, girls, accessories, shoes, home (jcrew only) -- omit for every department", + "description": "Kroger store/location id that scopes results", "in": "query", - "name": "department", + "name": "location_id", "type": "string", - "x-example": "women" + "x-example": "03500917" } ], "produces": [ @@ -298976,7 +328957,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.categoriesResponseDoc" + "$ref": "#/definitions/kroger.relatedTagsResponseDoc" } }, "400": { @@ -299003,47 +328984,103 @@ "ApiKeyAuth": [] } ], - "summary": "List J.Crew or J.Crew Factory categories", + "summary": "Get Kroger search-refinement tags", "tags": [ - "J.Crew" + "Kroger" ] } }, - "/jcrew/category": { + "/kroger/search": { "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": "Searches Kroger products by keyword and returns normalized 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). Served from Kroger's own search JSON API with real upstream pagination; if that path is unavailable it falls back to parsing the rendered search page, and the source field reports which path answered. Facet filters and sort apply to the JSON path only: when any of them is set, a JSON-path failure returns an error rather than silently falling back to unfiltered results.", + "operationId": "kroger-search", "parameters": [ { - "description": "Slash-separated category path -- see jcrew-categories", + "description": "Search keyword", "in": "query", - "name": "category", + "name": "query", "required": true, "type": "string", - "x-example": "womens/categories/clothing/sweaters" + "x-example": "milk" }, { - "default": "jcrew", - "description": "Storefront to browse", + "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": [ - "jcrew", - "factory" + "relevance", + "name_asc", + "popularity_desc" ], "in": "query", - "name": "site", + "name": "sort", "type": "string" }, { - "default": 1, - "description": "One-based page", + "description": "Comma-separated brand names to filter by, taken verbatim from a previous response's facets", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page", - "type": "integer" + "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": [ @@ -299053,7 +329090,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.categoryResponseDoc" + "$ref": "#/definitions/kroger.searchResponseDoc" } }, "400": { @@ -299062,12 +329099,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -299086,38 +329117,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a J.Crew or J.Crew Factory category", + "summary": "Search Kroger products", "tags": [ - "J.Crew" + "Kroger" ] } }, - "/jcrew/product": { + "/kroger/store": { "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 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": "Style id, from a search result's id field", + "description": "Kroger store/location id", "in": "query", - "name": "pid", + "name": "store_id", "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": "01600531" } ], "produces": [ @@ -299127,7 +329147,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.productResponseDoc" + "$ref": "#/definitions/kroger.storeResponseDoc" } }, "400": { @@ -299160,47 +329180,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a J.Crew or J.Crew Factory product", + "summary": "Get one Kroger store's detail", "tags": [ - "J.Crew" + "Kroger" ] } }, - "/jcrew/product/reviews": { + "/kroger/suggest": { "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 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": "Style id, from a search result's id field", + "description": "Partial search text; omit for trending default suggestions", "in": "query", - "name": "pid", - "required": true, + "name": "query", "type": "string", - "x-example": "CX415" - }, - { - "default": "jcrew", - "description": "Storefront the pid belongs to", - "enum": [ - "jcrew", - "factory" - ], - "in": "query", - "name": "site", - "type": "string" + "x-example": "rin" }, { - "default": 1, - "description": "One-based page, 10 reviews per page", + "description": "Kroger store/location id", "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "location_id", + "type": "string", + "x-example": "03500917" } ], "produces": [ @@ -299210,13 +329216,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.productReviewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/kroger.suggestResponseDoc" } }, "429": { @@ -299237,75 +329237,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get reviews for a J.Crew or J.Crew Factory product", + "summary": "Get Kroger search-box suggestions", "tags": [ - "J.Crew" + "Kroger" ] } }, - "/jcrew/search": { + "/kyliecosmetics/collections": { "get": { "consumes": [ "application/json" ], - "description": "Searches the product catalog for either storefront (select with site, default jcrew). Returns normalized 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 upstream 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 normalized 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": "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", + "description": "1-based page, defaults to 1", "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", - "enum": [ - "relevance", - "price_asc", - "price_desc" - ], - "in": "query", - "name": "sort", - "type": "string" + "type": "integer", + "x-example": 1 }, { - "description": "Comma-separated facet name:value pairs, e.g. productGender:Men,styleFabric:Cashmere", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "filter", - "type": "string", - "x-example": "productGender:Men" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -299315,7 +329273,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -299342,38 +329300,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search J.Crew or J.Crew Factory products", + "summary": "List Kylie Cosmetics collections", "tags": [ - "J.Crew" + "Kylie Cosmetics" ] } }, - "/jcrew/size-chart": { + "/kyliecosmetics/collections/{handle}/products": { "get": { "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", + "description": "Returns normalized 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": "Style id, from a search result's id field", - "in": "query", - "name": "pid", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "CX415" + "x-example": "collection-handle" }, { - "default": "jcrew", - "description": "Storefront the pid belongs to", - "enum": [ - "jcrew", - "factory" - ], + "description": "1-based page, defaults to 1", "in": "query", - "name": "site", - "type": "string" + "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": [ @@ -299383,7 +329344,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.sizeChartResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -299416,44 +329377,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get the size chart for a J.Crew or J.Crew Factory product", + "summary": "List Kylie Cosmetics collection products", "tags": [ - "J.Crew" + "Kylie Cosmetics" ] } }, - "/jcrew/stores": { + "/kyliecosmetics/pages": { "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 normalized static pages from Kylie Cosmetics (https://www.kyliecosmetics.com). The storefront URL is fixed server-side.", + "operationId": "kyliecosmetics-pages", "parameters": [ { - "default": "jcrew", - "description": "Storefront whose stores to return", - "enum": [ - "jcrew", - "factory" - ], - "in": "query", - "name": "site", - "type": "string" - }, - { - "description": "Latitude to sort distance from (must be given together with lng)", + "description": "1-based page, defaults to 1", "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.7128 + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Longitude to sort distance from (must be given together with lat)", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "lng", - "type": "number", - "x-example": -74.006 + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -299463,7 +329413,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.storesResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -299490,38 +329440,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find J.Crew or J.Crew Factory store locations", + "summary": "List Kylie Cosmetics static pages", "tags": [ - "J.Crew" + "Kylie Cosmetics" ] } }, - "/jcrew/suggest": { + "/kyliecosmetics/pages/{handle}": { "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 normalized static page detail for one Kylie Cosmetics (https://www.kyliecosmetics.com) page handle. The storefront URL is fixed server-side.", + "operationId": "kyliecosmetics-page", "parameters": [ { - "description": "Partial search query", - "in": "query", - "name": "query", + "description": "Page handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "dress" - }, - { - "default": "jcrew", - "description": "Storefront to search", - "enum": [ - "jcrew", - "factory" - ], - "in": "query", - "name": "site", - "type": "string" + "x-example": "page-handle" } ], "produces": [ @@ -299531,7 +329470,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.suggestResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -299540,6 +329479,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -299558,24 +329503,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get J.Crew or J.Crew Factory search-box suggestions", + "summary": "Get a Kylie Cosmetics static page", "tags": [ - "J.Crew" + "Kylie Cosmetics" ] } }, - "/jerusalempost/article": { + "/kyliecosmetics/products": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns normalized 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": "Canonical Jerusalem Post article URL", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.jpost.com/middle-east/article-909945" + "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": [ @@ -299585,7 +329539,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -299594,8 +329548,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -299612,24 +329566,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post article content", + "summary": "List Kylie Cosmetics products", "tags": [ - "Jerusalem Post" + "Kylie Cosmetics" ] } }, - "/jerusalempost/author": { + "/kyliecosmetics/products/{handle}": { "get": { - "description": "Returns a public author or blogger profile and article cards from its first-party profile page.", - "operationId": "jerusalempost-author", + "consumes": [ + "application/json" + ], + "description": "Returns normalized 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": "Canonical Jerusalem Post /author/ or /blogger/ profile URL", - "in": "query", - "name": "url", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://www.jpost.com/author/cameron-s-brown" + "x-example": "product-handle" } ], "produces": [ @@ -299639,7 +329596,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.jerusalemPostAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -299654,6 +329611,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -299666,16 +329629,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post author profile", + "summary": "Get a Kylie Cosmetics product", "tags": [ - "Jerusalem Post" + "Kylie Cosmetics" ] } }, - "/jerusalempost/authors": { + "/kyliecosmetics/products/{handle}/recommendations": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns normalized recommended products for one Kylie Cosmetics (https://www.kyliecosmetics.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "kyliecosmetics-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" ], @@ -299683,7 +329677,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.jerusalemPostAuthorsResponseDoc" + "$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": { @@ -299698,65 +329710,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Jerusalem Post author profiles", + "summary": "List Kylie Cosmetics product recommendations", "tags": [ - "Jerusalem Post" + "Kylie Cosmetics" ] } }, - "/jerusalempost/headlines": { + "/kyliecosmetics/search/suggest": { "get": { - "description": "Returns fresh non-premium stories from one public Jerusalem Post RSS section. Premium feed snippets are omitted.", - "operationId": "jerusalempost-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns products, collections, and query suggestions from Kylie Cosmetics's (https://www.kyliecosmetics.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "kyliecosmetics-search-suggest", "parameters": [ { - "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" - ], + "description": "Search query", "in": "query", - "name": "section", + "name": "q", "required": true, - "type": "string" + "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": [ @@ -299766,7 +329754,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -299775,6 +329763,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -299787,16 +329781,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post section headlines", + "summary": "Get Kylie Cosmetics search suggestions", "tags": [ - "Jerusalem Post" + "Kylie Cosmetics" ] } }, - "/jerusalempost/news": { + "/kyliecosmetics/sitemap/urls": { "get": { - "description": "Returns fresh non-premium Jerusalem Post stories from its public front-page RSS feed. Premium feed snippets are omitted.", - "operationId": "jerusalempost-news", + "consumes": [ + "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" + }, + { + "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], "produces": [ "application/json" ], @@ -299804,7 +329826,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -299819,16 +329853,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post top stories", + "summary": "List Kylie Cosmetics sitemap URLs", "tags": [ - "Jerusalem Post" + "Kylie Cosmetics" ] } }, - "/jerusalempost/sections": { + "/kyliecosmetics/sitemaps": { "get": { - "description": "Returns the live-verified public RSS sections accepted by jerusalempost-headlines.", - "operationId": "jerusalempost-sections", + "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" ], @@ -299836,7 +329873,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$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" } } }, @@ -299845,29 +329900,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post section inventory", + "summary": "List Kylie Cosmetics sitemaps", "tags": [ - "Jerusalem Post" + "Kylie Cosmetics" ] } }, - "/jimmy-johns/menu": { + "/kyliecosmetics/store": { "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", - "parameters": [ - { - "description": "Olo restaurant id from /jimmy-johns/nearby", - "in": "query", - "name": "restaurant_id", - "required": true, - "type": "integer", - "x-example": 67182 - } - ], + "description": "Returns normalized storefront metadata for Kylie Cosmetics (https://www.kyliecosmetics.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "kyliecosmetics-store", "produces": [ "application/json" ], @@ -299875,7 +329920,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.menuResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -299884,12 +329929,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -299908,27 +329947,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Jimmy John's restaurant's full menu", + "summary": "Get Kylie Cosmetics store metadata", "tags": [ - "JimmyJohns" + "Kylie Cosmetics" ] } }, - "/jimmy-johns/modifiers": { + "/latimes/article": { "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", + "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": "Product id from a /jimmy-johns/menu product", + "description": "Canonical Los Angeles Times article URL", "in": "query", - "name": "product_id", + "name": "url", "required": true, - "type": "integer", - "x-example": 33276056 + "type": "string", + "x-example": "https://www.latimes.com/environment/story/2026-09-18/newsom-rejects-roll-back-of-ceqa-exemptions-for-advanced-manufacturing" } ], "produces": [ @@ -299938,7 +329974,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.modifiersResponseDoc" + "$ref": "#/definitions/latimes.articleResponseDoc" } }, "400": { @@ -299971,49 +330007,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Jimmy John's menu product's customization options", + "summary": "Get Los Angeles Times article content", "tags": [ - "JimmyJohns" + "Los Angeles Times" ] } }, - "/jimmy-johns/nearby": { + "/latimes/author": { "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 a Los Angeles Times author's byline metadata, biography, contact/social links, and recent articles from a canonical author URL.", + "operationId": "latimes-author", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 39.9612 - }, - { - "description": "Search center longitude", + "description": "Canonical Los Angeles Times author URL", "in": "query", - "name": "longitude", + "name": "url", "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 + "type": "string", + "x-example": "https://www.latimes.com/people/anita-chabria" } ], "produces": [ @@ -300023,7 +330034,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.nearbyResponseDoc" + "$ref": "#/definitions/latimes.authorResponseDoc" } }, "400": { @@ -300032,6 +330043,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -300050,52 +330067,67 @@ "ApiKeyAuth": [] } ], - "summary": "Find Jimmy John's restaurants near a coordinate", + "summary": "Get a Los Angeles Times author profile", "tags": [ - "JimmyJohns" + "Los Angeles Times" ] } }, - "/jimmy-johns/sitemap": { + "/latimes/headlines": { "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 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": "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.", + "description": "Section slug from latimes-sections, defaults to main", "enum": [ - "sandwiches", - "delivery", - "catering" + "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": "kind", - "type": "string", - "x-example": "sandwiches" + "name": "section", + "type": "string" } ], "produces": [ @@ -300105,7 +330137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.sitemapResponseDoc" + "$ref": "#/definitions/latimes.headlinesResponseDoc" } }, "400": { @@ -300117,7 +330149,45 @@ "404": { "description": "Not Found", "schema": { - "$ref": "#/definitions/app.Response" + "$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 Los Angeles Times section headlines", + "tags": [ + "Los Angeles Times" + ] + } + }, + "/latimes/sections": { + "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", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/latimes.sectionsResponseDoc" } }, "429": { @@ -300138,27 +330208,33 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Jimmy John's store-URL index", + "summary": "List Los Angeles Times section feeds", "tags": [ - "JimmyJohns" + "Los Angeles Times" ] } }, - "/jimmy-johns/store": { + "/lazada/categories": { "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 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": "Store path from a /jimmy-johns/sitemap entry", + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "in/columbus/sandwiches-1414.html" + "name": "country", + "type": "string" } ], "produces": [ @@ -300168,7 +330244,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.storeResponseDoc" + "$ref": "#/definitions/lazada.categoriesResponseDoc" } }, "400": { @@ -300177,14 +330253,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" } @@ -300201,33 +330271,64 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Jimmy John's store's detail", + "summary": "Get a Lazada country storefront's category directory", "tags": [ - "JimmyJohns" + "Lazada" ] } }, - "/jobs/ashby/board": { + "/lazada/category-products": { "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). Credential-free public ATS JSON.", - "operationId": "jobs-ashby-board", + "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": "Ashby org slug (careers URL)", + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], "in": "query", - "name": "org", + "name": "country", + "type": "string" + }, + { + "description": "Lazada category path slug, e.g. \\", + "in": "query", + "name": "category", "required": true, "type": "string", - "x-example": "openai" + "x-example": "shop-mobiles" }, { - "description": "Include compensation summary", + "description": "Optional brand path slug to filter within the category.", "in": "query", - "name": "include_compensation", - "type": "boolean" + "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": [ @@ -300237,7 +330338,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/lazada.categoryProductsResponseDoc" } }, "400": { @@ -300246,6 +330347,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -300258,27 +330365,33 @@ "ApiKeyAuth": [] } ], - "summary": "List an organization's Ashby job board", + "summary": "Get a Lazada country storefront's product listing for one category", "tags": [ - "Jobs" + "Lazada" ] } }, - "/jobs/company-search": { + "/lazada/home": { "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). Credential-free public ATS JSON.", - "operationId": "jobs-company-search", + "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": "Company careers slug to probe", + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "stripe" + "name": "country", + "type": "string" } ], "produces": [ @@ -300288,7 +330401,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.searchResponseDoc" + "$ref": "#/definitions/lazada.homeResponseDoc" } }, "400": { @@ -300297,6 +330410,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -300309,58 +330428,46 @@ "ApiKeyAuth": [] } ], - "summary": "Find which ATS a company uses by slug", + "summary": "Get a Lazada country storefront's homepage feed", "tags": [ - "Jobs" + "Lazada" ] } }, - "/jobs/eightfold/board": { + "/lazada/product": { "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. Tries the newer PCSX search first, falling back to the legacy SmartApply generation when PCSX is not enabled for the tenant. Credential-free public ATS JSON.", - "operationId": "jobs-eightfold-board", + "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": "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", + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], "in": "query", - "name": "location", + "name": "country", "type": "string" }, { - "description": "Page size, default 10, max 10 (upstream caps results per page regardless of a larger value)", + "description": "Lazada item id.", "in": "query", - "name": "limit", - "type": "integer" + "name": "item_id", + "required": true, + "type": "integer", + "x-example": 159992555 }, { - "description": "Page offset, default 0", + "description": "Optional Lazada sku id, for a specific variant.", "in": "query", - "name": "offset", + "name": "sku_id", "type": "integer" } ], @@ -300371,7 +330478,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/lazada.productResponseDoc" } }, "400": { @@ -300380,6 +330487,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": { @@ -300392,41 +330511,57 @@ "ApiKeyAuth": [] } ], - "summary": "List an Eightfold tenant's job board", + "summary": "Get a Lazada country storefront's product-detail page", "tags": [ - "Jobs" + "Lazada" ] } }, - "/jobs/eightfold/job": { + "/lazada/search": { "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. Tries the newer PCSX detail first, falling back to the legacy SmartApply detail generation. Credential-free public ATS JSON.", - "operationId": "jobs-eightfold-job", + "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": "Eightfold tenant subdomain", + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], "in": "query", - "name": "tenant", - "required": true, - "type": "string", - "x-example": "microsoft" + "name": "country", + "type": "string" }, { - "description": "Hiring organization domain", + "description": "Free-text search query.", "in": "query", - "name": "domain", + "name": "q", "required": true, "type": "string", - "x-example": "microsoft.com" + "x-example": "karaoke" }, { - "description": "Eightfold position id from a board listing", + "description": "Result page, 1-indexed. Defaults to 1.", "in": "query", - "name": "id", - "required": true, + "name": "page", + "type": "integer" + }, + { + "description": "Sort order. Defaults to popularity.", + "enum": [ + "popularity", + "priceasc", + "pricedesc" + ], + "in": "query", + "name": "sort", "type": "string" } ], @@ -300437,7 +330572,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/lazada.searchResponseDoc" } }, "400": { @@ -300446,8 +330581,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -300464,27 +330599,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Eightfold position", + "summary": "Search a Lazada country storefront's catalog by keyword", "tags": [ - "Jobs" + "Lazada" ] } }, - "/jobs/gem/board": { + "/leboncoin/listing": { "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. Credential-free public GraphQL.", - "operationId": "jobs-gem-board", + "description": "Returns normalized 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": "Gem vanity URL slug (careers URL)", + "description": "Canonical public ad URL returned by leboncoin-search", "in": "query", - "name": "company", + "name": "url", "required": true, "type": "string", - "x-example": "agora" + "x-example": "https://www.leboncoin.fr/ad/ordinateurs/1946831025" } ], "produces": [ @@ -300494,7 +330626,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/leboncoin.listingResponseDoc" } }, "400": { @@ -300509,6 +330641,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -300521,33 +330659,24 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Gem job board", + "summary": "Get a Leboncoin public listing", "tags": [ - "Jobs" + "Leboncoin" ] } }, - "/jobs/greenhouse/board": { + "/leboncoin/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists a company's public Greenhouse board postings, normalized to 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. Credential-free public ATS JSON.", - "operationId": "jobs-greenhouse-board", + "description": "Returns normalized public listing cards from one Leboncoin location page. This endpoint excludes contacts, seller profiles, accounts, and transaction data.", + "operationId": "leboncoin-search", "parameters": [ { - "description": "Greenhouse board token (careers URL slug)", + "description": "Public Leboncoin location slug", "in": "query", - "name": "token", + "name": "location", "required": true, "type": "string", - "x-example": "stripe" - }, - { - "description": "Include full HTML description per job", - "in": "query", - "name": "content", - "type": "boolean" + "x-example": "cp_paris_75016" } ], "produces": [ @@ -300557,7 +330686,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/leboncoin.searchResponseDoc" } }, "400": { @@ -300566,8 +330695,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -300584,34 +330713,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Greenhouse job board", + "summary": "Search Leboncoin public listings", "tags": [ - "Jobs" + "Leboncoin" ] } }, - "/jobs/greenhouse/job": { + "/letterboxd/film/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Greenhouse job with its full HTML/text description, department, and offices. Credential-free public ATS JSON.", - "operationId": "jobs-greenhouse-job", + "description": "Returns a normalized Letterboxd film: synopsis, director, cast, genres, countries, languages, runtime, and aggregate member rating. Credential-free public Letterboxd data (letterboxd.com), parsed from the film page's schema.org structured data.", + "operationId": "letterboxd-film", "parameters": [ { - "description": "Greenhouse board token", - "in": "query", - "name": "token", + "description": "Letterboxd film slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "stripe" - }, - { - "description": "Greenhouse job id", - "in": "query", - "name": "id", - "required": true, - "type": "string" + "x-example": "parasite-2019" } ], "produces": [ @@ -300621,7 +330743,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/letterboxd.filmResponseDoc" } }, "400": { @@ -300636,6 +330758,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -300648,98 +330776,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Greenhouse job", + "summary": "Get a Letterboxd film", "tags": [ - "Jobs" + "Letterboxd" ] } }, - "/jobs/hiring-signals": { + "/letterboxd/film/{slug}/rating-histogram": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-hiring-signals", + "description": "Returns a film's full star-rating distribution (0.5 to 5.0 in half-star buckets) with counts and percentages. Credential-free public Letterboxd data.", + "operationId": "letterboxd-film-rating-histogram", "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", + "description": "Letterboxd film slug", + "in": "path", + "name": "slug", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "parasite-2019" } ], "produces": [ @@ -300749,7 +330806,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.signalsResponseDoc" + "$ref": "#/definitions/letterboxd.ratingHistogramResponseDoc" } }, "400": { @@ -300758,8 +330815,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -300776,48 +330833,30 @@ "ApiKeyAuth": [] } ], - "summary": "Aggregate hiring signals for a company's board", + "summary": "Get a Letterboxd film's rating distribution", "tags": [ - "Jobs" + "Letterboxd" ] } }, - "/jobs/icims/board": { + "/letterboxd/film/{slug}/reviews": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-icims-board", + "description": "Returns a film's popular reviews (reviewer, rating, date, text, like/comment counts, spoiler flag). Credential-free public Letterboxd data.", + "operationId": "letterboxd-film-reviews", "parameters": [ { - "description": "iCIMS tenant careers domain (careers URL)", - "in": "query", - "name": "domain", + "description": "Letterboxd film slug", + "in": "path", + "name": "slug", "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": "parasite-2019" }, { - "description": "Page size, default 20, max 50", + "description": "Max reviews, default 10, max 50", "in": "query", "name": "limit", "type": "integer" @@ -300830,7 +330869,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/letterboxd.reviewsResponseDoc" } }, "400": { @@ -300839,6 +330878,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -300851,41 +330896,33 @@ "ApiKeyAuth": [] } ], - "summary": "List an iCIMS tenant's job board", + "summary": "Get a Letterboxd film's popular reviews", "tags": [ - "Jobs" + "Letterboxd" ] } }, - "/jobs/icims/job": { + "/letterboxd/film/{slug}/similar": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-icims-job", + "description": "Returns films Letterboxd recommends as similar to the given film. Credential-free public Letterboxd data.", + "operationId": "letterboxd-film-similar", "parameters": [ { - "description": "iCIMS tenant careers domain", - "in": "query", - "name": "domain", + "description": "Letterboxd film slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "careers.costco.com" - }, - { - "description": "iCIMS job req_id/slug from a board listing", - "in": "query", - "name": "id", - "required": true, - "type": "string" + "x-example": "parasite-2019" }, { - "description": "Language code, default en-us", + "description": "Max films, default 10, max 50", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -300895,7 +330932,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/letterboxd.similarResponseDoc" } }, "400": { @@ -300904,8 +330941,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -300922,34 +330959,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single iCIMS job", + "summary": "Get films similar to a Letterboxd film", "tags": [ - "Jobs" + "Letterboxd" ] } }, - "/jobs/lever/posting": { + "/letterboxd/member/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Lever posting with its full HTML/text description. Credential-free public ATS JSON.", - "operationId": "jobs-lever-posting", + "description": "Returns a member's public profile stats (films watched, lists, following/followers). No private data — everything is visible to a logged-out visitor. Credential-free public Letterboxd data.", + "operationId": "letterboxd-member", "parameters": [ { - "description": "Lever company slug", - "in": "query", - "name": "company", + "description": "Letterboxd username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "spotify" - }, - { - "description": "Lever posting id", - "in": "query", - "name": "id", - "required": true, - "type": "string" + "x-example": "dave" } ], "produces": [ @@ -300959,7 +330989,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/letterboxd.memberResponseDoc" } }, "400": { @@ -300974,6 +331004,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -300986,45 +331022,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Lever posting", + "summary": "Get a Letterboxd member's public profile stats", "tags": [ - "Jobs" + "Letterboxd" ] } }, - "/jobs/lever/postings": { + "/letterboxd/person/{slug}": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-lever-postings", + "description": "Returns a person's Letterboxd filmography for a credit role. Credential-free public Letterboxd data.", + "operationId": "letterboxd-person", "parameters": [ { - "description": "Lever company slug (careers URL)", - "in": "query", - "name": "company", + "description": "Letterboxd person slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "spotify" - }, - { - "description": "Filter: department contains", - "in": "query", - "name": "department", - "type": "string" + "x-example": "bong-joon-ho" }, { - "description": "Filter: location contains", + "description": "Credit role, default actor", + "enum": [ + "actor", + "director" + ], "in": "query", - "name": "location", + "name": "role", "type": "string" }, { - "description": "Filter by remote (true or false)", + "description": "Max films, default 10, max 50", "in": "query", - "name": "remote", - "type": "boolean" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -301034,7 +331068,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/letterboxd.personResponseDoc" } }, "400": { @@ -301043,8 +331077,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301061,53 +331095,51 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Lever postings", + "summary": "Get a Letterboxd person's filmography", "tags": [ - "Jobs" + "Letterboxd" ] } }, - "/jobs/oracle/board": { + "/letterboxd/popular": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-oracle-board", + "description": "Returns a popularity-ranked film chart, optionally scoped to a time window, genre, and/or decade. Credential-free public Letterboxd data.", + "operationId": "letterboxd-popular", "parameters": [ { - "description": "Oracle Cloud host (careers URL, *.oraclecloud.com)", + "description": "Popularity window, omit for all-time", + "enum": [ + "day", + "week", + "month", + "year" + ], "in": "query", - "name": "host", - "required": true, - "type": "string", - "x-example": "eeho.fa.us2.oraclecloud.com" + "name": "period", + "type": "string" }, { - "description": "Oracle career site number", + "description": "Genre slug filter", "in": "query", - "name": "site", - "required": true, + "name": "genre", "type": "string", - "x-example": "CX_1" + "x-example": "mystery" }, { - "description": "Free-text keyword search", + "description": "Decade filter, e.g. 2010s", "in": "query", - "name": "search", - "type": "string" + "name": "decade", + "type": "string", + "x-example": "2010s" }, { - "description": "Page size, default 25, max 50", + "description": "Max films, default 10, max 50", "in": "query", "name": "limit", "type": "integer" - }, - { - "description": "Page offset, default 0", - "in": "query", - "name": "offset", - "type": "integer" } ], "produces": [ @@ -301117,7 +331149,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/letterboxd.popularResponseDoc" } }, "400": { @@ -301126,6 +331158,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -301138,42 +331176,42 @@ "ApiKeyAuth": [] } ], - "summary": "List an Oracle Recruiting (ORC) tenant's job board", + "summary": "Get a Letterboxd popularity-ranked film chart", "tags": [ - "Jobs" + "Letterboxd" ] } }, - "/jobs/oracle/job": { + "/letterboxd/search": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-oracle-job", + "description": "Searches Letterboxd films, people, lists, and tags. Credential-free public Letterboxd data.", + "operationId": "letterboxd-search", "parameters": [ { - "description": "Oracle Cloud host (*.oraclecloud.com)", + "description": "Search query", "in": "query", - "name": "host", + "name": "q", "required": true, "type": "string", - "x-example": "eeho.fa.us2.oraclecloud.com" + "x-example": "Parasite" }, { - "description": "Oracle career site number", + "description": "Optional result type filter", + "enum": [ + "film" + ], "in": "query", - "name": "site", - "required": true, - "type": "string", - "x-example": "CX_1" + "name": "type", + "type": "string" }, { - "description": "Oracle requisition Id from a board listing", + "description": "Max results, default 10, max 50", "in": "query", - "name": "id", - "required": true, - "type": "string" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -301183,7 +331221,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/letterboxd.searchResponseDoc" } }, "400": { @@ -301192,8 +331230,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301210,45 +331248,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Oracle Recruiting (ORC) requisition", + "summary": "Search Letterboxd", "tags": [ - "Jobs" + "Letterboxd" ] } }, - "/jobs/personio/feed": { + "/linkedin/company/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Personio board feed (XML), normalized to 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/. Credential-free public ATS feed.", - "operationId": "jobs-personio-feed", + "description": "Returns detailed company information by LinkedIn ID.", + "operationId": "linkedin-company", "parameters": [ { - "description": "Personio subdomain (careers URL)", - "in": "query", - "name": "company", + "description": "LinkedIn Company ID", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "getquin" - }, - { - "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": "googledeepmind" } ], "produces": [ @@ -301258,23 +331278,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/linkedin.companyResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid company ID", "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" } @@ -301285,67 +331305,25 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Personio job board", + "summary": "Get LinkedIn Company info by ID", "tags": [ - "Jobs" + "LinkedIn" ] } }, - "/jobs/phenom/board": { + "/linkedin/product/categories": { "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 — Phenom serves the search-results page as server-rendered HTML with the job data embedded inline, not a JSON API, but this is still credential-free public data with no auth, cookie, or session required). 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 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": "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": [ - "relevant", - "recent" - ], + "description": "Narrow results to categories matching this term. Omit to return every known category.", "in": "query", - "name": "sort", + "name": "keyword", "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)", - "in": "query", - "name": "limit", - "type": "integer" } ], "produces": [ @@ -301355,17 +331333,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/linkedin.productCategoriesResponseDoc" } }, - "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": "LinkedIn upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -301376,35 +331360,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search a Phenom People tenant's job board", + "summary": "Discover LinkedIn product categories", "tags": [ - "Jobs" + "LinkedIn" ] } }, - "/jobs/phenom/job": { + "/linkedin/product/{id}": { "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 detailed product information from LinkedIn by product ID.", + "operationId": "linkedin-product", "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", + "description": "LinkedIn Product ID", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "JR10002958" + "x-example": "microsoft-dynamics-microsoft-dynamics-365-business-central" } ], "produces": [ @@ -301414,23 +331390,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/linkedin.productResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid Params", "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" } @@ -301441,27 +331417,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Phenom People job", + "summary": "Get LinkedIn Product info by ID", "tags": [ - "Jobs" + "LinkedIn" ] } }, - "/jobs/pinpoint/board": { + "/linkedin/products/search": { "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/. Credential-free public JSON.", - "operationId": "jobs-pinpoint-board", + "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": [ { - "description": "Pinpoint tenant subdomain (careers URL)", + "description": "Search keyword, matched on word prefixes", "in": "query", - "name": "company", - "required": true, + "name": "keyword", "type": "string", - "x-example": "workwithus" + "x-example": "crm" + }, + { + "description": "Numeric category id from /linkedin/product/categories", + "in": "query", + "name": "category_id", + "type": "string", + "x-example": "1620" + }, + { + "default": 0, + "description": "Upstream card offset, 0 to 1199", + "in": "query", + "maximum": 1199, + "minimum": 0, + "name": "start", + "type": "integer" } ], "produces": [ @@ -301471,23 +331462,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/linkedin.productsSearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid Params", "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": "LinkedIn upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -301498,34 +331495,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a tenant's Pinpoint job board", + "summary": "Search the LinkedIn product directory", "tags": [ - "Jobs" + "LinkedIn" ] } }, - "/jobs/recruitee/offer": { + "/linkedin/showcase/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Recruitee offer with its full HTML/text description and structured compensation when the board exposes it. Credential-free public ATS JSON.", - "operationId": "jobs-recruitee-offer", + "description": "Returns detailed information about a LinkedIn showcase page by ID.", + "operationId": "linkedin-showcase", "parameters": [ { - "description": "Recruitee subdomain", - "in": "query", - "name": "company", - "required": true, - "type": "string", - "x-example": "bunq" - }, - { - "description": "Recruitee offer id", - "in": "query", + "description": "LinkedIn Showcase Page ID", + "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "think-with-google" } ], "produces": [ @@ -301535,23 +331525,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/linkedin.showcaseResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid Params", "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" } @@ -301562,45 +331552,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Recruitee offer", + "summary": "Get Linkedin Showcase Page Info", "tags": [ - "Jobs" + "LinkedIn" ] } }, - "/jobs/recruitee/offers": { + "/livemint/article": { "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/. Credential-free public ATS JSON.", - "operationId": "jobs-recruitee-offers", + "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": "Recruitee subdomain (careers URL)", + "description": "Canonical Mint article URL", "in": "query", - "name": "company", + "name": "url", "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" + "x-example": "https://www.livemint.com/companies/news/example-article-slug-11790258702207.html" } ], "produces": [ @@ -301610,7 +331579,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -301619,6 +331588,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -301637,45 +331612,24 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Recruitee offers", - "tags": [ - "Jobs" - ] - } - }, - "/jobs/rippling/board": { - "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. Credential-free public ATS JSON.", - "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" - }, + "summary": "Get Mint article content", + "tags": [ + "Mint" + ] + } + }, + "/livemint/author": { + "get": { + "description": "Returns a Mint author's byline metadata, biography, and social links from a canonical author profile URL.", + "operationId": "livemint-author", + "parameters": [ { - "description": "Filter by remote (true or false)", + "description": "Canonical Mint author URL", "in": "query", - "name": "remote", - "type": "boolean" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.livemint.com/authors/sheetal-goel" } ], "produces": [ @@ -301685,7 +331639,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/publicnews.livemintAuthorResponseDoc" } }, "400": { @@ -301712,34 +331666,41 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Rippling job board", + "summary": "Get a Mint author profile", "tags": [ - "Jobs" + "Mint" ] } }, - "/jobs/rippling/job": { + "/livemint/headlines": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-rippling-job", + "description": "Returns fresh headlines from one public Mint section.", + "operationId": "livemint-headlines", "parameters": [ { - "description": "Rippling board slug", + "description": "Mint section slug", + "enum": [ + "companies", + "opinion", + "money", + "politics", + "science", + "industry", + "education", + "sports", + "technology", + "markets", + "ai", + "insurance", + "budget", + "elections", + "videos" + ], "in": "query", - "name": "company", + "name": "section", "required": true, "type": "string", - "x-example": "rippling" - }, - { - "description": "Rippling job uuid", - "in": "query", - "name": "id", - "required": true, - "type": "string" + "x-example": "companies" } ], "produces": [ @@ -301749,7 +331710,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -301758,8 +331719,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Mint section headlines", + "tags": [ + "Mint" + ] + } + }, + "/livemint/news": { + "get": { + "description": "Returns fresh Mint (livemint.com) top stories from its public \"news\" feed.", + "operationId": "livemint-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -301776,34 +331769,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Rippling job", + "summary": "Get Mint top stories", "tags": [ - "Jobs" + "Mint" ] } }, - "/jobs/smartrecruiters/posting": { + "/livemint/sections": { "get": { - "consumes": [ + "description": "Returns the public Mint section inventory used by the headlines endpoint.", + "operationId": "livemint-sections", + "produces": [ "application/json" ], - "description": "Returns a single SmartRecruiters posting with its jobAd description. Recruiter personal data is intentionally omitted. Credential-free public ATS JSON.", - "operationId": "jobs-smartrecruiters-posting", + "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": "SmartRecruiters company id", + "description": "Canonical Liverpool Echo article URL", "in": "query", - "name": "company", + "name": "url", "required": true, "type": "string", - "x-example": "Visa" - }, - { - "description": "SmartRecruiters posting id", - "in": "query", - "name": "id", - "required": true, - "type": "string" + "x-example": "https://www.liverpoolecho.co.uk/news/liverpool-news/oxton-mans-vile-campaign-harassment-34666610" } ], "produces": [ @@ -301813,7 +331822,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -301828,6 +331837,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -301840,38 +331855,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single SmartRecruiters posting", + "summary": "Get Liverpool Echo article content", "tags": [ - "Jobs" + "Liverpool Echo" ] } }, - "/jobs/smartrecruiters/postings": { + "/liverpoolecho/author": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-smartrecruiters-postings", + "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": "SmartRecruiters company id (careers URL)", + "description": "Author slug, e.g. wesley-holmes", "in": "query", - "name": "company", - "required": true, + "name": "slug", "type": "string", - "x-example": "Visa" + "x-example": "wesley-holmes" }, { - "description": "Page size, default 100, max 100", + "description": "Canonical liverpoolecho.co.uk/authors// URL; alternative to slug", "in": "query", - "name": "limit", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.liverpoolecho.co.uk/authors/wesley-holmes/" }, { - "description": "Page offset, default 0", + "default": 1, + "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", "in": "query", - "name": "offset", + "name": "page", "type": "integer" } ], @@ -301882,7 +331895,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" } }, "400": { @@ -301897,6 +331910,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -301909,45 +331928,54 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's SmartRecruiters postings", + "summary": "Get a Liverpool Echo author profile", "tags": [ - "Jobs" + "Liverpool Echo" ] } }, - "/jobs/teamtailor/jobs": { + "/liverpoolecho/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists a company's public Teamtailor board feed (JSON Feed), normalized to 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/. Credential-free public ATS feed.", - "operationId": "jobs-teamtailor-jobs", + "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": "Teamtailor subdomain (careers URL)", + "description": "Liverpool Echo section slug", + "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" + ], "in": "query", - "name": "company", + "name": "section", "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": "news" } ], "produces": [ @@ -301957,7 +331985,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -301966,8 +331994,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -301984,55 +332012,16 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Teamtailor job board", + "summary": "Get Liverpool Echo section headlines", "tags": [ - "Jobs" + "Liverpool Echo" ] } }, - "/jobs/ukg/board": { + "/liverpoolecho/news": { "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 (UKG's full detail page is HTML, not JSON). Credential-free public ATS JSON.", - "operationId": "jobs-ukg-board", - "parameters": [ - { - "description": "UKG tenant code (careers URL)", - "in": "query", - "name": "tenant", - "required": true, - "type": "string", - "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" - } - ], + "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" ], @@ -302040,11 +332029,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -302061,34 +332050,50 @@ "ApiKeyAuth": [] } ], - "summary": "List a UKG Pro Recruiting tenant's job board", + "summary": "Get Liverpool Echo top stories", "tags": [ - "Jobs" + "Liverpool Echo" ] } }, - "/jobs/workable/posting": { + "/liverpoolecho/sections": { "get": { - "consumes": [ + "description": "Returns the public Liverpool Echo editorial section inventory used by liverpoolecho-headlines.", + "operationId": "liverpoolecho-sections", + "produces": [ "application/json" ], - "description": "Returns a single Workable posting with its full HTML/text description. The id is the posting shortcode from a listing. Credential-free public ATS JSON.", - "operationId": "jobs-workable-posting", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Liverpool Echo sections", + "tags": [ + "Liverpool Echo" + ] + } + }, + "/livescience/article": { + "get": { + "description": "Returns public Live Science article metadata and body paragraphs from a canonical article URL.", + "operationId": "livescience-article", "parameters": [ { - "description": "Workable account slug", + "description": "Canonical Live Science article URL", "in": "query", - "name": "company", + "name": "url", "required": true, "type": "string", - "x-example": "zego" - }, - { - "description": "Workable posting shortcode", - "in": "query", - "name": "id", - "required": true, - "type": "string" + "x-example": "https://www.livescience.com/space/comets/example-comet-story" } ], "produces": [ @@ -302098,7 +332103,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -302125,51 +332130,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Workable posting", + "summary": "Get Live Science article content", "tags": [ - "Jobs" + "Live Science" ] } }, - "/jobs/workable/postings": { + "/livescience/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists a company's public Workable postings, normalized to 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. Credential-free public ATS JSON.", - "operationId": "jobs-workable-postings", + "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": "Workable account slug (careers URL)", + "description": "Author slug, e.g. ben-turner", "in": "query", - "name": "company", - "required": true, + "name": "slug", "type": "string", - "x-example": "zego" - }, - { - "description": "Free-text search", - "in": "query", - "name": "search", - "type": "string" - }, - { - "description": "Filter: department contains", - "in": "query", - "name": "department", - "type": "string" + "x-example": "ben-turner" }, { - "description": "Filter: location contains", + "description": "Canonical livescience.com/author/ URL, optionally with a /page/ segment; alternative to slug", "in": "query", - "name": "location", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.livescience.com/author/ben-turner" }, { - "description": "Filter by remote (true or false)", + "default": 1, + "description": "1-based page number of the author's article list; overrides any page number embedded in url", "in": "query", - "name": "remote", - "type": "boolean" + "name": "page", + "type": "integer" } ], "produces": [ @@ -302179,7 +332170,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/publicnews.livescienceAuthorResponseDoc" } }, "400": { @@ -302206,61 +332197,40 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Workable postings", + "summary": "Get a Live Science author profile", "tags": [ - "Jobs" + "Live Science" ] } }, - "/jobs/workday/board": { + "/livescience/headlines": { "get": { - "consumes": [ - "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}. Credential-free public ATS JSON.", - "operationId": "jobs-workday-board", + "description": "Returns fresh Live Science headlines from one public section hub page.", + "operationId": "livescience-headlines", "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", + "description": "Live Science section slug", + "enum": [ + "animals", + "archaeology", + "chemistry", + "features", + "health", + "human-behavior", + "interviews", + "news", + "opinion", + "physics-mathematics", + "planet-earth", + "products", + "space", + "technology" + ], "in": "query", - "name": "site", + "name": "section", "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" + "x-example": "animals" } ], "produces": [ @@ -302270,7 +332240,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -302291,52 +332261,16 @@ "ApiKeyAuth": [] } ], - "summary": "List a Workday tenant's job board", + "summary": "Get Live Science section headlines", "tags": [ - "Jobs" + "Live Science" ] } }, - "/jobs/workday/job": { + "/livescience/news": { "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. Credential-free public ATS JSON.", - "operationId": "jobs-workday-job", - "parameters": [ - { - "description": "Workday tenant", - "in": "query", - "name": "tenant", - "required": true, - "type": "string", - "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" - } - ], + "description": "Returns fresh Live Science top stories from the public RSS feed.", + "operationId": "livescience-news", "produces": [ "application/json" ], @@ -302344,17 +332278,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" - } - }, - "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" } @@ -302371,27 +332299,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Workday job", + "summary": "Get Live Science top stories", "tags": [ - "Jobs" + "Live Science" ] } }, - "/justeat/restaurant": { + "/livescience/sections": { + "get": { + "description": "Returns the public Live Science top-level editorial taxonomy used by the headlines endpoint.", + "operationId": "livescience-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Live Science sections", + "tags": [ + "Live Science" + ] + } + }, + "/livescore/competition": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Just Eat restaurant's detail by unique_name: name, address, primary cuisine, rating, and whether it currently accepts orders.", - "operationId": "justeat-restaurant", + "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": "Restaurant slug, from a search response's unique_name field", + "description": "Three to five lowercase path segments following /en/, such as football/england/premier-league or football/england/premier-league/standings", "in": "query", - "name": "unique_name", + "name": "path", "required": true, "type": "string", - "x-example": "mcdonalds-victorialondon" + "x-example": "football/england/premier-league" } ], "produces": [ @@ -302401,7 +332355,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justeat.restaurantResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -302428,29 +332382,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Just Eat restaurant's detail", + "summary": "LiveScore competition page and section data", "tags": [ - "Just Eat" + "LiveScore" ] } }, - "/justeat/restaurant/menu": { + "/livescore/competitions": { "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", - "parameters": [ - { - "description": "Restaurant slug, from a search response's unique_name field", - "in": "query", - "name": "unique_name", - "required": true, - "type": "string", - "x-example": "mcdonalds-victorialondon" - } - ], + "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" ], @@ -302458,19 +332402,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justeat.menuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/livescore.responseDoc" } }, "503": { @@ -302485,60 +332417,65 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Just Eat restaurant's menu with prices", + "summary": "LiveScore competition page directory", "tags": [ - "Just Eat" + "LiveScore" ] } }, - "/justeat/search": { + "/livescore/live-scores": { "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 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": "UK postcode to search near", + "description": "LiveScore sport id", + "enum": [ + "soccer", + "hockey", + "basketball", + "tennis", + "cricket" + ], "in": "query", - "name": "postcode", + "name": "sport", "required": true, "type": "string", - "x-example": "SW1A 1AA" + "x-example": "soccer" }, { - "description": "Restaurants to return, clamped to 100 (default 20)", + "description": "UTC offset in hours from -12 through 14; defaults to 0", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "maximum": 14, + "minimum": -12, + "name": "timezone_offset", + "type": "integer" }, { - "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.", + "description": "Request a paged live feed; defaults to false", "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "pizza" + "name": "paging", + "type": "boolean" }, { - "description": "Result order, matching the area page's own Sort by control. Default best_match.", + "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": [ - "best_match", - "review_rating", - "distance", - "delivery_time", - "minimum_order_value", - "delivery_fee" + "down", + "up" ], "in": "query", - "name": "sort_by", - "type": "string", - "x-example": "distance" + "name": "direction", + "type": "string" } ], "produces": [ @@ -302548,7 +332485,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justeat.searchResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -302557,6 +332494,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -302569,27 +332512,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Just Eat restaurants near a UK postcode", + "summary": "LiveScore live scores by sport", "tags": [ - "Just Eat" + "LiveScore" ] } }, - "/justeat/search/filters": { + "/livescore/match": { "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 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": "UK postcode to look up", + "description": "Five path segments following /en/ in a LiveScore match URL", "in": "query", - "name": "postcode", + "name": "path", "required": true, "type": "string", - "x-example": "SW1A 1AA" + "x-example": "football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267" } ], "produces": [ @@ -302599,7 +332542,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justeat.filtersResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -302608,6 +332551,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -302620,27 +332569,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Just Eat's live filter slug catalog for a UK postcode", + "summary": "LiveScore match details", "tags": [ - "Just Eat" + "LiveScore" ] } }, - "/justwatch/age-certifications": { + "/livescore/match-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns JustWatch age certification technical names for a country.", - "operationId": "justwatch-age-certifications", + "description": "Returns the statistics section for a LiveScore match when the source exposes it. The current Next.js build id is resolved from the public match page at request time.", + "operationId": "livescore-match-stats", "parameters": [ { - "default": "US", - "description": "Two-letter country code", + "description": "Five-segment path after /en/ from a LiveScore match URL", "in": "query", - "name": "country", + "name": "path", + "required": true, "type": "string", - "x-example": "US" + "x-example": "football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267" } ], "produces": [ @@ -302650,7 +332599,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.ageCertificationsResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -302659,8 +332608,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -302677,104 +332626,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch age certifications", + "summary": "LiveScore match statistics", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/discover": { + "/livescore/news": { "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 public article-card metadata for a LiveScore news route. Discover sport, competition, team, tips, and daily-feed paths from /livescore/news-categories.", + "operationId": "livescore-news", "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", - "enum": [ - "FLATRATE", - "FREE", - "ADS", - "RENT", - "BUY" - ], + "description": "all or a lowercase path from /livescore/news-categories; up to six segments", "in": "query", - "name": "monetization_types", + "name": "category", + "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": "football/premier-league" } ], "produces": [ @@ -302784,7 +332656,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.discoverResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -302793,8 +332665,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -302811,43 +332683,27 @@ "ApiKeyAuth": [] } ], - "summary": "Discover JustWatch titles", + "summary": "LiveScore news by category or topic", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/episode/by-id": { + "/livescore/news-article": { "get": { "consumes": [ "application/json" ], - "description": "Looks up an episode by raw JustWatch GraphQL id such as `tse5550494` and returns normalized metadata and offers.", - "operationId": "justwatch-episode-by-id", + "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": "Raw JustWatch episode id matching tse[0-9]+", + "description": "Two to eight lowercase path segments after /en/news/, copied from an article slug", "in": "query", - "name": "id", + "name": "path", "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" + "x-example": "football/man-city-guilty-of-114-charges-what-happens-next-man-city-square" } ], "produces": [ @@ -302857,7 +332713,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.episodeByIDResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -302872,12 +332728,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -302890,45 +332740,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch episode by raw id", + "summary": "LiveScore news article", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/episode/offers": { + "/livescore/news-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized offers for a raw JustWatch episode id across one to five comma-separated country codes.", - "operationId": "justwatch-episode-offers", - "parameters": [ - { - "description": "Raw JustWatch episode id matching tse[0-9]+", - "in": "query", - "name": "id", - "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" - } - ], + "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" ], @@ -302936,25 +332760,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.episodeOffersResponseDoc" - } - }, - "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.newsCategoriesResponseDoc" } }, "503": { @@ -302969,65 +332775,69 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch episode offers", + "summary": "LiveScore news categories", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/genre/titles": { + "/livescore/news-feed": { "get": { "consumes": [ "application/json" ], - "description": "Returns popular titles for one JustWatch genre short name such as `act`. Type accepts only `all`, `movie`, or `show`.", - "operationId": "justwatch-genre-titles", + "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": "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", + "default": false, + "description": "Include full RSS article content when available", "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "name": "include_content", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/livescore.livescoreNewsFeedResponseDoc" + } }, - { - "description": "Maximum results, defaults to 20 and clamps to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "all", - "description": "Title type: all, movie, show", - "enum": [ - "all", - "movie", - "show" - ], - "in": "query", - "name": "type", - "type": "string", - "x-example": "all" + "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" ], @@ -303035,17 +332845,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.genreTitlesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/livescore.livescoreNewsPublishersResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -303062,27 +332866,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch genre titles", + "summary": "LiveScore news publisher directory", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/genres": { + "/livescore/player": { "get": { "consumes": [ "application/json" ], - "description": "Returns JustWatch genre short names and localized translations.", - "operationId": "justwatch-genres", + "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": [ { - "default": "en", - "description": "Two-letter language code", + "description": "season-stats/player-slug/numeric-player-id path copied from a public LiveScore player link", "in": "query", - "name": "language", + "name": "path", + "required": true, "type": "string", - "x-example": "en" + "x-example": "season-stats/radek-vitek/56253" } ], "produces": [ @@ -303092,7 +332896,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.genresResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -303101,8 +332905,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -303119,70 +332923,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch genres", + "summary": "LiveScore player profile", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/monetization/titles": { + "/livescore/scores": { "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 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": "Monetization type: FLATRATE, FREE, ADS, RENT, BUY", + "description": "LiveScore sport id", "enum": [ - "FLATRATE", - "FREE", - "ADS", - "RENT", - "BUY" + "soccer", + "hockey", + "basketball", + "tennis", + "cricket" ], "in": "query", - "name": "monetization_type", + "name": "sport", "required": true, "type": "string", - "x-example": "FLATRATE" + "x-example": "soccer" }, { - "default": "US", - "description": "Two-letter country code", + "description": "Calendar date in YYYYMMDD format", "in": "query", - "name": "country", + "name": "date", + "required": true, "type": "string", - "x-example": "US" + "x-example": "20260926" }, { - "default": "en", - "description": "Two-letter language code", + "description": "UTC offset in hours from -12 through 14; defaults to 0", "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "maximum": 14, + "minimum": -12, + "name": "timezone_offset", + "type": "integer" }, { - "description": "Maximum results, defaults to 20 and clamps to 50", + "description": "Request one UI-style page; defaults to false (full-day feed)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "paging", + "type": "boolean" }, { - "default": "all", - "description": "Title type: all, movie, show", + "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": [ - "all", - "movie", - "show" + "down", + "up" ], "in": "query", - "name": "type", - "type": "string", - "x-example": "all" + "name": "direction", + "type": "string" } ], "produces": [ @@ -303192,7 +332999,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.monetizationTitlesResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -303201,8 +333008,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -303219,55 +333026,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch monetization titles", + "summary": "LiveScore scores and fixtures by sport and date", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/new": { + "/livescore/scores-toc": { "get": { "consumes": [ "application/json" ], - "description": "Returns newly available movies and shows from the public JustWatch website GraphQL endpoint. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.", - "operationId": "justwatch-new", + "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": [ { - "default": "US", - "description": "Two-letter country code", + "description": "LiveScore sport id", + "enum": [ + "soccer", + "hockey", + "basketball", + "tennis", + "cricket" + ], "in": "query", - "name": "country", + "name": "sport", + "required": true, "type": "string", - "x-example": "US" + "x-example": "soccer" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Calendar date in YYYYMMDD format", "in": "query", - "name": "language", + "name": "date", + "required": true, "type": "string", - "x-example": "en" - }, - { - "description": "Maximum results, defaults to 20 and clamps to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "20260926" }, { - "default": "all", - "description": "Title type: all, movie, show", - "enum": [ - "all", - "movie", - "show" - ], + "description": "UTC offset in hours from -12 through 14; defaults to 0", "in": "query", - "name": "type", - "type": "string", - "x-example": "all" + "maximum": 14, + "minimum": -12, + "name": "timezone_offset", + "type": "integer" } ], "produces": [ @@ -303277,7 +333079,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.newTitlesResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -303286,8 +333088,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -303304,62 +333106,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get new JustWatch titles", + "summary": "LiveScore score date table of contents", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/popular": { + "/livescore/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns popular movies and shows from the public JustWatch website GraphQL endpoint. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.", - "operationId": "justwatch-popular", + "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": [ { - "default": "US", - "description": "Two-letter country code", + "description": "LiveScore sport token", + "enum": [ + "soccer", + "hockey", + "basketball", + "tennis", + "cricket" + ], "in": "query", - "name": "country", + "name": "sport", + "required": true, "type": "string", - "x-example": "US" + "x-example": "soccer" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Optional free-text team, competition, or region term (up to 100 characters). Omit or leave empty to browse current results.", "in": "query", - "name": "language", + "maxLength": 100, + "name": "query", "type": "string", - "x-example": "en" + "x-example": "Manchester City" }, { - "description": "Maximum results, defaults to 20 and clamps to 50", + "description": "Optional results per section (1 to 100). Defaults to 10 for a text query or 50 when query is empty.", "in": "query", + "maximum": 100, + "minimum": 1, "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==" + "x-example": 50 } ], "produces": [ @@ -303369,7 +333160,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.popularResponseDoc" + "$ref": "#/definitions/livescore.livescoreSearchResponseDoc" } }, "400": { @@ -303378,8 +333169,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -303396,63 +333187,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get popular JustWatch titles", + "summary": "Search LiveScore teams, competitions, and regions", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/provider/titles": { + "/livescore/sports": { "get": { "consumes": [ "application/json" ], - "description": "Returns popular movie/show titles available through a JustWatch provider short name such as `nfx`.", - "operationId": "justwatch-provider-titles", + "description": "Returns the complete five-sport set shown in LiveScore's fixture navigation. Use a sport id with /livescore/scores.", + "operationId": "livescore-sports", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/livescore.sportsResponseDoc" + } + } + }, + "security": [ + { + "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": "JustWatch provider short name", + "description": "Five to nine lowercase path segments following /en/ from a public LiveScore team page or linked tab", "in": "query", - "name": "provider", + "name": "path", "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" - }, - { - "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" + "x-example": "football/team/name/2909/stats/teams/70" } ], "produces": [ @@ -303462,7 +333246,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.providerTitlesResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -303471,8 +333255,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -303489,27 +333273,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch provider titles", + "summary": "LiveScore team page and section data", "tags": [ - "JustWatch" + "LiveScore" ] } }, - "/justwatch/providers": { + "/lululemon/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns the credential-free public JustWatch provider catalog for a country.", - "operationId": "justwatch-providers", + "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": [ { - "default": "US", - "description": "Two-letter country code", + "description": "Filter to one top-level storefront nav section", + "enum": [ + "new-featured", + "women", + "men", + "accessories", + "bags", + "activity", + "we-made-too-much" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "section", + "type": "string" } ], "produces": [ @@ -303519,7 +333310,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.providersResponseDoc" + "$ref": "#/definitions/lululemon.categoriesResponseDoc" } }, "400": { @@ -303546,50 +333337,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch providers", + "summary": "Browse lululemon's storefront category navigation", "tags": [ - "JustWatch" + "Lululemon" ] } }, - "/justwatch/search": { + "/lululemon/category": { "get": { "consumes": [ "application/json" ], - "description": "Searches JustWatch titles using the public credential-free website GraphQL endpoint. 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 one lululemon category's product listing page: normalized products with pricing, sale detection, sizes, colors, and style numbers, sourced from lululemon's own app-backend category data. 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": "Search query", + "description": "lululemon category slug, from a category URL's first path segment", "in": "query", - "name": "query", + "name": "category", "required": true, "type": "string", - "x-example": "inception" + "x-example": "women-new-styles" }, { - "default": "US", - "description": "Two-letter country code", + "description": "lululemon category id, from a category URL's second path segment", "in": "query", - "name": "country", + "name": "cdp_hash", + "required": true, "type": "string", - "x-example": "US" + "x-example": "n14f1wz6o10" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Page number, one-based, defaults to 1", "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Maximum results, defaults to 10 and clamps to 25", + "description": "Results per page, 1 to 100, defaults to 24", "in": "query", - "name": "limit", + "name": "page_size", "type": "integer", - "x-example": 10 + "x-example": 24 } ], "produces": [ @@ -303599,7 +333389,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.searchResponseDoc" + "$ref": "#/definitions/lululemon.categoryResponseDoc" } }, "400": { @@ -303632,43 +333422,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search JustWatch titles", + "summary": "Browse a lululemon category's product listing", "tags": [ - "JustWatch" + "Lululemon" ] } }, - "/justwatch/season/by-id": { + "/lululemon/outfit": { "get": { "consumes": [ "application/json" ], - "description": "Looks up a season by raw JustWatch GraphQL id such as `tss297253`.", - "operationId": "justwatch-season-by-id", + "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": "Raw JustWatch season id matching tss[0-9]+", + "description": "lululemon product unified id, from a lululemon-product result's unified_id field", "in": "query", - "name": "id", + "name": "unified_id", "required": true, "type": "string", - "x-example": "tss297253" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "x-example": "Scuba-Relaxed-Half-Zip-Colourblock" }, { - "default": "en", - "description": "Two-letter language code", + "description": "lululemon color code, from a lululemon-product result's colors[].code field", "in": "query", - "name": "language", + "name": "color_code", + "required": true, "type": "string", - "x-example": "en" + "x-example": "79895" } ], "produces": [ @@ -303678,7 +333460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.seasonByIDResponseDoc" + "$ref": "#/definitions/lululemon.outfitResponseDoc" } }, "400": { @@ -303711,43 +333493,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch season by raw id", + "summary": "Get lululemon's outfit/style recommendations for a product color", "tags": [ - "JustWatch" + "Lululemon" ] } }, - "/justwatch/season/episodes": { + "/lululemon/product/{product_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns episodes and normalized episode offers for a raw JustWatch season id such as `tss297253`.", - "operationId": "justwatch-season-episodes", + "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": "Raw JustWatch season id matching tss[0-9]+", - "in": "query", - "name": "season_id", + "description": "lululemon product id, from a lululemon-category result's id field", + "in": "path", + "name": "product_id", "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": "lt5o6p8kho" } ], "produces": [ @@ -303757,7 +333523,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.seasonEpisodesResponseDoc" + "$ref": "#/definitions/lululemon.productDetailResponseDoc" } }, "400": { @@ -303790,43 +333556,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch season episodes", + "summary": "Get a lululemon product's full detail", "tags": [ - "JustWatch" + "Lululemon" ] } }, - "/justwatch/show/seasons": { + "/lululemon/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns seasons for a raw JustWatch show id such as `ts287292`.", - "operationId": "justwatch-show-seasons", + "description": "Returns lululemon's own complete physical store directory (480 US and 86 Canada locations as of this endpoint's own research), including regular weekly hours and in-store amenities. All filters are optional and applied locally after fetching the full directory -- there is no live geo-search API on a credential-free host for this platform. 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": "Raw JustWatch show id matching ts[0-9]+", + "description": "Filter to one country by its 2-letter code", "in": "query", - "name": "show_id", - "required": true, + "name": "country", "type": "string", - "x-example": "ts287292" + "x-example": "US" }, { - "default": "US", - "description": "Two-letter country code", + "description": "Filter to one state/province by its 2-letter code", "in": "query", - "name": "country", + "name": "state", "type": "string", - "x-example": "US" + "x-example": "NY" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Latitude, requires lng", "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "name": "lat", + "type": "number", + "x-example": 40.7538 + }, + { + "description": "Longitude, requires lat", + "in": "query", + "name": "lng", + "type": "number", + "x-example": -74.0022 + }, + { + "description": "Search radius in miles, 1 to 500, defaults to 50", + "in": "query", + "name": "radius_miles", + "type": "number", + "x-example": 50 } ], "produces": [ @@ -303836,7 +333613,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.showSeasonsResponseDoc" + "$ref": "#/definitions/lululemon.storesResponseDoc" } }, "400": { @@ -303845,12 +333622,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -303869,33 +333640,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch show seasons", + "summary": "Browse lululemon's physical store directory", "tags": [ - "JustWatch" + "Lululemon" ] } }, - "/justwatch/title": { + "/macrumors/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches a JustWatch title page and returns normalized metadata and current offers. Pass exactly one of `path` or `url`.", - "operationId": "justwatch-title", + "description": "Returns public MacRumors article metadata and body paragraphs from a canonical news, guide, how-to or review URL.", + "operationId": "macrumors-article", "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": "Canonical MacRumors article URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.justwatch.com/us/movie/inception" + "x-example": "https://www.macrumors.com/2026/09/24/google-photos-wardrobe-ios/" } ], "produces": [ @@ -303905,7 +333667,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.titleResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -303920,12 +333682,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -303938,33 +333694,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch title details", + "summary": "Get MacRumors article content", "tags": [ - "JustWatch" + "MacRumors" ] } }, - "/justwatch/title/analysis": { + "/macrumors/author": { "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 one MacRumors author's public profile: name, bio, avatar, and their recent articles.", + "operationId": "macrumors-author", "parameters": [ { - "description": "JustWatch title path", + "description": "Author slug, e.g. juli-clover", "in": "query", - "name": "path", + "name": "slug", "type": "string", - "x-example": "/us/movie/inception" + "x-example": "juli-clover" }, { - "description": "Absolute https://www.justwatch.com title URL", + "description": "Canonical macrumors.com/author/ URL; alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.justwatch.com/us/movie/inception" + "x-example": "https://www.macrumors.com/author/juli-clover/" } ], "produces": [ @@ -303974,7 +333727,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.analysisResponseDoc" + "$ref": "#/definitions/publicnews.macRumorsAuthorResponseDoc" } }, "400": { @@ -303989,12 +333742,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -304007,43 +333754,30 @@ "ApiKeyAuth": [] } ], - "summary": "Analyze JustWatch title availability", + "summary": "Get a MacRumors author profile", "tags": [ - "JustWatch" + "MacRumors" ] } }, - "/justwatch/title/by-id": { + "/macrumors/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Looks up a movie or show by raw JustWatch GraphQL id such as `tm92641` or `ts287292`.", - "operationId": "justwatch-title-by-id", + "description": "Returns fresh headlines from one public MacRumors section.", + "operationId": "macrumors-headlines", "parameters": [ { - "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", + "description": "MacRumors section slug", + "enum": [ + "front-page", + "guides", + "how-to", + "reviews" + ], "in": "query", - "name": "id", + "name": "section", "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": "front-page" } ], "produces": [ @@ -304053,7 +333787,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.titleResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -304062,16 +333796,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 MacRumors section headlines", + "tags": [ + "MacRumors" + ] + } + }, + "/macrumors/news": { + "get": { + "description": "Returns fresh MacRumors Apple news and rumor stories from the public all-stories RSS feed.", + "operationId": "macrumors-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -304086,43 +333840,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch title by raw id", + "summary": "Get MacRumors top stories", "tags": [ - "JustWatch" + "MacRumors" ] } }, - "/justwatch/title/media": { + "/macrumors/sections": { + "get": { + "description": "Returns the public MacRumors editorial section inventory.", + "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 normalized credits, clips, and backdrops for a raw JustWatch movie/show id such as `tm92641`.", - "operationId": "justwatch-title-media", + "description": "Returns one page of a Macy's product's normalized customer reviews, plus a site-wide rating summary (rating count, average rating, recommended ratio, rating histogram) for the product. Sourced from a separate review platform Macy's own product pages embed, distinct from the product catalog itself. 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": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", + "description": "Numeric Macy's product id, from a product page's ?ID= query parameter", "in": "query", - "name": "id", + "name": "product_id", "required": true, "type": "string", - "x-example": "tm92641" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "x-example": "15041387" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Result page, 1-based, defaults to 1", "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -304132,7 +333903,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.titleMediaResponseDoc" + "$ref": "#/definitions/macys.productReviewsResponseDoc" } }, "400": { @@ -304141,12 +333912,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -304165,43 +333930,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch title media", + "summary": "Get a Macy's product's customer reviews", "tags": [ - "JustWatch" + "Macy's" ] } }, - "/justwatch/title/offers": { + "/macys/product/{productId}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized offers for a raw JustWatch movie/show id across one to five comma-separated country codes.", - "operationId": "justwatch-title-offers", + "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": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", - "in": "query", - "name": "id", + "description": "Numeric Macy's product id, from a product page's ?ID= query parameter", + "in": "path", + "name": "productId", "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": "20518101" } ], "produces": [ @@ -304211,7 +333960,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.titleOffersResponseDoc" + "$ref": "#/definitions/macys.productDetailResponseDoc" } }, "400": { @@ -304244,50 +333993,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch title offers", + "summary": "Get a Macy's product's full detail", "tags": [ - "JustWatch" + "Macy's" ] } }, - "/justwatch/title/similar": { + "/macys/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns similar titles for a raw JustWatch movie/show id such as `tm92641`.", - "operationId": "justwatch-title-similar", + "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": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", + "description": "Partial search query", "in": "query", - "name": "id", + "name": "query", "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": "Maximum results, defaults to 10 and clamps to 25", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "dress" } ], "produces": [ @@ -304297,7 +334023,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.similarTitlesResponseDoc" + "$ref": "#/definitions/macys.suggestResponseDoc" } }, "400": { @@ -304306,12 +334032,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -304330,27 +334050,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get similar JustWatch titles", + "summary": "Get Macy's search-box suggestions", "tags": [ - "JustWatch" + "Macy's" ] } }, - "/kalshi/event/{event_ticker}": { + "/makeuseof/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one normalized Kalshi event row and its normalized markets from credential-free public market-data JSON.", - "operationId": "kalshi-event", + "description": "Returns public MakeUseOf article metadata and readable body paragraphs from a canonical article URL.", + "operationId": "makeuseof-article", "parameters": [ { - "description": "Kalshi event ticker", - "in": "path", - "name": "event_ticker", + "description": "Canonical MakeUseOf article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "https://www.makeuseof.com/these-websites-replace-one-off-utility-apps/" } ], "produces": [ @@ -304360,7 +334077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.eventResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -304375,18 +334092,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": { @@ -304399,57 +334104,24 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi event detail", + "summary": "Get MakeUseOf article content", "tags": [ - "Kalshi" + "MakeUseOf" ] } }, - "/kalshi/event/{event_ticker}/history": { + "/makeuseof/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Kalshi candlesticks grouped by market for one event from credential-free public market-data JSON.", - "operationId": "kalshi-event-history", + "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": [ { - "description": "Kalshi event ticker", - "in": "path", - "name": "event_ticker", + "description": "Canonical MakeUseOf author URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "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" + "x-example": "https://www.makeuseof.com/author/oluwademilade-afolabi/" } ], "produces": [ @@ -304459,7 +334131,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.eventHistoryResponseDoc" + "$ref": "#/definitions/publicnews.makeuseofAuthorResponseDoc" } }, "400": { @@ -304474,18 +334146,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": { @@ -304498,27 +334158,40 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi event history", + "summary": "Get a MakeUseOf author profile", "tags": [ - "Kalshi" + "MakeUseOf" ] } }, - "/kalshi/event/{event_ticker}/metadata": { + "/makeuseof/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns media, market metadata, settlement sources, and optional competition context for one Kalshi event from credential-free public market-data JSON.", - "operationId": "kalshi-event-metadata", + "description": "Returns current headlines from one of the 14 public MakeUseOf category RSS feeds. Use a slug from makeuseof_sections.", + "operationId": "makeuseof-headlines", "parameters": [ { - "description": "Kalshi event ticker", - "in": "path", - "name": "event_ticker", + "description": "MakeUseOf section slug", + "enum": [ + "windows", + "linux", + "google-android", + "apple", + "technology-explained", + "networking", + "security", + "productivity", + "creative", + "entertainment", + "streaming", + "smart-home", + "home", + "news" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "windows" } ], "produces": [ @@ -304528,7 +334201,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.eventMetadataResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -304537,20 +334210,46 @@ "$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": "Get MakeUseOf section headlines", + "tags": [ + "MakeUseOf" + ] + } + }, + "/makeuseof/news": { + "get": { + "description": "Returns current MakeUseOf top stories from its public RSS feed.", + "operationId": "makeuseof-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" } @@ -304567,78 +334266,62 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi event metadata", + "summary": "Get MakeUseOf top stories", "tags": [ - "Kalshi" + "MakeUseOf" ] } }, - "/kalshi/events": { + "/makeuseof/sections": { "get": { - "consumes": [ + "description": "Returns all 14 live-verified MakeUseOf primary-navigation sections accepted by the headlines endpoint.", + "operationId": "makeuseof-sections", + "produces": [ "application/json" ], - "description": "Returns normalized Kalshi event rows from credential-free public market-data JSON.", - "operationId": "kalshi-events", - "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 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" + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } }, - { - "description": "Include event milestones when supported upstream", - "in": "query", - "name": "with_milestones", - "type": "boolean" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum event close Unix timestamp in seconds", - "in": "query", - "name": "min_close_ts", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get MakeUseOf RSS sections", + "tags": [ + "MakeUseOf" + ] + } + }, + "/malaymail/article": { + "get": { + "description": "Extracts public article metadata and readable body paragraphs from a canonical Malay Mail story URL.", + "operationId": "malaymail-article", + "parameters": [ { - "description": "Minimum event update Unix timestamp in seconds", + "description": "Canonical Malay Mail article URL", "in": "query", - "name": "min_updated_ts", - "type": "integer" + "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" } ], "produces": [ @@ -304648,7 +334331,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.eventsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -304669,12 +334352,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -304687,31 +334364,37 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi events", + "summary": "Get a Malay Mail article", "tags": [ - "Kalshi" + "Malay Mail" ] } }, - "/kalshi/events/multivariate": { + "/malaymail/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Kalshi multivariate event rows from credential-free public market-data JSON. Kalshi's regular events endpoint excludes these MVE rows.", - "operationId": "kalshi-multivariate-events", + "description": "Returns current headline cards for one of Malay Mail's public News sections.", + "operationId": "malaymail-headlines", "parameters": [ { - "description": "Rows to return, default 25, max 200", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Pagination cursor from a previous Kalshi response", + "description": "Malay Mail News section slug", + "enum": [ + "malaysia", + "singapore", + "money", + "world", + "life", + "eat-drink", + "showbiz", + "opinion", + "sports", + "tech-gadgets", + "what-you-think" + ], "in": "query", - "name": "cursor", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "malaysia" } ], "produces": [ @@ -304721,7 +334404,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.multivariateEventsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -304730,24 +334413,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": { @@ -304760,19 +334431,16 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi multivariate events", + "summary": "Get Malay Mail section headlines", "tags": [ - "Kalshi" + "Malay Mail" ] } }, - "/kalshi/exchange/schedule": { + "/malaymail/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public exchange standard hours and maintenance windows from Kalshi market-data JSON.", - "operationId": "kalshi-exchange-schedule", + "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" ], @@ -304780,29 +334448,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.exchangeScheduleResponseDoc" + "$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" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Malay Mail top stories", + "tags": [ + "Malay Mail" + ] + } + }, + "/malaymail/sections": { + "get": { + "description": "Returns the verified public Malay Mail News navigation sections accepted by malaymail-headlines.", + "operationId": "malaymail-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -304819,19 +334507,77 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi exchange schedule", + "summary": "Get Malay Mail sections", "tags": [ - "Kalshi" + "Malay Mail" ] } }, - "/kalshi/exchange/status": { + "/manga/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns public exchange and trading active flags from Kalshi market-data JSON.", - "operationId": "kalshi-exchange-status", + "description": "Returns a filterable, sorted manga ranking. Credential-free public AniList data. Filter by format, genre, and status.", + "operationId": "manga-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": "Format filter: MANGA, NOVEL, ONE_SHOT.", + "enum": [ + "MANGA", + "NOVEL", + "ONE_SHOT" + ], + "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" ], @@ -304839,7 +334585,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.exchangeStatusResponseDoc" + "$ref": "#/definitions/anime.mangaRankingsResponseDoc" } }, "400": { @@ -304848,18 +334594,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": { @@ -304878,19 +334612,55 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi exchange status", + "summary": "Rank manga", "tags": [ - "Kalshi" + "Manga" ] } }, - "/kalshi/historical/cutoff": { + "/manga/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the cutoff timestamps Kalshi uses for historical market, order, and trade data migration.", - "operationId": "kalshi-historical-cutoff", + "description": "Searches manga by free-text query. Credential-free public manga data from AniList. Returns normalized entries: titles, scores, popularity, format, status, chapters, volumes, genres, and tags.", + "operationId": "manga-search", + "parameters": [ + { + "description": "Search text", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "Berserk" + }, + { + "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" ], @@ -304898,7 +334668,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.historicalCutoffResponseDoc" + "$ref": "#/definitions/anime.searchResponseDoc" } }, "400": { @@ -304907,18 +334677,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": { @@ -304937,27 +334695,33 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical data cutoff", + "summary": "Search manga", "tags": [ - "Kalshi" + "Manga" ] } }, - "/kalshi/historical/market/{ticker}": { + "/manga/title/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized settled Kalshi historical market row from credential-free public market-data JSON.", - "operationId": "kalshi-historical-market", + "description": "Returns a normalized 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), scraped credential-free from the public MAL page. Credential-free public AniList data.", + "operationId": "manga-title", "parameters": [ { - "description": "Kalshi historical market ticker", + "description": "AniList manga id", "in": "path", - "name": "ticker", + "name": "id", "required": true, "type": "string", - "x-example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557" + "x-example": "30002" + }, + { + "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": [ @@ -304967,7 +334731,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.historicalMarketResponseDoc" + "$ref": "#/definitions/anime.mediaResponseDoc" } }, "400": { @@ -304982,12 +334746,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -305006,44 +334764,38 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical market detail", + "summary": "Get a manga", "tags": [ - "Kalshi" + "Manga" ] } }, - "/kalshi/historical/market/{ticker}/history": { + "/manga/title/{id}/characters": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Kalshi candlesticks for one settled historical market from credential-free public market-data JSON.", - "operationId": "kalshi-historical-market-history", + "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. Credential-free public AniList data.", + "operationId": "manga-title-characters", "parameters": [ { - "description": "Kalshi historical market ticker", + "description": "AniList manga id", "in": "path", - "name": "ticker", + "name": "id", "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" + "x-example": "30002" }, { - "description": "Unix end timestamp in seconds. Defaults to now.", + "description": "1-based page number, default 1", "in": "query", - "name": "end_ts", + "name": "page", "type": "integer" }, { - "description": "Candlestick interval in minutes. Default: 1440.", + "description": "Results per page, default 10, max 50", "in": "query", - "name": "period_interval", + "name": "per_page", "type": "integer" } ], @@ -305054,7 +334806,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.marketHistoryResponseDoc" + "$ref": "#/definitions/anime.charactersResponseDoc" } }, "400": { @@ -305069,12 +334821,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -305093,58 +334839,39 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical market history", + "summary": "List a manga's characters", "tags": [ - "Kalshi" + "Manga" ] } }, - "/kalshi/historical/markets": { + "/manga/title/{id}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized settled Kalshi historical market rows from credential-free public market-data JSON. `tickers`, `event_ticker`, and `series_ticker` are mutually exclusive. The `mve_filter` enum accepts `exclude`.", - "operationId": "kalshi-historical-markets", + "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. Credential-free public AniList data.", + "operationId": "manga-title-recommendations", "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": "AniList manga id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "30013" }, { - "description": "Kalshi series ticker filter. Mutually exclusive with tickers and event_ticker.", + "description": "1-based page number, default 1", "in": "query", - "name": "series_ticker", - "type": "string" + "name": "page", + "type": "integer" }, { - "description": "Multivariate event filter", - "enum": [ - "exclude" - ], + "description": "Results per page, default 10, max 50", "in": "query", - "name": "mve_filter", - "type": "string" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -305154,7 +334881,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.historicalMarketsResponseDoc" + "$ref": "#/definitions/anime.recommendationsResponseDoc" } }, "400": { @@ -305169,12 +334896,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -305193,48 +334914,38 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical markets", + "summary": "List titles recommended alongside a manga", "tags": [ - "Kalshi" + "Manga" ] } }, - "/kalshi/historical/trades": { + "/manga/title/{id}/staff": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized older Kalshi trades from credential-free historical market-data JSON.", - "operationId": "kalshi-historical-trades", + "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. Credential-free public AniList data.", + "operationId": "manga-title-staff", "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": "AniList manga id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "30002" }, { - "description": "Minimum created Unix timestamp in seconds", + "description": "1-based page number, default 1", "in": "query", - "name": "min_ts", + "name": "page", "type": "integer" }, { - "description": "Maximum created Unix timestamp in seconds", + "description": "Results per page, default 10, max 50", "in": "query", - "name": "max_ts", + "name": "per_page", "type": "integer" } ], @@ -305245,7 +334956,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.historicalTradesResponseDoc" + "$ref": "#/definitions/anime.staffResponseDoc" } }, "400": { @@ -305260,12 +334971,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -305284,27 +334989,24 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical trades", + "summary": "List a manga's staff credits", "tags": [ - "Kalshi" + "Manga" ] } }, - "/kalshi/market/{ticker}": { + "/marketwatch/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one normalized Kalshi market row from credential-free public market-data JSON.", - "operationId": "kalshi-market", + "description": "Returns public MarketWatch article metadata and body paragraphs from a canonical article URL.", + "operationId": "marketwatch-article", "parameters": [ { - "description": "Kalshi market ticker", - "in": "path", - "name": "ticker", + "description": "Canonical MarketWatch article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "https://www.marketwatch.com/story/example" } ], "produces": [ @@ -305314,7 +335016,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.marketResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -305329,18 +335031,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": { @@ -305353,57 +335043,30 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi market detail", + "summary": "Get MarketWatch article content", "tags": [ - "Kalshi" + "MarketWatch" ] } }, - "/kalshi/market/{ticker}/history": { + "/marketwatch/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Kalshi candlesticks for one market from credential-free public market-data JSON.", - "operationId": "kalshi-market-history", + "description": "Returns one MarketWatch author's public profile: name, job title, bio, and their recent articles.", + "operationId": "marketwatch-author", "parameters": [ { - "description": "Kalshi market ticker", - "in": "path", - "name": "ticker", - "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.", + "description": "Author slug, e.g. hannah-pedone", "in": "query", - "name": "period_interval", - "type": "integer" + "name": "slug", + "type": "string", + "x-example": "hannah-pedone" }, { - "description": "Include the latest candle before start_ts when supported upstream.", + "description": "Canonical marketwatch.com/author/ URL; alternative to slug", "in": "query", - "name": "include_latest_before_start", - "type": "boolean" + "name": "url", + "type": "string", + "x-example": "https://www.marketwatch.com/author/hannah-pedone" } ], "produces": [ @@ -305413,7 +335076,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.marketHistoryResponseDoc" + "$ref": "#/definitions/publicnews.marketWatchAuthorResponseDoc" } }, "400": { @@ -305428,18 +335091,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": { @@ -305452,27 +335103,34 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi market history", + "summary": "Get a MarketWatch author profile", "tags": [ - "Kalshi" + "MarketWatch" ] } }, - "/kalshi/market/{ticker}/orderbook": { + "/marketwatch/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized yes/no bid levels for one Kalshi market ticker from public orderbook JSON.", - "operationId": "kalshi-market-orderbook", + "description": "Returns fresh headlines from one public MarketWatch section.", + "operationId": "marketwatch-headlines", "parameters": [ { - "description": "Kalshi market ticker", - "in": "path", - "name": "ticker", + "description": "MarketWatch section slug", + "enum": [ + "latest-news", + "markets", + "investing", + "personal-finance", + "economy-politics", + "technology", + "retirement", + "real-estate" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "latest-news" } ], "produces": [ @@ -305482,7 +335140,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.orderBookResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -305491,22 +335149,36 @@ "$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": "Get MarketWatch section headlines", + "tags": [ + "MarketWatch" + ] + } + }, + "/marketwatch/news": { + "get": { + "description": "Returns fresh MarketWatch stories from the public Top Stories RSS feed.", + "operationId": "marketwatch-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -305521,61 +335193,50 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi market orderbook", + "summary": "Get MarketWatch top stories", "tags": [ - "Kalshi" + "MarketWatch" ] } }, - "/kalshi/markets": { + "/marketwatch/sections": { "get": { - "consumes": [ + "description": "Returns the public MarketWatch editorial section inventory.", + "operationId": "marketwatch-sections", + "produces": [ "application/json" ], - "description": "Returns normalized Kalshi market rows from credential-free public market-data JSON. The `status` enum accepts `unopened`, `open`, `closed`, and `settled`.", - "operationId": "kalshi-markets", - "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" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Market status filter", - "enum": [ - "unopened", - "open", - "closed", - "settled" - ], - "in": "query", - "name": "status", - "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": "Kalshi market ticker filter", + "description": "Canonical Mashable article URL", "in": "query", - "name": "ticker", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://mashable.com/tech/openai-hack-australian-government-ai-agent" } ], "produces": [ @@ -305585,7 +335246,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.marketsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -305600,18 +335261,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": { @@ -305624,51 +335273,37 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi markets", + "summary": "Get Mashable article content", "tags": [ - "Kalshi" + "Mashable" ] } }, - "/kalshi/markets/history": { + "/mashable/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Kalshi candlesticks for up to 25 market tickers from credential-free public market-data JSON.", - "operationId": "kalshi-markets-history", + "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": "Comma-separated Kalshi market tickers. Repeated query values are also accepted.", + "description": "Author slug, e.g. amanda-yeo", "in": "query", - "name": "market_tickers", - "required": true, + "name": "slug", "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" + "x-example": "amanda-yeo" }, { - "description": "Unix end timestamp in seconds. Defaults to now.", + "description": "Canonical mashable.com/author/ URL; alternative to slug", "in": "query", - "name": "end_ts", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://mashable.com/author/amanda-yeo" }, { - "description": "Candlestick interval in minutes. Default: 1440.", + "default": 1, + "description": "1-based page number of the article list", "in": "query", - "name": "period_interval", + "name": "page", "type": "integer" - }, - { - "description": "Include the latest candle before start_ts when supported upstream.", - "in": "query", - "name": "include_latest_before_start", - "type": "boolean" } ], "produces": [ @@ -305678,7 +335313,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.batchMarketHistoryResponseDoc" + "$ref": "#/definitions/publicnews.mashableAuthorResponseDoc" } }, "400": { @@ -305693,18 +335328,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": { @@ -305717,27 +335340,68 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi batch market history", + "summary": "Get a Mashable author profile", "tags": [ - "Kalshi" + "Mashable" ] } }, - "/kalshi/markets/orderbooks": { + "/mashable/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized yes/no bid levels for up to 25 Kalshi market tickers from public orderbook JSON.", - "operationId": "kalshi-markets-orderbooks", + "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": "Comma-separated Kalshi market tickers. Repeated query values are also accepted.", + "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": "tickers", + "name": "section", "required": true, "type": "string", - "x-example": "KXELONMARS-99,KXNEWPOPE-70" + "x-example": "android" } ], "produces": [ @@ -305747,7 +335411,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.batchOrderBookResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -305756,20 +335420,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 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/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -305786,31 +335470,62 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi batch market orderbooks", + "summary": "Get Mashable top stories", "tags": [ - "Kalshi" + "Mashable" ] } }, - "/kalshi/series": { + "/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" + ] + } + }, + "/mcdonalds/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Kalshi series rows from credential-free public market-data JSON.", - "operationId": "kalshi-series", + "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": "Rows to return, default 25, max 200", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Pagination cursor from a previous Kalshi response", + "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": "cursor", - "type": "string" + "name": "country", + "type": "string", + "x-example": "us" } ], "produces": [ @@ -305820,19 +335535,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.seriesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/mcdonalds.categoriesResponseDoc" } }, "429": { @@ -305841,12 +335544,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -305859,27 +335556,43 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi series", + "summary": "List McDonald's menu categories", "tags": [ - "Kalshi" + "McDonalds" ] } }, - "/kalshi/series/{series_ticker}": { + "/mcdonalds/item": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized Kalshi series row from credential-free public market-data JSON.", - "operationId": "kalshi-series-detail", + "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": "Kalshi series ticker", - "in": "path", - "name": "series_ticker", + "description": "McDonald's numeric product id, from /mcdonalds/menu", + "in": "query", + "name": "item_id", "required": true, "type": "string", - "x-example": "KXELONMARS" + "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": [ @@ -305889,7 +335602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.seriesDetailResponseDoc" + "$ref": "#/definitions/mcdonalds.itemResponseDoc" } }, "400": { @@ -305910,12 +335623,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -305928,49 +335635,43 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi series detail", + "summary": "Get one McDonald's item's nutrition", "tags": [ - "Kalshi" + "McDonalds" ] } }, - "/kalshi/trades": { + "/mcdonalds/item-list": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized recent Kalshi market trades from credential-free public market-data JSON.", - "operationId": "kalshi-trades", - "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": "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": "Minimum created Unix timestamp in seconds", + "description": "Comma-separated McDonald's numeric product ids, up to 20", "in": "query", - "name": "min_ts", - "type": "integer" + "name": "item_ids", + "required": true, + "type": "string", + "x-example": "200463,200466,200476" }, { - "description": "Maximum created Unix timestamp in seconds", + "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": "max_ts", - "type": "integer" + "name": "country", + "type": "string", + "x-example": "us" } ], "produces": [ @@ -305980,7 +335681,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.tradesResponseDoc" + "$ref": "#/definitions/mcdonalds.itemListResponseDoc" } }, "400": { @@ -306001,12 +335702,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -306019,116 +335714,44 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi trades", + "summary": "Get nutrition and allergen detail for a batch of McDonald's items", "tags": [ - "Kalshi" + "McDonalds" ] } }, - "/kfc/delivery-estimate": { + "/mcdonalds/menu": { "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 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": "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", - "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", + "description": "Category slug from /mcdonalds/categories", "in": "query", - "name": "order_subtotal", + "name": "category", "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" + "x-example": "breakfast" }, { - "description": "Delivery provider to check (default DOORDASH)", + "description": "Market (default us). One of us, ca, gb, au, ie, nz, ch, se. Must match the market the slug came from.", "enum": [ - "DOORDASH", - "MOCK_DOORDASH", - "INTERNAL" + "us", + "ca", + "gb", + "au", + "ie", + "nz", + "ch", + "se" ], "in": "query", - "name": "delivery_provider", + "name": "country", "type": "string", - "x-example": "DOORDASH" + "x-example": "us" } ], "produces": [ @@ -306138,7 +335761,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.deliveryEstimateResponseDoc" + "$ref": "#/definitions/mcdonalds.menuResponseDoc" } }, "400": { @@ -306171,48 +335794,27 @@ "ApiKeyAuth": [] } ], - "summary": "Check KFC delivery serviceability and estimated fee for one store and address", + "summary": "List one McDonald's menu category's items", "tags": [ - "KFC" + "McDonalds" ] } }, - "/kfc/menu": { + "/mcdonalds/restaurant-menu": { "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 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": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", + "description": "McDonald's numeric store number, from /mcdonalds/restaurants", "in": "query", - "name": "store_number", + "name": "store_id", "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": "10528" } ], "produces": [ @@ -306222,7 +335824,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.menuResponseDoc" + "$ref": "#/definitions/mcdonalds.restaurantMenuResponseDoc" } }, "400": { @@ -306255,19 +335857,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get one KFC restaurant's full priced menu", + "summary": "Get one McDonald's restaurant's priced menu", "tags": [ - "KFC" + "McDonalds" ] } }, - "/kfc/nearby": { + "/mcdonalds/restaurants": { "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 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": "Search center latitude", @@ -306275,7 +335877,7 @@ "name": "latitude", "required": true, "type": "number", - "x-example": 38.2527 + "x-example": 40.7128 }, { "description": "Search center longitude", @@ -306283,35 +335885,40 @@ "name": "longitude", "required": true, "type": "number", - "x-example": -85.7585 + "x-example": -74.006 }, { - "description": "Search radius in miles, 0.1-100 (default 10)", + "description": "Search radius in miles, 1-100 (default 20)", "in": "query", - "name": "radius_miles", - "type": "number", + "name": "radius", + "type": "integer", + "x-example": 20 + }, + { + "description": "Maximum restaurants to return, 1-50 (default 10)", + "in": "query", + "name": "max_results", + "type": "integer", "x-example": 10 }, { - "description": "Restrict to restaurants offering this order channel", + "description": "Market to search (default us). One of us, gb, ca, au, de, ie, nz, ch, nl, se.", "enum": [ - "DELIVERY", - "CARRYOUT", - "DINE_IN", - "DRIVE_THRU", - "CATERING_CARRYOUT" + "us", + "gb", + "ca", + "au", + "de", + "ie", + "nz", + "ch", + "nl", + "se" ], "in": "query", - "name": "occasion", + "name": "country", "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 + "x-example": "us" } ], "produces": [ @@ -306321,7 +335928,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.nearbyResponseDoc" + "$ref": "#/definitions/mcdonalds.restaurantsResponseDoc" } }, "400": { @@ -306330,6 +335937,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -306348,33 +335961,24 @@ "ApiKeyAuth": [] } ], - "summary": "Find KFC restaurants near a location", + "summary": "Find McDonald's restaurants near a location", "tags": [ - "KFC" + "McDonalds" ] } }, - "/kfc/promotion": { + "/mediaite/article": { "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 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": "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": "Canonical Mediaite article URL", "in": "query", - "name": "serialized_code", + "name": "url", + "required": true, "type": "string", - "x-example": "deadbeef1234" + "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": [ @@ -306384,7 +335988,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.promotionResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -306399,12 +336003,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -306417,27 +336015,30 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one KFC promotion by its redemption code or serialized code", + "summary": "Get Mediaite article content", "tags": [ - "KFC" + "Mediaite" ] } }, - "/kfc/promotions": { + "/mediaite/author": { "get": { - "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", + "description": "Returns one Mediaite author's public profile: name, biography, avatar, email and X/Twitter links, and their recent articles.", + "operationId": "mediaite-author", "parameters": [ { - "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", + "description": "Author slug, e.g. michael-luciano", "in": "query", - "name": "store_number", - "required": true, + "name": "slug", "type": "string", - "x-example": "I824001" + "x-example": "michael-luciano" + }, + { + "description": "Canonical mediaite.com/author// URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.mediaite.com/author/michael-luciano/" } ], "produces": [ @@ -306447,7 +336048,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.promotionsResponseDoc" + "$ref": "#/definitions/publicnews.mediaiteAuthorResponseDoc" } }, "400": { @@ -306456,8 +336057,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -306474,27 +336075,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get one KFC restaurant's current public promotions", + "summary": "Get a Mediaite author profile", "tags": [ - "KFC" + "Mediaite" ] } }, - "/kfc/store": { + "/mediaite/headlines": { "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 fresh Mediaite headlines from one public category feed.", + "operationId": "mediaite-headlines", "parameters": [ { - "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", + "description": "Mediaite category slug", + "enum": [ + "media", + "tv", + "news", + "entertainment", + "sports", + "podcasts", + "tech", + "online", + "politics", + "trump", + "election-2020", + "opinion", + "columnists", + "crime", + "premium" + ], "in": "query", - "name": "store_number", + "name": "section", "required": true, "type": "string", - "x-example": "I824001" + "x-example": "media" } ], "produces": [ @@ -306504,7 +336119,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.storeResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -306513,11 +336128,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 fresh Mediaite top stories from the public news feed.", + "operationId": "mediaite-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -306537,92 +336178,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one KFC restaurant by its store number", + "summary": "Get Mediaite top stories", "tags": [ - "KFC" + "Mediaite" ] } }, - "/kfc/stores": { + "/mediaite/sections": { "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 -- confirmed live that a raw filter can otherwise return non-orderable administrative entries alongside real restaurants.", - "operationId": "kfc-stores", - "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", - "enum": [ - "store_number_asc", - "store_number_desc", - "name_asc", - "name_desc", - "franchise_code_asc", - "franchise_code_desc" - ], - "in": "query", - "name": "sort", - "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 - } - ], + "description": "Returns the public Mediaite category taxonomy accepted by the headlines endpoint.", + "operationId": "mediaite-sections", "produces": [ "application/json" ], @@ -306630,13 +336195,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.storesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -306657,24 +336216,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search KFC restaurants by city, state, postal code, name, franchise code, or store number", + "summary": "Get Mediaite sections", "tags": [ - "KFC" + "Mediaite" ] } }, - "/khaleejtimes/article": { + "/medicalnewstoday/article": { "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 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": "Canonical Khaleej Times article URL", + "description": "Canonical Medical News Today article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.khaleejtimes.com/business/example-article-slug" + "x-example": "https://www.medicalnewstoday.com/articles/fda-clears-two-new-alzheimers-blood-tests-including-one-for-adults-as-young-as-40" } ], "produces": [ @@ -306684,7 +336243,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/medicalnewstoday.articleResponseDoc" } }, "400": { @@ -306711,24 +336270,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Khaleej Times article content", + "summary": "Get a Medical News Today article", "tags": [ - "Khaleej Times" + "Medical News Today" ] } }, - "/khaleejtimes/author": { + "/medicalnewstoday/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 an author's public profile and recent articles. Supply either the author slug or profile URL.", + "operationId": "medicalnewstoday-author", "parameters": [ { - "description": "Canonical Khaleej Times author URL", + "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", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.khaleejtimes.com/author/jane-doe" + "x-example": "https://www.medicalnewstoday.com/authors/peter-brown-1595" } ], "produces": [ @@ -306738,7 +336303,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.khaleejTimesAuthorResponseDoc" + "$ref": "#/definitions/medicalnewstoday.authorResponseDoc" } }, "400": { @@ -306765,119 +336330,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Khaleej Times author profile", + "summary": "Get a Medical News Today author profile", "tags": [ - "Khaleej Times" + "Medical News Today" ] } }, - "/khaleejtimes/headlines": { + "/medicalnewstoday/headlines": { "get": { - "description": "Returns fresh headlines from one public Khaleej Times section (top-level sections and sub-sections).", - "operationId": "khaleejtimes-headlines", + "description": "Returns dated article cards from the dedicated Health News stream.", + "operationId": "medicalnewstoday-headlines", "parameters": [ { - "description": "Khaleej Times section slug", + "description": "Medical News Today newsroom section", "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" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -306887,7 +336360,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/medicalnewstoday.headlinesResponseDoc" } }, "400": { @@ -306896,6 +336369,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -306908,16 +336387,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Khaleej Times section headlines", + "summary": "Get Medical News Today section headlines", "tags": [ - "Khaleej Times" + "Medical News Today" ] } }, - "/khaleejtimes/news": { + "/medicalnewstoday/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 current stories from the site's dedicated Health News listing.", + "operationId": "medicalnewstoday-news", "produces": [ "application/json" ], @@ -306925,13 +336404,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/medicalnewstoday.newsResponseDoc" } }, "503": { @@ -306946,16 +336419,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Khaleej Times top stories", + "summary": "Get Medical News Today latest health news", "tags": [ - "Khaleej Times" + "Medical News Today" ] } }, - "/khaleejtimes/sections": { + "/medicalnewstoday/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": "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" ], @@ -306963,7 +336436,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/medicalnewstoday.sectionsResponseDoc" } } }, @@ -306972,35 +336445,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Khaleej Times sections", + "summary": "Get Medical News Today newsroom sections", "tags": [ - "Khaleej Times" + "Medical News Today" ] } }, - "/kickstarter/comments": { + "/men/article": { "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 public Manchester Evening News article metadata and body paragraphs from a canonical article URL.", + "operationId": "men-article", "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", + "description": "Canonical Manchester Evening News article URL", "in": "query", - "name": "slug", + "name": "url", "required": true, "type": "string", - "x-example": "musubi" + "x-example": "https://www.manchestereveningnews.co.uk/news/how-opt-out-app-pushes-17427838" } ], "produces": [ @@ -307010,7 +336472,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kickstarter.commentsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -307025,12 +336487,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -307043,79 +336499,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kickstarter campaign's comments", + "summary": "Get Manchester Evening News article content", "tags": [ - "Kickstarter" + "Manchester Evening News" ] } }, - "/kickstarter/discover": { + "/men/author": { "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 one Manchester Evening News author's public profile: name, job title, bio, email, X/Twitter handle, and their recent articles.", + "operationId": "men-author", "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", + "description": "Author slug, e.g. lee-swettenham", "in": "query", - "name": "term", + "name": "slug", "type": "string", - "x-example": "hologram" - }, - { - "default": "magic", - "description": "Result order", - "enum": [ - "magic", - "popularity", - "newest", - "end_date", - "most_funded" - ], - "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" + "x-example": "lee-swettenham" }, { - "default": false, - "description": "Restrict results to Kickstarter's own \\", + "description": "Canonical manchestereveningnews.co.uk/authors// URL; alternative to slug", "in": "query", - "name": "staff_pick_only", - "type": "boolean" + "name": "url", + "type": "string", + "x-example": "https://www.manchestereveningnews.co.uk/authors/lee-swettenham/" } ], "produces": [ @@ -307125,7 +336532,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kickstarter.discoverResponseDoc" + "$ref": "#/definitions/publicnews.menAuthorResponseDoc" } }, "400": { @@ -307134,8 +336541,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -307152,35 +336559,53 @@ "ApiKeyAuth": [] } ], - "summary": "Browse or search Kickstarter's Discover surface", + "summary": "Get a Manchester Evening News author profile", "tags": [ - "Kickstarter" + "Manchester Evening News" ] } }, - "/kickstarter/project": { + "/men/headlines": { "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 fresh headlines from one public Manchester Evening News section.", + "operationId": "men-headlines", "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", + "description": "Manchester Evening News section slug", + "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" + ], "in": "query", - "name": "slug", + "name": "section", "required": true, "type": "string", - "x-example": "musubi" + "x-example": "news" } ], "produces": [ @@ -307190,7 +336615,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kickstarter.projectResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -307199,16 +336624,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 Manchester Evening News section headlines", + "tags": [ + "Manchester Evening News" + ] + } + }, + "/men/news": { + "get": { + "description": "Returns fresh Manchester Evening News top stories from the public News RSS feed.", + "operationId": "men-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -307223,35 +336668,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kickstarter campaign's detail", + "summary": "Get Manchester Evening News top stories", "tags": [ - "Kickstarter" + "Manchester Evening News" ] } }, - "/kickstarter/updates": { + "/men/sections": { + "get": { + "description": "Returns the public Manchester Evening News editorial section inventory used by men-headlines.", + "operationId": "men-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Manchester Evening News sections", + "tags": [ + "Manchester Evening News" + ] + } + }, + "/mercari/autocomplete": { "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 Mercari's own search-suggestion list for a partial keyword, in the upstream's own relevance order. An empty suggestion list is a normal outcome for obscure or gibberish input. Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", + "operationId": "mercari-autocomplete", "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", + "description": "Partial keyword to get suggestions for", "in": "query", - "name": "slug", + "name": "query", "required": true, "type": "string", - "x-example": "musubi" + "x-example": "nike" } ], "produces": [ @@ -307261,7 +336724,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kickstarter.updatesResponseDoc" + "$ref": "#/definitions/mercari.autocompleteResponseDoc" } }, "400": { @@ -307270,14 +336733,49 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Mercari search autocomplete", + "tags": [ + "Mercari" + ] + } + }, + "/mercari/home": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Mercari's own curated home-feed recommendations: normalized listing summaries (title, price, thumbnail, condition, seller). Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", + "operationId": "mercari-home", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/mercari.homeResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307294,27 +336792,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kickstarter campaign's updates feed", + "summary": "Get Mercari home feed", "tags": [ - "Kickstarter" + "Mercari" ] } }, - "/kohls/category": { + "/mercari/item/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Kohl's category or curated campaign page's product grid (page 1 only), with normalized 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 a normalized Mercari item-detail page: description, all photos, price, condition, category, hashtags, the shipping origin state, and a \"similar items\" carousel of related listings. Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", + "operationId": "mercari-item", "parameters": [ { - "description": "Kohl's catalog taxonomy string, e.g. \\", - "in": "query", - "name": "category", + "description": "Mercari item id, e.g. from a search result's id field", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "Room:Dorm" + "x-example": "m98337445585" } ], "produces": [ @@ -307324,7 +336822,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kohls.categoryResponseDoc" + "$ref": "#/definitions/mercari.ItemDetailResponse" } }, "400": { @@ -307339,8 +336837,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307357,36 +336855,19 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Kohl's category or curated campaign page", + "summary": "Get Mercari item detail", "tags": [ - "Kohl's" + "Mercari" ] } }, - "/kohls/product/reviews": { + "/mercari/master": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Kohl's product's normalized 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": "Kohl's product web id, e.g. from a GET /kohls/category response's products[].web_id", - "in": "query", - "name": "web_id", - "required": true, - "type": "string", - "x-example": "4569328" - }, - { - "description": "Page number, 10 reviews per page (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - } - ], + "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. Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", + "operationId": "mercari-master", "produces": [ "application/json" ], @@ -307394,17 +336875,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kohls.productReviewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/mercari.masterResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307421,27 +336896,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Kohl's product's customer reviews", + "summary": "Get Mercari full taxonomy (categories, brands, sizes)", "tags": [ - "Kohl's" + "Mercari" ] } }, - "/kohls/stores": { + "/mercari/search": { "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": "Searches Mercari's live resale marketplace by free-text keyword, returning normalized listing summaries (title, price, thumbnail, condition, seller) plus the total matching count. Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", + "operationId": "mercari-search", "parameters": [ { - "description": "Free-text location: city/state, zip code, or address", + "description": "Free-text keyword search", "in": "query", - "name": "search", + "name": "query", "required": true, "type": "string", - "x-example": "Seattle, WA" + "x-example": "nike jacket" } ], "produces": [ @@ -307451,7 +336926,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kohls.storesResponseDoc" + "$ref": "#/definitions/mercari.searchResponseDoc" } }, "400": { @@ -307460,8 +336935,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307478,27 +336953,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Kohl's store locations", + "summary": "Search Mercari listings", "tags": [ - "Kohl's" + "Mercari" ] } }, - "/kohls/suggest": { + "/meta-jobs/job": { "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 one Meta Careers posting by its numeric job id (the `id` field returned by search or list). Parsed from metacareers.com's server-rendered job detail page.", + "operationId": "meta-jobs-job", "parameters": [ { - "description": "Partial search text, e.g. \\", + "description": "Meta job id", "in": "query", - "name": "query", + "name": "id", "required": true, "type": "string", - "x-example": "coff" + "x-example": "1238249364564427" } ], "produces": [ @@ -307508,7 +336983,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kohls.suggestResponseDoc" + "$ref": "#/definitions/metajobs.jobResponseDoc" } }, "400": { @@ -307517,6 +336992,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -307535,24 +337016,33 @@ "ApiKeyAuth": [] } ], - "summary": "Kohl's search-box typeahead suggestions", + "summary": "Meta Jobs single posting", "tags": [ - "Kohl's" + "Meta Jobs" ] } }, - "/kotaku/article": { + "/meta-jobs/list": { "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", + "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", "parameters": [ { - "description": "Canonical Kotaku article URL", + "description": "Page number, 1-based, defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://kotaku.com/dressmaker-indie-hours-character-creators-2000736522" + "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": [ @@ -307562,7 +337052,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/metajobs.listResponseDoc" } }, "400": { @@ -307571,8 +337061,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -307589,24 +337079,82 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kotaku article content", + "summary": "Meta Jobs catalog listing", "tags": [ - "Kotaku" + "Meta Jobs" ] } }, - "/kotaku/author": { + "/meta-jobs/search": { "get": { - "description": "Returns a Kotaku author's name, biography, headshot, social links, and most recent articles from a canonical author URL.", - "operationId": "kotaku-author", + "consumes": [ + "application/json" + ], + "description": "Searches Meta's public careers site (metacareers.com) via its own anonymous jobsearch GraphQL endpoint, 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": "Canonical Kotaku author URL", + "description": "Facet-name keyword: matches team, technology, location, or ref/req-code -- not a title/description search", "in": "query", - "name": "url", - "required": true, + "name": "q", "type": "string", - "x-example": "https://kotaku.com/author/ethangach" + "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": [ @@ -307616,7 +337164,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.kotakuAuthorResponseDoc" + "$ref": "#/definitions/metajobs.searchResponseDoc" } }, "400": { @@ -307625,8 +337173,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -307643,42 +337191,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kotaku author profile", + "summary": "Meta Jobs search", "tags": [ - "Kotaku" + "Meta Jobs" ] } }, - "/kotaku/headlines": { + "/metacritic/browse": { "get": { - "description": "Returns fresh headlines from one Kotaku section's public RSS feed.", - "operationId": "kotaku-headlines", + "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. Credential-free public Metacritic data.", + "operationId": "metacritic-browse", "parameters": [ { - "description": "Kotaku section slug", + "description": "Content type", "enum": [ - "entertainment", - "action", - "fantasy", - "horror", - "sci-fi", - "superhero", - "reviews", - "news", - "retro", - "kotaku-game-diary", - "youtube", - "odds-and-ends", - "feature", - "fine-art", - "game-tips", - "games", - "deals" + "game", + "movie", + "tv" ], "in": "query", - "name": "section", + "name": "type", "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": [ @@ -307688,7 +337256,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/metacritic.browseResponseDoc" } }, "400": { @@ -307697,40 +337265,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Kotaku section headlines", - "tags": [ - "Kotaku" - ] - } - }, - "/kotaku/news": { - "get": { - "description": "Returns fresh Kotaku gaming stories from its public RSS feed.", - "operationId": "kotaku-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" } @@ -307747,45 +337289,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kotaku top stories", + "summary": "Browse Metacritic titles", "tags": [ - "Kotaku" + "Metacritic" ] } }, - "/kotaku/sections": { + "/metacritic/game/{slug}": { "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", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Returns a normalized Metacritic game: Metascore (critic) and user score with sentiment and review counts, genres, per-platform scores, developer/publisher, rating, release date, and trailer. Credential-free public Metacritic data.", + "operationId": "metacritic-game", + "parameters": [ { - "ApiKeyAuth": [] + "description": "Metacritic game slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "elden-ring" } ], - "summary": "Get Kotaku sections", - "tags": [ - "Kotaku" - ] - } - }, - "/kroger/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", "produces": [ "application/json" ], @@ -307793,11 +337319,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.categoriesResponseDoc" + "$ref": "#/definitions/metacritic.productResponseDoc" } }, - "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" } @@ -307814,111 +337352,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kroger's product-browse category taxonomy", + "summary": "Get a Metacritic game", "tags": [ - "Kroger" + "Metacritic" ] } }, - "/kroger/category": { + "/metacritic/game/{slug}/critic-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Browses a Kroger product category and returns normalized 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. Served from Kroger's own search JSON API using category_id as a taxonomy filter, with real upstream pagination; it falls back to parsing the rendered category page if that path is unavailable, and the source field reports which path answered. Facet filters and sort apply to the JSON path only: when any of them is set, a JSON-path failure returns an error rather than silently falling back to unfiltered results.", - "operationId": "kroger-category", + "description": "Returns paginated professional/publication reviews for a game: publication, score, quote, author, platform, and source URL. Credential-free public Metacritic data.", + "operationId": "metacritic-game-critic-reviews", "parameters": [ { - "description": "Category URL slug segment. Obtain valid slug/category_id pairs from kroger-categories", - "in": "query", + "description": "Metacritic game slug", + "in": "path", "name": "slug", "required": true, "type": "string", - "x-example": "pet" + "x-example": "elden-ring" }, { - "description": "Category numeric taxonomy id. Obtain valid slug/category_id pairs from kroger-categories", + "description": "1-based page number (default 1)", "in": "query", - "name": "category_id", - "required": true, - "type": "string", - "x-example": "27" + "name": "page", + "type": "integer" }, { - "default": 1, - "description": "One-based result page", + "description": "Results per page (default 20, max 50)", "in": "query", - "minimum": 1, - "name": "page", + "name": "per_page", "type": "integer" }, { - "default": "relevance", - "description": "Result order. One of: relevance, name_asc, popularity_desc", + "description": "Sort order", "enum": [ - "relevance", - "name_asc", - "popularity_desc" + "date", + "score", + "publication" ], "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": [ @@ -307928,7 +337405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.categoryResponseDoc" + "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" } }, "400": { @@ -307937,8 +337414,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" } @@ -307955,57 +337438,50 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Kroger category", + "summary": "List a Metacritic game's critic reviews", "tags": [ - "Kroger" + "Metacritic" ] } }, - "/kroger/coupons": { + "/metacritic/game/{slug}/user-reviews": { "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 paginated user reviews for a game: author, score (0-10), quote, date, platform, helpfulness, and spoiler flag. Credential-free public Metacritic data.", + "operationId": "metacritic-game-user-reviews", "parameters": [ { - "description": "Narrow to coupons applying to one Kroger product", - "in": "query", - "name": "upc", - "type": "string", - "x-example": "0001111060933" - }, - { - "description": "Narrow to one brand's coupons", - "in": "query", - "name": "brand", + "description": "Metacritic game slug", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "Pillsbury" + "x-example": "elden-ring" }, { - "description": "Kroger store/location id that scopes coupons", + "description": "1-based page number (default 1)", "in": "query", - "name": "location_id", - "type": "string", - "x-example": "03500917" + "name": "page", + "type": "integer" }, { - "default": 1, - "description": "One-based result page", + "description": "Results per page (default 20, max 50)", "in": "query", - "minimum": 1, - "name": "page", + "name": "per_page", "type": "integer" }, { - "default": 50, - "description": "Coupons per page, 1-200", + "description": "Sort order", + "enum": [ + "date", + "score", + "helpful" + ], "in": "query", - "maximum": 200, - "minimum": 1, - "name": "page_size", - "type": "integer" + "name": "sort", + "type": "string" } ], "produces": [ @@ -308015,7 +337491,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.couponsResponseDoc" + "$ref": "#/definitions/metacritic.userReviewsResponseDoc" } }, "400": { @@ -308024,8 +337500,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" } @@ -308042,27 +337524,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kroger digital coupons", + "summary": "List a Metacritic game's user reviews", "tags": [ - "Kroger" + "Metacritic" ] } }, - "/kroger/product": { + "/metacritic/movie/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized product detail for one Kroger item: title, description, image, brand, category trail, price/availability, and rating, sourced from the product page's own schema.org structured data.", - "operationId": "kroger-product", + "description": "Returns a normalized Metacritic movie: Metascore (critic) and user score with sentiment and review counts, genres, cast/crew, rating, runtime, release date, IMDb id, and trailer. Credential-free public Metacritic data.", + "operationId": "metacritic-movie", "parameters": [ { - "description": "Kroger product UPC/id (the last path segment of the product page URL)", - "in": "query", - "name": "upc", + "description": "Metacritic movie slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "0064519402151" + "x-example": "oppenheimer" } ], "produces": [ @@ -308072,7 +337554,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.productResponseDoc" + "$ref": "#/definitions/metacritic.productResponseDoc" } }, "400": { @@ -308087,8 +337569,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -308105,44 +337587,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kroger product", + "summary": "Get a Metacritic movie", "tags": [ - "Kroger" + "Metacritic" ] } }, - "/kroger/product/reviews": { + "/metacritic/movie/{slug}/critic-reviews": { "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 paginated professional/publication reviews for a movie: publication, score, quote, author, and source URL. Credential-free public Metacritic data.", + "operationId": "metacritic-movie-critic-reviews", "parameters": [ { - "description": "Kroger product UPC/id", - "in": "query", - "name": "upc", + "description": "Metacritic movie slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "0007120200411" + "x-example": "oppenheimer" }, { - "default": 1, - "description": "One-based review page", + "description": "1-based page number (default 1)", "in": "query", - "minimum": 1, "name": "page", "type": "integer" }, { - "default": 16, - "description": "Reviews per page, 1-100", + "description": "Results per page (default 20, max 50)", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page_size", + "name": "per_page", "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "date", + "score", + "publication" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -308152,7 +337640,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.reviewsResponseDoc" + "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" } }, "400": { @@ -308161,8 +337649,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" } @@ -308179,34 +337673,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kroger product's customer reviews", + "summary": "List a Metacritic movie's critic reviews", "tags": [ - "Kroger" + "Metacritic" ] } }, - "/kroger/products": { + "/metacritic/movie/{slug}/user-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns full normalized detail for up to 50 Kroger products in one call, from Kroger's own product API. 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 paginated user reviews for a movie: author, score (0-10), quote, date, helpfulness, and spoiler flag. Credential-free public Metacritic data.", + "operationId": "metacritic-movie-user-reviews", "parameters": [ { - "description": "Comma-separated Kroger product UPCs, up to 50", - "in": "query", - "name": "upcs", + "description": "Metacritic movie slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "0007465324996,0005100027014" + "x-example": "oppenheimer" }, { - "description": "Kroger store/location id that scopes price and stock", + "description": "1-based page number (default 1)", "in": "query", - "name": "location_id", - "type": "string", - "x-example": "03500917" + "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" } ], "produces": [ @@ -308216,7 +337726,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.productsResponseDoc" + "$ref": "#/definitions/metacritic.userReviewsResponseDoc" } }, "400": { @@ -308225,8 +337735,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" } @@ -308243,34 +337759,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get full Kroger product detail in bulk", + "summary": "List a Metacritic movie's user reviews", "tags": [ - "Kroger" + "Metacritic" ] } }, - "/kroger/related-tags": { + "/metacritic/tv/{slug}": { "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 a normalized Metacritic TV show: Metascore (critic) and user score with sentiment and review counts, genres, networks, season count, rating, release date, IMDb id, and trailer. Credential-free public Metacritic data.", + "operationId": "metacritic-tv", "parameters": [ { - "description": "Search term to get refinement tags for", - "in": "query", - "name": "query", + "description": "Metacritic TV show slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "chips ahoy" - }, - { - "description": "Kroger store/location id that scopes results", - "in": "query", - "name": "location_id", - "type": "string", - "x-example": "03500917" + "x-example": "shogun" } ], "produces": [ @@ -308280,7 +337789,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.relatedTagsResponseDoc" + "$ref": "#/definitions/metacritic.productResponseDoc" } }, "400": { @@ -308289,8 +337798,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" } @@ -308307,103 +337822,136 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kroger search-refinement tags", + "summary": "Get a Metacritic TV show", "tags": [ - "Kroger" + "Metacritic" ] } }, - "/kroger/search": { + "/metacritic/tv/{slug}/critic-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Searches Kroger products by keyword and returns normalized 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). Served from Kroger's own search JSON API with real upstream pagination; if that path is unavailable it falls back to parsing the rendered search page, and the source field reports which path answered. Facet filters and sort apply to the JSON path only: when any of them is set, a JSON-path failure returns an error rather than silently falling back to unfiltered results.", - "operationId": "kroger-search", + "description": "Returns paginated professional/publication reviews for a TV show: publication, score, quote, author, and source URL. Credential-free public Metacritic data.", + "operationId": "metacritic-tv-critic-reviews", "parameters": [ { - "description": "Search keyword", - "in": "query", - "name": "query", + "description": "Metacritic TV show slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "milk" + "x-example": "shogun" }, { - "default": 1, - "description": "One-based result page", + "description": "1-based page number (default 1)", "in": "query", - "minimum": 1, "name": "page", "type": "integer" }, { - "default": "relevance", - "description": "Result order. One of: relevance, name_asc, popularity_desc", + "description": "Results per page (default 20, max 50)", + "in": "query", + "name": "per_page", + "type": "integer" + }, + { + "description": "Sort order", "enum": [ - "relevance", - "name_asc", - "popularity_desc" + "date", + "score", + "publication" ], "in": "query", "name": "sort", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" + } }, - { - "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" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Comma-separated nutrition/dietary facet values", - "in": "query", - "name": "nutrition", - "type": "string", - "x-example": "Gluten Free" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Comma-separated flavor facet values", - "in": "query", - "name": "flavor", - "type": "string", - "x-example": "Chocolate" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Comma-separated scent facet values", - "in": "query", - "name": "scent", - "type": "string", - "x-example": "Bergamot" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List a Metacritic TV show's critic reviews", + "tags": [ + "Metacritic" + ] + } + }, + "/metacritic/tv/{slug}/user-reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns paginated user reviews for a TV show: author, score (0-10), quote, date, helpfulness, and spoiler flag. Credential-free public Metacritic data.", + "operationId": "metacritic-tv-user-reviews", + "parameters": [ { - "description": "Comma-separated savings facet values", - "in": "query", - "name": "savings", + "description": "Metacritic TV show slug", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "On Sale" + "x-example": "shogun" }, { - "description": "Comma-separated more-options facet values", + "description": "1-based page number (default 1)", "in": "query", - "name": "more_options", - "type": "string", - "x-example": "SNAP EBT Eligible" + "name": "page", + "type": "integer" }, { - "description": "Lower bound of the price filter; defaults to 0", + "description": "Results per page (default 20, max 50)", "in": "query", - "name": "price_min", - "type": "number", - "x-example": 0 + "name": "per_page", + "type": "integer" }, { - "description": "Upper bound of the price filter; required to filter on price", + "description": "Sort order", + "enum": [ + "date", + "score", + "helpful" + ], "in": "query", - "name": "price_max", - "type": "number", - "x-example": 8 + "name": "sort", + "type": "string" } ], "produces": [ @@ -308413,7 +337961,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.searchResponseDoc" + "$ref": "#/definitions/metacritic.userReviewsResponseDoc" } }, "400": { @@ -308422,8 +337970,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" } @@ -308440,27 +337994,52 @@ "ApiKeyAuth": [] } ], - "summary": "Search Kroger products", + "summary": "List a Metacritic TV show's user reviews", "tags": [ - "Kroger" + "Metacritic" ] } }, - "/kroger/store": { + "/metaculus/category/{slug}/questions": { "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 normalized Metaculus question rows from a credential-free public category feed page. 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": "Kroger store/location id", - "in": "query", - "name": "store_id", + "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": "01600531" + "x-example": "artificial-intelligence" + }, + { + "description": "Rows to return, default 10, max 25", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -308470,7 +338049,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.storeResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -308491,6 +338070,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -308503,33 +338088,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Kroger store's detail", + "summary": "Metaculus category questions", "tags": [ - "Kroger" + "Metaculus" ] } }, - "/kroger/suggest": { + "/metaculus/comments-feed": { "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 normalized Metaculus question rows for the questions referenced by the most recent public comments, in comment recency order. Derived from credential-free public Metaculus data; upstream comment bodies are not exposed.", + "operationId": "metaculus-comments-feed", "parameters": [ { - "description": "Partial search text; omit for trending default suggestions", + "description": "Rows to return, default 10, max 25", "in": "query", - "name": "query", - "type": "string", - "x-example": "rin" + "name": "limit", + "type": "integer" }, { - "description": "Kroger store/location id", + "description": "Optional Metaculus topic slug", "in": "query", - "name": "location_id", - "type": "string", - "x-example": "03500917" + "name": "topic", + "type": "string" } ], "produces": [ @@ -308539,7 +338122,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.suggestResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -308548,6 +338143,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -308560,33 +338161,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kroger search-box suggestions", + "summary": "Metaculus comments feed", "tags": [ - "Kroger" + "Metaculus" ] } }, - "/kyliecosmetics/collections": { + "/metaculus/project/{slug}/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 normalized 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": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "description": "Metaculus project slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "ai-2027" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Rows to return, default 10, max 25", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -308596,7 +338197,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -308605,12 +338206,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": { @@ -308623,41 +338236,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics collections", + "summary": "Metaculus project questions", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/collections/{handle}/products": { + "/metaculus/question/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 one normalized Metaculus question from credential-free public page data.", + "operationId": "metaculus-question", "parameters": [ { - "description": "Collection handle", + "description": "Metaculus question or post id", "in": "path", - "name": "handle", + "name": "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": "43612" } ], "produces": [ @@ -308667,7 +338266,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/metaculus.questionResponseDoc" } }, "400": { @@ -308688,6 +338287,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -308700,33 +338305,46 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics collection products", + "summary": "Metaculus question detail", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/pages": { + "/metaculus/question/{id}/forecast-history": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Kylie Cosmetics (https://www.kyliecosmetics.com). The storefront URL is fixed server-side.", - "operationId": "kyliecosmetics-pages", + "description": "Returns public aggregation forecast history points for one Metaculus question from credential-free public page data. The `method` enum accepts `recency_weighted`, `unweighted`, and `single_aggregation`.", + "operationId": "metaculus-question-forecast-history", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Metaculus question or post id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "43612" + }, + { + "description": "Aggregation method", + "enum": [ + "recency_weighted", + "unweighted", + "single_aggregation" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "method", + "type": "string", + "x-example": "recency_weighted" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Maximum history points to return, default 500, max 2000", "in": "query", - "name": "limit", + "name": "max_points", "type": "integer", - "x-example": 50 + "x-example": 500 } ], "produces": [ @@ -308736,7 +338354,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/metaculus.forecastHistoryResponseDoc" } }, "400": { @@ -308745,12 +338363,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": { @@ -308763,27 +338393,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics static pages", + "summary": "Metaculus question forecast history", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/pages/{handle}": { + "/metaculus/question/{id}/forecasts": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one Kylie Cosmetics (https://www.kyliecosmetics.com) page handle. The storefront URL is fixed server-side.", - "operationId": "kyliecosmetics-page", + "description": "Returns compact public latest forecast summaries by aggregation method for one Metaculus question.", + "operationId": "metaculus-question-forecasts", "parameters": [ { - "description": "Page handle", + "description": "Metaculus question or post id", "in": "path", - "name": "handle", + "name": "id", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "43612" } ], "produces": [ @@ -308793,7 +338423,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/metaculus.forecastsResponseDoc" } }, "400": { @@ -308814,6 +338444,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -308826,33 +338462,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kylie Cosmetics static page", + "summary": "Metaculus question forecasts", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/products": { + "/metaculus/question/{id}/metadata": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 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": "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": "Metaculus question or post id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "43731" } ], "produces": [ @@ -308862,7 +338492,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/metaculus.metadataResponseDoc" } }, "400": { @@ -308871,12 +338501,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": { @@ -308889,27 +338531,39 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics products", + "summary": "Metaculus question metadata", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/products/{handle}": { + "/metaculus/question/{id}/options": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 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": "Product handle", + "description": "Metaculus question or post id", "in": "path", - "name": "handle", + "name": "id", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "43731" + }, + { + "description": "Aggregation method", + "enum": [ + "recency_weighted", + "unweighted", + "single_aggregation" + ], + "in": "query", + "name": "method", + "type": "string", + "x-example": "recency_weighted" } ], "produces": [ @@ -308919,7 +338573,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/metaculus.optionsResponseDoc" } }, "400": { @@ -308940,6 +338594,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -308952,45 +338612,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kylie Cosmetics product", + "summary": "Metaculus question options", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/products/{handle}/recommendations": { + "/metaculus/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized recommended products for one Kylie Cosmetics (https://www.kyliecosmetics.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "kyliecosmetics-product-recommendations", + "description": "Returns normalized Metaculus question rows from credential-free public page data. The endpoint fails closed on authenticated API responses or Cloudflare challenge pages.", + "operationId": "metaculus-questions", "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", + "description": "Rows to return, default 10, max 25", "in": "query", "name": "limit", - "type": "integer", - "x-example": 10 + "type": "integer" }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Optional Metaculus topic slug", "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "name": "topic", + "type": "string" } ], "produces": [ @@ -309000,7 +338646,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -309021,6 +338667,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -309033,41 +338685,31 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics product recommendations", + "summary": "Metaculus questions", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/search/suggest": { + "/metaculus/top-comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Kylie Cosmetics's (https://www.kyliecosmetics.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "kyliecosmetics-search-suggest", + "description": "Returns normalized Metaculus question rows for the questions whose recent public comments collected the highest vote scores over roughly the last week. Derived from credential-free public Metaculus data; upstream comment bodies are not exposed.", + "operationId": "metaculus-top-comments", "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", + "description": "Rows to return, default 10, max 25", "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "name": "limit", + "type": "integer" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Optional Metaculus topic slug", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "topic", + "type": "string" } ], "produces": [ @@ -309077,7 +338719,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -309086,12 +338728,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": { @@ -309104,42 +338758,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kylie Cosmetics search suggestions", + "summary": "Metaculus top comments feed", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/sitemap/urls": { + "/metaculus/tournament/{slug}/questions": { "get": { "consumes": [ "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", + "description": "Returns normalized 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": "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": "Metaculus tournament slug", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "products" + "x-example": "quarterly-cup" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "description": "Rows to return, default 10, max 25", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -309149,7 +338794,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -309158,12 +338803,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": { @@ -309176,19 +338833,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics sitemap URLs", + "summary": "Metaculus tournament questions", "tags": [ - "Kylie Cosmetics" + "Metaculus" ] } }, - "/kyliecosmetics/sitemaps": { + "/metro/article": { "get": { - "consumes": [ - "application/json" + "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 Metro article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://metro.co.uk/2026/09/24/andy-burnham-talking-russia-this-week-29649003/" + } ], - "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" ], @@ -309196,7 +338860,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -309205,8 +338869,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -309223,19 +338887,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics sitemaps", + "summary": "Get Metro article content", "tags": [ - "Kylie Cosmetics" + "Metro" ] } }, - "/kyliecosmetics/store": { + "/metro/author": { "get": { - "consumes": [ - "application/json" + "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 Metro author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://metro.co.uk/author/craig-munro/" + } ], - "description": "Returns normalized storefront metadata for Kylie Cosmetics (https://www.kyliecosmetics.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "kyliecosmetics-store", "produces": [ "application/json" ], @@ -309243,7 +338914,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/publicnews.metroAuthorResponseDoc" } }, "400": { @@ -309252,8 +338923,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -309270,24 +338941,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kylie Cosmetics store metadata", + "summary": "Get a Metro author profile", "tags": [ - "Kylie Cosmetics" + "Metro" ] } }, - "/latimes/article": { + "/metro/headlines": { "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 fresh headlines from one public Metro section feed. The section must be a slug returned by the sections endpoint.", + "operationId": "metro-headlines", "parameters": [ { - "description": "Canonical Los Angeles Times article URL", + "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": "url", + "name": "section", "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": "home" } ], "produces": [ @@ -309297,7 +339012,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/latimes.articleResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -309306,16 +339021,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 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/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -309330,24 +339065,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get Los Angeles Times article content", + "summary": "Get Metro top stories", "tags": [ - "Los Angeles Times" + "Metro" ] } }, - "/latimes/author": { + "/metro/sections": { "get": { - "description": "Returns a Los Angeles Times author's byline metadata, biography, contact/social links, and recent articles from a canonical author URL.", - "operationId": "latimes-author", + "description": "Returns every Metro section slug accepted by the headlines endpoint, with its display name and public RSS feed URL.", + "operationId": "metro-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Metro sections", + "tags": [ + "Metro" + ] + } + }, + "/microsoftstore/categories": { + "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. Credential-free public Microsoft Store data, live-verified and pinned rather than a passthrough call.", + "operationId": "microsoftstore-categories", "parameters": [ { - "description": "Canonical Los Angeles Times author URL", + "default": "apps", + "description": "Department to list categories for", + "enum": [ + "apps", + "games", + "devices", + "passes", + "fonts", + "themes", + "tencent-android", + "tencent-mini" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.latimes.com/people/anita-chabria" + "name": "media_type", + "type": "string" } ], "produces": [ @@ -309357,7 +339130,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/latimes.authorResponseDoc" + "$ref": "#/definitions/microsoftstore.categoriesResponseDoc" } }, "400": { @@ -309365,24 +339138,6 @@ "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": [ @@ -309390,66 +339145,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Los Angeles Times author profile", + "summary": "Get the full Microsoft Store category (and subcategory) taxonomy for a department", "tags": [ - "Los Angeles Times" + "Microsoft Store" ] } }, - "/latimes/headlines": { + "/microsoftstore/category": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns a page of a single department+category listing, cursor-paginated, with no search keyword required -- the credential-free 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 upstream. Credential-free public Microsoft Store data, read directly from the store's own category-filter API.", + "operationId": "microsoftstore-category", "parameters": [ { - "description": "Section slug from latimes-sections, defaults to main", + "description": "Category to browse", + "in": "query", + "name": "category", + "required": true, + "type": "string", + "x-example": "Photo & video" + }, + { + "default": "apps", + "description": "Department to browse", "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" + "apps", + "games", + "devices", + "passes", + "fonts", + "themes", + "tencent-android", + "tencent-mini" ], "in": "query", - "name": "section", + "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)", + "in": "query", + "name": "locale", "type": "string" } ], @@ -309460,7 +339212,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/latimes.headlinesResponseDoc" + "$ref": "#/definitions/microsoftstore.categoryResponseDoc" } }, "400": { @@ -309469,18 +339221,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": { @@ -309493,16 +339233,124 @@ "ApiKeyAuth": [] } ], - "summary": "Get Los Angeles Times section headlines", + "summary": "Browse a Microsoft Store category without a keyword", "tags": [ - "Los Angeles Times" + "Microsoft Store" ] } }, - "/latimes/sections": { + "/microsoftstore/charts": { "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 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 upstream sparsity for that chart, not a parsing gap. Credential-free public Microsoft Store data, read directly from the store's own curated-list API.", + "operationId": "microsoftstore-charts", + "parameters": [ + { + "description": "Chart to fetch", + "enum": [ + "TopFree", + "TopPaid", + "TopGrossing", + "toptrending", + "NewAndRising", + "Deal", + "GettingStartedApps", + "MostPopular" + ], + "in": "query", + "name": "list", + "required": true, + "type": "string", + "x-example": "TopFree" + }, + { + "default": "apps", + "description": "Department to scope the chart to", + "enum": [ + "apps", + "games" + ], + "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", + "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" + }, + { + "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": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Items 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": [ "application/json" ], @@ -309510,11 +339358,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/latimes.sectionsResponseDoc" + "$ref": "#/definitions/microsoftstore.chartsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -309531,33 +339379,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Los Angeles Times section feeds", + "summary": "Get a curated Microsoft Store chart", "tags": [ - "Los Angeles Times" + "Microsoft Store" ] } }, - "/lazada/categories": { + "/microsoftstore/editorial": { "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 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. Credential-free public Microsoft Store data, read directly from the store's own editorial-page API.", + "operationId": "microsoftstore-editorial", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", - "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" - ], + "description": "Editorial content id, from a product's award.editorial_id field", + "in": "query", + "name": "editorial_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" } ], "produces": [ @@ -309567,7 +339423,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.categoriesResponseDoc" + "$ref": "#/definitions/microsoftstore.editorialResponseDoc" } }, "400": { @@ -309576,8 +339432,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -309594,62 +339450,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Lazada country storefront's category directory", + "summary": "Get a Microsoft Store editorial article by id", "tags": [ - "Lazada" + "Microsoft Store" ] } }, - "/lazada/category-products": { + "/microsoftstore/events": { "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 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. Credential-free public Microsoft Store data, read directly from the store's own promotional-events API.", + "operationId": "microsoftstore-events", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", + "default": "apps", + "description": "Department to fetch special events for", "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" + "apps", + "games" ], "in": "query", - "name": "country", + "name": "media_type", "type": "string" }, { - "description": "Lazada category path slug, e.g. \\", + "default": 1, + "description": "1-based page number", "in": "query", - "name": "category", - "required": true, - "type": "string" + "name": "page", + "type": "integer" }, { - "description": "Optional brand path slug to filter within the category.", + "default": 20, + "description": "Items per page (max 24)", "in": "query", - "name": "brand", - "type": "string" + "name": "page_size", + "type": "integer" }, { - "description": "Result page, 1-indexed. Defaults to 1.", + "default": "US", + "description": "Store country/region code (ISO-2)", "in": "query", - "name": "page", - "type": "integer" + "name": "country", + "type": "string" }, { - "description": "Sort order. Defaults to popularity.", - "enum": [ - "popularity", - "priceasc", - "pricedesc" - ], + "default": "en-US", + "description": "Display locale (BCP-47)", "in": "query", - "name": "sort", + "name": "locale", "type": "string" } ], @@ -309660,7 +339511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.categoryProductsResponseDoc" + "$ref": "#/definitions/microsoftstore.eventsResponseDoc" } }, "400": { @@ -309669,12 +339520,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -309687,33 +339532,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Lazada country storefront's product listing for one category", + "summary": "Get a Microsoft Store department's special-events shelf", "tags": [ - "Lazada" + "Microsoft Store" ] } }, - "/lazada/home": { + "/microsoftstore/product": { "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 normalized 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). Credential-free public Microsoft Store data, read directly from the store's own page-data API.", + "operationId": "microsoftstore-product", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", - "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" - ], + "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" } ], "produces": [ @@ -309723,7 +339576,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.homeResponseDoc" + "$ref": "#/definitions/microsoftstore.productResponseDoc" } }, "400": { @@ -309732,8 +339585,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -309750,46 +339603,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Lazada country storefront's homepage feed", + "summary": "Get Microsoft Store details for a single product", "tags": [ - "Lazada" + "Microsoft Store" ] } }, - "/lazada/product": { + "/microsoftstore/publisher": { "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 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). Credential-free public Microsoft Store data, read directly from the store's own browse-by-publisher API.", + "operationId": "microsoftstore-publisher", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", - "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" - ], + "description": "Exact publisher/developer name", "in": "query", - "name": "country", + "name": "publisher_name", + "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" }, { - "description": "Lazada item id.", + "default": "US", + "description": "Store country/region code (ISO-2)", "in": "query", - "name": "item_id", - "required": true, - "type": "integer" + "name": "country", + "type": "string" }, { - "description": "Optional Lazada sku id, for a specific variant.", + "default": "en-US", + "description": "Display locale (BCP-47)", "in": "query", - "name": "sku_id", - "type": "integer" + "name": "locale", + "type": "string" } ], "produces": [ @@ -309799,7 +339653,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.productResponseDoc" + "$ref": "#/definitions/microsoftstore.publisherResponseDoc" } }, "400": { @@ -309808,16 +339662,55 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "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. Credential-free public Microsoft Store data, read directly from the store's own zero-state search API.", + "operationId": "microsoftstore-recommended", + "parameters": [ + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" }, - "500": { - "description": "Internal Server Error", + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/microsoftstore.recommendedResponseDoc" } }, "503": { @@ -309832,56 +339725,65 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Lazada country storefront's product-detail page", + "summary": "Get the Microsoft Store's default recommendation shelf", "tags": [ - "Lazada" + "Microsoft Store" ] } }, - "/lazada/search": { + "/microsoftstore/related": { "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 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. Credential-free public Microsoft Store data, read directly from the store's own recommendation API.", + "operationId": "microsoftstore-related", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", + "description": "Seed Microsoft Store product id", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "9NCBCSZSJRSB" + }, + { + "description": "The seed product's own type. Omit to auto-resolve from product_id.", "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" + "Application", + "Game", + "Passes" ], "in": "query", - "name": "country", + "name": "product_type", "type": "string" }, { - "description": "Free-text search query.", + "default": 1, + "description": "1-based page number", "in": "query", - "name": "q", - "required": true, - "type": "string" + "name": "page", + "type": "integer" }, { - "description": "Result page, 1-indexed. Defaults to 1.", + "default": 10, + "description": "Related products per page (max 24)", "in": "query", - "name": "page", + "name": "page_size", "type": "integer" }, { - "description": "Sort order. Defaults to popularity.", - "enum": [ - "popularity", - "priceasc", - "pricedesc" - ], + "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": "sort", + "name": "locale", "type": "string" } ], @@ -309892,7 +339794,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.searchResponseDoc" + "$ref": "#/definitions/microsoftstore.relatedResponseDoc" } }, "400": { @@ -309901,12 +339803,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -309919,24 +339815,66 @@ "ApiKeyAuth": [] } ], - "summary": "Search a Lazada country storefront's catalog by keyword", + "summary": "Get products related to a Microsoft Store product", "tags": [ - "Lazada" + "Microsoft Store" ] } }, - "/leboncoin/listing": { + "/microsoftstore/reviews": { "get": { - "description": "Returns normalized public metadata for one supplied Leboncoin ad URL. It excludes seller identity and contacts, precise location, payment, delivery, and account data.", - "operationId": "leboncoin-listing", + "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). Credential-free public Microsoft Store data, read directly from the store's own review-listing API.", + "operationId": "microsoftstore-reviews", "parameters": [ { - "description": "Canonical public ad URL returned by leboncoin-search", + "description": "Microsoft Store product id", "in": "query", - "name": "url", + "name": "product_id", "required": true, "type": "string", - "x-example": "https://www.leboncoin.fr/ad/ordinateurs/1946831025" + "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" } ], "produces": [ @@ -309946,7 +339884,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/leboncoin.listingResponseDoc" + "$ref": "#/definitions/microsoftstore.reviewsResponseDoc" } }, "400": { @@ -309955,18 +339893,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": { @@ -309979,24 +339905,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Leboncoin public listing", + "summary": "Get paginated Microsoft Store reviews for a product", "tags": [ - "Leboncoin" + "Microsoft Store" ] } }, - "/leboncoin/search": { + "/microsoftstore/reviews/summary": { "get": { - "description": "Returns normalized 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 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. Credential-free public Microsoft Store data, read directly from the store's own review-summary API.", + "operationId": "microsoftstore-reviews-summary", "parameters": [ { - "description": "Public Leboncoin location slug", + "description": "Microsoft Store product id", "in": "query", - "name": "location", + "name": "product_id", "required": true, "type": "string", - "x-example": "cp_paris_75016" + "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" } ], "produces": [ @@ -310006,7 +339949,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/leboncoin.searchResponseDoc" + "$ref": "#/definitions/microsoftstore.reviewsSummaryResponseDoc" } }, "400": { @@ -310015,12 +339958,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -310033,27 +339970,110 @@ "ApiKeyAuth": [] } ], - "summary": "Search Leboncoin public listings", + "summary": "Get a Microsoft Store product's aggregate rating summary", "tags": [ - "Leboncoin" + "Microsoft Store" ] } }, - "/letterboxd/film/{slug}": { + "/microsoftstore/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Letterboxd film: synopsis, director, cast, genres, countries, languages, runtime, and aggregate member rating. Credential-free public Letterboxd data (letterboxd.com), parsed from the film page's schema.org structured data.", - "operationId": "letterboxd-film", + "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. Credential-free public Microsoft Store data, read directly from the store's own web API.", + "operationId": "microsoftstore-search", "parameters": [ { - "description": "Letterboxd film slug", - "in": "path", - "name": "slug", + "description": "Search keyword", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "parasite-2019" + "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" } ], "produces": [ @@ -310063,7 +340083,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.filmResponseDoc" + "$ref": "#/definitions/microsoftstore.searchResponseDoc" } }, "400": { @@ -310072,18 +340092,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": { @@ -310096,27 +340104,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd film", + "summary": "Search the Microsoft Store", "tags": [ - "Letterboxd" + "Microsoft Store" ] } }, - "/letterboxd/film/{slug}/rating-histogram": { + "/microsoftstore/spotlight": { "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. Credential-free public Letterboxd data.", - "operationId": "letterboxd-film-rating-histogram", + "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. Credential-free public Microsoft Store data, read directly from the store's own promotion-products API.", + "operationId": "microsoftstore-spotlight", "parameters": [ { - "description": "Letterboxd film slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "parasite-2019" + "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" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -310126,7 +340152,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.ratingHistogramResponseDoc" + "$ref": "#/definitions/microsoftstore.spotlightResponseDoc" } }, "400": { @@ -310135,12 +340161,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -310153,33 +340173,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd film's rating distribution", + "summary": "Get the Microsoft Store home page or department spotlight", "tags": [ - "Letterboxd" + "Microsoft Store" ] } }, - "/letterboxd/film/{slug}/reviews": { + "/microsoftstore/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns a film's popular reviews (reviewer, rating, date, text, like/comment counts, spoiler flag). Credential-free public Letterboxd data.", - "operationId": "letterboxd-film-reviews", + "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). Credential-free public Microsoft Store data, read directly from the store's own autocomplete API.", + "operationId": "microsoftstore-suggest", "parameters": [ { - "description": "Letterboxd film slug", - "in": "path", - "name": "slug", + "description": "Partial search term to autocomplete", + "in": "query", + "name": "prefix", "required": true, "type": "string", - "x-example": "parasite-2019" + "x-example": "spot" }, { - "description": "Max reviews, default 10, max 50", + "default": "US", + "description": "Store country/region code (ISO-2)", "in": "query", - "name": "limit", - "type": "integer" + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -310189,7 +340217,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.reviewsResponseDoc" + "$ref": "#/definitions/microsoftstore.suggestResponseDoc" } }, "400": { @@ -310198,12 +340226,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -310216,33 +340238,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd film's popular reviews", + "summary": "Get Microsoft Store search suggestions for a prefix", "tags": [ - "Letterboxd" + "Microsoft Store" ] } }, - "/letterboxd/film/{slug}/similar": { + "/mirror/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns films Letterboxd recommends as similar to the given film. Credential-free public Letterboxd data.", - "operationId": "letterboxd-film-similar", + "description": "Returns public Mirror article metadata and body paragraphs from a canonical article URL.", + "operationId": "mirror-article", "parameters": [ { - "description": "Letterboxd film slug", - "in": "path", - "name": "slug", + "description": "Canonical Mirror article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "parasite-2019" - }, - { - "description": "Max films, default 10, max 50", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "https://www.mirror.co.uk/news/uk-news/bootle-house-fire-schools-tributes-37697006" } ], "produces": [ @@ -310252,7 +340265,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.similarResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -310261,8 +340274,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -310279,27 +340292,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get films similar to a Letterboxd film", + "summary": "Get Mirror article content", "tags": [ - "Letterboxd" + "Mirror" ] } }, - "/letterboxd/member/{username}": { + "/mirror/author": { "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. Credential-free public Letterboxd data.", - "operationId": "letterboxd-member", + "description": "Returns one Mirror author's public profile: name, job title, bio, email, X/Twitter handle, and their recent articles.", + "operationId": "mirror-author", "parameters": [ { - "description": "Letterboxd username", - "in": "path", - "name": "username", - "required": true, + "description": "Author slug, e.g. neil-shaw", + "in": "query", + "name": "slug", "type": "string", - "x-example": "dave" + "x-example": "neil-shaw" + }, + { + "description": "Canonical mirror.co.uk/authors// URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.mirror.co.uk/authors/neil-shaw/" } ], "produces": [ @@ -310309,7 +340325,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.memberResponseDoc" + "$ref": "#/definitions/publicnews.mirrorAuthorResponseDoc" } }, "400": { @@ -310324,12 +340340,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -310342,43 +340352,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd member's public profile stats", + "summary": "Get a Mirror author profile", "tags": [ - "Letterboxd" + "Mirror" ] } }, - "/letterboxd/person/{slug}": { + "/mirror/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a person's Letterboxd filmography for a credit role. Credential-free public Letterboxd data.", - "operationId": "letterboxd-person", + "description": "Returns fresh headlines from one public Mirror section.", + "operationId": "mirror-headlines", "parameters": [ { - "description": "Letterboxd person slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "bong-joon-ho" - }, - { - "description": "Credit role, default actor", + "description": "Mirror section slug", "enum": [ - "actor", - "director" + "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": "role", - "type": "string" - }, - { - "description": "Max films, default 10, max 50", - "in": "query", - "name": "limit", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" } ], "produces": [ @@ -310388,7 +340415,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.personResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -310397,11 +340424,37 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Mirror section headlines", + "tags": [ + "Mirror" + ] + } + }, + "/mirror/news": { + "get": { + "description": "Returns fresh Mirror top stories from the public News RSS feed.", + "operationId": "mirror-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -310415,53 +340468,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd person's filmography", + "summary": "Get Mirror top stories", "tags": [ - "Letterboxd" + "Mirror" ] } }, - "/letterboxd/popular": { + "/mirror/sections": { "get": { - "consumes": [ + "description": "Returns the public Mirror editorial section inventory used by mirror-headlines.", + "operationId": "mirror-sections", + "produces": [ "application/json" ], - "description": "Returns a popularity-ranked film chart, optionally scoped to a time window, genre, and/or decade. Credential-free public Letterboxd data.", - "operationId": "letterboxd-popular", - "parameters": [ - { - "description": "Popularity window, omit for all-time", - "enum": [ - "day", - "week", - "month", - "year" - ], - "in": "query", - "name": "period", - "type": "string" - }, - { - "description": "Genre slug filter", - "in": "query", - "name": "genre", - "type": "string", - "x-example": "mystery" - }, - { - "description": "Decade filter, e.g. 2010s", - "in": "query", - "name": "decade", - "type": "string", - "x-example": "2010s" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Max films, default 10, max 50", - "in": "query", - "name": "limit", - "type": "integer" + "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" ], @@ -310469,19 +340511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.popularResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/mlb.discoveryResponseDoc" } }, "503": { @@ -310496,42 +340526,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd popularity-ranked film chart", + "summary": "Discover MLB sections and Stats API values", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/letterboxd/search": { + "/mlb/editorial-feed": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Letterboxd films, people, lists, and tags. Credential-free public Letterboxd data.", - "operationId": "letterboxd-search", + "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": "Search query", + "description": "MLB feed or selection slug, such as mlb-news-list or sel-vvc-mlb-stories", "in": "query", - "name": "q", + "name": "slug", "required": true, "type": "string", - "x-example": "Parasite" + "x-example": "mlb-news-list" }, { - "description": "Optional result type filter", + "default": "EN_US", + "description": "Feed locale", "enum": [ - "film" + "EN_US", + "ES_US" ], "in": "query", - "name": "type", + "name": "language", "type": "string" }, { - "description": "Max results, default 10, max 50", + "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" } ], "produces": [ @@ -310541,7 +340582,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.searchResponseDoc" + "$ref": "#/definitions/mlb.editorialFeedResponseDoc" } }, "400": { @@ -310550,12 +340591,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -310568,26 +340603,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Letterboxd", + "summary": "Get an MLB.com editorial feed", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/linkedin/company/{id}": { + "/mlb/game": { "get": { "consumes": [ "application/json" ], - "description": "Returns detailed company information by LinkedIn ID.", - "operationId": "linkedin-company", + "description": "Returns a compact MLB game feed with status, teams, score, innings, probable pitchers, decisions, and team box-score totals.", + "operationId": "mlb-game", "parameters": [ { - "description": "LinkedIn Company ID", - "in": "path", + "description": "Numeric MLB game id", + "in": "query", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "822781" } ], "produces": [ @@ -310597,23 +340633,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/linkedin.companyResponseDoc" + "$ref": "#/definitions/mlb.gameResponseDoc" } }, "400": { - "description": "Invalid company ID", + "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" } @@ -310624,25 +340666,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get LinkedIn Company info by ID", + "summary": "Get an MLB game feed", "tags": [ - "LinkedIn" + "MLB" ] } }, - "/linkedin/product/categories": { + "/mlb/game-boxscore": { "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", + "description": "Returns both teams' player batting, pitching, and fielding lines for a game.", + "operationId": "mlb-game-boxscore", "parameters": [ { - "description": "Narrow results to categories matching this term. Omit to return every known category.", + "description": "Numeric MLB game id", "in": "query", - "name": "keyword", - "type": "string" + "name": "id", + "required": true, + "type": "string", + "x-example": "824651" } ], "produces": [ @@ -310652,23 +340693,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/linkedin.productCategoriesResponseDoc" + "$ref": "#/definitions/mlb.boxscoreResponseDoc" } }, - "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": "LinkedIn upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -310679,26 +340720,24 @@ "ApiKeyAuth": [] } ], - "summary": "Discover LinkedIn product categories", + "summary": "Get an MLB player boxscore", "tags": [ - "LinkedIn" + "MLB" ] } }, - "/linkedin/product/{id}": { + "/mlb/game-play-by-play": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detailed product information from LinkedIn by product ID.", - "operationId": "linkedin-product", + "description": "Returns every at-bat and pitch/event record for an MLB game.", + "operationId": "mlb-game-play-by-play", "parameters": [ { - "description": "LinkedIn Product ID", - "in": "path", + "description": "Numeric MLB game id", + "in": "query", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "824651" } ], "produces": [ @@ -310708,23 +340747,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/linkedin.productResponseDoc" + "$ref": "#/definitions/mlb.playByPlayResponseDoc" } }, "400": { - "description": "Invalid Params", + "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" } @@ -310735,41 +340774,84 @@ "ApiKeyAuth": [] } ], - "summary": "Get LinkedIn Product info by ID", + "summary": "Get MLB game play-by-play", "tags": [ - "LinkedIn" + "MLB" ] } }, - "/linkedin/products/search": { + "/mlb/league-leaders": { "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", + "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": "Search keyword, matched on word prefixes", + "description": "Comma-separated MLB leader category names; values are listed in mlb-discovery", "in": "query", - "name": "keyword", + "name": "categories", + "required": true, "type": "string", - "x-example": "crm" + "x-example": "homeRuns" }, { - "description": "Numeric category id from /linkedin/product/categories", + "description": "Four-digit season; defaults to current year", "in": "query", - "name": "category_id", - "type": "string", - "x-example": "1620" + "name": "season", + "type": "integer", + "x-example": 2026 }, { - "default": 0, - "description": "Upstream card offset, 0 to 1199", + "description": "Stat group", + "enum": [ + "hitting", + "pitching", + "fielding", + "catching", + "running", + "game", + "team", + "streak" + ], "in": "query", - "maximum": 1199, - "minimum": 0, - "name": "start", + "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" } ], @@ -310780,29 +340862,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/linkedin.productsSearchResponseDoc" + "$ref": "#/definitions/mlb.leagueLeadersResponseDoc" } }, "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" } @@ -310813,26 +340883,218 @@ "ApiKeyAuth": [] } ], - "summary": "Search the LinkedIn product directory", + "summary": "Get MLB league leaders", "tags": [ - "LinkedIn" + "MLB" ] } }, - "/linkedin/showcase/{id}": { + "/mlb/league-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns detailed information about a LinkedIn showcase page by ID.", - "operationId": "linkedin-showcase", + "description": "Returns ranked MLB season stat splits across both leagues. The group enum accepts every value returned by mlb_discovery.", + "operationId": "mlb-league-stats", "parameters": [ { - "description": "LinkedIn Showcase Page ID", - "in": "path", - "name": "id", + "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": [ @@ -310842,23 +341104,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/linkedin.showcaseResponseDoc" + "$ref": "#/definitions/mlb.statsResponseDoc" } }, "400": { - "description": "Invalid Params", + "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" } @@ -310869,24 +341131,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Linkedin Showcase Page Info", + "summary": "Get ranked MLB league statistics", "tags": [ - "LinkedIn" + "MLB" ] } }, - "/livemint/article": { + "/mlb/player": { "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", + "consumes": [ + "application/json" + ], + "description": "Returns an MLB player's identity, biographical information, position, handedness, active status, and current team.", + "operationId": "mlb-player", "parameters": [ { - "description": "Canonical Mint article URL", + "description": "Numeric MLB player id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.livemint.com/companies/news/example-article-slug-11790258702207.html" + "x-example": "592450" } ], "produces": [ @@ -310896,7 +341161,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.playerResponseDoc" } }, "400": { @@ -310905,14 +341170,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" } @@ -310929,93 +341194,162 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mint article content", + "summary": "Get an MLB player", "tags": [ - "Mint" + "MLB" ] } }, - "/livemint/author": { + "/mlb/player-stats": { "get": { - "description": "Returns a Mint author's byline metadata, biography, and social links from a canonical author profile URL.", - "operationId": "livemint-author", + "consumes": [ + "application/json" + ], + "description": "Returns one player's MLB season statistics. The group enum accepts every value returned by mlb_discovery.", + "operationId": "mlb-player-stats", "parameters": [ { - "description": "Canonical Mint author URL", + "description": "Numeric MLB player id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.livemint.com/authors/sheetal-goel" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.livemintAuthorResponseDoc" - } + "x-example": "592450" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Four-digit season; defaults to current year", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Stat 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 a Mint author profile", - "tags": [ - "Mint" - ] - } - }, - "/livemint/headlines": { - "get": { - "description": "Returns fresh headlines from one public Mint section.", - "operationId": "livemint-headlines", - "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": "Mint section slug", + "description": "MLB game type", "enum": [ - "companies", - "opinion", - "money", - "politics", - "science", - "industry", - "education", - "sports", - "technology", - "markets", - "ai", - "insurance", - "budget", - "elections", - "videos" + "S", + "R", + "F", + "D", + "L", + "W", + "C", + "P", + "A", + "I", + "E" ], "in": "query", - "name": "section", - "required": true, + "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" } ], @@ -311026,7 +341360,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/mlb.statsResponseDoc" } }, "400": { @@ -311035,37 +341369,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mint section headlines", - "tags": [ - "Mint" - ] - } - }, - "/livemint/news": { - "get": { - "description": "Returns fresh Mint (livemint.com) top stories from its public \"news\" feed.", - "operationId": "livemint-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -311085,50 +341393,129 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mint top stories", - "tags": [ - "Mint" - ] - } - }, - "/livemint/sections": { - "get": { - "description": "Returns the public Mint section inventory used by the headlines endpoint.", - "operationId": "livemint-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mint sections", + "summary": "Get MLB player season statistics", "tags": [ - "Mint" + "MLB" ] } }, - "/liverpoolecho/article": { + "/mlb/prospect-rankings": { "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", + "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": "Canonical Liverpool Echo article URL", + "default": "top100", + "description": "Ranking view", + "enum": [ + "top100", + "team", + "position", + "draft", + "international" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.liverpoolecho.co.uk/news/liverpool-news/oxton-mans-vile-campaign-harassment-34666610" + "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": [ @@ -311138,7 +341525,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.prospectRankingsResponseDoc" } }, "400": { @@ -311147,18 +341534,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": { @@ -311171,36 +341546,122 @@ "ApiKeyAuth": [] } ], - "summary": "Get Liverpool Echo article content", + "summary": "Get MLB Pipeline curated prospect rankings", "tags": [ - "Liverpool Echo" + "MLB" ] } }, - "/liverpoolecho/author": { + "/mlb/prospect-stats": { "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", + "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": "Author slug, e.g. wesley-holmes", + "default": "top100", + "description": "Prospect pool", + "enum": [ + "top100", + "all" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "wesley-holmes" + "name": "list_type", + "type": "string" }, { - "description": "Canonical liverpoolecho.co.uk/authors// URL; alternative to slug", + "description": "Optional MLB team id; selects that team's prospect list and overrides list_type", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.liverpoolecho.co.uk/authors/wesley-holmes/" + "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": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", + "description": "Minimum PA threshold", + "enum": [ + 1, + 5, + 10, + 25, + 50, + 100, + 150, + 200, + 250 + ], "in": "query", - "name": "page", + "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" } ], @@ -311211,7 +341672,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" + "$ref": "#/definitions/mlb.prospectStatsResponseDoc" } }, "400": { @@ -311220,18 +341681,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": { @@ -311244,52 +341693,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Liverpool Echo author profile", + "summary": "Get MLB Pipeline prospect statistics and rankings", "tags": [ - "Liverpool Echo" + "MLB" ] } }, - "/liverpoolecho/headlines": { + "/mlb/schedule": { "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", + "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", "parameters": [ { - "description": "Liverpool Echo section slug", + "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": [ - "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" + "S", + "R", + "F", + "D", + "L", + "W", + "C", + "P", + "A", + "I", + "E" ], "in": "query", - "name": "section", - "required": true, + "name": "game_type", "type": "string" } ], @@ -311300,7 +341759,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/mlb.scheduleResponseDoc" } }, "400": { @@ -311327,88 +341786,24 @@ "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" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Liverpool Echo top stories", - "tags": [ - "Liverpool Echo" - ] - } - }, - "/liverpoolecho/sections": { - "get": { - "description": "Returns the public Liverpool Echo editorial section inventory used by liverpoolecho-headlines.", - "operationId": "liverpoolecho-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Liverpool Echo sections", + "summary": "Get the MLB schedule and scores", "tags": [ - "Liverpool Echo" + "MLB" ] } }, - "/livescience/article": { + "/mlb/search": { "get": { - "description": "Returns public Live Science article metadata and body paragraphs from a canonical article URL.", - "operationId": "livescience-article", + "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 Live Science article URL", + "description": "Search text; 3-100 characters", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.livescience.com/space/comets/example-comet-story" + "x-example": "Yankees" } ], "produces": [ @@ -311418,7 +341813,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.searchResponseDoc" } }, "400": { @@ -311427,12 +341822,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -311445,37 +341834,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get Live Science article content", + "summary": "Search MLB players, teams, and content topics", "tags": [ - "Live Science" + "MLB" ] } }, - "/livescience/author": { + "/mlb/standings": { "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", + "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": "Author slug, e.g. ben-turner", + "description": "Four-digit season; defaults to current year", "in": "query", - "name": "slug", - "type": "string", - "x-example": "ben-turner" + "name": "season", + "type": "integer", + "x-example": 2026 }, { - "description": "Canonical livescience.com/author/ URL, optionally with a /page/ segment; alternative to slug", + "default": "regularSeason", + "description": "Standings type", + "enum": [ + "regularSeason", + "wildCard", + "divisionLeaders", + "wildCardWithLeaders", + "firstHalf", + "secondHalf", + "springTraining", + "postseason", + "byDivision", + "byConference", + "byLeague", + "byOrganization", + "currentHalf" + ], "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.livescience.com/author/ben-turner" + "name": "type", + "type": "string" }, { - "default": 1, - "description": "1-based page number of the author's article list; overrides any page number embedded in url", + "description": "Snapshot date in YYYY-MM-DD format; returns standings as of that date", "in": "query", - "name": "page", - "type": "integer" + "name": "date", + "type": "string", + "x-example": "2026-09-27" } ], "produces": [ @@ -311485,7 +341892,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.livescienceAuthorResponseDoc" + "$ref": "#/definitions/mlb.standingsResponseDoc" } }, "400": { @@ -311494,8 +341901,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -311512,154 +341919,322 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Live Science author profile", + "summary": "Get MLB standings", "tags": [ - "Live Science" + "MLB" ] } }, - "/livescience/headlines": { + "/mlb/statcast-abs-challenges": { "get": { - "description": "Returns fresh Live Science headlines from one public section hub page.", - "operationId": "livescience-headlines", + "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": "Live Science section slug", + "default": "batter", + "description": "Challenge board group", "enum": [ - "animals", - "archaeology", - "chemistry", - "features", - "health", - "human-behavior", - "interviews", - "news", - "opinion", - "physics-mathematics", - "planet-earth", - "products", - "space", - "technology" + "batter", + "batting-team", + "catcher", + "pitcher", + "catching-team", + "team-summary", + "league" ], "in": "query", - "name": "section", - "required": true, + "name": "challenge_type", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "Season values", + "in": "query", + "items": { + "enum": [ + "2025", + "2026" + ], + "type": "string" + }, + "name": "seasons", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Live Science section headlines", - "tags": [ - "Live Science" - ] - } - }, - "/livescience/news": { - "get": { - "description": "Returns fresh Live Science top stories from the public RSS feed.", - "operationId": "livescience-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "collectionFormat": "multi", + "description": "Game type codes", + "in": "query", + "items": { + "enum": [ + "R", + "S", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "game_types", + "type": "array" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "for", + "description": "Challenges made or against", + "enum": [ + "for", + "against" + ], + "in": "query", + "name": "data_mode", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Live Science top stories", - "tags": [ - "Live Science" - ] - } - }, - "/livescience/sections": { - "get": { - "description": "Returns the public Live Science top-level editorial taxonomy used by the headlines endpoint.", - "operationId": "livescience-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "default": "chal", + "description": "Challenge count or run value", + "enum": [ + "chal", + "runs" + ], + "in": "query", + "name": "data_count", + "type": "string" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get Live Science sections", - "tags": [ - "Live Science" - ] - } - }, - "/livescore/competition": { - "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", - "parameters": [ + "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" + }, { - "description": "Three to five lowercase path segments following /en/, such as football/england/premier-league or football/england/premier-league/standings", + "collectionFormat": "multi", + "description": "Pitch type codes", "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "football/england/premier-league" + "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": [ @@ -311669,7 +342244,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastABSChallengesResponseDoc" } }, "400": { @@ -311678,47 +342253,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": "LiveScore competition page and section data", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/competitions": { - "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" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -311731,65 +342265,121 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore competition page directory", + "summary": "Get Baseball Savant ABS challenge rankings", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/live-scores": { + "/mlb/statcast-active-spin": { "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", + "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": "LiveScore sport id", + "default": "2026_spin-based", + "description": "Season and calculation method", "enum": [ - "soccer", - "hockey", - "basketball", - "tennis", - "cricket" + "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": "sport", - "required": true, - "type": "string", - "x-example": "soccer" + "name": "year", + "type": "string" }, { - "description": "UTC offset in hours from -12 through 14; defaults to 0", + "default": "50", + "description": "Minimum total pitches", + "enum": [ + "50", + "100", + "250", + "500", + "750", + "1000", + "1500", + "2000", + "2500", + "3000" + ], "in": "query", - "maximum": 14, - "minimum": -12, - "name": "timezone_offset", - "type": "integer" + "name": "min", + "type": "string" }, { - "description": "Request a paged live feed; defaults to false", + "description": "Pitcher throwing hand; omit for both", + "enum": [ + "R", + "L" + ], "in": "query", - "name": "paging", - "type": "boolean" + "name": "hand", + "type": "string" }, { - "description": "Section Id from the prior paged response, e.g. s-26031", + "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": "cursor", - "type": "string", - "x-example": "s-26031" + "name": "sort", + "type": "string" }, { - "description": "Page direction in paged mode", + "default": "desc", + "description": "Sort direction", "enum": [ - "down", - "up" + "asc", + "desc" ], "in": "query", - "name": "direction", + "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": [ @@ -311799,7 +342389,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastActiveSpinResponseDoc" } }, "400": { @@ -311826,27 +342416,255 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore live scores by sport", + "summary": "Get Baseball Savant Active Spin rows", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/match": { + "/mlb/statcast-arm-angle": { "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", + "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": "Five path segments following /en/ in a LiveScore match URL", + "collectionFormat": "multi", + "description": "Seasons; at most three may be combined. Defaults to 2026.", "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267" + "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" } ], "produces": [ @@ -311856,7 +342674,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastArmAngleResponseDoc" } }, "400": { @@ -311883,27 +342701,164 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore match details", + "summary": "Get Baseball Savant Pitcher Arm Angle rows", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/match-stats": { + "/mlb/statcast-arm-strength": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the statistics section for a LiveScore match when the source exposes it. The current Next.js build id is resolved from the public match page at request time.", - "operationId": "livescore-match-stats", + "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": "Five-segment path after /en/ from a LiveScore match URL", + "default": "player", + "description": "Leaderboard row type", + "enum": [ + "player", + "team" + ], "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267" + "name": "type", + "type": "string" + }, + { + "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": [ @@ -311913,7 +342868,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastArmStrengthResponseDoc" } }, "400": { @@ -311922,12 +342877,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -311940,27 +342889,41 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore match statistics", + "summary": "Get Baseball Savant Arm Strength leaderboard data", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/news": { + "/mlb/statcast-arm-strength-player": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public article-card metadata for a LiveScore news route. Discover sport, competition, team, tips, and daily-feed paths from /livescore/news-categories.", - "operationId": "livescore-news", + "description": "Returns the player's individual Arm Strength throw records for a verified season or all years.", + "operationId": "mlb-statcast-arm-strength-player", "parameters": [ { - "description": "all or a lowercase path from /livescore/news-categories; up to six segments", + "description": "Positive MLB player id", "in": "query", - "name": "category", + "name": "player_id", "required": true, "type": "string", - "x-example": "football/premier-league" + "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": [ @@ -311970,7 +342933,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastArmStrengthPlayerResponseDoc" } }, "400": { @@ -311997,27 +342960,223 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore news by category or topic", + "summary": "Get Baseball Savant player throw details", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/news-article": { + "/mlb/statcast-arm-value": { "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", + "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": "Two to eight lowercase path segments after /en/news/, copied from an article slug", + "description": "Case- and accent-insensitive local substring on the displayed row name; up to 100 characters", "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "football/man-city-guilty-of-114-charges-what-happens-next-man-city-square" + "name": "q", + "type": "string" + }, + { + "default": "Fld", + "description": "Leaderboard view", + "enum": [ + "Run", + "Fld", + "Pit", + "Batting Team", + "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": "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": "Return one row per season", + "enum": [ + "no", + "yes" + ], + "in": "query", + "name": "split", + "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" + ], + "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" + }, + { + "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" + }, + { + "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", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -312027,7 +343186,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastArmValueResponseDoc" } }, "400": { @@ -312036,12 +343195,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -312054,61 +343207,165 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore news article", + "summary": "Get Baseball Savant Extra Bases Run Value leaderboard data", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/news-categories": { + "/mlb/statcast-arm-value-details": { "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": "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": "Positive player id from an Arm Value player row", + "in": "query", + "name": "entity_id", + "required": true, + "type": "string", + "x-example": "677800" }, - "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": [ + "default": "Fld", + "description": "Player view", + "enum": [ + "Run", + "Fld", + "Pit" + ], + "in": "query", + "name": "type", + "type": "string" + }, { - "default": false, - "description": "Include full RSS article content when available", + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], "in": "query", - "name": "include_content", - "type": "boolean" + "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": [ @@ -312118,7 +343375,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.livescoreNewsFeedResponseDoc" + "$ref": "#/definitions/mlb.statcastArmValueDetailsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "404": { @@ -312139,19 +343402,357 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore global RSS news feed", + "summary": "Get expanded Baseball Savant Arm Value player plays", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/news-publishers": { + "/mlb/statcast-baserunning": { "get": { - "consumes": [ - "application/json" + "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": "Baseball Savant table", + "enum": [ + "baserunning-run-value", + "basestealing-running-game", + "baserunning" + ], + "in": "query", + "name": "board", + "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" + }, + { + "default": "no", + "description": "Return separate year rows", + "enum": [ + "no", + "yes" + ], + "in": "query", + "name": "split", + "type": "string" + }, + { + "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" + }, + { + "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" + }, + { + "default": true, + "description": "Restrict to selected team's active player rows; requires a specific team id", + "in": "query", + "name": "with_team_only", + "type": "boolean" + }, + { + "default": "all", + "description": "Basestealing pitcher hand", + "enum": [ + "all", + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, + { + "default": "All", + "description": "Basestealing runner outcome", + "enum": [ + "All", + "Advance", + "Out", + "Hold" + ], + "in": "query", + "name": "runner_moved", + "type": "string" + }, + { + "default": "All", + "description": "Basestealing target base", + "enum": [ + "All", + "2B", + "3B" + ], + "in": "query", + "name": "target_base", + "type": "string" + }, + { + "default": "All", + "description": "Basestealing prior pickoffs", + "enum": [ + "All", + "0", + "1", + "2", + "3" + ], + "in": "query", + "name": "prior_pk", + "type": "string" + }, + { + "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": "key_base_out", + "type": "string" + }, + { + "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" + }, + { + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "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": "offset", + "type": "integer" + } ], - "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" ], @@ -312159,11 +343760,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.livescoreNewsPublishersResponseDoc" + "$ref": "#/definitions/mlb.statcastBaserunningResponseDoc" } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -312180,27 +343781,369 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore news publisher directory", + "summary": "Get Baseball Savant baserunning leaderboard tables", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/player": { + "/mlb/statcast-bat-tracking": { "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", + "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": "season-stats/player-slug/numeric-player-id path copied from a public LiveScore player link", + "default": "batter", + "description": "Table row type", + "enum": [ + "batter", + "batting-team", + "pitcher", + "pitching-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", + "Playoff", + "Regular" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "default": "q", + "description": "Minimum swing qualifier", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min_swings", + "type": "string" + }, + { + "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" + }, + { + "description": "Optional date range start in YYYY-MM-DD", + "in": "query", + "name": "date_start", + "type": "string" + }, + { + "description": "Optional date 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" + }, + { + "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", - "name": "path", - "required": true, - "type": "string", - "x-example": "season-stats/radek-vitek/56253" + "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": [ @@ -312210,7 +344153,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastBatTrackingResponseDoc" } }, "400": { @@ -312237,73 +344180,297 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore player profile", + "summary": "Get Baseball Savant bat-tracking rows", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/scores": { + "/mlb/statcast-batted-ball": { "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 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": "LiveScore sport id", + "default": "batter", + "description": "Row type", "enum": [ - "soccer", - "hockey", - "basketball", - "tennis", - "cricket" + "batter", + "batting-team", + "pitcher", + "pitching-team", + "league" ], "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "soccer" + "name": "type", + "type": "string" }, { - "description": "Calendar date in YYYYMMDD format", + "collectionFormat": "multi", + "description": "One or more seasons", "in": "query", - "name": "date", - "required": true, - "type": "string", - "x-example": "20260926" + "items": { + "enum": [ + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "type": "string" + }, + "name": "seasons", + "type": "array" }, { - "description": "UTC offset in hours from -12 through 14; defaults to 0", + "collectionFormat": "multi", + "description": "One or more game type codes", "in": "query", - "maximum": 14, - "minimum": -12, - "name": "timezone_offset", - "type": "integer" + "items": { + "enum": [ + "R", + "A", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "game_types", + "type": "array" }, { - "description": "Request one UI-style page; defaults to false (full-day feed)", + "collectionFormat": "multi", + "description": "One or more split dimensions", "in": "query", - "name": "paging", + "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" + }, + { + "default": false, + "description": "Include the first-party league-average reference row", + "in": "query", + "name": "include_league_average", "type": "boolean" }, { - "description": "Section Id from the prior paged response, e.g. s-26031", + "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": "cursor", - "type": "string", - "x-example": "s-26031" + "name": "sort", + "type": "string" }, { - "description": "Page direction in paged mode", + "default": "desc", + "description": "Sort direction", "enum": [ - "down", - "up" + "asc", + "desc" ], "in": "query", - "name": "direction", + "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": [ @@ -312313,7 +344480,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastBattedBallResponseDoc" } }, "400": { @@ -312340,49 +344507,117 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore scores and fixtures by sport and date", + "summary": "Get Baseball Savant Batted Ball Profile rows", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/scores-toc": { + "/mlb/statcast-birthday-index": { "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 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": "LiveScore sport id", + "default": "batter", + "description": "Upcoming table", "enum": [ - "soccer", - "hockey", - "basketball", - "tennis", - "cricket" + "batter", + "pitcher" ], "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "soccer" + "name": "type", + "type": "string" }, { - "description": "Calendar date in YYYYMMDD format", + "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", "in": "query", "name": "date", - "required": true, "type": "string", - "x-example": "20260926" + "x-example": "5-2" }, { - "description": "UTC offset in hours from -12 through 14; defaults to 0", + "default": false, + "description": "Include inactive and deceased players in upcoming rows", "in": "query", - "maximum": 14, - "minimum": -12, - "name": "timezone_offset", + "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" + }, + { + "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" + }, + { + "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" } ], @@ -312393,7 +344628,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastBirthdayIndexResponseDoc" } }, "400": { @@ -312420,51 +344655,152 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore score date table of contents", + "summary": "Get Baseball Savant Sarah Langs Birthday Index rows", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/search": { + "/mlb/statcast-catcher-blocking": { "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, 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": "LiveScore sport token", + "default": "Cat", + "description": "Leaderboard group", "enum": [ - "soccer", - "hockey", - "basketball", - "tennis", - "cricket" + "Cat", + "Pit", + "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": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], "in": "query", - "maxLength": 100, - "name": "query", - "type": "string", - "x-example": "Manchester City" + "name": "game_type", + "type": "string" }, { - "description": "Optional results per section (1 to 100). Defaults to 10 for a text query or 50 when query is empty.", + "default": "q", + "description": "Minimum opportunities; applies to Cat and Pit", + "enum": [ + "q", + "1", + "50", + "100", + "250", + "500", + "1000", + "2000", + "3000", + "4000", + "5000" + ], "in": "query", - "maximum": 100, + "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" + ], + "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", - "x-example": 50 + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -312474,7 +344810,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.livescoreSearchResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherBlockingResponseDoc" } }, "400": { @@ -312483,12 +344819,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -312501,120 +344831,104 @@ "ApiKeyAuth": [] } ], - "summary": "Search LiveScore teams, competitions, and regions", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/sports": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the complete five-sport set shown in LiveScore's fixture navigation. Use a sport id with /livescore/scores.", - "operationId": "livescore-sports", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.sportsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore supported sports", + "summary": "Get Baseball Savant Catcher Blocking leaderboard rows", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/team": { + "/mlb/statcast-catcher-blocking-details": { "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", + "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": "Five to nine lowercase path segments following /en/ from a public LiveScore team page or linked tab", + "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/team/name/2909/stats/teams/70" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.responseDoc" - } + "x-example": "682626" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "Cat", + "description": "Row group", + "enum": [ + "Cat", + "Pit", + "Pitching Team" + ], + "in": "query", + "name": "type", + "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": "LiveScore team page and section data", - "tags": [ - "LiveScore" - ] - } - }, - "/lululemon/categories": { - "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", - "parameters": [ + "description": "First season, 2018 through current season", + "in": "query", + "maximum": 2026, + "minimum": 2018, + "name": "start_year", + "type": "integer" + }, { - "description": "Filter to one top-level storefront nav section", + "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": [ - "new-featured", - "women", - "men", - "accessories", - "bags", - "activity", - "we-made-too-much" + "yes", + "no" ], "in": "query", - "name": "section", + "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": [ @@ -312624,7 +344938,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lululemon.categoriesResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherBlockingDetailsResponseDoc" } }, "400": { @@ -312633,12 +344947,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -312651,120 +344959,345 @@ "ApiKeyAuth": [] } ], - "summary": "Browse lululemon's storefront category navigation", + "summary": "Get Baseball Savant Catcher Blocking play details", "tags": [ - "Lululemon" + "MLB" ] } }, - "/lululemon/category": { + "/mlb/statcast-catcher-framing": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one lululemon category's product listing page: normalized products with pricing, sale detection, sizes, colors, and style numbers, sourced from lululemon's own app-backend category data. 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 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": [ { - "description": "lululemon category slug, from a category URL's first path segment", + "default": "catcher", + "description": "Table group", + "enum": [ + "catcher", + "catching-team", + "batter", + "batting-team", + "pitcher", + "league" + ], "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", + "default": "Regular", + "description": "Game type", + "enum": [ + "Any", + "Playoff", + "Regular" + ], "in": "query", - "name": "cdp_hash", - "required": true, - "type": "string", - "x-example": "n14f1wz6o10" + "name": "game_type", + "type": "string" }, { - "description": "Page number, one-based, defaults to 1", + "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": "page", - "type": "integer", - "x-example": 1 + "name": "team", + "type": "string" }, { - "description": "Results per page, 1 to 100, defaults to 24", + "default": "q", + "description": "Minimum pitches", + "enum": [ + "q", + "100", + "250", + "500", + "750", + "1000", + "1250", + "1500" + ], "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 24 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/lululemon.categoryResponseDoc" - } + "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" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "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": "Browse a lululemon category's product listing", - "tags": [ - "Lululemon" - ] - } - }, - "/lululemon/outfit": { - "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", - "parameters": [ + "description": "Inclusive start date", + "format": "date", + "in": "query", + "name": "date_start", + "type": "string" + }, { - "description": "lululemon product unified id, from a lululemon-product result's unified_id field", + "description": "Inclusive end date", + "format": "date", "in": "query", - "name": "unified_id", - "required": true, - "type": "string", - "x-example": "Scuba-Relaxed-Half-Zip-Colourblock" + "name": "date_end", + "type": "string" }, { - "description": "lululemon color code, from a lululemon-product result's colors[].code field", + "description": "Batter side", + "enum": [ + "L", + "R" + ], "in": "query", - "name": "color_code", - "required": true, - "type": "string", - "x-example": "79895" + "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", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -312774,7 +345307,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lululemon.outfitResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherFramingResponseDoc" } }, "400": { @@ -312789,12 +345322,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -312807,171 +345334,250 @@ "ApiKeyAuth": [] } ], - "summary": "Get lululemon's outfit/style recommendations for a product color", + "summary": "Get Baseball Savant Catcher Framing leaderboard rows", "tags": [ - "Lululemon" + "MLB" ] } }, - "/lululemon/product/{product_id}": { + "/mlb/statcast-catcher-framing-details": { "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 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": "lululemon product id, from a lululemon-category result's id field", - "in": "path", - "name": "product_id", + "description": "Entity id from a Catcher Framing leaderboard row", + "in": "query", + "name": "entity_id", "required": true, "type": "string", - "x-example": "lt5o6p8kho" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/lululemon.productDetailResponseDoc" - } + "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" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "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" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a lululemon product's full detail", - "tags": [ - "Lululemon" - ] - } - }, - "/lululemon/stores": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns lululemon's own complete physical store directory (480 US and 86 Canada locations as of this endpoint's own research), including regular weekly hours and in-store amenities. All filters are optional and applied locally after fetching the full directory -- there is no live geo-search API on a credential-free host for this platform. 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": [ + "default": "q", + "description": "Minimum pitches", + "enum": [ + "q", + "100", + "250", + "500", + "750", + "1000", + "1250", + "1500" + ], + "in": "query", + "name": "min_pitches", + "type": "string" + }, { - "description": "Filter to one country by its 2-letter code", + "default": 1, + "description": "Minimum results", + "enum": [ + 1, + 25, + 50, + 100, + 250, + 500, + 750, + 1000, + 1250, + 1500 + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "min_results", + "type": "integer" }, { - "description": "Filter to one state/province by its 2-letter code", + "description": "First season", + "enum": [ + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], "in": "query", - "name": "state", - "type": "string", - "x-example": "NY" + "name": "season_start", + "type": "integer" }, { - "description": "Latitude, requires lng", + "description": "Last season", + "enum": [ + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.7538 + "name": "season_end", + "type": "integer" }, { - "description": "Longitude, requires lat", + "description": "Inclusive start date", + "format": "date", "in": "query", - "name": "lng", - "type": "number", - "x-example": -74.0022 + "name": "date_start", + "type": "string" }, { - "description": "Search radius in miles, 1 to 500, defaults to 50", + "description": "Inclusive end date", + "format": "date", "in": "query", - "name": "radius_miles", - "type": "number", - "x-example": 50 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/lululemon.storesResponseDoc" - } + "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" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Pitcher hand", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "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 public MacRumors article metadata and body paragraphs from a canonical news, guide, how-to or review URL.", - "operationId": "macrumors-article", - "parameters": [ + "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": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, { - "description": "Canonical MacRumors article URL", + "description": "Zero-based row offset", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.macrumors.com/2026/09/24/google-photos-wardrobe-ios/" + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -312981,7 +345587,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherFramingDetailsResponseDoc" } }, "400": { @@ -313008,30 +345614,154 @@ "ApiKeyAuth": [] } ], - "summary": "Get MacRumors article content", + "summary": "Get Baseball Savant Catcher Framing pitch-event details", "tags": [ - "MacRumors" + "MLB" ] } }, - "/macrumors/author": { + "/mlb/statcast-catcher-pop-time": { "get": { - "description": "Returns one MacRumors author's public profile: name, bio, avatar, and their recent articles.", - "operationId": "macrumors-author", + "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": "Author slug, e.g. juli-clover", + "default": "2026", + "description": "Season from 2015 through 2026", + "enum": [ + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "juli-clover" + "name": "year", + "type": "string" }, { - "description": "Canonical macrumors.com/author/ URL; alternative to slug", + "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": "url", - "type": "string", - "x-example": "https://www.macrumors.com/author/juli-clover/" + "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", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "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": [ @@ -313041,7 +345771,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.macRumorsAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherPopTimeResponseDoc" } }, "400": { @@ -313050,8 +345780,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -313068,29 +345798,352 @@ "ApiKeyAuth": [] } ], - "summary": "Get a MacRumors author profile", + "summary": "Get Baseball Savant Catcher Pop Time leaderboard", "tags": [ - "MacRumors" + "MLB" ] } }, - "/macrumors/headlines": { + "/mlb/statcast-catcher-stance": { "get": { - "description": "Returns fresh headlines from one public MacRumors section.", - "operationId": "macrumors-headlines", + "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": "MacRumors section slug", + "default": "catcher", + "description": "Table entity type", "enum": [ - "front-page", - "guides", - "how-to", - "reviews" + "catcher", + "catching-team", + "batter", + "batting-team", + "pitcher", + "league" ], "in": "query", - "name": "section", - "required": true, + "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" + ], + "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" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -313100,7 +346153,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherStanceResponseDoc" } }, "400": { @@ -313121,92 +346174,226 @@ "ApiKeyAuth": [] } ], - "summary": "Get MacRumors section headlines", + "summary": "Get Baseball Savant Catcher Stance rows", "tags": [ - "MacRumors" + "MLB" ] } }, - "/macrumors/news": { + "/mlb/statcast-catcher-throwing": { "get": { - "description": "Returns fresh MacRumors Apple news and rumor stories from the public all-stories RSS feed.", - "operationId": "macrumors-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "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" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get MacRumors top stories", - "tags": [ - "MacRumors" - ] - } - }, - "/macrumors/sections": { - "get": { - "description": "Returns the public MacRumors editorial section inventory.", - "operationId": "macrumors-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "default": "2026", + "description": "First season", + "enum": [ + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_start", + "type": "string" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get MacRumors sections", - "tags": [ - "MacRumors" - ] - } - }, - "/macys/product/reviews": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a Macy's product's normalized customer reviews, plus a site-wide rating summary (rating count, average rating, recommended ratio, rating histogram) for the product. Sourced from a separate review platform Macy's own product pages embed, distinct from the product catalog itself. 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": [ + "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" + }, { - "description": "Numeric Macy's product id, from a product page's ?ID= query parameter", + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], "in": "query", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "15041387" + "name": "game_type", + "type": "string" }, { - "description": "Result page, 1-based, defaults to 1", + "default": "q", + "description": "Minimum steal attempts", + "enum": [ + "q", + "1", + "5", + "10", + "20", + "30", + "40", + "50", + "75", + "100" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "minimum", + "type": "string" + }, + { + "default": "All", + "description": "Throw target", + "enum": [ + "2B", + "3B", + "All" + ], + "in": "query", + "name": "target_base", + "type": "string" + }, + { + "default": "no", + "description": "Split results by season", + "enum": [ + "yes", + "no" + ], + "in": "query", + "name": "split", + "type": "string" + }, + { + "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" + }, + { + "default": true, + "description": "For a selected team, include only catchers on that team", + "in": "query", + "name": "with_team_only", + "type": "boolean" + }, + { + "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" + }, + { + "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", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -313216,7 +346403,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/macys.productReviewsResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherThrowingResponseDoc" } }, "400": { @@ -313243,27 +346430,160 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Macy's product's customer reviews", + "summary": "Get Baseball Savant Catcher Throwing leaderboard rows", "tags": [ - "Macy's" + "MLB" ] } }, - "/macys/product/{productId}": { + "/mlb/statcast-catcher-throwing-details": { "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", + "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": "Numeric Macy's product id, from a product page's ?ID= query parameter", - "in": "path", - "name": "productId", + "description": "Positive catcher id from a Cat row", + "in": "query", + "name": "entity_id", "required": true, - "type": "string", - "x-example": "20518101" + "type": "integer", + "x-example": 521692 + }, + { + "default": 2026, + "description": "Season", + "enum": [ + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "year", + "type": "integer" + }, + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "default": "q", + "description": "Minimum steal attempts", + "enum": [ + "q", + "1", + "5", + "10", + "20", + "30", + "40", + "50", + "75", + "100" + ], + "in": "query", + "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": [ @@ -313273,7 +346593,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/macys.productDetailResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherThrowingDetailsResponseDoc" } }, "400": { @@ -313306,27 +346626,147 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Macy's product's full detail", + "summary": "Get Catcher Throwing attempt details", "tags": [ - "Macy's" + "MLB" ] } }, - "/macys/suggest": { + "/mlb/statcast-expected": { "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 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": "Partial search query", + "default": "batter", + "description": "Leaderboard view", + "enum": [ + "batter", + "pitcher", + "batter-team", + "pitcher-team" + ], "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "dress" + "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" + }, + { + "description": "Batter position; only supported for type=batter", + "enum": [ + "C", + "1B", + "2B", + "SS", + "3B", + "LF", + "CF", + "RF", + "DH" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "default": "bip", + "description": "Minimum qualifier type", + "enum": [ + "bip", + "pa" + ], + "in": "query", + "name": "filter_type", + "type": "string" + }, + { + "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" + }, + { + "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" + }, + { + "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": [ @@ -313336,7 +346776,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/macys.suggestResponseDoc" + "$ref": "#/definitions/mlb.statcastBoardResponseDoc" } }, "400": { @@ -313345,12 +346785,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -313363,74 +346797,283 @@ "ApiKeyAuth": [] } ], - "summary": "Get Macy's search-box suggestions", + "summary": "Get Baseball Savant Expected Statistics", "tags": [ - "Macy's" + "MLB" ] } }, - "/manga/rankings": { + "/mlb/statcast-fielding-run-value": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a filterable, sorted manga ranking. Credential-free public AniList data. Filter by format, genre, and status.", - "operationId": "manga-rankings", + "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": "Order: TRENDING_DESC, POPULARITY_DESC, SCORE_DESC, FAVOURITES_DESC, START_DATE_DESC, UPDATED_AT_DESC. Default TRENDING_DESC.", + "default": "fielder", + "description": "Table type", "enum": [ - "TRENDING_DESC", - "POPULARITY_DESC", - "SCORE_DESC", - "FAVOURITES_DESC", - "START_DATE_DESC", - "UPDATED_AT_DESC" + "fielder", + "fielding-team", + "batter", + "batting-team", + "pitcher" ], "in": "query", - "name": "sort", + "name": "type", "type": "string" }, { - "description": "Format filter: MANGA, NOVEL, ONE_SHOT.", + "default": "2026", + "description": "First season", "enum": [ - "MANGA", - "NOVEL", - "ONE_SHOT" + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" ], "in": "query", - "name": "format", + "name": "season_start", "type": "string" }, { - "description": "Genre filter, e.g. Fantasy.", + "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": "genre", + "name": "season_end", "type": "string" }, { - "description": "Status filter: FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED, HIATUS.", + "default": "Regular", + "description": "Game type", "enum": [ - "FINISHED", - "RELEASING", - "NOT_YET_RELEASED", - "CANCELLED", - "HIATUS" + "Any", + "Regular", + "Playoff" ], "in": "query", - "name": "status", + "name": "game_type", "type": "string" }, { - "description": "1-based page number, default 1", + "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": "page", + "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": "Results per page, default 20, max 50", + "default": 0, + "description": "Zero-based row offset (0-5000)", "in": "query", - "name": "per_page", + "maximum": 5000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -313441,7 +347084,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.mangaRankingsResponseDoc" + "$ref": "#/definitions/mlb.statcastFieldingRunValueResponseDoc" } }, "400": { @@ -313450,12 +347093,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -313468,52 +347105,375 @@ "ApiKeyAuth": [] } ], - "summary": "Rank manga", + "summary": "Get Baseball Savant Fielding Run Value rows", "tags": [ - "Manga" + "MLB" ] } }, - "/manga/search": { + "/mlb/statcast-first-base-receiving": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches manga by free-text query. Credential-free public manga data from AniList. Returns normalized entries: titles, scores, popularity, format, status, chapters, volumes, genres, and tags.", - "operationId": "manga-search", + "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": "Search text", + "default": "fielder_3", + "description": "Leaderboard group", + "enum": [ + "fielder_3", + "throw_fielder_id", + "pitching-team", + "batting-team", + "league" + ], "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "Berserk" + "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" + }, + { + "collectionFormat": "multi", + "description": "Game types", + "in": "query", + "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" + }, + { + "default": "1", + "description": "Minimum opportunities within each group", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "75", + "100", + "200", + "300", + "400", + "500", + "750", + "1000" + ], + "in": "query", + "name": "minSplit", + "type": "string" + }, + { + "default": "1", + "description": "Year split selector", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "splitYear", + "type": "string" + }, + { + "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" + }, + { + "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": [ + "L", + "R" + ], + "in": "query", + "name": "fielder_3_hand", + "type": "string" + }, + { + "description": "Minimum fielder height, inches", + "enum": [ + "70", + "71", + "72", + "73", + "74", + "75", + "76", + "77", + "78", + "79", + "80" + ], + "in": "query", + "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": "Ordering: SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC. Default SEARCH_MATCH.", + "default": "total_oaa", + "description": "Local sort field", "enum": [ - "SEARCH_MATCH", - "POPULARITY_DESC", - "SCORE_DESC", - "TRENDING_DESC", - "FAVOURITES_DESC", - "START_DATE_DESC" + "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": "sort", + "name": "sortDirection", "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", + "description": "Zero-based row offset", "in": "query", - "name": "per_page", + "maximum": 10000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -313524,7 +347484,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.searchResponseDoc" + "$ref": "#/definitions/mlb.statcastFirstBaseReceivingResponseDoc" } }, "400": { @@ -313533,8 +347493,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -313551,182 +347511,340 @@ "ApiKeyAuth": [] } ], - "summary": "Search manga", + "summary": "Get Baseball Savant First Base Receiving leaderboards", "tags": [ - "Manga" + "MLB" ] } }, - "/manga/title/{id}": { + "/mlb/statcast-first-base-receiving-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a normalized 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), scraped credential-free from the public MAL page. Credential-free public AniList data.", - "operationId": "manga-title", + "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": "AniList manga id", - "in": "path", - "name": "id", + "description": "Positive MLB player id", + "in": "query", + "name": "player_id", "required": true, - "type": "string", - "x-example": "30002" + "type": "integer", + "x-example": 683737 }, { - "description": "Enrich with the MyAnimeList community score (adds one fetch; omitted when the title has no MAL id)", + "default": "fielder_3", + "description": "Leaderboard group", + "enum": [ + "fielder_3", + "throw_fielder_id", + "pitching-team", + "batting-team", + "league" + ], "in": "query", - "name": "mal", - "type": "boolean" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/anime.mediaResponseDoc" - } + "name": "type", + "type": "string" }, - "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" }, - "404": { - "description": "Not Found", - "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" }, - "500": { - "description": "Internal Server Error", - "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" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a manga", - "tags": [ - "Manga" - ] - } - }, - "/manga/title/{id}/characters": { - "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. Credential-free public AniList data.", - "operationId": "manga-title-characters", - "parameters": [ + "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" + }, { - "description": "AniList manga id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "30002" + "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" }, { - "description": "1-based page number, default 1", + "default": "1", + "description": "Year split selector", + "enum": [ + "0", + "1" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "splitYear", + "type": "string" }, { - "description": "Results per page, default 10, max 50", + "collectionFormat": "multi", + "description": "MLB team ids", "in": "query", - "name": "per_page", - "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/anime.charactersResponseDoc" - } + "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" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Inclusive start date (YYYY-MM-DD)", + "in": "query", + "name": "dateStart", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Inclusive end date (YYYY-MM-DD)", + "in": "query", + "name": "dateEnd", + "type": "string" }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "First baseman batting hand", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "fielder_3_hand", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "List a manga's characters", - "tags": [ - "Manga" - ] - } - }, - "/manga/title/{id}/recommendations": { - "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. Credential-free public AniList data.", - "operationId": "manga-title-recommendations", - "parameters": [ + "description": "Minimum fielder height", + "enum": [ + "70", + "71", + "72", + "73", + "74", + "75", + "76", + "77", + "78", + "79", + "80" + ], + "in": "query", + "name": "min_height_in_inches", + "type": "string" + }, { - "description": "AniList manga id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "30013" + "description": "Field-out flag", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "is_hit_into_play_field_out", + "type": "string" }, { - "description": "1-based page number, default 1", + "collectionFormat": "multi", + "description": "Base occupancy codes", "in": "query", - "name": "page", + "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": 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", + "description": "Zero-based row offset", "in": "query", - "name": "per_page", + "maximum": 100000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -313737,7 +347855,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.recommendationsResponseDoc" + "$ref": "#/definitions/mlb.statcastFirstBaseReceivingDetailsResponseDoc" } }, "400": { @@ -313746,14 +347864,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" } @@ -313770,38 +347882,157 @@ "ApiKeyAuth": [] } ], - "summary": "List titles recommended alongside a manga", + "summary": "Get a player's First Base Receiving play records", "tags": [ - "Manga" + "MLB" ] } }, - "/manga/title/{id}/staff": { + "/mlb/statcast-home-runs": { "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. Credential-free public AniList data.", - "operationId": "manga-title-staff", + "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": "AniList manga id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "30002" + "default": "Batter", + "description": "Table type", + "enum": [ + "Batter", + "Pitcher" + ], + "in": "query", + "name": "player_type", + "type": "string" }, { - "description": "1-based page number, default 1", + "default": "2026", + "description": "Season", + "enum": [ + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "name": "page", + "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" + }, + { + "default": "0", + "description": "Minimum home run total", + "enum": [ + "0", + "5", + "10", + "15", + "20", + "25" + ], + "in": "query", + "name": "min", + "type": "string" + }, + { + "default": "adj_xhr", + "description": "Trajectory mode", + "enum": [ + "adj_xhr", + "xhr" + ], + "in": "query", + "name": "cat", + "type": "string" + }, + { + "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": "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": "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" } ], @@ -313812,7 +348043,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.staffResponseDoc" + "$ref": "#/definitions/mlb.statcastHomeRunsResponseDoc" } }, "400": { @@ -313827,12 +348058,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -313845,84 +348070,81 @@ "ApiKeyAuth": [] } ], - "summary": "List a manga's staff credits", + "summary": "Get Baseball Savant Home Runs Tracking", "tags": [ - "Manga" + "MLB" ] } }, - "/marketwatch/article": { + "/mlb/statcast-home-runs-details": { "get": { - "description": "Returns public MarketWatch article metadata and body paragraphs from a canonical article URL.", - "operationId": "marketwatch-article", + "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": "Canonical MarketWatch article URL", + "description": "Positive MLB player id from mlb-statcast-home-runs", "in": "query", - "name": "url", + "name": "player_id", "required": true, "type": "string", - "x-example": "https://www.marketwatch.com/story/example" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } + "x-example": "691718" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "Batter", + "description": "Table type", + "enum": [ + "Batter", + "Pitcher" + ], + "in": "query", + "name": "player_type", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "2026", + "description": "Season", + "enum": [ + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "year", + "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 one MarketWatch author's public profile: name, job title, bio, and their recent articles.", - "operationId": "marketwatch-author", - "parameters": [ + "default": "adj_xhr", + "description": "Trajectory mode", + "enum": [ + "adj_xhr", + "xhr" + ], + "in": "query", + "name": "cat", + "type": "string" + }, { - "description": "Author slug, e.g. hannah-pedone", + "default": 100, + "description": "Rows per page (1-500)", "in": "query", - "name": "slug", - "type": "string", - "x-example": "hannah-pedone" + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "description": "Canonical marketwatch.com/author/ URL; alternative to slug", + "default": 0, + "description": "Zero-based row offset", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.marketwatch.com/author/hannah-pedone" + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -313932,7 +348154,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.marketWatchAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastHomeRunsDetailsResponseDoc" } }, "400": { @@ -313959,139 +348181,132 @@ "ApiKeyAuth": [] } ], - "summary": "Get a MarketWatch author profile", + "summary": "Get Baseball Savant Home Runs play details", "tags": [ - "MarketWatch" + "MLB" ] } }, - "/marketwatch/headlines": { + "/mlb/statcast-leaders": { "get": { - "description": "Returns fresh headlines from one public MarketWatch section.", - "operationId": "marketwatch-headlines", + "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": "MarketWatch section slug", + "default": "batter", + "description": "Leaderboard row type", "enum": [ - "latest-news", - "markets", - "investing", - "personal-finance", - "economy-politics", - "technology", - "retirement", - "real-estate" + "batter", + "pitcher", + "batter-team", + "pitcher-team" ], "in": "query", - "name": "section", - "required": true, + "name": "type", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Season; current season back 11 seasons", + "in": "query", + "name": "year", + "type": "integer" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get MarketWatch section headlines", - "tags": [ - "MarketWatch" - ] - } - }, - "/marketwatch/news": { - "get": { - "description": "Returns fresh MarketWatch stories from the public Top Stories RSS feed.", - "operationId": "marketwatch-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "description": "Optional MLB team id from mlb_teams", + "in": "query", + "name": "team_id", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get MarketWatch top stories", - "tags": [ - "MarketWatch" - ] - } - }, - "/marketwatch/sections": { - "get": { - "description": "Returns the public MarketWatch editorial section inventory.", - "operationId": "marketwatch-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Batter position", + "enum": [ + "C", + "1B", + "2B", + "SS", + "3B", + "LF", + "CF", + "RF", + "DH" + ], + "in": "query", + "name": "position", + "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": [ + "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" + }, { - "description": "Canonical Mashable article URL", + "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": "url", - "required": true, - "type": "string", - "x-example": "https://mashable.com/tech/openai-hack-australian-government-ai-agent" + "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": [ @@ -314101,7 +348316,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastResponseDoc" } }, "400": { @@ -314110,12 +348325,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -314128,258 +348337,165 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mashable article content", + "summary": "Get Baseball Savant Statcast leaderboard data", "tags": [ - "Mashable" + "MLB" ] } }, - "/mashable/author": { + "/mlb/statcast-oaa": { "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", + "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": "Author slug, e.g. amanda-yeo", + "default": "Fielder", + "description": "Leaderboard view", + "enum": [ + "Fielder", + "Fielding_Team", + "Batter", + "Batting_Team", + "Pitcher" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "amanda-yeo" + "name": "type", + "type": "string" }, { - "description": "Canonical mashable.com/author/ URL; alternative to slug", + "description": "Start season from 2016 through the current season", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://mashable.com/author/amanda-yeo" + "name": "start_year", + "type": "integer" }, { - "default": 1, - "description": "1-based page number of the article list", + "description": "End season from 2016 through the current season", "in": "query", - "name": "page", + "name": "end_year", "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.mashableAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "no", + "description": "Return one row per season in a year range", + "enum": [ + "no", + "yes" + ], + "in": "query", + "name": "split", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Mashable author profile", - "tags": [ - "Mashable" - ] - } - }, - "/mashable/headlines": { - "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", - "parameters": [ + "description": "Optional MLB team id from mlb_teams", + "in": "query", + "name": "team_id", + "type": "string" + }, { - "description": "Mashable category slug", + "default": "year", + "description": "Time range", "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" + "year", + "4", + "5", + "6", + "7", + "8", + "9" ], "in": "query", - "name": "section", - "required": true, + "name": "range", "type": "string" - } - ], - "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 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" - } + "default": "q", + "description": "Minimum attempts", + "enum": [ + "q", + "10", + "25", + "50", + "75", + "100", + "150", + "200", + "250" + ], + "in": "query", + "name": "minimum", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Position filter", + "enum": [ + "if", + "of", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "in": "query", + "name": "position", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "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": [ + "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" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mashable sections", - "tags": [ - "Mashable" - ] - } - }, - "/mcdonalds/categories": { - "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", - "parameters": [ + "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" + }, { - "description": "Market (default us). One of us, ca, gb, au, ie, nz, ch, se.", + "default": "desc", + "description": "Sort direction", "enum": [ - "us", - "ca", - "gb", - "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" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -314389,11 +348505,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mcdonalds.categoriesResponseDoc" + "$ref": "#/definitions/mlb.statcastBoardResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -314410,43 +348526,139 @@ "ApiKeyAuth": [] } ], - "summary": "List McDonald's menu categories", + "summary": "Get Baseball Savant Outs Above Average", "tags": [ - "McDonalds" + "MLB" ] } }, - "/mcdonalds/item": { + "/mlb/statcast-park-factors": { "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", + "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": "McDonald's numeric product id, from /mcdonalds/menu", + "default": "year", + "description": "Park Factors table mode", + "enum": [ + "year", + "venue", + "distance", + "distance-all", + "raw", + "dimensions" + ], "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.", + "description": "Mode-specific season; see endpoint markdown and mlb_discovery for exact values", + "in": "query", + "name": "year", + "type": "string" + }, + { + "description": "Optional batter side for year, venue, or raw mode", "enum": [ - "us", - "ca", - "au", - "ie", - "nz", - "ch", - "se" + "R", + "L" ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "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": [ @@ -314456,7 +348668,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mcdonalds.itemResponseDoc" + "$ref": "#/definitions/mlb.statcastParkFactorsResponseDoc" } }, "400": { @@ -314471,12 +348683,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -314489,43 +348695,131 @@ "ApiKeyAuth": [] } ], - "summary": "Get one McDonald's item's nutrition", + "summary": "Get Baseball Savant Statcast Park Factors rows", "tags": [ - "McDonalds" + "MLB" ] } }, - "/mcdonalds/item-list": { + "/mlb/statcast-percentile": { "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", + "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": "Comma-separated McDonald's numeric product ids, up to 20", + "default": "batter", + "description": "Table type", + "enum": [ + "batter", + "pitcher" + ], "in": "query", - "name": "item_ids", - "required": true, - "type": "string", - "x-example": "200463,200466,200476" + "name": "type", + "type": "string" }, { - "description": "Market (default us). One of us, ca, au, ie, nz, ch, se. Must match the market the item ids came from.", + "default": "2026", + "description": "Season", "enum": [ - "us", - "ca", - "au", - "ie", - "nz", - "ch", - "se" + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "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": [ @@ -314535,7 +348829,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mcdonalds.itemListResponseDoc" + "$ref": "#/definitions/mlb.statcastPercentileResponseDoc" } }, "400": { @@ -314550,12 +348844,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -314568,44 +348856,166 @@ "ApiKeyAuth": [] } ], - "summary": "Get nutrition and allergen detail for a batch of McDonald's items", + "summary": "Get Baseball Savant Percentile Rankings", "tags": [ - "McDonalds" + "MLB" ] } }, - "/mcdonalds/menu": { + "/mlb/statcast-pitch-arsenal": { "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 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": "Category slug from /mcdonalds/categories", + "default": "pitcher", + "description": "Row type", + "enum": [ + "pitcher", + "batter" + ], "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "breakfast" + "name": "type", + "type": "string" }, { - "description": "Market (default us). One of us, ca, gb, au, ie, nz, ch, se. Must match the market the slug came from.", + "default": "2026", + "description": "Season", "enum": [ - "us", - "ca", - "gb", - "au", - "ie", - "nz", - "ch", - "se" + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "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", + "enum": [ + "FF", + "CH", + "CU", + "FC", + "KN", + "SC", + "SI", + "SL", + "SV", + "FS", + "ST", + "CUKC", + "SIFT" + ], + "in": "query", + "name": "pitch_type", + "type": "string" + }, + { + "default": "1", + "description": "Minimum plate appearances", + "enum": [ + "1", + "10", + "25", + "50", + "100", + "150", + "200", + "250", + "350", + "450", + "500", + "600" + ], + "in": "query", + "name": "min_pa", + "type": "string" + }, + { + "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" + }, + { + "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" + }, + { + "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": [ @@ -314615,7 +349025,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mcdonalds.menuResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchArsenalResponseDoc" } }, "400": { @@ -314630,12 +349040,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -314648,27 +349052,93 @@ "ApiKeyAuth": [] } ], - "summary": "List one McDonald's menu category's items", + "summary": "Get Baseball Savant Pitch Arsenal Stats", "tags": [ - "McDonalds" + "MLB" ] } }, - "/mcdonalds/restaurant-menu": { + "/mlb/statcast-pitch-arsenal-details": { "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 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": "McDonald's numeric store number, from /mcdonalds/restaurants", + "description": "Positive MLB player id from mlb-statcast-pitch-arsenal", "in": "query", - "name": "store_id", + "name": "player_id", "required": true, "type": "string", - "x-example": "10528" + "x-example": "592332" + }, + { + "default": "pitcher", + "description": "Row type", + "enum": [ + "pitcher", + "batter" + ], + "in": "query", + "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": "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": [ @@ -314678,7 +349148,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mcdonalds.restaurantMenuResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchArsenalDetailsResponseDoc" } }, "400": { @@ -314693,12 +349163,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -314711,128 +349175,171 @@ "ApiKeyAuth": [] } ], - "summary": "Get one McDonald's restaurant's priced menu", + "summary": "Get Baseball Savant Pitch Arsenal play details", "tags": [ - "McDonalds" + "MLB" ] } }, - "/mcdonalds/restaurants": { + "/mlb/statcast-pitch-arsenals": { "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", + "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": "Search center latitude", + "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": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 + "name": "year", + "type": "string" }, { - "description": "Search center longitude", + "default": "avg_speed", + "description": "Metric", + "enum": [ + "avg_speed", + "n_", + "avg_spin" + ], "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -74.006 + "name": "type", + "type": "string" }, { - "description": "Search radius in miles, 1-100 (default 20)", + "description": "Throwing hand; omit for all pitchers", + "enum": [ + "R", + "L" + ], "in": "query", - "name": "radius", - "type": "integer", - "x-example": 20 + "name": "hand", + "type": "string" }, { - "description": "Maximum restaurants to return, 1-50 (default 10)", + "default": "q", + "description": "Minimum pitches", + "enum": [ + "q", + "100", + "250", + "500", + "750", + "1000", + "1500", + "2000", + "2500", + "3000" + ], "in": "query", - "name": "max_results", - "type": "integer", - "x-example": 10 + "name": "min_pitches", + "type": "string" }, { - "description": "Market to search (default us). One of us, gb, ca, au, de, ie, nz, ch, nl, se.", + "description": "Current MLB team abbreviation; applied locally", "enum": [ - "us", - "gb", - "ca", - "au", - "de", - "ie", - "nz", - "ch", - "nl", - "se" + "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": "country", - "type": "string", - "x-example": "us" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/mcdonalds.restaurantsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "team", + "type": "string" }, - "404": { - "description": "Not Found", - "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": "Find McDonald's restaurants near a location", - "tags": [ - "McDonalds" - ] - } - }, - "/mediaite/article": { - "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", - "parameters": [ + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, { - "description": "Canonical Mediaite article URL", + "default": 0, + "description": "Zero-based row offset", "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/" + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -314842,7 +349349,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchArsenalsResponseDoc" } }, "400": { @@ -314869,30 +349376,138 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mediaite article content", + "summary": "Get Baseball Savant Pitch Arsenals", "tags": [ - "Mediaite" + "MLB" ] } }, - "/mediaite/author": { + "/mlb/statcast-pitch-movement": { "get": { - "description": "Returns one Mediaite author's public profile: name, biography, avatar, email and X/Twitter links, and their recent articles.", - "operationId": "mediaite-author", + "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": "Author slug, e.g. michael-luciano", + "default": "2026", + "description": "Season", + "enum": [ + "2026", + "2025", + "2024", + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "michael-luciano" + "name": "year", + "type": "string" }, { - "description": "Canonical mediaite.com/author// URL; alternative to slug", + "default": "FF", + "description": "Pitch class", + "enum": [ + "FF", + "CH", + "CU", + "FC", + "FO", + "KN", + "SC", + "SI", + "SL", + "SV", + "FS", + "ST", + "ALL" + ], "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.mediaite.com/author/michael-luciano/" + "name": "pitch_type", + "type": "string" + }, + { + "description": "Pitcher throwing hand; omit for both", + "enum": [ + "R", + "L" + ], + "in": "query", + "name": "hand", + "type": "string" + }, + { + "default": "q", + "description": "Minimum pitch count", + "enum": [ + "q", + "50", + "100", + "250", + "500", + "750", + "1000", + "1500", + "2000", + "2500", + "3000" + ], + "in": "query", + "name": "min", + "type": "string" + }, + { + "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" + }, + { + "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": [ @@ -314902,7 +349517,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.mediaiteAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchMovementResponseDoc" } }, "400": { @@ -314929,80 +349544,230 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Mediaite author profile", + "summary": "Get Baseball Savant Pitch Movement rows", "tags": [ - "Mediaite" + "MLB" ] } }, - "/mediaite/headlines": { + "/mlb/statcast-pitch-tempo": { "get": { - "description": "Returns fresh Mediaite headlines from one public category feed.", - "operationId": "mediaite-headlines", + "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": "Mediaite category slug", + "default": "Pit", + "description": "Table group", "enum": [ - "media", - "tv", - "news", - "entertainment", - "sports", - "podcasts", - "tech", - "online", - "politics", - "trump", - "election-2020", - "opinion", - "columnists", - "crime", - "premium" + "Pit", + "Bat", + "Pitching Team", + "Batting Team", + "League" ], "in": "query", - "name": "section", - "required": true, + "name": "type", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "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" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "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" } ], - "summary": "Get Mediaite section headlines", - "tags": [ - "Mediaite" - ] - } - }, - "/mediaite/news": { - "get": { - "description": "Returns fresh Mediaite top stories from the public news feed.", - "operationId": "mediaite-news", "produces": [ "application/json" ], @@ -315010,49 +349775,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/mlb.statcastPitchTempoResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mediaite top stories", - "tags": [ - "Mediaite" - ] - } - }, - "/mediaite/sections": { - "get": { - "description": "Returns the public Mediaite category taxonomy accepted by the headlines endpoint.", - "operationId": "mediaite-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -315069,24 +349802,99 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mediaite sections", + "summary": "Get Baseball Savant Pitch Tempo rows", "tags": [ - "Mediaite" + "MLB" ] } }, - "/medicalnewstoday/article": { + "/mlb/statcast-pitch-tempo-player": { "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", + "description": "Returns game-level time buckets for the selected pitcher or batter. Use entity_id from an mlb_statcast_pitch_tempo result.", + "operationId": "mlb-statcast-pitch-tempo-player", "parameters": [ { - "description": "Canonical Medical News Today article URL", + "description": "Numeric entity id from a Pitch Tempo row", "in": "query", - "name": "url", + "name": "entity_id", "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": "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": [ @@ -315096,7 +349904,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/medicalnewstoday.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchTempoPlayerResponseDoc" } }, "400": { @@ -315123,30 +349931,141 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Medical News Today article", + "summary": "Get a player's Pitch Tempo detail rows", "tags": [ - "Medical News Today" + "MLB" ] } }, - "/medicalnewstoday/author": { + "/mlb/statcast-pitch-timer": { "get": { - "description": "Returns an author's public profile and recent articles. Supply either the author slug or profile URL.", - "operationId": "medicalnewstoday-author", + "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": [ { - "description": "Author slug including numeric id, e.g. peter-brown-1595", + "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", - "name": "slug", - "type": "string", - "x-example": "peter-brown-1595" + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "description": "Public author profile URL", + "default": 0, + "description": "Zero-based row offset", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.medicalnewstoday.com/authors/peter-brown-1595" + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -315156,7 +350075,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/medicalnewstoday.authorResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchTimerResponseDoc" } }, "400": { @@ -315183,26 +350102,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Medical News Today author profile", + "summary": "Get Baseball Savant Pitch Timer infraction rows", "tags": [ - "Medical News Today" + "MLB" ] } }, - "/medicalnewstoday/headlines": { + "/mlb/statcast-player-details": { "get": { - "description": "Returns dated article cards from the dedicated Health News stream.", - "operationId": "medicalnewstoday-headlines", + "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": "Medical News Today newsroom section", + "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": [ - "news" + "batter", + "pitcher" ], "in": "query", - "name": "section", - "required": true, + "name": "player_type", "type": "string" + }, + { + "description": "Season from 2015 through the current season", + "in": "query", + "name": "year", + "type": "integer" } ], "produces": [ @@ -315212,7 +350146,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/medicalnewstoday.headlinesResponseDoc" + "$ref": "#/definitions/mlb.statcastPlayerDetailsResponseDoc" } }, "400": { @@ -315221,12 +350155,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -315239,82 +350167,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get Medical News Today section headlines", + "summary": "Get expanded standard Baseball Savant Statcast player plays", "tags": [ - "Medical News Today" + "MLB" ] } }, - "/medicalnewstoday/news": { + "/mlb/statcast-rolling": { "get": { - "description": "Returns current stories from the site's dedicated Health News listing.", - "operationId": "medicalnewstoday-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/medicalnewstoday.newsResponseDoc" - } + "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" }, - "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": [ + "description": "Optional player role; omit for both", + "enum": [ + "Batter", + "Pitcher" + ], + "in": "query", + "name": "role", + "type": "string" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get Medical News Today newsroom sections", - "tags": [ - "Medical News Today" - ] - } - }, - "/men/article": { - "get": { - "description": "Returns public Manchester Evening News article metadata and body paragraphs from a canonical article URL.", - "operationId": "men-article", - "parameters": [ + "description": "Optional rolling plate-appearance window; omit for all", + "enum": [ + "50", + "100", + "250" + ], + "in": "query", + "name": "window_pa", + "type": "string" + }, { - "description": "Canonical Manchester Evening News article URL", + "default": 100, + "description": "Rows per group (1-500)", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.manchestereveningnews.co.uk/news/how-opt-out-app-pushes-17427838" + "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": [ @@ -315324,7 +350240,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastRollingResponseDoc" } }, "400": { @@ -315351,30 +350267,198 @@ "ApiKeyAuth": [] } ], - "summary": "Get Manchester Evening News article content", + "summary": "Get Baseball Savant Rolling Windows rows", "tags": [ - "Manchester Evening News" + "MLB" ] } }, - "/men/author": { + "/mlb/statcast-run-value": { "get": { - "description": "Returns one Manchester Evening News author's public profile: name, job title, bio, email, X/Twitter handle, and their recent articles.", - "operationId": "men-author", + "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": "Author slug, e.g. lee-swettenham", + "default": "Batter", + "description": "Row group", + "enum": [ + "Batter", + "Pitcher" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "lee-swettenham" + "name": "group", + "type": "string" }, { - "description": "Canonical manchestereveningnews.co.uk/authors// URL; alternative to slug", + "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": "url", - "type": "string", - "x-example": "https://www.manchestereveningnews.co.uk/authors/lee-swettenham/" + "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": [ @@ -315384,7 +350468,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.menAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastRunValueResponseDoc" } }, "400": { @@ -315411,52 +350495,271 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Manchester Evening News author profile", + "summary": "Get Baseball Savant Run Value rows", "tags": [ - "Manchester Evening News" + "MLB" ] } }, - "/men/headlines": { + "/mlb/statcast-running-game": { "get": { - "description": "Returns fresh headlines from one public Manchester Evening News section.", - "operationId": "men-headlines", + "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": [ { - "description": "Manchester Evening News section slug", + "default": "Pit", + "description": "Leaderboard group", "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" + "Pit", + "Pitching Team", + "League" ], "in": "query", - "name": "section", - "required": true, + "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": [ @@ -315466,7 +350769,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/mlb.statcastRunningGameResponseDoc" } }, "400": { @@ -315487,85 +350790,227 @@ "ApiKeyAuth": [] } ], - "summary": "Get Manchester Evening News section headlines", + "summary": "Get Baseball Savant Running Game leaderboards", "tags": [ - "Manchester Evening News" + "MLB" ] } }, - "/men/news": { + "/mlb/statcast-running-game-details": { "get": { - "description": "Returns fresh Manchester Evening News top stories from the public News RSS feed.", - "operationId": "men-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "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 }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Manchester Evening News top stories", - "tags": [ - "Manchester Evening News" - ] - } - }, - "/men/sections": { - "get": { - "description": "Returns the public Manchester Evening News editorial section inventory used by men-headlines.", - "operationId": "men-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "default": "Pit", + "description": "Detail group", + "enum": [ + "Pit", + "Pitching Team" + ], + "in": "query", + "name": "type", + "type": "string" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get Manchester Evening News sections", - "tags": [ - "Manchester Evening News" - ] - } - }, - "/mercari/autocomplete": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Mercari's own search-suggestion list for a partial keyword, in the upstream's own relevance order. An empty suggestion list is a normal outcome for obscure or gibberish input. Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", - "operationId": "mercari-autocomplete", - "parameters": [ + "default": "Regular", + "description": "Game scope", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, { - "description": "Partial keyword to get suggestions for", + "default": "all", + "description": "Pitcher's throwing hand", + "enum": [ + "all", + "L", + "R" + ], "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "nike" + "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": [ @@ -315575,7 +351020,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.autocompleteResponseDoc" + "$ref": "#/definitions/mlb.statcastRunningGameDetailsResponseDoc" } }, "400": { @@ -315584,12 +351029,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -315602,19 +351041,182 @@ "ApiKeyAuth": [] } ], - "summary": "Mercari search autocomplete", + "summary": "Get Baseball Savant Running Game play details", "tags": [ - "Mercari" + "MLB" ] } }, - "/mercari/home": { + "/mlb/statcast-sprint-speed": { "get": { - "consumes": [ - "application/json" + "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": [ + { + "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", + "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" + } ], - "description": "Returns Mercari's own curated home-feed recommendations: normalized listing summaries (title, price, thumbnail, condition, seller). Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", - "operationId": "mercari-home", "produces": [ "application/json" ], @@ -315622,11 +351224,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.homeResponseDoc" + "$ref": "#/definitions/mlb.statcastSprintSpeedResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -315643,82 +351245,125 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mercari home feed", + "summary": "Get Baseball Savant Sprint Speed player rows", "tags": [ - "Mercari" + "MLB" ] } }, - "/mercari/item/{id}": { + "/mlb/statcast-sprint-speed-teams": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a normalized Mercari item-detail page: description, all photos, price, condition, category, hashtags, the shipping origin state, and a \"similar items\" carousel of related listings. Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", - "operationId": "mercari-item", + "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": "Mercari item id, e.g. from a search result's id field", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "m98337445585" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/mercari.ItemDetailResponse" - } + "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" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "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" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "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" }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "desc", + "description": "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" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], - "summary": "Get Mercari item detail", - "tags": [ - "Mercari" - ] - } - }, - "/mercari/master": { - "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. Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", - "operationId": "mercari-master", "produces": [ "application/json" ], @@ -315726,11 +351371,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.masterResponseDoc" + "$ref": "#/definitions/mlb.statcastSprintSpeedTeamsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -315747,27 +351392,260 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mercari full taxonomy (categories, brands, sizes)", + "summary": "Get Baseball Savant Sprint Speed team rows", "tags": [ - "Mercari" + "MLB" ] } }, - "/mercari/search": { + "/mlb/statcast-swing-path": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Mercari's live resale marketplace by free-text keyword, returning normalized listing summaries (title, price, thumbnail, condition, seller) plus the total matching count. Credential-free public data sourced from Mercari's own mobile-app API using an anonymous, login-free session.", - "operationId": "mercari-search", + "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": "Free-text keyword search", + "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", + "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", - "name": "query", - "required": true, - "type": "string", - "x-example": "nike jacket" + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -315777,7 +351655,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.searchResponseDoc" + "$ref": "#/definitions/mlb.statcastSwingPathResponseDoc" } }, "400": { @@ -315786,8 +351664,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -315804,96 +351682,419 @@ "ApiKeyAuth": [] } ], - "summary": "Search Mercari listings", + "summary": "Get Baseball Savant Swing Path and Attack Angle rows", "tags": [ - "Mercari" + "MLB" ] } }, - "/meta-jobs/job": { + "/mlb/statcast-swing-timing": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Meta Careers posting by its numeric job id (the `id` field returned by search or list). Parsed from metacareers.com's server-rendered job detail page.", - "operationId": "meta-jobs-job", + "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": "Meta job id", + "default": "batter", + "description": "Row type", + "enum": [ + "batter", + "batting-team", + "pitcher", + "pitching-team", + "league" + ], "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "1238249364564427" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/metajobs.jobResponseDoc" - } + "name": "type", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "One or more seasons", + "in": "query", + "items": { + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], + "type": "string" + }, + "name": "seasons", + "type": "array" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "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" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "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" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Meta Jobs single posting", - "tags": [ - "Meta Jobs" - ] - } - }, - "/meta-jobs/list": { - "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", - "parameters": [ + "default": "q", + "description": "Minimum swing threshold", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min_swings", + "type": "string" + }, { - "description": "Page number, 1-based, defaults to 1", + "default": "1", + "description": "Minimum swings per split group", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "min_split", + "type": "string" }, { - "description": "Page size, defaults to 50, maxes at 200", + "default": "1", + "description": "Split years into separate rows", + "enum": [ + "1", + "0" + ], "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 50 + "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" + }, + { + "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": [ @@ -315903,7 +352104,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metajobs.listResponseDoc" + "$ref": "#/definitions/mlb.statcastSwingTimingResponseDoc" } }, "400": { @@ -315912,8 +352113,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -315930,82 +352131,363 @@ "ApiKeyAuth": [] } ], - "summary": "Meta Jobs catalog listing", + "summary": "Get Baseball Savant Swing Timing and Miss Distance rows", "tags": [ - "Meta Jobs" + "MLB" ] } }, - "/meta-jobs/search": { + "/mlb/statcast-swing-timing-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Meta's public careers site (metacareers.com) via its own anonymous jobsearch GraphQL endpoint, 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 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": "Facet-name keyword: matches team, technology, location, or ref/req-code -- not a title/description search", + "description": "Unique row id from mlb-statcast-swing-timing, including any selected split values", "in": "query", - "name": "q", + "name": "row_id", + "required": true, "type": "string", - "x-example": "Instagram" + "x-example": "666018_FF_2026" + }, + { + "description": "Player row type", + "enum": [ + "batter", + "pitcher" + ], + "in": "query", + "name": "type", + "required": true, + "type": "string", + "x-example": "batter" }, { "collectionFormat": "csv", - "description": "Repeatable team-or-technology filter (OR); see teams enum above", + "description": "Season filters", "in": "query", "items": { + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], "type": "string" }, - "name": "teams", - "type": "array", - "x-example": "Software Engineering" + "name": "seasons", + "type": "array" }, { "collectionFormat": "csv", - "description": "Repeatable employment-type filter (OR); see roles enum above", + "description": "Game-type filters", "in": "query", "items": { + "enum": [ + "R", + "A", + "F", + "D", + "L", + "W" + ], "type": "string" }, - "name": "roles", - "type": "array", - "x-example": "Full time employment" + "name": "game_types", + "type": "array" }, { "collectionFormat": "csv", - "description": "Repeatable location-id filter (OR) in Meta's own id format, e.g. menlo-park, london -- not a closed enum", + "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": "offices", - "type": "array", - "x-example": "menlo-park" + "name": "splits", + "type": "array" }, { - "description": "Restrict to remote-only postings", + "default": "q", + "description": "Minimum swings", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], "in": "query", - "name": "is_remote_only", - "type": "boolean" + "name": "min_swings", + "type": "string" }, { - "description": "Sort newest-first instead of relevance", + "default": "1", + "description": "Minimum group swings", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], "in": "query", - "name": "sort_by_new", - "type": "boolean" + "name": "min_split", + "type": "string" }, { - "description": "Response size cap: all, five, ten", + "default": "1", + "description": "Include year in the row grouping", "enum": [ - "all", - "five", - "ten" + "0", + "1" ], "in": "query", - "name": "results_per_page", + "name": "split_year", + "type": "string" + }, + { + "collectionFormat": "csv", + "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", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "type": "string" + }, + "name": "teams", + "type": "array" + }, + { + "description": "Filter start date in YYYY-MM-DD format", + "in": "query", + "name": "date_start", + "type": "string" + }, + { + "description": "Filter end date in YYYY-MM-DD format", + "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": "csv", + "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": "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" + }, + { + "collectionFormat": "csv", + "description": "Tied-up/flail axis values", + "in": "query", + "items": { + "enum": [ + "Tiedup", + "Centered", + "Flail" + ], + "type": "string" + }, + "name": "swing_timing_x", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Early/late axis values", + "in": "query", + "items": { + "enum": [ + "Early", + "OnTime", + "Late" + ], + "type": "string" + }, + "name": "swing_timing_y", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Over/under axis values", + "in": "query", + "items": { + "enum": [ + "Under", + "Linedup", + "Over" + ], + "type": "string" + }, + "name": "swing_timing_z", + "type": "array" + }, + { + "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" + }, + { + "collectionFormat": "csv", + "description": "Excluded swing timing flags", + "in": "query", + "items": { + "enum": [ + "is_timing_xyz_flawed", + "is_timing_xyz_perfect" + ], + "type": "string" + }, + "name": "not_flags", + "type": "array" } ], "produces": [ @@ -316015,7 +352497,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metajobs.searchResponseDoc" + "$ref": "#/definitions/mlb.statcastSwingTimingDetailsResponseDoc" } }, "400": { @@ -316024,8 +352506,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -316042,60 +352524,21 @@ "ApiKeyAuth": [] } ], - "summary": "Meta Jobs search", + "summary": "Get Baseball Savant Swing Timing player details", "tags": [ - "Meta Jobs" + "MLB" ] } }, - "/metacritic/browse": { + "/mlb/statcast-top-performers": { "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. Credential-free public Metacritic data.", - "operationId": "metacritic-browse", + "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": "Content type", - "enum": [ - "game", - "movie", - "tv" - ], - "in": "query", - "name": "type", - "required": true, - "type": "string" - }, - { - "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)", + "description": "Season from 2015 through the current season; defaults to the current season", "in": "query", - "name": "per_page", + "name": "year", "type": "integer" } ], @@ -316106,7 +352549,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.browseResponseDoc" + "$ref": "#/definitions/mlb.statcastTopPerformersResponseDoc" } }, "400": { @@ -316121,12 +352564,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -316139,27 +352576,180 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Metacritic titles", + "summary": "Get Baseball Savant Top Performers", "tags": [ - "Metacritic" + "MLB" ] } }, - "/metacritic/game/{slug}": { + "/mlb/statcast-year-to-year": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a normalized Metacritic game: Metascore (critic) and user score with sentiment and review counts, genres, per-platform scores, developer/publisher, rating, release date, and trailer. Credential-free public Metacritic data.", - "operationId": "metacritic-game", + "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": "Metacritic game slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "elden-ring" + "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)", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -316169,7 +352759,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.productResponseDoc" + "$ref": "#/definitions/mlb.statcastYearToYearResponseDoc" } }, "400": { @@ -316184,12 +352774,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -316202,49 +352786,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Metacritic game", + "summary": "Get Baseball Savant Year-to-Year Changes", "tags": [ - "Metacritic" + "MLB" ] } }, - "/metacritic/game/{slug}/critic-reviews": { + "/mlb/team-roster": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated professional/publication reviews for a game: publication, score, quote, author, platform, and source URL. Credential-free public Metacritic data.", - "operationId": "metacritic-game-critic-reviews", + "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": "Metacritic game slug", - "in": "path", - "name": "slug", + "description": "Numeric MLB team id", + "in": "query", + "name": "team_id", "required": true, "type": "string", - "x-example": "elden-ring" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "147" }, { - "description": "Results per page (default 20, max 50)", + "description": "Four-digit season; defaults to current year", "in": "query", - "name": "per_page", - "type": "integer" + "name": "season", + "type": "integer", + "x-example": 2026 }, { - "description": "Sort order", + "default": "active", + "description": "Roster type", "enum": [ - "date", - "score", - "publication" + "40Man", + "fullSeason", + "fullRoster", + "nonRosterInvitees", + "active", + "allTime", + "depthChart", + "gameday", + "coach" ], "in": "query", - "name": "sort", + "name": "roster_type", "type": "string" } ], @@ -316255,7 +352841,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" + "$ref": "#/definitions/mlb.rosterResponseDoc" } }, "400": { @@ -316270,8 +352856,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -316288,49 +352874,158 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic game's critic reviews", + "summary": "Get an MLB team roster", "tags": [ - "Metacritic" + "MLB" ] } }, - "/metacritic/game/{slug}/user-reviews": { + "/mlb/team-stats": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns paginated user reviews for a game: author, score (0-10), quote, date, platform, helpfulness, and spoiler flag. Credential-free public Metacritic data.", - "operationId": "metacritic-game-user-reviews", + "description": "Returns one team's season statistics. Group accepts every value returned by mlb_discovery.", + "operationId": "mlb-team-stats", "parameters": [ { - "description": "Metacritic game slug", - "in": "path", - "name": "slug", + "description": "Numeric MLB team id", + "in": "query", + "name": "team_id", "required": true, "type": "string", - "x-example": "elden-ring" + "x-example": "147" }, { - "description": "1-based page number (default 1)", + "description": "Four-digit season", "in": "query", - "name": "page", + "name": "season", "type": "integer" }, { - "description": "Results per page (default 20, max 50)", + "description": "Statistics group", + "enum": [ + "hitting", + "pitching", + "fielding", + "catching", + "running", + "game", + "team", + "streak" + ], "in": "query", - "name": "per_page", - "type": "integer" + "name": "group", + "required": true, + "type": "string", + "x-example": "hitting" }, { - "description": "Sort order", + "default": "season", + "description": "Stats API stat type; defaults to season", "enum": [ - "date", - "score", - "helpful" + "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": "sort", + "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" } ], @@ -316341,7 +353036,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.userReviewsResponseDoc" + "$ref": "#/definitions/mlb.statsResponseDoc" } }, "400": { @@ -316350,18 +353045,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": { @@ -316374,27 +353057,26 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic game's user reviews", + "summary": "Get MLB team season statistics", "tags": [ - "Metacritic" + "MLB" ] } }, - "/metacritic/movie/{slug}": { + "/mlb/teams": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Metacritic movie: Metascore (critic) and user score with sentiment and review counts, genres, cast/crew, rating, runtime, release date, IMDb id, and trailer. Credential-free public Metacritic data.", - "operationId": "metacritic-movie", + "description": "Returns the 30 MLB clubs for a season with league, division, venue, and abbreviation metadata.", + "operationId": "mlb-teams", "parameters": [ { - "description": "Metacritic movie slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "oppenheimer" + "description": "Four-digit season; defaults to current year", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -316404,7 +353086,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.productResponseDoc" + "$ref": "#/definitions/mlb.teamsResponseDoc" } }, "400": { @@ -316413,14 +353095,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" } @@ -316437,49 +353113,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Metacritic movie", + "summary": "List MLB teams", "tags": [ - "Metacritic" + "MLB" ] } }, - "/metacritic/movie/{slug}/critic-reviews": { + "/mlb/transactions": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns paginated professional/publication reviews for a movie: publication, score, quote, author, and source URL. Credential-free public Metacritic data.", - "operationId": "metacritic-movie-critic-reviews", + "description": "Lists signings, trades, options, assignments, injured-list moves, and other MLB transactions for a date range.", + "operationId": "mlb-transactions", "parameters": [ { - "description": "Metacritic movie slug", - "in": "path", - "name": "slug", + "description": "Range start in YYYY-MM-DD format", + "in": "query", + "name": "start_date", "required": true, "type": "string", - "x-example": "oppenheimer" + "x-example": "2026-07-25" }, { - "description": "1-based page number (default 1)", + "description": "Range end in YYYY-MM-DD format", "in": "query", - "name": "page", - "type": "integer" + "name": "end_date", + "required": true, + "type": "string", + "x-example": "2026-08-01" }, { - "description": "Results per page (default 20, max 50)", + "description": "Numeric MLB team id", "in": "query", - "name": "per_page", - "type": "integer" + "name": "team_id", + "type": "string" }, { - "description": "Sort order", - "enum": [ - "date", - "score", - "publication" - ], + "description": "Numeric MLB player id", "in": "query", - "name": "sort", + "name": "player_id", "type": "string" } ], @@ -316490,7 +353160,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" + "$ref": "#/definitions/mlb.transactionsResponseDoc" } }, "400": { @@ -316499,16 +353169,77 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List MLB transactions", + "tags": [ + "MLB" + ] + } + }, + "/mlive/news": { + "get": { + "description": "Returns current MLive top stories from its anonymous Arc RSS feed, including title, canonical URL, brief summary, author, publication time, and image where available. Article pages are currently blocked by DataDome; category endpoints are deferred because the full accepted section set could not be verified.", + "operationId": "mlive-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" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get MLive top stories", + "tags": [ + "MLive" + ] + } + }, + "/modaoperandi/categories": { + "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", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/modaoperandi.categoriesDoc" } }, "503": { @@ -316523,50 +353254,31 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic movie's critic reviews", + "summary": "List Moda Operandi categories and facets", "tags": [ - "Metacritic" + "Moda Operandi" ] } }, - "/metacritic/movie/{slug}/user-reviews": { + "/modaoperandi/designers": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated user reviews for a movie: author, score (0-10), quote, date, helpfulness, and spoiler flag. Credential-free public Metacritic data.", - "operationId": "metacritic-movie-user-reviews", + "description": "Returns the live designer facet for one department. Every returned slug is valid for modaoperandi-search.", + "operationId": "modaoperandi-designers", "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", + "description": "Department", "enum": [ - "date", - "score", - "helpful" + "women", + "men" ], "in": "query", - "name": "sort", - "type": "string" + "name": "gender", + "required": true, + "type": "string", + "x-example": "women" } ], "produces": [ @@ -316576,7 +353288,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.userReviewsResponseDoc" + "$ref": "#/definitions/modaoperandi.designersDoc" } }, "400": { @@ -316585,18 +353297,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": { @@ -316609,27 +353309,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic movie's user reviews", + "summary": "List Moda Operandi designers", "tags": [ - "Metacritic" + "Moda Operandi" ] } }, - "/metacritic/tv/{slug}": { + "/modaoperandi/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Metacritic TV show: Metascore (critic) and user score with sentiment and review counts, genres, networks, season count, rating, release date, IMDb id, and trailer. Credential-free public Metacritic data.", - "operationId": "metacritic-tv", + "description": "Returns public product detail, price, availability, size inventory, description, designer, color, and images for a Moda Operandi product URL.", + "operationId": "modaoperandi-product", "parameters": [ { - "description": "Metacritic TV show slug", - "in": "path", - "name": "slug", + "description": "Moda Operandi product URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "shogun" + "x-example": "https://www.modaoperandi.com/women/p/melisse/the-minuit-knot-bag-in-black-taffeta/752807" } ], "produces": [ @@ -316639,7 +353339,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.productResponseDoc" + "$ref": "#/definitions/modaoperandi.productDoc" } }, "400": { @@ -316654,12 +353354,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -316672,50 +353366,125 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Metacritic TV show", + "summary": "Get a Moda Operandi product", "tags": [ - "Metacritic" + "Moda Operandi" ] } }, - "/metacritic/tv/{slug}/critic-reviews": { + "/modaoperandi/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated professional/publication reviews for a TV show: publication, score, quote, author, and source URL. Credential-free public Metacritic data.", - "operationId": "metacritic-tv-critic-reviews", + "description": "Searches or browses Moda Operandi's public catalog with category, designer, color, size, availability, price, sale, sort, and page filters.", + "operationId": "modaoperandi-search", "parameters": [ { - "description": "Metacritic TV show slug", - "in": "path", - "name": "slug", + "description": "Department", + "enum": [ + "women", + "men" + ], + "in": "query", + "name": "gender", "required": true, "type": "string", - "x-example": "shogun" + "x-example": "women" }, { - "description": "1-based page number (default 1)", + "description": "Free-text search", "in": "query", - "name": "page", - "type": "integer" + "name": "q", + "type": "string" }, { - "description": "Results per page (default 20, max 50)", + "description": "Category slug from modaoperandi-categories", "in": "query", - "name": "per_page", - "type": "integer" + "name": "category", + "type": "string" }, { - "description": "Sort order", + "description": "Designer slug from modaoperandi-designers", + "in": "query", + "name": "designer", + "type": "string" + }, + { + "description": "Color facet value", + "in": "query", + "name": "color", + "type": "string" + }, + { + "description": "Size facet value", + "in": "query", + "name": "size", + "type": "string" + }, + { + "description": "Attribute facet value", + "in": "query", + "name": "attribute", + "type": "string" + }, + { + "description": "Availability", "enum": [ - "date", - "score", - "publication" + "available_now", + "preorder", + "trunkshow" + ], + "in": "query", + "name": "availability", + "type": "string" + }, + { + "description": "Minimum price", + "in": "query", + "name": "price_min", + "type": "number" + }, + { + "description": "Maximum price", + "in": "query", + "name": "price_max", + "type": "number" + }, + { + "description": "Sale items only", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Sort", + "enum": [ + "default", + "price_low_to_high", + "price_high_to_low", + "newest" ], "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", + "in": "query", + "maximum": 180, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -316725,7 +353494,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" + "$ref": "#/definitions/modaoperandi.searchDoc" } }, "400": { @@ -316734,18 +353503,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": { @@ -316758,50 +353515,28 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic TV show's critic reviews", + "summary": "Search Moda Operandi products", "tags": [ - "Metacritic" + "Moda Operandi" ] } }, - "/metacritic/tv/{slug}/user-reviews": { + "/moncler/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated user reviews for a TV show: author, score (0-10), quote, date, helpfulness, and spoiler flag. Credential-free public Metacritic data.", - "operationId": "metacritic-tv-user-reviews", + "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": "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)", + "default": 2, + "description": "How many levels of the category tree to return", "in": "query", - "name": "per_page", + "maximum": 3, + "minimum": 1, + "name": "levels", "type": "integer" - }, - { - "description": "Sort order", - "enum": [ - "date", - "score", - "helpful" - ], - "in": "query", - "name": "sort", - "type": "string" } ], "produces": [ @@ -316811,7 +353546,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.userReviewsResponseDoc" + "$ref": "#/definitions/moncler.categoriesResponseDoc" } }, "400": { @@ -316820,14 +353555,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" } @@ -316844,52 +353573,66 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic TV show's user reviews", + "summary": "List Moncler categories", "tags": [ - "Metacritic" + "Moncler" ] } }, - "/metaculus/category/{slug}/questions": { + "/moncler/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Metaculus question rows from a credential-free public category feed page. 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", + "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 normalized result and facet shape as moncler-search. Narrow the same results with the filter param below.", + "operationId": "moncler-category", "parameters": [ { - "description": "Metaculus category slug", + "description": "Category id, from moncler-categories", + "in": "query", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "men-outerwear-all-down-jackets" + }, + { + "description": "Sort order", "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" + "price-high-to-low", + "price-low-to-high" ], - "in": "path", - "name": "slug", - "required": true, + "in": "query", + "name": "sort", "type": "string", - "x-example": "artificial-intelligence" + "x-example": "price-low-to-high" }, { - "description": "Rows to return, default 10, max 25", + "collectionFormat": "csv", + "description": "Repeatable, up to 10. Each value is \\", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "c_refinementColor:Black" + }, + { + "default": 24, + "description": "Max results to return", "in": "query", + "maximum": 100, + "minimum": 1, "name": "limit", "type": "integer" + }, + { + "default": 0, + "description": "Result offset for pagination", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -316899,7 +353642,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/moncler.categoryResponseDoc" } }, "400": { @@ -316920,12 +353663,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -316938,31 +353675,27 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus category questions", + "summary": "Browse a Moncler category", "tags": [ - "Metaculus" + "Moncler" ] } }, - "/metaculus/comments-feed": { + "/moncler/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Metaculus question rows for the questions referenced by the most recent public comments, in comment recency order. Derived from credential-free public Metaculus data; upstream comment bodies are not exposed.", - "operationId": "metaculus-comments-feed", + "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": "Rows to return, default 10, max 25", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Optional Metaculus topic slug", + "description": "Product or master id", "in": "query", - "name": "topic", - "type": "string" + "name": "product_id", + "required": true, + "type": "string", + "x-example": "L20911A53600689509990" } ], "produces": [ @@ -316972,7 +353705,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/moncler.productResponseDoc" } }, "400": { @@ -316993,12 +353726,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -317011,33 +353738,66 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus comments feed", + "summary": "Get a Moncler product's detail", "tags": [ - "Metaculus" + "Moncler" ] } }, - "/metaculus/project/{slug}/questions": { + "/moncler/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized Metaculus question rows for one public project, filtered by its slug. A slug that does not exist returns 404.", - "operationId": "metaculus-project-questions", + "description": "Searches Moncler's product catalog by keyword. Returns normalized 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": [ { - "description": "Metaculus project slug", - "in": "path", - "name": "slug", + "description": "Search keyword", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "ai-2027" + "x-example": "down jacket" }, { - "description": "Rows to return, default 10, max 25", + "description": "Sort order", + "enum": [ + "price-high-to-low", + "price-low-to-high" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price-low-to-high" + }, + { + "collectionFormat": "csv", + "description": "Repeatable, up to 10. Each value is \\", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "c_refinementColor:Black" + }, + { + "default": 24, + "description": "Max results to return", "in": "query", + "maximum": 100, + "minimum": 1, "name": "limit", "type": "integer" + }, + { + "default": 0, + "description": "Result offset for pagination", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -317047,7 +353807,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/moncler.searchResponseDoc" } }, "400": { @@ -317056,24 +353816,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": { @@ -317086,29 +353834,19 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus project questions", + "summary": "Search Moncler products", "tags": [ - "Metaculus" + "Moncler" ] } }, - "/metaculus/question/{id}": { + "/moncler/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized Metaculus question from credential-free public page data.", - "operationId": "metaculus-question", - "parameters": [ - { - "description": "Metaculus question or post id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "43612" - } - ], + "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" ], @@ -317116,7 +353854,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionResponseDoc" + "$ref": "#/definitions/moncler.storesResponseDoc" } }, "400": { @@ -317125,24 +353863,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": { @@ -317155,46 +353881,27 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question detail", + "summary": "List Moncler boutiques", "tags": [ - "Metaculus" + "Moncler" ] } }, - "/metaculus/question/{id}/forecast-history": { + "/moncler/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns public aggregation forecast history points for one Metaculus question from credential-free public page data. The `method` enum accepts `recency_weighted`, `unweighted`, and `single_aggregation`.", - "operationId": "metaculus-question-forecast-history", + "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": "Metaculus question or post id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "43612" - }, - { - "description": "Aggregation method", - "enum": [ - "recency_weighted", - "unweighted", - "single_aggregation" - ], + "description": "Partial search query", "in": "query", - "name": "method", + "name": "q", + "required": true, "type": "string", - "x-example": "recency_weighted" - }, - { - "description": "Maximum history points to return, default 500, max 2000", - "in": "query", - "name": "max_points", - "type": "integer", - "x-example": 500 + "x-example": "jack" } ], "produces": [ @@ -317204,7 +353911,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.forecastHistoryResponseDoc" + "$ref": "#/definitions/moncler.suggestResponseDoc" } }, "400": { @@ -317213,24 +353920,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": { @@ -317243,27 +353938,24 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question forecast history", + "summary": "Get Moncler search-box suggestions", "tags": [ - "Metaculus" + "Moncler" ] } }, - "/metaculus/question/{id}/forecasts": { + "/moneycontrol/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns compact public latest forecast summaries by aggregation method for one Metaculus question.", - "operationId": "metaculus-question-forecasts", + "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": "Metaculus question or post id", - "in": "path", - "name": "id", + "description": "Canonical Moneycontrol article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "43612" + "x-example": "https://www.moneycontrol.com/news/business/markets/example-article-slug-14037252.html" } ], "produces": [ @@ -317273,7 +353965,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.forecastsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -317282,20 +353974,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$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" } @@ -317312,27 +353998,24 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question forecasts", + "summary": "Get Moneycontrol article content", "tags": [ - "Metaculus" + "Moneycontrol" ] } }, - "/metaculus/question/{id}/metadata": { + "/moneycontrol/author": { "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 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": "Metaculus question or post id", - "in": "path", - "name": "id", + "description": "Canonical Moneycontrol author URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "43731" + "x-example": "https://www.moneycontrol.com/author/jane-doe-12345/" } ], "produces": [ @@ -317342,7 +354025,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.metadataResponseDoc" + "$ref": "#/definitions/publicnews.moneycontrolAuthorResponseDoc" } }, "400": { @@ -317357,18 +354040,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": { @@ -317381,39 +354052,78 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question metadata", + "summary": "Get a Moneycontrol author profile", "tags": [ - "Metaculus" + "Moneycontrol" ] } }, - "/metaculus/question/{id}/options": { + "/moneycontrol/headlines": { "get": { - "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 current headlines of one Moneycontrol news section (25 to 50 stories, without publication times).", + "operationId": "moneycontrol-headlines", "parameters": [ { - "description": "Metaculus question or post id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "43731" - }, - { - "description": "Aggregation method", + "description": "Moneycontrol section slug", "enum": [ - "recency_weighted", - "unweighted", - "single_aggregation" + "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": "method", + "name": "section", + "required": true, "type": "string", - "x-example": "recency_weighted" + "x-example": "business" } ], "produces": [ @@ -317423,7 +354133,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.optionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -317432,24 +354142,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": { @@ -317462,33 +354154,16 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question options", + "summary": "Get Moneycontrol section headlines", "tags": [ - "Metaculus" + "Moneycontrol" ] } }, - "/metaculus/questions": { + "/moneycontrol/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Metaculus question rows from credential-free public page data. The endpoint fails closed on authenticated API responses or Cloudflare challenge pages.", - "operationId": "metaculus-questions", - "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" - } - ], + "description": "Returns the 50 newest Moneycontrol stories across all sections, newest first, with publication time and image.", + "operationId": "moneycontrol-news", "produces": [ "application/json" ], @@ -317496,19 +354171,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -317517,12 +354180,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -317535,33 +354192,16 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus questions", + "summary": "Get Moneycontrol latest news", "tags": [ - "Metaculus" + "Moneycontrol" ] } }, - "/metaculus/top-comments": { + "/moneycontrol/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Metaculus question rows for the questions whose recent public comments collected the highest vote scores over roughly the last week. Derived from credential-free public Metaculus data; upstream comment bodies are not exposed.", - "operationId": "metaculus-top-comments", - "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" - } - ], + "description": "Returns the Moneycontrol news sections accepted by the headlines endpoint.", + "operationId": "moneycontrol-sections", "produces": [ "application/json" ], @@ -317569,37 +354209,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" - } - }, - "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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -317608,71 +354218,37 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus top comments feed", + "summary": "Get Moneycontrol sections", "tags": [ - "Metaculus" + "Moneycontrol" ] } }, - "/metaculus/tournament/{slug}/questions": { + "/monitors": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "Metaculus tournament slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "quarterly-cup" - }, - { - "description": "Rows to return, default 10, max 25", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Returns the caller's own monitors (most recently created first, capped at 100). Free to call.", + "operationId": "monitors-list", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Monitors", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/webmonitor.monitorListResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -317683,24 +354259,26 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus tournament questions", + "summary": "List website-change monitors", "tags": [ - "Metaculus" + "Monitors" ] - } - }, - "/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", + }, + "post": { + "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 scraped 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": "Canonical Metro article URL", - "in": "query", - "name": "url", + "description": "Monitor definition", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "https://metro.co.uk/2026/09/24/andy-burnham-talking-russia-this-week-29649003/" + "schema": { + "$ref": "#/definitions/webmonitor.createMonitorBodyDoc" + } } ], "produces": [ @@ -317708,25 +354286,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Created monitor", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/webmonitor.monitorResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -317737,24 +354315,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Metro article content", + "summary": "Create a website-change monitor", "tags": [ - "Metro" + "Monitors" ] } }, - "/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", + "/monitors/{id}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Deletes one of the caller's own monitors. Free to call. Does not delete its past check history.", + "operationId": "monitors-delete", "parameters": [ { - "description": "Canonical Metro author 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://metro.co.uk/author/craig-munro/" + "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" } ], "produces": [ @@ -317762,25 +354343,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Deleted", "schema": { - "$ref": "#/definitions/publicnews.metroAuthorResponseDoc" + "$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" } @@ -317791,67 +354372,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Metro author profile", + "summary": "Delete a website-change monitor", "tags": [ - "Metro" + "Monitors" ] - } - }, - "/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", + "consumes": [ + "application/json" + ], + "description": "Returns one of the caller's own monitors by id. Free to call.", + "operationId": "monitors-get", "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": "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" + "type": "string", + "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" } ], "produces": [ @@ -317859,19 +354398,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Monitor", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/webmonitor.monitorResponseDoc" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Monitor not found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -317882,28 +354427,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get Metro section headlines", + "summary": "Get a website-change monitor", "tags": [ - "Metro" + "Monitors" ] - } - }, - "/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", + }, + "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": "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": "Fields to update", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/webmonitor.updateMonitorBodyDoc" + } + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Updated monitor", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/webmonitor.monitorResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "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" } @@ -317914,24 +354497,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get Metro top stories", + "summary": "Update a website-change monitor", "tags": [ - "Metro" + "Monitors" ] } }, - "/metro/sections": { + "/monitors/{id}/checks": { "get": { - "description": "Returns every Metro section slug accepted by the headlines endpoint, with its display name and public RSS feed URL.", - "operationId": "metro-sections", + "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", + "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" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Check history", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/webmonitor.checkListResponseDoc" + } + }, + "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" } } }, @@ -317940,36 +354554,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Metro sections", + "summary": "List a monitor's check history", "tags": [ - "Metro" + "Monitors" ] } }, - "/microsoftstore/categories": { + "/motleyfool/article": { "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. Credential-free public Microsoft Store data, live-verified and pinned rather than a passthrough call.", - "operationId": "microsoftstore-categories", + "description": "Returns public metadata and body paragraphs from a canonical Fool investing article URL.", + "operationId": "motleyfool-article", "parameters": [ { - "default": "apps", - "description": "Department to list categories for", - "enum": [ - "apps", - "games", - "devices", - "passes", - "fonts", - "themes", - "tencent-android", - "tencent-mini" - ], + "description": "Canonical The Motley Fool investing article URL", "in": "query", - "name": "media_type", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.fool.com/investing/2026/09/28/example-story/" } ], "produces": [ @@ -317979,7 +354581,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -317987,6 +354589,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": [ @@ -317994,64 +354608,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get the full Microsoft Store category (and subcategory) taxonomy for a department", + "summary": "Get a Motley Fool article", "tags": [ - "Microsoft Store" + "The Motley Fool" ] } }, - "/microsoftstore/category": { + "/motleyfool/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of a single department+category listing, cursor-paginated, with no search keyword required -- the credential-free 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 upstream. Credential-free public Microsoft Store data, read directly from the store's own category-filter API.", - "operationId": "microsoftstore-category", + "description": "Returns a public Fool author's name, biography, image, and recent articles from a canonical author URL.", + "operationId": "motleyfool-author", "parameters": [ { - "description": "Category to browse", + "description": "Canonical The Motley Fool author URL", "in": "query", - "name": "category", + "name": "url", "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)", - "in": "query", - "name": "locale", - "type": "string" + "x-example": "https://www.fool.com/author/2104/" } ], "produces": [ @@ -318061,7 +354635,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.categoryResponseDoc" + "$ref": "#/definitions/publicnews.motleyfoolAuthorResponseDoc" } }, "400": { @@ -318070,6 +354644,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -318082,122 +354662,36 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Microsoft Store category without a keyword", + "summary": "Get a Motley Fool author profile", "tags": [ - "Microsoft Store" + "The Motley Fool" ] } }, - "/microsoftstore/charts": { + "/motleyfool/headlines": { "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 upstream sparsity for that chart, not a parsing gap. Credential-free public Microsoft Store data, read directly from the store's own curated-list API.", - "operationId": "microsoftstore-charts", + "description": "Returns article headlines from one live-verified public Fool investing-news section.", + "operationId": "motleyfool-headlines", "parameters": [ { - "description": "Chart to fetch", + "description": "The Motley Fool section slug", "enum": [ - "TopFree", - "TopPaid", - "TopGrossing", - "toptrending", - "NewAndRising", - "Deal", - "GettingStartedApps", - "MostPopular" + "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": "list", + "name": "section", "required": true, "type": "string", - "x-example": "TopFree" - }, - { - "default": "apps", - "description": "Department to scope the chart to", - "enum": [ - "apps", - "games" - ], - "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", - "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" - }, - { - "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": "1-based page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 20, - "description": "Items 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": "trending-news" } ], "produces": [ @@ -318207,7 +354701,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.chartsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -318228,43 +354722,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a curated Microsoft Store chart", + "summary": "Get The Motley Fool section headlines", "tags": [ - "Microsoft Store" + "The Motley Fool" ] } }, - "/microsoftstore/editorial": { + "/motleyfool/news": { "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. Credential-free public Microsoft Store data, read directly from the store's own editorial-page API.", - "operationId": "microsoftstore-editorial", - "parameters": [ - { - "description": "Editorial content id, from a product's award.editorial_id field", - "in": "query", - "name": "editorial_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" - } - ], + "description": "Returns recent public investing stories from The Motley Fool's news sitemap.", + "operationId": "motleyfool-news", "produces": [ "application/json" ], @@ -318272,17 +354739,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.editorialResponseDoc" - } - }, - "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" } @@ -318299,58 +354760,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Microsoft Store editorial article by id", + "summary": "Get The Motley Fool top investing stories", "tags": [ - "Microsoft Store" + "The Motley Fool" ] } }, - "/microsoftstore/events": { + "/motleyfool/sections": { "get": { - "consumes": [ + "description": "Returns the complete article-bearing Stock Market News section set accepted by motleyfool_headlines.", + "operationId": "motleyfool-sections", + "produces": [ "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. Credential-free public Microsoft Store data, read directly from the store's own promotional-events API.", - "operationId": "microsoftstore-events", - "parameters": [ - { - "default": "apps", - "description": "Department to fetch special events for", - "enum": [ - "apps", - "games" - ], - "in": "query", - "name": "media_type", - "type": "string" - }, - { - "default": 1, - "description": "1-based page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 20, - "description": "Items per page (max 24)", - "in": "query", - "name": "page_size", - "type": "integer" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, + "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": [ { - "default": "en-US", - "description": "Display locale (BCP-47)", + "description": "Canonical Nation Africa article URL", "in": "query", - "name": "locale", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://nation.africa/kenya/news/rex-masai-inquest-verdict-on-killers-delayed-5608166" } ], "produces": [ @@ -318360,7 +354813,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.eventsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -318369,6 +354822,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -318381,41 +354840,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Microsoft Store department's special-events shelf", + "summary": "Get Nation Africa article content", "tags": [ - "Microsoft Store" + "Nation Africa" ] } }, - "/microsoftstore/product": { + "/nationafrica/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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). Credential-free public Microsoft Store data, read directly from the store's own page-data API.", - "operationId": "microsoftstore-product", + "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": [ { - "description": "Microsoft Store product id", + "description": "Author slug, e.g. richard-munguti-11590", "in": "query", - "name": "product_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "9NCBCSZSJRSB" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" + "x-example": "richard-munguti-11590" }, { - "default": "en-US", - "description": "Display locale (BCP-47)", + "description": "Canonical nation.africa/kenya/ URL; alternative to slug", "in": "query", - "name": "locale", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://nation.africa/kenya/richard-munguti-11590" } ], "produces": [ @@ -318425,7 +354873,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.productResponseDoc" + "$ref": "#/definitions/publicnews.nationAfricaAuthorResponseDoc" } }, "400": { @@ -318452,47 +354900,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get Microsoft Store details for a single product", + "summary": "Get a Nation Africa author profile", "tags": [ - "Microsoft Store" + "Nation Africa" ] } }, - "/microsoftstore/publisher": { + "/nationafrica/headlines": { "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). Credential-free public Microsoft Store data, read directly from the store's own browse-by-publisher API.", - "operationId": "microsoftstore-publisher", + "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": [ { - "description": "Exact publisher/developer name", + "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" + ], "in": "query", - "name": "publisher_name", + "name": "section", "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": "news" } ], "produces": [ @@ -318502,7 +354976,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.publisherResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -318523,35 +354997,16 @@ "ApiKeyAuth": [] } ], - "summary": "List a Microsoft Store publisher's full catalog", + "summary": "Get Nation Africa section headlines", "tags": [ - "Microsoft Store" + "Nation Africa" ] } }, - "/microsoftstore/recommended": { + "/nationafrica/news": { "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. Credential-free public Microsoft Store data, read directly from the store's own zero-state search API.", - "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" - } - ], + "description": "Returns the newest Nation Africa (Daily Nation, Kenya) stories from the site's public news sitemap: headline, publication time and lead image. Video pages are excluded.", + "operationId": "nationafrica-news", "produces": [ "application/json" ], @@ -318559,7 +355014,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.recommendedResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -318574,68 +355029,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Microsoft Store's default recommendation shelf", + "summary": "Get Nation Africa top stories", "tags": [ - "Microsoft Store" + "Nation Africa" ] } }, - "/microsoftstore/related": { + "/nationafrica/sections": { "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. Credential-free public Microsoft Store data, read directly from the store's own recommendation API.", - "operationId": "microsoftstore-related", - "parameters": [ - { - "description": "Seed Microsoft Store product id", - "in": "query", - "name": "product_id", - "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" - } - ], + "description": "Returns the public Nation Africa (Kenya edition) editorial section inventory.", + "operationId": "nationafrica-sections", "produces": [ "application/json" ], @@ -318643,19 +355046,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.relatedResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -318664,66 +355055,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get products related to a Microsoft Store product", + "summary": "Get Nation Africa sections", "tags": [ - "Microsoft Store" + "Nation Africa" ] } }, - "/microsoftstore/reviews": { + "/national/article": { "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). Credential-free public Microsoft Store data, read directly from the store's own review-listing API.", - "operationId": "microsoftstore-reviews", + "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": "Microsoft Store product id", + "description": "Canonical thenationalnews.com article 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.thenationalnews.com/future/technology/2026/09/29/ai-trump-midterm-poll-democrats/" } ], "produces": [ @@ -318733,7 +355082,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.reviewsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -318742,6 +355091,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -318754,41 +355109,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get paginated Microsoft Store reviews for a product", + "summary": "Get The National article content", "tags": [ - "Microsoft Store" + "The National" ] } }, - "/microsoftstore/reviews/summary": { + "/national/author": { "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. Credential-free public Microsoft Store data, read directly from the store's own review-summary API.", - "operationId": "microsoftstore-reviews-summary", + "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": [ { - "description": "Microsoft Store product id", + "description": "The National author slug, e.g. cody-combs", "in": "query", - "name": "product_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "9NCBCSZSJRSB" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" + "x-example": "cody-combs" }, { - "default": "en-US", - "description": "Display locale (BCP-47)", + "description": "Canonical thenationalnews.com/topics/Author/ URL; alternative to slug", "in": "query", - "name": "locale", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.thenationalnews.com/topics/Author/cody-combs/" } ], "produces": [ @@ -318798,7 +355142,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.reviewsSummaryResponseDoc" + "$ref": "#/definitions/publicnews.nationalAuthorResponseDoc" } }, "400": { @@ -318807,6 +355151,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -318819,110 +355169,83 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Microsoft Store product's aggregate rating summary", + "summary": "Get a The National author profile", "tags": [ - "Microsoft Store" + "The National" ] } }, - "/microsoftstore/search": { + "/national/headlines": { "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. Credential-free public Microsoft Store data, read directly from the store's own web API.", - "operationId": "microsoftstore-search", + "description": "Returns current The National stories from a public Arc category RSS feed. 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": [ { - "description": "Search keyword", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "spotify" - }, - { - "default": "all", - "description": "Department to search", + "description": "The National editorial section slug", "enum": [ - "all", - "apps", - "games", - "devices", - "passes", - "fonts", - "themes", - "tencent-android", - "tencent-mini" + "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": "media_type", - "type": "string" - }, - { - "description": "Category to filter by (accepted set depends on media_type)", - "in": "query", - "name": "category", + "name": "section", + "required": true, "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" + "x-example": "news" } ], "produces": [ @@ -318932,7 +355255,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.searchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -318953,47 +355276,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Microsoft Store", + "summary": "Get The National section headlines", "tags": [ - "Microsoft Store" + "The National" ] } }, - "/microsoftstore/spotlight": { + "/national/news": { "get": { - "consumes": [ - "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. Credential-free public Microsoft Store data, read directly from the store's own promotion-products API.", - "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" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" - } - ], + "description": "Returns current The National UAE stories from its public Arc RSS feed. Article and section extraction uses anonymous public responses.", + "operationId": "national-news", "produces": [ "application/json" ], @@ -319001,11 +355293,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.spotlightResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -319022,43 +355314,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Microsoft Store home page or department spotlight", + "summary": "Get The National top stories", "tags": [ - "Microsoft Store" + "The National" ] } }, - "/microsoftstore/suggest": { + "/national/sections": { "get": { - "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). Credential-free public Microsoft Store data, read directly from the store's own autocomplete API.", - "operationId": "microsoftstore-suggest", - "parameters": [ - { - "description": "Partial search term to autocomplete", - "in": "query", - "name": "prefix", - "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" - } - ], + "description": "Returns all 57 editorial categories in The National's Arc section sitemap taxonomy that are accepted by national_headlines. Podcast, newsletter, puzzle, partner and promotional surfaces are excluded.", + "operationId": "national-sections", "produces": [ "application/json" ], @@ -319066,19 +355331,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.suggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -319087,24 +355340,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Microsoft Store search suggestions for a prefix", + "summary": "Get The National sections", "tags": [ - "Microsoft Store" + "The National" ] } }, - "/mirror/article": { + "/nationalpost/article": { "get": { - "description": "Returns public Mirror article metadata and body paragraphs from a canonical article URL.", - "operationId": "mirror-article", + "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": "Canonical Mirror article URL", + "description": "Canonical National Post article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.mirror.co.uk/news/uk-news/bootle-house-fire-schools-tributes-37697006" + "x-example": "https://nationalpost.com/news/politics/carney-will-miss-target-balancing-operating-budget-pbo-says" } ], "produces": [ @@ -319141,30 +355394,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mirror article content", + "summary": "Get National Post article content", "tags": [ - "Mirror" + "National Post" ] } }, - "/mirror/author": { + "/nationalpost/author": { "get": { - "description": "Returns one Mirror author's public profile: name, job title, bio, email, X/Twitter handle, and their recent articles.", - "operationId": "mirror-author", + "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": [ { - "description": "Author slug, e.g. neil-shaw", + "description": "Author slug, e.g. stuckpostmedia-com", "in": "query", "name": "slug", "type": "string", - "x-example": "neil-shaw" + "x-example": "stuckpostmedia-com" }, { - "description": "Canonical mirror.co.uk/authors// URL; alternative to slug", + "description": "Canonical nationalpost.com/author// URL; alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.mirror.co.uk/authors/neil-shaw/" + "x-example": "https://nationalpost.com/author/stuckpostmedia-com/" } ], "produces": [ @@ -319174,7 +355427,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.mirrorAuthorResponseDoc" + "$ref": "#/definitions/publicnews.nationalPostAuthorResponseDoc" } }, "400": { @@ -319201,59 +355454,71 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Mirror author profile", + "summary": "Get a National Post author profile", "tags": [ - "Mirror" + "National Post" ] } }, - "/mirror/headlines": { + "/nationalpost/headlines": { "get": { - "description": "Returns fresh headlines from one public Mirror section.", - "operationId": "mirror-headlines", + "description": "Returns fresh headlines from one public National Post section.", + "operationId": "nationalpost-headlines", "parameters": [ { - "description": "Mirror section slug", + "description": "National Post 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", + "canada", + "true-crime", + "politics", + "health", + "world", + "israel-middle-east", + "opinion", + "longreads", + "modern-life", + "food", + "horoscopes", + "style-beauty", "travel", - "money", - "money/shopping-deals", - "tv", - "film", - "gaming", - "tech" + "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", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "canada" } ], "produces": [ @@ -319284,16 +355549,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mirror section headlines", + "summary": "Get National Post section headlines", "tags": [ - "Mirror" + "National Post" ] } }, - "/mirror/news": { + "/nationalpost/news": { "get": { - "description": "Returns fresh Mirror top stories from the public News RSS feed.", - "operationId": "mirror-news", + "description": "Returns fresh National Post stories from the public site-wide RSS feed.", + "operationId": "nationalpost-news", "produces": [ "application/json" ], @@ -319316,16 +355581,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mirror top stories", + "summary": "Get National Post top stories", "tags": [ - "Mirror" + "National Post" ] } }, - "/mirror/sections": { + "/nationalpost/sections": { "get": { - "description": "Returns the public Mirror editorial section inventory used by mirror-headlines.", - "operationId": "mirror-sections", + "description": "Returns the public National Post editorial section inventory (the site's own primary navigation).", + "operationId": "nationalpost-sections", "produces": [ "application/json" ], @@ -319342,16 +355607,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mirror sections", + "summary": "Get National Post sections", "tags": [ - "Mirror" + "National Post" ] } }, - "/mlb/discovery": { + "/nbc/article": { "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 the observed Baseball Savant leaderboard categories and filters including Expected Statistics and Outs Above Average. Use these values to discover sections and supported filters before calling MLB endpoints.", - "operationId": "mlb-discovery", + "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": [ + { + "description": "Canonical www.nbcnews.com article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.nbcnews.com/news/us-news/ice-shooting-austin-texas-rcna598870" + } + ], "produces": [ "application/json" ], @@ -319359,7 +355634,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.discoveryResponseDoc" + "$ref": "#/definitions/nbc.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": { @@ -319374,52 +355667,24 @@ "ApiKeyAuth": [] } ], - "summary": "Discover MLB sections and Stats API values", + "summary": "Get NBC News article content", "tags": [ - "MLB" + "NBC News" ] } }, - "/mlb/editorial-feed": { + "/nbc/author": { "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 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": [ { - "description": "MLB feed or selection slug, such as mlb-news-list or sel-vvc-mlb-stories", + "description": "Canonical NBC News author URL", "in": "query", - "name": "slug", + "name": "url", "required": true, - "type": "string" - }, - { - "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" + "type": "string", + "x-example": "https://www.nbcnews.com/author/daniella-silva-ncpn211" } ], "produces": [ @@ -319429,7 +355694,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.editorialFeedResponseDoc" + "$ref": "#/definitions/nbc.authorResponseDoc" } }, "400": { @@ -319438,6 +355703,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": { @@ -319450,27 +355727,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB.com editorial feed", + "summary": "Get an NBC News author profile", "tags": [ - "MLB" + "NBC News" ] } }, - "/mlb/game": { + "/nbc/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a compact MLB game feed with status, teams, score, innings, probable pitchers, decisions, and team box-score totals.", - "operationId": "mlb-game", + "description": "Returns fresh headlines from one public NBC News RSS section. Use nbc-sections for the current value space.", + "operationId": "nbc-headlines", "parameters": [ { - "description": "Numeric MLB game id", + "description": "NBC News RSS section slug: news, world, us-news, politics, business, science, or health", + "enum": [ + "news", + "world", + "us-news", + "politics", + "business", + "science", + "health" + ], "in": "query", - "name": "id", + "name": "section", "required": true, "type": "string", - "x-example": "822781" + "x-example": "news" } ], "produces": [ @@ -319480,7 +355763,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.gameResponseDoc" + "$ref": "#/definitions/nbc.headlinesResponseDoc" } }, "400": { @@ -319513,25 +355796,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB game feed", + "summary": "Get NBC News section headlines", "tags": [ - "MLB" + "NBC News" ] } }, - "/mlb/game-boxscore": { + "/nbc/news": { "get": { - "description": "Returns both teams' player batting, pitching, and fielding lines for a game.", - "operationId": "mlb-game-boxscore", - "parameters": [ - { - "description": "Numeric MLB game id", - "in": "query", - "name": "id", - "required": true, - "type": "string" - } - ], + "description": "Returns fresh NBC News top stories from the public site-wide RSS feed.", + "operationId": "nbc-news", "produces": [ "application/json" ], @@ -319539,23 +355813,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.boxscoreResponseDoc" + "$ref": "#/definitions/nbc.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 NBC News top stories", + "tags": [ + "NBC News" + ] + } + }, + "/nbc/sections": { + "get": { + "description": "Returns the exact live-verified public RSS section slugs accepted by nbc-headlines.", + "operationId": "nbc-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nbc.sectionsResponseDoc" + } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -319566,23 +355866,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB player boxscore", + "summary": "Get NBC News RSS sections", "tags": [ - "MLB" + "NBC News" ] } }, - "/mlb/game-play-by-play": { + "/ndtv/article": { "get": { - "description": "Returns every at-bat and pitch/event record for an MLB game.", - "operationId": "mlb-game-play-by-play", + "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": "Numeric MLB game id", + "description": "Canonical NDTV article URL", "in": "query", - "name": "id", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.ndtv.com/india-news/indias-power-shortage-tops-summer-levels-as-el-nino-dries-up-hydropower-12091489" } ], "produces": [ @@ -319592,7 +355893,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.playByPlayResponseDoc" + "$ref": "#/definitions/publicnews.ndtvArticleResponseDoc" } }, "400": { @@ -319619,83 +355920,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB game play-by-play", + "summary": "Get NDTV article content", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/league-leaders": { + "/ndtv/author": { "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", + "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": "Comma-separated MLB leader category names; values are listed in mlb-discovery", + "description": "Canonical NDTV author or agency URL", "in": "query", - "name": "categories", + "name": "url", "required": true, - "type": "string" - }, - { - "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" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "description": "MLB league id", - "enum": [ - "103", - "104" - ], - "in": "query", - "name": "league_id", - "type": "string" + "type": "string", + "x-example": "https://www.ndtv.com/authors/ritu-singh-6082" }, { - "default": 10, - "description": "Leaders per category (1-100)", + "default": 1, + "description": "1-based authored news story page; request sequentially until articles is empty", "in": "query", "maximum": 100, "minimum": 1, - "name": "limit", + "name": "page", "type": "integer" } ], @@ -319706,7 +355956,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.leagueLeadersResponseDoc" + "$ref": "#/definitions/publicnews.ndtvAuthorResponseDoc" } }, "400": { @@ -319715,6 +355965,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -319727,217 +355983,130 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB league leaders", + "summary": "Get an NDTV author profile", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/league-stats": { + "/ndtv/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns ranked MLB season stat splits across both leagues. The group enum accepts every value returned by mlb_discovery.", - "operationId": "mlb-league-stats", + "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": "Four-digit season; defaults to current year", - "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 - }, - { - "description": "Stat group", + "description": "NDTV section slug from ndtv-sections", "enum": [ - "hitting", - "pitching", - "fielding", - "catching", - "running", - "game", - "team", - "streak" + "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": "group", + "name": "section", "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" + "x-example": "latest" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } }, - { - "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" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Qualified-player pool", - "enum": [ - "QUALIFIED", - "ALL" - ], - "in": "query", - "name": "player_pool", - "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": 10, - "description": "Results to return (1-100)", + "default": 1, + "description": "1-based latest-video page", "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", + "name": "page", "type": "integer" } ], @@ -319948,7 +356117,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statsResponseDoc" + "$ref": "#/definitions/publicnews.ndtvLatestVideosResponseDoc" } }, "400": { @@ -319957,8 +356126,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -319975,27 +356144,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get ranked MLB league statistics", + "summary": "Get NDTV latest videos", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/player": { + "/ndtv/live-blog": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an MLB player's identity, biographical information, position, handedness, active status, and current team.", - "operationId": "mlb-player", + "description": "Returns live-blog metadata and the ordered BlogPosting updates embedded in NDTV's public LiveBlogPosting JSON-LD. Regular article URLs are rejected.", + "operationId": "ndtv-live-blog", "parameters": [ { - "description": "Numeric MLB player id", + "description": "Canonical NDTV live-blog article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "592450" + "x-example": "https://www.ndtv.com/business-news/stock-market-live-updates-12112191" } ], "produces": [ @@ -320005,7 +356171,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.playerResponseDoc" + "$ref": "#/definitions/publicnews.ndtvLiveBlogResponseDoc" } }, "400": { @@ -320020,12 +356186,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -320038,163 +356198,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB player", + "summary": "Get structured updates from an NDTV live blog", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/player-stats": { + "/ndtv/live-blogs": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one player's MLB season statistics. The group enum accepts every value returned by mlb_discovery.", - "operationId": "mlb-player-stats", + "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": "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" - ], - "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", + "default": 1, + "description": "1-based index page", "in": "query", - "name": "opponent_player_id", - "type": "string" + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -320204,7 +356226,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statsResponseDoc" + "$ref": "#/definitions/publicnews.ndtvLiveBlogsResponseDoc" } }, "400": { @@ -320219,12 +356241,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -320237,122 +356253,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB player season statistics", + "summary": "Get NDTV live-blog index", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/prospect-stats": { + "/ndtv/news": { "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", - "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" + "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - { - "default": 1, - "description": "Minimum PA threshold", - "enum": [ - 1, - 5, - 10, - 25, - 50, - 100, - 150, - 200, - 250 - ], - "in": "query", - "name": "min_pa", - "type": "integer" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Position filter", - "enum": [ - "1b", - "2b", - "ss", - "3b", - "c", - "of", - "rhp", - "lhp" - ], - "in": "query", - "name": "position", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get NDTV latest stories", + "tags": [ + "NDTV" + ] + } + }, + "/ndtv/search": { + "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", + "parameters": [ { - "description": "Case-insensitive player-name substring", + "description": "Search terms", "in": "query", - "name": "q", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "climate change" }, { - "default": 100, - "description": "Rows to return (1-100)", + "default": 1, + "description": "1-based result page", "in": "query", "maximum": 100, "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based row offset", - "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" } ], @@ -320363,7 +356327,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.prospectStatsResponseDoc" + "$ref": "#/definitions/publicnews.ndtvSearchResponseDoc" } }, "400": { @@ -320372,6 +356336,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -320384,63 +356354,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB Pipeline prospect statistics and rankings", + "summary": "Search NDTV news stories", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/schedule": { + "/ndtv/sections": { "get": { - "consumes": [ + "description": "Returns every NDTV section slug accepted by the headlines endpoint, with its display name and page URL.", + "operationId": "ndtv-sections", + "produces": [ "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", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "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": "Single date in YYYY-MM-DD format", + "description": "Canonical NDTV video URL", "in": "query", - "name": "date", + "name": "url", + "required": true, "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" - ], - "in": "query", - "name": "game_type", - "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": [ @@ -320450,7 +356407,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.scheduleResponseDoc" + "$ref": "#/definitions/publicnews.ndtvVideoResponseDoc" } }, "400": { @@ -320459,8 +356416,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -320477,23 +356434,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get the MLB schedule and scores", + "summary": "Get NDTV video metadata", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/search": { + "/ndtv/video-categories": { "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": "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": [ + { + "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": "Search text; 3-100 characters", + "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": "q", + "name": "category", "required": true, - "type": "string" + "type": "string", + "x-example": "news" + }, + { + "default": 1, + "description": "1-based category result page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -320503,7 +356514,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.searchResponseDoc" + "$ref": "#/definitions/publicnews.ndtvVideosResponseDoc" } }, "400": { @@ -320512,6 +356523,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -320524,55 +356541,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search MLB players, teams, and content topics", + "summary": "Get videos from an NDTV category", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/standings": { + "/news18/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns American League and National League standings using any supported standings type returned by mlb_discovery.", - "operationId": "mlb-standings", + "description": "Returns public News18 article metadata and body paragraphs from a canonical article URL.", + "operationId": "news18-article", "parameters": [ { - "description": "Four-digit season; defaults to current year", - "in": "query", - "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", + "description": "Canonical News18 article URL", "in": "query", - "name": "date", + "name": "url", + "required": true, "type": "string", - "x-example": "2026-09-27" + "x-example": "https://www.news18.com/india/example-article-slug-10350678.html" } ], "produces": [ @@ -320582,7 +356568,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.standingsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -320591,8 +356577,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -320609,147 +356595,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB standings", + "summary": "Get News18 article content", "tags": [ - "MLB" + "News18" ] } }, - "/mlb/statcast-expected": { + "/news18/author": { "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", + "description": "Returns a News18 author's byline metadata, biography, social links, and recent articles from a canonical author URL.", + "operationId": "news18-author", "parameters": [ { - "default": "batter", - "description": "Leaderboard view", - "enum": [ - "batter", - "pitcher", - "batter-team", - "pitcher-team" - ], - "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" - }, - { - "description": "Batter position; only supported for type=batter", - "enum": [ - "C", - "1B", - "2B", - "SS", - "3B", - "LF", - "CF", - "RF", - "DH" - ], - "in": "query", - "name": "position", - "type": "string" - }, - { - "default": "bip", - "description": "Minimum qualifier type", - "enum": [ - "bip", - "pa" - ], - "in": "query", - "name": "filter_type", - "type": "string" - }, - { - "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" - }, - { - "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" - }, - { - "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", + "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": [ @@ -320759,7 +356622,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastBoardResponseDoc" + "$ref": "#/definitions/publicnews.news18AuthorResponseDoc" } }, "400": { @@ -320768,6 +356631,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -320780,132 +356649,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Expected Statistics", + "summary": "Get a News18 author profile", "tags": [ - "MLB" + "News18" ] } }, - "/mlb/statcast-leaders": { + "/news18/headlines": { "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", + "description": "Returns fresh headlines from one public News18 RSS section.", + "operationId": "news18-headlines", "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": "News18 RSS section slug", "enum": [ - "asc", - "desc" + "india", + "world", + "cricket", + "business", + "sports", + "movies", + "lifestyle", + "tech", + "auto", + "opinion", + "elections", + "politics", + "viral", + "explainers", + "education-career", + "astrology", + "cities", + "breaking-news" ], "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": "section", + "required": true, + "type": "string", + "x-example": "india" } ], "produces": [ @@ -320915,7 +356696,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -320936,167 +356717,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Statcast leaderboard data", + "summary": "Get News18 section headlines", "tags": [ - "MLB" + "News18" ] } }, - "/mlb/statcast-oaa": { + "/news18/news": { "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", - "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", - "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" - } - ], + "description": "Returns fresh News18 top stories from its public RSS feed.", + "operationId": "news18-news", "produces": [ "application/json" ], @@ -321104,11 +356734,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastBoardResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -321125,52 +356755,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Outs Above Average", + "summary": "Get News18 top stories", "tags": [ - "MLB" + "News18" ] } }, - "/mlb/team-roster": { + "/news18/sections": { "get": { - "consumes": [ + "description": "Returns the public News18 RSS section inventory used by the headlines endpoint.", + "operationId": "news18-sections", + "produces": [ "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", + "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" - }, - { - "description": "Four-digit season; defaults to current year", - "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 - }, - { - "default": "active", - "description": "Roster type", - "enum": [ - "40Man", - "fullSeason", - "fullRoster", - "nonRosterInvitees", - "active", - "allTime", - "depthChart", - "gameday", - "coach" - ], - "in": "query", - "name": "roster_type", - "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" } ], "produces": [ @@ -321180,7 +356808,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.rosterResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -321195,12 +356823,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -321213,157 +356835,217 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB team roster", + "summary": "Get News24 article content", "tags": [ - "MLB" + "News24" ] } }, - "/mlb/team-stats": { + "/news24/headlines": { "get": { - "description": "Returns one team's season statistics. Group accepts every value returned by mlb_discovery.", - "operationId": "mlb-team-stats", + "description": "Returns fresh News24 headlines from one public section page. Cards that News24 marks subscriber-only carry type \"subscriber\".", + "operationId": "news24-headlines", "parameters": [ { - "description": "Numeric MLB team id", - "in": "query", - "name": "team_id", - "required": true, - "type": "string" - }, - { - "description": "Four-digit season", - "in": "query", - "name": "season", - "type": "integer" - }, - { - "description": "Statistics group", + "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" - }, - { - "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" + "type": "string", + "x-example": "business" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } }, - { - "description": "MLB game type", - "enum": [ - "S", - "R", - "F", - "D", - "L", - "W", - "C", - "P", - "A", - "I", - "E" - ], - "in": "query", - "name": "game_type", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Start date for byDateRange stat types; requires end_date", - "in": "query", - "name": "start_date", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get News24 section headlines", + "tags": [ + "News24" + ] + } + }, + "/news24/news": { + "get": { + "description": "Returns fresh News24 top stories from the public homepage. Cards that News24 marks subscriber-only carry type \"subscriber\".", + "operationId": "news24-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - { - "description": "End date for byDateRange stat types; requires start_date", - "in": "query", - "name": "end_date", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Required by vsTeam stat types", - "in": "query", - "name": "opponent_team_id", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get News24 top stories", + "tags": [ + "News24" + ] + } + }, + "/news24/sections": { + "get": { + "description": "Returns the public News24 section navigation accepted by the headlines endpoint.", + "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 vsPlayer stat types", + "ApiKeyAuth": [] + } + ], + "summary": "Get News24 sections", + "tags": [ + "News24" + ] + } + }, + "/newscomau/article": { + "get": { + "description": "Returns public News.com.au article metadata and body paragraphs from a canonical article URL.", + "operationId": "newscomau-article", + "parameters": [ + { + "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": [ @@ -321373,7 +357055,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -321382,6 +357064,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -321394,26 +357082,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": "Returns the 30 MLB clubs for a season with league, division, venue, and abbreviation metadata.", - "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": [ @@ -321423,7 +357109,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.teamsResponseDoc" + "$ref": "#/definitions/publicnews.newscomauAuthorResponseDoc" } }, "400": { @@ -321432,8 +357118,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -321450,42 +357136,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 signings, trades, options, assignments, injured-list moves, and other MLB transactions for a date range.", - "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" - }, - { - "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" - }, - { - "description": "Numeric MLB team id", - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "description": "Numeric MLB player id", - "in": "query", - "name": "player_id", - "type": "string" + "type": "string", + "x-example": "national" } ], "produces": [ @@ -321495,7 +357163,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.transactionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -321516,16 +357184,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 from its anonymous Arc RSS feed, including title, canonical URL, brief summary, author, publication time, and image where available. Article pages are currently blocked by DataDome; category endpoints are deferred because the full accepted section set could not be verified.", - "operationId": "mlive-news", + "description": "Returns fresh News.com.au stories from the public homepage.", + "operationId": "newscomau-news", "produces": [ "application/json" ], @@ -321554,19 +357222,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" ], @@ -321574,13 +357239,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/modaoperandi.categoriesDoc" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -321589,31 +357248,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": "Returns the live designer facet for one department. Every returned slug is valid for modaoperandi-search.", - "operationId": "modaoperandi-designers", + "description": "Returns public Newsmax article metadata and body paragraphs from a canonical article URL.", + "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": [ @@ -321623,7 +357275,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/modaoperandi.designersDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -321632,6 +357284,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -321644,26 +357302,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 public product detail, price, availability, size inventory, description, designer, color, and images for a Moda Operandi product URL.", - "operationId": "modaoperandi-product", + "description": "Returns a Newsmax Insiders (opinion columnist) author's byline metadata, biography, and recent columns from a canonical author URL.", + "operationId": "newsmax-author", "parameters": [ { - "description": "Moda Operandi product URL", + "description": "Canonical Newsmax Insiders author URL", "in": "query", "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.newsmax.com/insiders/janedoe/id-1234/" } ], "produces": [ @@ -321673,7 +357329,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/modaoperandi.productDoc" + "$ref": "#/definitions/publicnews.newsmaxAuthorResponseDoc" } }, "400": { @@ -321700,125 +357356,46 @@ "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 Moda Operandi's public catalog with category, designer, color, size, availability, price, sale, sort, and page filters.", - "operationId": "modaoperandi-search", + "description": "Returns fresh headlines from one public Newsmax RSS section.", + "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" - }, - { - "description": "Free-text search", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Category slug from modaoperandi-categories", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Designer slug from modaoperandi-designers", - "in": "query", - "name": "designer", - "type": "string" - }, - { - "description": "Color facet value", - "in": "query", - "name": "color", - "type": "string" - }, - { - "description": "Size facet value", - "in": "query", - "name": "size", - "type": "string" - }, - { - "description": "Attribute facet value", - "in": "query", - "name": "attribute", - "type": "string" - }, - { - "description": "Availability", - "enum": [ - "available_now", - "preorder", - "trunkshow" - ], - "in": "query", - "name": "availability", - "type": "string" - }, - { - "description": "Minimum price", - "in": "query", - "name": "price_min", - "type": "number" - }, - { - "description": "Maximum price", - "in": "query", - "name": "price_max", - "type": "number" - }, - { - "description": "Sale items only", - "in": "query", - "name": "on_sale", - "type": "boolean" - }, - { - "description": "Sort", - "enum": [ - "default", - "price_low_to_high", - "price_high_to_low", - "newest" - ], - "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", - "in": "query", - "maximum": 180, - "minimum": 1, - "name": "limit", - "type": "integer" + "x-example": "newsfront" } ], "produces": [ @@ -321828,7 +357405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/modaoperandi.searchDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -321849,30 +357426,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Moda Operandi products", + "summary": "Get Newsmax section headlines", "tags": [ - "Moda Operandi" + "Newsmax" ] } }, - "/moncler/categories": { + "/newsmax/news": { "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", - "parameters": [ - { - "default": 2, - "description": "How many levels of the category tree to return", - "in": "query", - "maximum": 3, - "minimum": 1, - "name": "levels", - "type": "integer" - } - ], + "description": "Returns fresh Newsmax top stories from its public RSS feed.", + "operationId": "newsmax-news", "produces": [ "application/json" ], @@ -321880,13 +357443,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.categoriesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -321907,66 +357464,50 @@ "ApiKeyAuth": [] } ], - "summary": "List Moncler categories", + "summary": "Get Newsmax top stories", "tags": [ - "Moncler" + "Newsmax" ] } }, - "/moncler/category": { + "/newsmax/sections": { "get": { - "consumes": [ + "description": "Returns the public Newsmax RSS section inventory used by the headlines endpoint.", + "operationId": "newsmax-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 normalized 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 Newsmax RSS sections", + "tags": [ + "Newsmax" + ] + } + }, + "/newsweek/article": { + "get": { + "description": "Returns public Newsweek article metadata and body paragraphs from a canonical article URL.", + "operationId": "newsweek-article", "parameters": [ { - "description": "Category id, from moncler-categories", + "description": "Canonical Newsweek article URL", "in": "query", - "name": "category_id", + "name": "url", "required": true, "type": "string", - "x-example": "men-outerwear-all-down-jackets" - }, - { - "description": "Sort order", - "enum": [ - "price-high-to-low", - "price-low-to-high" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "price-low-to-high" - }, - { - "collectionFormat": "csv", - "description": "Repeatable, up to 10. Each value is \\", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "c_refinementColor:Black" - }, - { - "default": 24, - "description": "Max results to return", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Result offset for pagination", - "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer" + "x-example": "https://www.newsweek.com/example-article-1234567" } ], "produces": [ @@ -321976,7 +357517,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.categoryResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -321991,12 +357532,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -322009,27 +357544,37 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Moncler category", + "summary": "Get Newsweek article content", "tags": [ - "Moncler" + "Newsweek" ] } }, - "/moncler/product": { + "/newsweek/author": { "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 one Newsweek author's public profile: name, job title, bio, email, and one page of their recent articles.", + "operationId": "newsweek-author", "parameters": [ { - "description": "Product or master id", + "description": "Author slug, e.g. jennifer-fink", "in": "query", - "name": "product_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "L20911A53600689509990" + "x-example": "jennifer-fink" + }, + { + "description": "Canonical newsweek.com/authors/ URL, optionally with a ?page= query; alternative to slug", + "in": "query", + "name": "url", + "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" } ], "produces": [ @@ -322039,7 +357584,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.productResponseDoc" + "$ref": "#/definitions/publicnews.newsweekAuthorResponseDoc" } }, "400": { @@ -322054,12 +357599,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -322072,66 +357611,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Moncler product's detail", + "summary": "Get a Newsweek author profile", "tags": [ - "Moncler" + "Newsweek" ] } }, - "/moncler/search": { + "/newsweek/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Moncler's product catalog by keyword. Returns normalized 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 fresh Newsweek section headlines from the public category page.", + "operationId": "newsweek-headlines", "parameters": [ { - "description": "Search keyword", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "down jacket" - }, - { - "description": "Sort order", + "description": "Newsweek section slug", "enum": [ - "price-high-to-low", - "price-low-to-high" + "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", - "name": "sort", + "name": "section", + "required": true, "type": "string", - "x-example": "price-low-to-high" - }, - { - "collectionFormat": "csv", - "description": "Repeatable, up to 10. Each value is \\", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "c_refinementColor:Black" - }, - { - "default": 24, - "description": "Max results to return", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Result offset for pagination", - "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer" + "x-example": "news" } ], "produces": [ @@ -322141,7 +357661,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.searchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -322150,12 +357670,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -322168,19 +357682,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Moncler products", + "summary": "Get Newsweek section headlines", "tags": [ - "Moncler" + "Newsweek" ] } }, - "/moncler/stores": { + "/newsweek/news": { "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 fresh Newsweek top stories from its public RSS feed.", + "operationId": "newsweek-news", "produces": [ "application/json" ], @@ -322188,13 +357699,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.storesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -322215,29 +357720,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Moncler boutiques", + "summary": "Get Newsweek top stories", "tags": [ - "Moncler" + "Newsweek" ] } }, - "/moncler/suggest": { + "/newsweek/sections": { "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", - "parameters": [ - { - "description": "Partial search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "jack" - } - ], + "description": "Returns the public Newsweek editorial section inventory used by the headlines endpoint.", + "operationId": "newsweek-sections", "produces": [ "application/json" ], @@ -322245,25 +357737,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -322272,24 +357746,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Moncler search-box suggestions", + "summary": "Get Newsweek sections", "tags": [ - "Moncler" + "Newsweek" ] } }, - "/moneycontrol/article": { + "/newyorker/article": { "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", + "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": "Canonical Moneycontrol article URL", + "description": "Canonical The New Yorker article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.moneycontrol.com/news/business/markets/example-article-slug-14037252.html" + "x-example": "https://www.newyorker.com/news/the-lede/example-article-slug" } ], "produces": [ @@ -322299,7 +357773,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/publicnews.newyorkerArticleResponseDoc" } }, "400": { @@ -322308,14 +357782,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" } @@ -322332,24 +357806,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Moneycontrol article content", + "summary": "Get The New Yorker article content", "tags": [ - "Moneycontrol" + "The New Yorker" ] } }, - "/moneycontrol/author": { + "/newyorker/author": { "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", + "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 Moneycontrol author URL", + "description": "Canonical The New Yorker contributor URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.moneycontrol.com/author/jane-doe-12345/" + "x-example": "https://www.newyorker.com/contributors/casey-cep" } ], "produces": [ @@ -322359,7 +357833,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.moneycontrolAuthorResponseDoc" + "$ref": "#/definitions/publicnews.newyorkerAuthorResponseDoc" } }, "400": { @@ -322374,6 +357848,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -322386,77 +357866,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Moneycontrol author profile", + "summary": "Get a The New Yorker contributor profile", "tags": [ - "Moneycontrol" + "The New Yorker" ] } }, - "/moneycontrol/headlines": { + "/newyorker/headlines": { "get": { - "description": "Returns the current headlines of one Moneycontrol news section (25 to 50 stories, without publication times).", - "operationId": "moneycontrol-headlines", + "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": "Moneycontrol section slug", + "description": "The New Yorker section slug", "enum": [ + "everything", + "news", + "culture", + "humor", + "magazine", "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" + "tech", + "daily-comment", + "news-desk", + "cultural-comment", + "photo-booth", + "page-turner", + "borowitz-report" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "everything" } ], "produces": [ @@ -322475,6 +357917,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -322487,16 +357935,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Moneycontrol section headlines", + "summary": "Get The New Yorker section headlines", "tags": [ - "Moneycontrol" + "The New Yorker" ] } }, - "/moneycontrol/news": { + "/newyorker/news": { "get": { - "description": "Returns the 50 newest Moneycontrol stories across all sections, newest first, with publication time and image.", - "operationId": "moneycontrol-news", + "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" ], @@ -322525,16 +357973,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Moneycontrol latest news", + "summary": "Get The New Yorker top stories", "tags": [ - "Moneycontrol" + "The New Yorker" ] } }, - "/moneycontrol/sections": { + "/newyorker/sections": { "get": { - "description": "Returns the Moneycontrol news sections accepted by the headlines endpoint.", - "operationId": "moneycontrol-sections", + "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" ], @@ -322544,44 +357992,15 @@ "schema": { "$ref": "#/definitions/publicnews.sectionsResponseDoc" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Moneycontrol sections", - "tags": [ - "Moneycontrol" - ] - } - }, - "/monitors": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the caller's own monitors (most recently created first, capped at 100). Free to call.", - "operationId": "monitors-list", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Monitors", - "schema": { - "$ref": "#/definitions/webmonitor.monitorListResponseDoc" - } }, - "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" } @@ -322592,52 +358011,37 @@ "ApiKeyAuth": [] } ], - "summary": "List website-change monitors", + "summary": "List The New Yorker sections", "tags": [ - "Monitors" + "The New Yorker" ] - }, - "post": { + } + }, + "/nike/categories": { + "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 scraped 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": "Monitor definition", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/webmonitor.createMonitorBodyDoc" - } - } - ], + "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" ], "responses": { "200": { - "description": "Created monitor", - "schema": { - "$ref": "#/definitions/webmonitor.monitorResponseDoc" - } - }, - "400": { - "description": "Invalid parameters", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/nike.categoriesResponseDoc" } }, - "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" } @@ -322648,26 +358052,35 @@ "ApiKeyAuth": [] } ], - "summary": "Create a website-change monitor", + "summary": "List Nike's category and subcategory taxonomy", "tags": [ - "Monitors" + "Nike" ] } }, - "/monitors/{id}": { - "delete": { + "/nike/product": { + "get": { "consumes": [ "application/json" ], - "description": "Deletes one of the caller's own monitors. Free to call. Does not delete its past check history.", - "operationId": "monitors-delete", + "description": "Returns normalized 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": "Monitor id", - "in": "path", - "name": "id", + "description": "Product-detail URL slug, from a search result's colors[].slug field", + "in": "query", + "name": "slug", "required": true, - "type": "string" + "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" } ], "produces": [ @@ -322675,79 +358088,31 @@ ], "responses": { "200": { - "description": "Deleted", + "description": "OK", "schema": { - "$ref": "#/definitions/webmonitor.monitorDeleteResponseDoc" + "$ref": "#/definitions/nike.productResponseDoc" } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "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" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Delete a website-change monitor", - "tags": [ - "Monitors" - ] - }, - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one of the caller's own monitors by id. Free to call.", - "operationId": "monitors-get", - "parameters": [ - { - "description": "Monitor id", - "in": "path", - "name": "id", - "required": true, - "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Monitor", - "schema": { - "$ref": "#/definitions/webmonitor.monitorResponseDoc" - } - }, - "401": { - "description": "Authentication required", + "description": "Not Found", "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" } @@ -322758,33 +358123,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a website-change monitor", + "summary": "Get a Nike product", "tags": [ - "Monitors" + "Nike" ] - }, - "patch": { + } + }, + "/nike/product/availability": { + "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 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": "Monitor id", - "in": "path", - "name": "id", - "required": true, - "type": "string" - }, - { - "description": "Fields to update", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/webmonitor.updateMonitorBodyDoc" - } + "description": "Product rollup key, from a search result's products[].group_key field", + "in": "query", + "name": "group_key", + "required": true, + "type": "string", + "x-example": "5npsVBwT" } ], "produces": [ @@ -322792,31 +358151,31 @@ ], "responses": { "200": { - "description": "Updated monitor", + "description": "OK", "schema": { - "$ref": "#/definitions/webmonitor.monitorResponseDoc" + "$ref": "#/definitions/nike.availabilityResponseDoc" } }, "400": { - "description": "Invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "404": { + "description": "Not Found", "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" } @@ -322827,26 +358186,27 @@ "ApiKeyAuth": [] } ], - "summary": "Update a website-change monitor", + "summary": "Get Nike product size availability", "tags": [ - "Monitors" + "Nike" ] } }, - "/monitors/{id}/checks": { + "/nike/product/details": { "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 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": "Monitor id", - "in": "path", - "name": "id", + "description": "Product rollup key, from a search result's products[].group_key field", + "in": "query", + "name": "group_key", "required": true, - "type": "string" + "type": "string", + "x-example": "5npsVBwT" } ], "produces": [ @@ -322854,25 +358214,31 @@ ], "responses": { "200": { - "description": "Check history", + "description": "OK", "schema": { - "$ref": "#/definitions/webmonitor.checkListResponseDoc" + "$ref": "#/definitions/nike.productDetailsResponseDoc" } }, - "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" } @@ -322883,24 +358249,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a monitor's check history", + "summary": "Get full Nike product details", "tags": [ - "Monitors" + "Nike" ] } }, - "/motleyfool/article": { + "/nike/product/recommendations": { "get": { - "description": "Returns public metadata and body paragraphs from a canonical Fool investing article URL.", - "operationId": "motleyfool-article", + "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": "Canonical The Motley Fool investing article URL", + "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.fool.com/investing/2026/09/28/example-story/" + "x-example": "HQ2050-102" } ], "produces": [ @@ -322910,7 +358279,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/nike.recommendationsResponseDoc" } }, "400": { @@ -322919,8 +358288,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -322937,24 +358306,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Motley Fool article", + "summary": "Get Nike product recommendations", "tags": [ - "The Motley Fool" + "Nike" ] } }, - "/motleyfool/author": { + "/nike/product/reviews": { "get": { - "description": "Returns a public Fool author's name, biography, image, and recent articles from a canonical author URL.", - "operationId": "motleyfool-author", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a Nike product's normalized 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": "Canonical The Motley Fool author URL", + "description": "Product-detail URL slug, from a search result's colors[].slug field", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.fool.com/author/2104/" + "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": [ @@ -322964,7 +358351,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.motleyfoolAuthorResponseDoc" + "$ref": "#/definitions/nike.productReviewsResponseDoc" } }, "400": { @@ -322979,6 +358366,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -322991,35 +358384,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Motley Fool author profile", + "summary": "Get Nike product reviews", "tags": [ - "The Motley Fool" + "Nike" ] } }, - "/motleyfool/headlines": { + "/nike/search": { "get": { - "description": "Returns article headlines from one live-verified public Fool investing-news section.", - "operationId": "motleyfool-headlines", + "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 normalized 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": "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" - ], + "description": "Search keyword. Exactly one of keyword or category is required.", "in": "query", - "name": "section", - "required": true, - "type": "string" + "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.", + "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": [ @@ -323029,7 +358427,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/nike.searchResponseDoc" } }, "400": { @@ -323038,6 +358436,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": { @@ -323050,16 +358460,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Motley Fool section headlines", + "summary": "Search or browse Nike products", "tags": [ - "The Motley Fool" + "Nike" ] } }, - "/motleyfool/news": { + "/nike/stores": { "get": { - "description": "Returns recent public investing stories from The Motley Fool's news sitemap.", - "operationId": "motleyfool-news", + "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": "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": "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": [ "application/json" ], @@ -323067,7 +358512,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/nike.storesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -323088,16 +358545,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Motley Fool top investing stories", + "summary": "Find nearby Nike stores", "tags": [ - "The Motley Fool" + "Nike" ] } }, - "/motleyfool/sections": { + "/nike/suggest": { "get": { - "description": "Returns the complete article-bearing Stock Market News section set accepted by motleyfool_headlines.", - "operationId": "motleyfool-sections", + "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": "Partial search query", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "running shoes" + } + ], "produces": [ "application/json" ], @@ -323105,7 +358575,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/nike.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" } } }, @@ -323114,24 +358602,24 @@ "ApiKeyAuth": [] } ], - "summary": "List The Motley Fool news sections", + "summary": "Get Nike search-box suggestions", "tags": [ - "The Motley Fool" + "Nike" ] } }, - "/nationafrica/article": { + "/ninetofivegoogle/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", + "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 Nation Africa article URL", + "description": "Canonical 9to5Google 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" + "x-example": "https://9to5google.com/2026/09/29/pixel-11-hilight-messages-qpr2/" } ], "produces": [ @@ -323168,30 +358656,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nation Africa article content", + "summary": "Get a 9to5Google article", "tags": [ - "Nation Africa" + "9to5Google" ] } }, - "/nationafrica/author": { + "/ninetofivegoogle/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", + "description": "Returns a 9to5Google author's name, avatar, biography, social links, and recent articles from a canonical author URL.", + "operationId": "ninetofivegoogle-author", "parameters": [ { - "description": "Author slug, e.g. richard-munguti-11590", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "richard-munguti-11590" - }, - { - "description": "Canonical nation.africa/kenya/ URL; alternative to slug", + "description": "Canonical 9to5Google author URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://nation.africa/kenya/richard-munguti-11590" + "x-example": "https://9to5google.com/author/technacity/" } ], "produces": [ @@ -323201,7 +358683,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nationAfricaAuthorResponseDoc" + "$ref": "#/definitions/publicnews.ninetofivegoogleAuthorResponseDoc" } }, "400": { @@ -323228,72 +358710,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Nation Africa author profile", + "summary": "Get a 9to5Google author profile", "tags": [ - "Nation Africa" + "9to5Google" ] } }, - "/nationafrica/headlines": { + "/ninetofivegoogle/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", + "description": "Returns current headlines from one public guide or editorial archive RSS feed.", + "operationId": "ninetofivegoogle-headlines", "parameters": [ { - "description": "Nation Africa section slug", + "description": "Slug returned by ninetofivegoogle_sections", "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" + "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" + "type": "string", + "x-example": "gemini" } ], "produces": [ @@ -323324,16 +358823,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nation Africa section headlines", + "summary": "Get 9to5Google section headlines", "tags": [ - "Nation Africa" + "9to5Google" ] } }, - "/nationafrica/news": { + "/ninetofivegoogle/news": { "get": { - "description": "Returns the newest Nation Africa (Daily Nation, Kenya) stories from the site's public news sitemap: headline, publication time and lead image. Video pages are excluded.", - "operationId": "nationafrica-news", + "description": "Returns recent 9to5Google story metadata and short summaries from its public RSS feed.", + "operationId": "ninetofivegoogle-news", "produces": [ "application/json" ], @@ -323344,6 +358843,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -323356,16 +358861,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nation Africa top stories", + "summary": "Get 9to5Google top stories", "tags": [ - "Nation Africa" + "9to5Google" ] } }, - "/nationafrica/sections": { + "/ninetofivegoogle/sections": { "get": { - "description": "Returns the public Nation Africa (Kenya edition) editorial section inventory.", - "operationId": "nationafrica-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" ], @@ -323382,24 +358887,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nation Africa sections", + "summary": "Discover 9to5Google sections", "tags": [ - "Nation Africa" + "9to5Google" ] } }, - "/nationalpost/article": { + "/ninetofivemac/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": "Returns public 9to5Mac article metadata and body paragraphs from a canonical article URL.", + "operationId": "ninetofivemac-article", "parameters": [ { - "description": "Canonical National Post article URL", + "description": "Canonical 9to5Mac article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://nationalpost.com/news/politics/carney-will-miss-target-balancing-operating-budget-pbo-says" + "x-example": "https://9to5mac.com/2026/09/24/heres-everything-new-for-apple-maps-in-ios-27/" } ], "produces": [ @@ -323436,30 +358941,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get National Post article content", + "summary": "Get 9to5Mac article content", "tags": [ - "National Post" + "9to5Mac" ] } }, - "/nationalpost/author": { + "/ninetofivemac/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", + "description": "Returns a 9to5Mac author's name, avatar, biography, social links, and recent articles from a canonical author URL.", + "operationId": "ninetofivemac-author", "parameters": [ { - "description": "Author slug, e.g. stuckpostmedia-com", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "stuckpostmedia-com" - }, - { - "description": "Canonical nationalpost.com/author// URL; alternative to slug", + "description": "Canonical 9to5Mac author URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://nationalpost.com/author/stuckpostmedia-com/" + "x-example": "https://9to5mac.com/author/chmiller44/" } ], "produces": [ @@ -323469,7 +358968,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nationalPostAuthorResponseDoc" + "$ref": "#/definitions/publicnews.ninetofivemacAuthorResponseDoc" } }, "400": { @@ -323496,70 +358995,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get a National Post author profile", + "summary": "Get a 9to5Mac author profile", "tags": [ - "National Post" + "9to5Mac" ] } }, - "/nationalpost/headlines": { + "/ninetofivemac/headlines": { "get": { - "description": "Returns fresh headlines from one public National Post section.", - "operationId": "nationalpost-headlines", + "description": "Returns fresh headlines from one public 9to5Mac topic guide RSS feed.", + "operationId": "ninetofivemac-headlines", "parameters": [ { - "description": "National Post section slug", + "description": "9to5Mac guide 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" + "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" + "type": "string", + "x-example": "iphone" } ], "produces": [ @@ -323590,16 +359080,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get National Post section headlines", + "summary": "Get 9to5Mac section headlines", "tags": [ - "National Post" + "9to5Mac" ] } }, - "/nationalpost/news": { + "/ninetofivemac/news": { "get": { - "description": "Returns fresh National Post stories from the public site-wide RSS feed.", - "operationId": "nationalpost-news", + "description": "Returns fresh 9to5Mac (9to5mac.com) Apple news top stories from its public RSS feed.", + "operationId": "ninetofivemac-news", "produces": [ "application/json" ], @@ -323610,6 +359100,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -323622,16 +359118,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get National Post top stories", + "summary": "Get 9to5Mac top stories", "tags": [ - "National Post" + "9to5Mac" ] } }, - "/nationalpost/sections": { + "/ninetofivemac/sections": { "get": { - "description": "Returns the public National Post editorial section inventory (the site's own primary navigation).", - "operationId": "nationalpost-sections", + "description": "Returns the public 9to5Mac topic guides (each with its own RSS feed) accepted by the headlines endpoint.", + "operationId": "ninetofivemac-sections", "produces": [ "application/json" ], @@ -323648,26 +359144,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get National Post sections", + "summary": "Get 9to5Mac sections", "tags": [ - "National Post" + "9to5Mac" ] } }, - "/nbc/article": { + "/njcom/news": { "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", - "parameters": [ - { - "description": "Canonical www.nbcnews.com article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.nbcnews.com/news/us-news/ice-shooting-austin-texas-rcna598870" - } - ], + "description": "Returns current NJ.com top stories from its anonymous Arc RSS feed, including title, canonical URL, short feed summary, author, publication time, and image where available. Category discovery and section headlines are deferred because the complete accepted feed taxonomy could not be verified; article and author routes remain unverified behind the site's DataDome challenge.", + "operationId": "njcom-news", "produces": [ "application/json" ], @@ -323675,19 +359161,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -323708,24 +359182,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get NBC News article content", + "summary": "Get NJ.com top stories", "tags": [ - "NBC News" + "NJ.com" ] } }, - "/nbc/author": { + "/npr/article": { "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 public NPR article's metadata and body paragraphs from a canonical article URL.", + "operationId": "npr-article", "parameters": [ { - "description": "Canonical NBC News author URL", + "description": "Canonical www.npr.org article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.nbcnews.com/author/daniella-silva-ncpn211" + "x-example": "https://www.npr.org/2026/09/19/nx-s1-5974980/saudi-arabia-houthis-attempted-attack-capital" } ], "produces": [ @@ -323735,7 +359209,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.authorResponseDoc" + "$ref": "#/definitions/npr.articleResponseDoc" } }, "400": { @@ -323768,32 +359242,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get an NBC News author profile", + "summary": "Get NPR article content", "tags": [ - "NBC News" + "NPR" ] } }, - "/nbc/headlines": { + "/npr/author": { "get": { - "description": "Returns fresh headlines from one public NBC News RSS section. Use nbc-sections for the current value space.", - "operationId": "nbc-headlines", + "description": "Returns an NPR author's byline metadata, biography, and recent articles from a canonical author URL.", + "operationId": "npr-author", "parameters": [ { - "description": "NBC News RSS section slug: news, world, us-news, politics, business, science, or health", - "enum": [ - "news", - "world", - "us-news", - "politics", - "business", - "science", - "health" - ], + "description": "Canonical www.npr.org author URL", "in": "query", - "name": "section", + "name": "url", "required": true, - "type": "string" + "type": "string", + "x-example": "https://www.npr.org/people/14562108/bill-chappell" } ], "produces": [ @@ -323803,7 +359269,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.headlinesResponseDoc" + "$ref": "#/definitions/npr.authorResponseDoc" } }, "400": { @@ -323836,16 +359302,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get NBC News section headlines", + "summary": "Get an NPR author profile", "tags": [ - "NBC News" + "NPR" ] } }, - "/nbc/news": { + "/npr/categories": { "get": { - "description": "Returns fresh NBC News top stories from the public site-wide RSS feed.", - "operationId": "nbc-news", + "description": "Returns NPR's current public section navigation. Use a returned slug directly as the topic parameter on npr-topic.", + "operationId": "npr-categories", "produces": [ "application/json" ], @@ -323853,7 +359319,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.newsResponseDoc" + "$ref": "#/definitions/npr.categoriesResponseDoc" } }, "429": { @@ -323874,16 +359340,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get NBC News top stories", + "summary": "Get NPR section navigation", "tags": [ - "NBC News" + "NPR" ] } }, - "/nbc/sections": { + "/npr/headlines": { "get": { - "description": "Returns the exact live-verified public RSS section slugs accepted by nbc-headlines.", - "operationId": "nbc-sections", + "description": "Returns fresh headlines from NPR's public, site-wide RSS feed.", + "operationId": "npr-headlines", "produces": [ "application/json" ], @@ -323891,7 +359357,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.sectionsResponseDoc" + "$ref": "#/definitions/npr.headlinesResponseDoc" } }, "429": { @@ -323899,6 +359365,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -323906,24 +359378,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get NBC News RSS sections", + "summary": "Get NPR site-wide headlines", "tags": [ - "NBC News" + "NPR" ] } }, - "/ndtv/article": { + "/npr/topic": { "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 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 NDTV article URL", + "description": "NPR section slug", "in": "query", - "name": "url", + "name": "topic", "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": "politics" } ], "produces": [ @@ -323933,7 +359405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvArticleResponseDoc" + "$ref": "#/definitions/npr.topicResponseDoc" } }, "400": { @@ -323948,6 +359420,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -323960,24 +359438,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV article content", + "summary": "Get NPR section headlines", "tags": [ - "NDTV" + "NPR" ] } }, - "/ndtv/author": { + "/numbeo/cost-of-living/city/{slug}": { "get": { - "description": "Returns an NDTV author's or news agency's byline profile (name, role, biography, image) and their most recent stories from a canonical author URL.", - "operationId": "ndtv-author", + "consumes": [ + "application/json" + ], + "description": "Returns itemized cost-of-living prices for one city (restaurants, markets, transportation, utilities, rent, and more), grouped by category. Credential-free public Numbeo data (numbeo.com).", + "operationId": "numbeo-cost-of-living-city", "parameters": [ { - "description": "Canonical NDTV author or agency URL", - "in": "query", - "name": "url", + "description": "Numbeo city slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.ndtv.com/authors/ritu-singh-6082" + "x-example": "Los-Angeles" } ], "produces": [ @@ -323987,7 +359468,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvAuthorResponseDoc" + "$ref": "#/definitions/numbeo.costOfLivingCityResponseDoc" } }, "400": { @@ -324002,6 +359483,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -324014,81 +359501,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an NDTV author profile", + "summary": "Get a Numbeo city's cost-of-living prices", "tags": [ - "NDTV" + "Numbeo" ] } }, - "/ndtv/headlines": { + "/numbeo/cost-of-living/country": { "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", + "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. Credential-free public Numbeo data (numbeo.com).", + "operationId": "numbeo-cost-of-living-country", "parameters": [ { - "description": "NDTV section slug from ndtv-sections", - "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" - ], + "description": "Country name as Numbeo spells it", "in": "query", - "name": "section", + "name": "country", "required": true, - "type": "string" + "type": "string", + "x-example": "Vietnam" } ], "produces": [ @@ -324098,7 +359531,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/numbeo.costOfLivingCountryResponseDoc" } }, "400": { @@ -324107,40 +359540,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get NDTV section headlines", - "tags": [ - "NDTV" - ] - } - }, - "/ndtv/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", - "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" } @@ -324157,33 +359564,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV latest stories", + "summary": "Get a Numbeo country's cost-of-living prices", "tags": [ - "NDTV" + "Numbeo" ] } }, - "/ndtv/search": { + "/numbeo/cost-of-living/rankings": { "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", + "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. Credential-free public Numbeo data (numbeo.com).", + "operationId": "numbeo-cost-of-living-rankings", "parameters": [ { - "description": "Search terms", + "description": "current (default) or historical", + "enum": [ + "current", + "historical" + ], "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "climate change" + "name": "scope", + "type": "string" }, { - "default": 1, - "description": "1-based result page", + "description": "Required when scope=historical, e.g. 2026-mid or 2025", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "period", + "type": "string", + "x-example": "2026-mid" } ], "produces": [ @@ -324193,7 +359603,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvSearchResponseDoc" + "$ref": "#/definitions/numbeo.rankingsResponseDoc" } }, "400": { @@ -324202,8 +359612,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -324220,16 +359630,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search NDTV news stories", + "summary": "Get the global Numbeo cost-of-living city ranking", "tags": [ - "NDTV" + "Numbeo" ] } }, - "/ndtv/sections": { + "/numbeo/cost-of-living/rankings-by-country": { "get": { - "description": "Returns every NDTV section slug accepted by the headlines endpoint, with its display name and page URL.", - "operationId": "ndtv-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). Credential-free public Numbeo data (numbeo.com).", + "operationId": "numbeo-cost-of-living-rankings-by-country", "produces": [ "application/json" ], @@ -324237,7 +359650,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" } } }, @@ -324246,24 +359671,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV sections", + "summary": "Get the global Numbeo cost-of-living country ranking", "tags": [ - "NDTV" + "Numbeo" ] } }, - "/news18/article": { + "/numbeo/indices/city/{slug}": { "get": { - "description": "Returns public News18 article metadata and body paragraphs from a canonical article URL.", - "operationId": "news18-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. Credential-free public Numbeo data (numbeo.com).", + "operationId": "numbeo-indices-city", "parameters": [ { - "description": "Canonical News18 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.news18.com/india/example-article-slug-10350678.html" + "x-example": "quality-of-life" } ], "produces": [ @@ -324273,7 +359717,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/numbeo.indicesCityResponseDoc" } }, "400": { @@ -324288,6 +359732,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -324300,24 +359750,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get News18 article content", + "summary": "Get a Numbeo city's data for an index family", "tags": [ - "News18" + "Numbeo" ] } }, - "/news18/author": { + "/numbeo/indices/country": { "get": { - "description": "Returns a News18 author's byline metadata, biography, social links, and recent articles from a canonical author URL.", - "operationId": "news18-author", + "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. Credential-free public Numbeo data (numbeo.com).", + "operationId": "numbeo-indices-country", "parameters": [ { - "description": "Canonical News18 author URL", + "description": "Country name as Numbeo spells it", "in": "query", - "name": "url", + "name": "country", "required": true, "type": "string", - "x-example": "https://www.news18.com/byline/jane-doe-12345.html" + "x-example": "Vietnam" + }, + { + "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": [ @@ -324327,7 +359796,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.news18AuthorResponseDoc" + "$ref": "#/definitions/numbeo.indicesCountryResponseDoc" } }, "400": { @@ -324342,6 +359811,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -324354,43 +359829,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get a News18 author profile", + "summary": "Get a Numbeo country's data for an index family", "tags": [ - "News18" + "Numbeo" ] } }, - "/news18/headlines": { + "/numbeo/indices/rankings": { "get": { - "description": "Returns fresh headlines from one public News18 RSS section.", - "operationId": "news18-headlines", + "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. Credential-free public Numbeo data (numbeo.com).", + "operationId": "numbeo-indices-rankings", "parameters": [ { - "description": "News18 RSS section slug", + "description": "Index family", "enum": [ - "india", - "world", - "cricket", - "business", - "sports", - "movies", - "lifestyle", - "tech", - "auto", - "opinion", - "elections", - "politics", - "viral", - "explainers", - "education-career", - "astrology", - "cities", - "breaking-news" + "quality-of-life", + "crime", + "health-care", + "pollution", + "traffic", + "property-investment" ], "in": "query", - "name": "section", + "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": [ @@ -324400,7 +359884,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/numbeo.indicesRankingsResponseDoc" } }, "400": { @@ -324409,6 +359893,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -324421,16 +359911,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get News18 section headlines", + "summary": "Get the global Numbeo city ranking for an index family", "tags": [ - "News18" + "Numbeo" ] } }, - "/news18/news": { + "/numbeo/indices/rankings-by-country": { "get": { - "description": "Returns fresh News18 top stories from its public RSS feed.", - "operationId": "news18-news", + "consumes": [ + "application/json" + ], + "description": "Returns the global country-level ranking for a Numbeo index family. Credential-free public Numbeo data (numbeo.com).", + "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" ], @@ -324438,11 +359949,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$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" } @@ -324459,16 +359976,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get News18 top stories", + "summary": "Get the global Numbeo country ranking for an index family", "tags": [ - "News18" + "Numbeo" ] } }, - "/news18/sections": { + "/nydailynews/article": { "get": { - "description": "Returns the public News18 RSS section inventory used by the headlines endpoint.", - "operationId": "news18-sections", + "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 New York Daily News article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.nydailynews.com/2026/09/24/city-hall-must-explain-why-they-broke-disclosure-rules/" + } + ], "produces": [ "application/json" ], @@ -324476,7 +360003,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$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" } } }, @@ -324485,24 +360030,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get News18 RSS sections", + "summary": "Get New York Daily News article content", "tags": [ - "News18" + "New York Daily News" ] } }, - "/news24/article": { + "/nydailynews/author": { "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", + "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 News24 article 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.news24.com/world/untangling-the-meth-mexican-cartels-set-up-huge-labs-in-sa-to-service-demand-in-australia-20260924-0692" + "x-example": "https://www.nydailynews.com/author/rocco-parascandola/" } ], "produces": [ @@ -324512,7 +360063,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/publicnews.nyDailyNewsAuthorResponseDoc" } }, "400": { @@ -324539,98 +360090,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get News24 article content", + "summary": "Get a New York Daily News author profile", "tags": [ - "News24" + "New York Daily News" ] } }, - "/news24/headlines": { + "/nydailynews/headlines": { "get": { - "description": "Returns fresh News24 headlines from one public section page. Cards that News24 marks subscriber-only carry type \"subscriber\".", - "operationId": "news24-headlines", + "description": "Returns fresh headlines from one public New York Daily News section page.", + "operationId": "nydailynews-headlines", "parameters": [ { - "description": "News24 section path", + "description": "New York Daily News section slug", "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", + "news", + "crime-public-safety", "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", + "new-york-politics", + "business", + "health", + "national", "world", - "world/africa" + "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" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -324661,16 +360176,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get News24 section headlines", + "summary": "Get New York Daily News section headlines", "tags": [ - "News24" + "New York Daily News" ] } }, - "/news24/news": { + "/nydailynews/news": { "get": { - "description": "Returns fresh News24 top stories from the public homepage. Cards that News24 marks subscriber-only carry type \"subscriber\".", - "operationId": "news24-news", + "description": "Returns the current New York Daily News top stories from the public homepage.", + "operationId": "nydailynews-news", "produces": [ "application/json" ], @@ -324681,12 +360196,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -324699,16 +360208,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get News24 top stories", + "summary": "Get New York Daily News top stories", "tags": [ - "News24" + "New York Daily News" ] } }, - "/news24/sections": { + "/nydailynews/sections": { "get": { - "description": "Returns the public News24 section navigation accepted by the headlines endpoint.", - "operationId": "news24-sections", + "description": "Returns the public New York Daily News editorial section inventory.", + "operationId": "nydailynews-sections", "produces": [ "application/json" ], @@ -324718,12 +360227,6 @@ "schema": { "$ref": "#/definitions/publicnews.sectionsResponseDoc" } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -324731,24 +360234,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get News24 sections", + "summary": "Get New York Daily News sections", "tags": [ - "News24" + "New York Daily News" ] } }, - "/newscomau/article": { + "/nymag/article": { "get": { - "description": "Returns public News.com.au article metadata and body paragraphs from a canonical article URL.", - "operationId": "newscomau-article", + "description": "Returns public New York Magazine article metadata and body paragraphs from a canonical article URL.", + "operationId": "nymag-article", "parameters": [ { - "description": "Canonical News.com.au article URL", + "description": "Canonical New York Magazine 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://nymag.com/intelligencer/example.html" } ], "produces": [ @@ -324785,24 +360288,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get News.com.au article content", + "summary": "Get New York Magazine article content", "tags": [ - "News.com.au" + "New York Magazine" ] } }, - "/newscomau/author": { + "/nymag/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 a New York Magazine author's byline metadata, biography, and recent articles from a canonical author URL.", + "operationId": "nymag-author", "parameters": [ { - "description": "Canonical News.com.au author URL", + "description": "Canonical New York Magazine author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.news.com.au/the-team/example-writer" + "x-example": "https://nymag.com/author/john-herrman/" } ], "produces": [ @@ -324812,7 +360315,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newscomauAuthorResponseDoc" + "$ref": "#/definitions/publicnews.nymagAuthorResponseDoc" } }, "400": { @@ -324839,24 +360342,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a News.com.au author profile", + "summary": "Get a New York Magazine author profile", "tags": [ - "News.com.au" + "New York Magazine" ] } }, - "/newscomau/headlines": { + "/nymag/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 fresh headlines from one public New York Magazine section.", + "operationId": "nymag-headlines", "parameters": [ { - "description": "News.com.au section slug, from GET /newscomau/sections", + "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": "national" + "x-example": "intelligencer" } ], "produces": [ @@ -324887,16 +360401,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get News.com.au section headlines", + "summary": "Get New York Magazine section headlines", "tags": [ - "News.com.au" + "New York Magazine" ] } }, - "/newscomau/news": { + "/nymag/news": { "get": { - "description": "Returns fresh News.com.au stories from the public homepage.", - "operationId": "newscomau-news", + "description": "Returns fresh New York Magazine stories from the public homepage.", + "operationId": "nymag-news", "produces": [ "application/json" ], @@ -324907,12 +360421,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -324925,16 +360433,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get News.com.au top stories", + "summary": "Get New York Magazine top stories", "tags": [ - "News.com.au" + "New York Magazine" ] } }, - "/newscomau/sections": { + "/nymag/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": "Returns the public New York Magazine section inventory.", + "operationId": "nymag-sections", "produces": [ "application/json" ], @@ -324951,24 +360459,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get News.com.au sections", + "summary": "Get New York Magazine sections", "tags": [ - "News.com.au" + "New York Magazine" ] } }, - "/newsmax/article": { + "/nypost/article": { "get": { - "description": "Returns public Newsmax article metadata and body paragraphs from a canonical article URL.", - "operationId": "newsmax-article", + "description": "Returns public New York Post article metadata and body paragraphs from a canonical article URL.", + "operationId": "nypost-article", "parameters": [ { - "description": "Canonical Newsmax article URL", + "description": "Canonical New York Post 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://nypost.com/2026/09/23/us-news/example-article-slug/" } ], "produces": [ @@ -325005,24 +360513,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsmax article content", + "summary": "Get New York Post article content", "tags": [ - "Newsmax" + "New York Post" ] } }, - "/newsmax/author": { + "/nypost/author": { "get": { - "description": "Returns a Newsmax Insiders (opinion columnist) author's byline metadata, biography, and recent columns from a canonical author URL.", - "operationId": "newsmax-author", + "description": "Returns a New York Post author's byline metadata, biography, social links, and recent articles from a canonical author URL.", + "operationId": "nypost-author", "parameters": [ { - "description": "Canonical Newsmax Insiders author URL", + "description": "Canonical New York Post author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.newsmax.com/insiders/janedoe/id-1234/" + "x-example": "https://nypost.com/author/jane-doe/" } ], "produces": [ @@ -325032,7 +360540,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsmaxAuthorResponseDoc" + "$ref": "#/definitions/publicnews.nypostAuthorResponseDoc" } }, "400": { @@ -325059,45 +360567,80 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Newsmax Insiders author profile", + "summary": "Get a New York Post author profile", "tags": [ - "Newsmax" + "New York Post" ] } }, - "/newsmax/headlines": { + "/nypost/headlines": { "get": { - "description": "Returns fresh headlines from one public Newsmax RSS section.", - "operationId": "newsmax-headlines", + "description": "Returns fresh headlines from one public New York Post RSS section.", + "operationId": "nypost-headlines", "parameters": [ { - "description": "Newsmax RSS section slug", + "description": "New York Post RSS section slug", "enum": [ - "newsfront", - "us", + "us-news", + "metro", + "long-island", "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" + "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" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "us-news" } ], "produces": [ @@ -325128,16 +360671,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsmax section headlines", + "summary": "Get New York Post section headlines", "tags": [ - "Newsmax" + "New York Post" ] } }, - "/newsmax/news": { + "/nypost/news": { "get": { - "description": "Returns fresh Newsmax top stories from its public RSS feed.", - "operationId": "newsmax-news", + "description": "Returns fresh New York Post top stories from its public RSS feed.", + "operationId": "nypost-news", "produces": [ "application/json" ], @@ -325166,16 +360709,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsmax top stories", + "summary": "Get New York Post top stories", "tags": [ - "Newsmax" + "New York Post" ] } }, - "/newsmax/sections": { + "/nypost/sections": { "get": { - "description": "Returns the public Newsmax RSS section inventory used by the headlines endpoint.", - "operationId": "newsmax-sections", + "description": "Returns the public New York Post RSS section inventory used by the headlines endpoint.", + "operationId": "nypost-sections", "produces": [ "application/json" ], @@ -325192,24 +360735,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsmax RSS sections", + "summary": "Get New York Post RSS sections", "tags": [ - "Newsmax" + "New York Post" ] } }, - "/newsweek/article": { + "/nyt/article": { "get": { - "description": "Returns public Newsweek article metadata and body paragraphs from a canonical article URL.", - "operationId": "newsweek-article", + "description": "Returns one public New York Times article's metadata and body paragraphs from a canonical article URL.", + "operationId": "nyt-article", "parameters": [ { - "description": "Canonical Newsweek article URL", + "description": "Canonical NYT article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.newsweek.com/example-article-1234567" + "x-example": "https://www.nytimes.com/2026/09/20/us/politics/example-story.html" } ], "produces": [ @@ -325219,7 +360762,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/nyt.articleResponseDoc" } }, "400": { @@ -325228,12 +360771,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": { @@ -325246,37 +360801,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsweek article content", + "summary": "Get a New York Times article's content", "tags": [ - "Newsweek" + "New York Times" ] } }, - "/newsweek/author": { + "/nyt/author": { "get": { - "description": "Returns one Newsweek author's public profile: name, job title, bio, email, and one page of their recent articles.", - "operationId": "newsweek-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": "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 NYT 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://www.nytimes.com/by/maggie-haberman" } ], "produces": [ @@ -325286,7 +360828,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsweekAuthorResponseDoc" + "$ref": "#/definitions/nyt.authorResponseDoc" } }, "400": { @@ -325295,12 +360837,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": { @@ -325313,48 +360867,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Newsweek author profile", + "summary": "Get a New York Times contributor profile", "tags": [ - "Newsweek" + "New York Times" ] } }, - "/newsweek/headlines": { + "/nyt/categories": { "get": { - "description": "Returns fresh Newsweek section headlines from the public category page.", - "operationId": "newsweek-headlines", - "parameters": [ - { - "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", - "name": "section", - "required": true, - "type": "string" - } - ], + "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" ], @@ -325362,11 +360884,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/nyt.categoriesResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -325383,16 +360905,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsweek section headlines", + "summary": "List New York Times navigation categories", "tags": [ - "Newsweek" + "New York Times" ] } }, - "/newsweek/news": { + "/nyt/headlines": { "get": { - "description": "Returns fresh Newsweek top stories from its public RSS feed.", - "operationId": "newsweek-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" ], @@ -325400,7 +360932,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/nyt.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -325421,16 +360965,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsweek top stories", + "summary": "Get the latest stories in a New York Times section", "tags": [ - "Newsweek" + "New York Times" ] } }, - "/newsweek/sections": { + "/nyt/sections": { "get": { - "description": "Returns the public Newsweek editorial section inventory used by the headlines endpoint.", - "operationId": "newsweek-sections", + "description": "Lists every New York Times section accepted by /nyt/headlines, with its slug, display name, and public feed URL.", + "operationId": "nyt-sections", "produces": [ "application/json" ], @@ -325438,7 +360982,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/nyt.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" } } }, @@ -325447,24 +361009,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsweek sections", + "summary": "List New York Times sections", "tags": [ - "Newsweek" + "New York Times" ] } }, - "/newyorker/article": { + "/nzherald/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 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 The New Yorker article URL", + "description": "Canonical NZ Herald 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.nzherald.co.nz/nz/example-article-slug/ABCDEFGHIJKLMNOPQRST1234/" } ], "produces": [ @@ -325474,7 +361036,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newyorkerArticleResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -325483,14 +361045,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" } @@ -325507,24 +361069,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The New Yorker article content", + "summary": "Get NZ Herald article content", "tags": [ - "The New Yorker" + "NZ Herald" ] } }, - "/newyorker/author": { + "/nzherald/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 an NZ Herald author's byline metadata, biography, headshot, contact details, and recent articles from a canonical author URL.", + "operationId": "nzherald-author", "parameters": [ { - "description": "Canonical The New Yorker contributor URL", + "description": "Canonical NZ Herald author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.newyorker.com/contributors/casey-cep" + "x-example": "https://www.nzherald.co.nz/author/jane-doe/" } ], "produces": [ @@ -325534,7 +361096,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newyorkerAuthorResponseDoc" + "$ref": "#/definitions/publicnews.nzheraldAuthorResponseDoc" } }, "400": { @@ -325549,12 +361111,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -325567,38 +361123,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The New Yorker contributor profile", + "summary": "Get an NZ Herald author profile", "tags": [ - "The New Yorker" + "NZ Herald" ] } }, - "/newyorker/headlines": { + "/nzherald/headlines": { "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", + "description": "Returns fresh headlines from one public NZ Herald section.", + "operationId": "nzherald-headlines", "parameters": [ { - "description": "The New Yorker section slug", + "description": "NZ Herald section slug", "enum": [ - "everything", - "news", - "culture", - "humor", - "magazine", "business", - "tech", - "daily-comment", - "news-desk", - "cultural-comment", - "photo-booth", - "page-turner", - "borowitz-report" + "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": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "business" } ], "produces": [ @@ -325617,12 +361205,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -325635,16 +361217,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The New Yorker section headlines", + "summary": "Get NZ Herald section headlines", "tags": [ - "The New Yorker" + "NZ Herald" ] } }, - "/newyorker/news": { + "/nzherald/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", + "description": "Returns fresh New Zealand Herald top stories from its public homepage.", + "operationId": "nzherald-news", "produces": [ "application/json" ], @@ -325673,16 +361255,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The New Yorker top stories", + "summary": "Get NZ Herald top stories", "tags": [ - "The New Yorker" + "NZ Herald" ] } }, - "/newyorker/sections": { + "/nzherald/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", + "description": "Returns the public NZ Herald section inventory used by the headlines endpoint.", + "operationId": "nzherald-sections", "produces": [ "application/json" ], @@ -325692,59 +361274,6 @@ "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" - ] - } - }, - "/nike/categories": { - "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", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/nike.categoriesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -325752,35 +361281,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Nike's category and subcategory taxonomy", + "summary": "Get NZ Herald sections", "tags": [ - "Nike" + "NZ Herald" ] } }, - "/nike/product": { + "/ohpolly/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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 normalized 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": "Product-detail URL slug, from a search result's colors[].slug field", + "description": "1-based page, defaults to 1", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "vomero-premium-mens-road-running-shoes-l11miwwa" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Style-color id, from a search result's colors[].style_color field", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "style_color", - "required": true, - "type": "string", - "x-example": "HQ2050-102" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -325790,7 +361317,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.productResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -325799,12 +361326,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -325823,27 +361344,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Nike product", + "summary": "List Oh Polly collections", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/product/availability": { + "/ohpolly/collections/{handle}/products": { "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 normalized 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": "Product rollup key, from a search result's products[].group_key field", - "in": "query", - "name": "group_key", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "5npsVBwT" + "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": [ @@ -325853,7 +361388,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.availabilityResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -325886,27 +361421,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nike product size availability", + "summary": "List Oh Polly collection products", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/product/details": { + "/ohpolly/pages": { "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 normalized static pages from Oh Polly (https://www.ohpolly.com). The storefront URL is fixed server-side.", + "operationId": "ohpolly-pages", "parameters": [ { - "description": "Product rollup key, from a search result's products[].group_key field", + "description": "1-based page, defaults to 1", "in": "query", - "name": "group_key", - "required": true, - "type": "string", - "x-example": "5npsVBwT" + "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": [ @@ -325916,7 +361457,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.productDetailsResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -325925,12 +361466,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -325949,27 +361484,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get full Nike product details", + "summary": "List Oh Polly static pages", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/product/recommendations": { + "/ohpolly/pages/{handle}": { "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", + "description": "Returns normalized static page detail for one Oh Polly (https://www.ohpolly.com) page handle. The storefront URL is fixed server-side.", + "operationId": "ohpolly-page", "parameters": [ { - "description": "Anchor product's style-color id, from a search result's colors[].style_color field", - "in": "query", - "name": "style_color", + "description": "Page handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "HQ2050-102" + "x-example": "page-handle" } ], "produces": [ @@ -325979,7 +361514,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.recommendationsResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -325988,6 +361523,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -326006,42 +361547,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nike product recommendations", + "summary": "Get a Oh Polly static page", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/product/reviews": { + "/ohpolly/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Nike product's normalized 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", + "description": "Returns normalized 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": "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", + "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": [ @@ -326051,7 +361583,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.productReviewsResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -326060,12 +361592,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -326084,40 +361610,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nike product reviews", + "summary": "List Oh Polly products", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/search": { + "/ohpolly/products/{handle}": { "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 normalized 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 normalized 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": "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.", - "in": "query", - "name": "category", + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, "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 + "x-example": "product-handle" } ], "produces": [ @@ -326127,7 +361640,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -326160,49 +361673,45 @@ "ApiKeyAuth": [] } ], - "summary": "Search or browse Nike products", + "summary": "Get a Oh Polly product", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/stores": { + "/ohpolly/products/{handle}/recommendations": { "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 normalized recommended products for one Oh Polly (https://www.ohpolly.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "ohpolly-product-recommendations", "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": "Product handle", + "in": "path", + "name": "handle", "required": true, - "type": "number", - "x-example": -73.99 + "type": "string", + "x-example": "product-handle" }, { - "description": "Search radius in miles, defaults to 50", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "radius_miles", + "name": "limit", "type": "integer", - "x-example": 50 + "x-example": 10 }, { - "description": "One-based page number, defaults to 1", + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -326212,7 +361721,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.storesResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -326245,27 +361754,41 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Nike stores", + "summary": "List Oh Polly product recommendations", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/suggest": { + "/ohpolly/search/suggest": { "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": "Returns products, collections, and query suggestions from Oh Polly's (https://www.ohpolly.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "ohpolly-search-suggest", "parameters": [ { - "description": "Partial search query", + "description": "Search query", "in": "query", - "name": "query", + "name": "q", "required": true, "type": "string", - "x-example": "running shoes" + "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": [ @@ -326275,7 +361798,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.suggestResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -326302,24 +361825,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nike search-box suggestions", + "summary": "Get Oh Polly search suggestions", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/ninetofivemac/article": { + "/ohpolly/sitemap/urls": { "get": { - "description": "Returns public 9to5Mac article metadata and body paragraphs from a canonical article URL.", - "operationId": "ninetofivemac-article", + "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": "Canonical 9to5Mac 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://9to5mac.com/2026/09/24/heres-everything-new-for-apple-maps-in-ios-27/" + "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": [ @@ -326329,7 +361870,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -326338,8 +361879,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -326356,26 +361897,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get 9to5Mac article content", + "summary": "List Oh Polly sitemap URLs", "tags": [ - "9to5Mac" + "Oh Polly" ] } }, - "/ninetofivemac/author": { + "/ohpolly/sitemaps": { "get": { - "description": "Returns a 9to5Mac author's name, avatar, biography, social links, and recent articles from a canonical author URL.", - "operationId": "ninetofivemac-author", - "parameters": [ - { - "description": "Canonical 9to5Mac author URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://9to5mac.com/author/chmiller44/" - } + "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" ], @@ -326383,7 +361917,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ninetofivemacAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -326392,8 +361926,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -326410,62 +361944,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a 9to5Mac author profile", + "summary": "List Oh Polly sitemaps", "tags": [ - "9to5Mac" + "Oh Polly" ] } }, - "/ninetofivemac/headlines": { + "/ohpolly/store": { "get": { - "description": "Returns fresh headlines from one public 9to5Mac topic guide RSS feed.", - "operationId": "ninetofivemac-headlines", - "parameters": [ - { - "description": "9to5Mac guide slug", - "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" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string" - } + "consumes": [ + "application/json" ], + "description": "Returns normalized storefront metadata for Oh Polly (https://www.ohpolly.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "ohpolly-store", "produces": [ "application/json" ], @@ -326473,7 +361964,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -326482,6 +361973,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -326494,16 +361991,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get 9to5Mac section headlines", + "summary": "Get Oh Polly store metadata", "tags": [ - "9to5Mac" + "Oh Polly" ] } }, - "/ninetofivemac/news": { + "/oldnavy/categories": { "get": { - "description": "Returns fresh 9to5Mac (9to5mac.com) Apple news top stories from its public RSS feed.", - "operationId": "ninetofivemac-news", + "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) -- Gap, Banana Republic, and Athleta render their storefront navigation as client-side-only JavaScript with no server-rendered category id to scrape.", + "operationId": "oldnavy-categories", + "parameters": [ + { + "default": "on", + "description": "Storefront to list -- only on (Old Navy) is currently supported", + "enum": [ + "on" + ], + "in": "query", + "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": "1185232" + } + ], "produces": [ "application/json" ], @@ -326511,7 +362030,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/oldnavy.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -326532,42 +362057,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get 9to5Mac top stories", + "summary": "List Old Navy storefront categories", "tags": [ - "9to5Mac" + "Old Navy" ] } }, - "/ninetofivemac/sections": { + "/oldnavy/category": { "get": { - "description": "Returns the public 9to5Mac topic guides (each with its own RSS feed) accepted by the headlines endpoint.", - "operationId": "ninetofivemac-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "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, normalized product summaries with per-color inventory data, and available search facets with live counts.", + "operationId": "oldnavy-category", + "parameters": [ { - "ApiKeyAuth": [] + "description": "Category id, from a storefront category page's own cid query parameter", + "in": "query", + "name": "cid", + "required": true, + "type": "string", + "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" } ], - "summary": "Get 9to5Mac sections", - "tags": [ - "9to5Mac" - ] - } - }, - "/njcom/news": { - "get": { - "description": "Returns current NJ.com top stories from its anonymous Arc RSS feed, including title, canonical URL, short feed summary, author, publication time, and image where available. Category discovery and section headlines are deferred because the complete accepted feed taxonomy could not be verified; article and author routes remain unverified behind the site's DataDome challenge.", - "operationId": "njcom-news", "produces": [ "application/json" ], @@ -326575,7 +362109,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/oldnavy.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -326596,24 +362142,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get NJ.com top stories", + "summary": "Browse an Old Navy, Gap, Banana Republic, or Athleta category", "tags": [ - "NJ.com" + "Old Navy" ] } }, - "/npr/article": { + "/oldnavy/product": { "get": { - "description": "Returns a public NPR article's metadata and body paragraphs from a canonical article URL.", - "operationId": "npr-article", + "consumes": [ + "application/json" + ], + "description": "Returns normalized 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": "Canonical www.npr.org article URL", + "description": "Color-specific product id, from a search result's colors[].id field", "in": "query", - "name": "url", + "name": "pid", "required": true, "type": "string", - "x-example": "https://www.npr.org/2026/09/19/nx-s1-5974980/saudi-arabia-houthis-attempted-attack-capital" + "x-example": "907290012" + }, + { + "default": "on", + "description": "Storefront the pid belongs to", + "enum": [ + "on", + "gap", + "br", + "at" + ], + "in": "query", + "name": "brand", + "type": "string" } ], "produces": [ @@ -326623,7 +362185,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/npr.articleResponseDoc" + "$ref": "#/definitions/oldnavy.productResponseDoc" } }, "400": { @@ -326656,24 +362218,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get NPR article content", + "summary": "Get an Old Navy, Gap, Banana Republic, or Athleta product", "tags": [ - "NPR" + "Old Navy" ] } }, - "/npr/author": { + "/oldnavy/product/availability": { "get": { - "description": "Returns an NPR author's byline metadata, biography, and recent articles from a canonical author URL.", - "operationId": "npr-author", + "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": "Canonical www.npr.org author URL", + "description": "Color-level Old Navy/Gap/Banana Republic/Athleta product id", "in": "query", - "name": "url", + "name": "pid", "required": true, "type": "string", - "x-example": "https://www.npr.org/people/14562108/bill-chappell" + "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": "zip", + "type": "string", + "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": [ @@ -326683,7 +362289,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/npr.authorResponseDoc" + "$ref": "#/definitions/oldnavy.availabilityResponseDoc" } }, "400": { @@ -326716,16 +362322,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get an NPR author profile", + "summary": "Check in-store pickup stock for an Old Navy, Gap, Banana Republic, or Athleta product", "tags": [ - "NPR" + "Old Navy" ] } }, - "/npr/categories": { + "/oldnavy/product/reviews": { "get": { - "description": "Returns NPR's current public section navigation. Use a returned slug directly as the topic parameter on npr-topic.", - "operationId": "npr-categories", + "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", + "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" + }, + { + "default": 1, + "description": "One-based page, 10 reviews per page", + "in": "query", + "maximum": 1000, + "minimum": 1, + "name": "page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -326733,46 +362374,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/npr.categoriesResponseDoc" + "$ref": "#/definitions/oldnavy.productReviewsResponseDoc" } }, - "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 fresh headlines from NPR's public, site-wide RSS feed.", - "operationId": "npr-headlines", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/npr.headlinesResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -326792,24 +362407,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get NPR site-wide headlines", + "summary": "Get reviews for an Old Navy, Gap, Banana Republic, or Athleta product", "tags": [ - "NPR" + "Old Navy" ] } }, - "/npr/topic": { + "/oldnavy/search": { "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": "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 normalized 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": "NPR section slug", + "description": "Search keyword", "in": "query", - "name": "topic", + "name": "keyword", "required": true, "type": "string", - "x-example": "politics" + "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": [ @@ -326819,7 +362459,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/npr.topicResponseDoc" + "$ref": "#/definitions/oldnavy.searchResponseDoc" } }, "400": { @@ -326852,27 +362492,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get NPR section headlines", + "summary": "Search Old Navy, Gap, Banana Republic, or Athleta products", "tags": [ - "NPR" + "Old Navy" ] } }, - "/numbeo/cost-of-living/city/{slug}": { + "/oldnavy/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns itemized cost-of-living prices for one city (restaurants, markets, transportation, utilities, rent, and more), grouped by category. Credential-free public Numbeo data (numbeo.com).", - "operationId": "numbeo-cost-of-living-city", + "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": "Numbeo city slug", - "in": "path", - "name": "slug", - "required": true, + "description": "Zip code or city to search near", + "in": "query", + "name": "search", "type": "string", - "x-example": "Los-Angeles" + "x-example": "10001" + }, + { + "description": "Latitude (must be given together with lng)", + "in": "query", + "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": [ @@ -326882,7 +362548,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.costOfLivingCityResponseDoc" + "$ref": "#/definitions/oldnavy.storesResponseDoc" } }, "400": { @@ -326891,14 +362557,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" } @@ -326915,27 +362575,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo city's cost-of-living prices", + "summary": "Find Old Navy, Gap, Banana Republic, or Athleta store locations", "tags": [ - "Numbeo" + "Old Navy" ] } }, - "/numbeo/cost-of-living/country": { + "/opensea/activity": { "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. Credential-free public Numbeo data (numbeo.com).", - "operationId": "numbeo-cost-of-living-country", + "description": "Returns the live cross-collection activity feed — every sale, listing, offer, transfer, and mint OpenSea indexes, newest first, with the collection each event belongs to. Filter with `event_types` for a marketplace-wide trade tape.", + "operationId": "opensea-activity", "parameters": [ { - "description": "Country name as Numbeo spells it", + "default": 20, + "description": "Events per page, 1-100", "in": "query", - "name": "country", - "required": true, - "type": "string", - "x-example": "Vietnam" + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Comma-separated event types", + "enum": [ + "SALE", + "LISTING", + "OFFER", + "TRANSFER", + "MINT", + "COLLECTION_OFFER", + "TRAIT_OFFER" + ], + "in": "query", + "name": "event_types", + "type": "string" } ], "produces": [ @@ -326945,7 +362622,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.costOfLivingCountryResponseDoc" + "$ref": "#/definitions/opensea.activityResponseDoc" } }, "400": { @@ -326954,14 +362631,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" } @@ -326978,38 +362649,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo country's cost-of-living prices", + "summary": "List marketplace-wide OpenSea activity", "tags": [ - "Numbeo" + "OpenSea" ] } }, - "/numbeo/cost-of-living/rankings": { + "/opensea/categories": { "get": { - "consumes": [ + "description": "Returns OpenSea's category taxonomy as top-level groups and their child categories, with display names. The child slugs are the canonical category identifiers used across the marketplace.", + "operationId": "opensea-categories", + "produces": [ "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. Credential-free public Numbeo data (numbeo.com).", - "operationId": "numbeo-cost-of-living-rankings", - "parameters": [ - { - "description": "current (default) or historical", - "enum": [ - "current", - "historical" - ], - "in": "query", - "name": "scope", - "type": "string" + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/opensea.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Required when scope=historical, e.g. 2026-mid or 2025", - "in": "query", - "name": "period", - "type": "string", - "x-example": "2026-mid" + "ApiKeyAuth": [] } ], + "summary": "List OpenSea's browse categories", + "tags": [ + "OpenSea" + ] + } + }, + "/opensea/chains": { + "get": { + "description": "Returns every blockchain OpenSea indexes, with its identifier, display name, and architecture. The identifiers are the accepted values for the `chain` path parameter on the item endpoints.", + "operationId": "opensea-chains", "produces": [ "application/json" ], @@ -327017,17 +362704,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.rankingsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/opensea.chainsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -327044,19 +362725,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get the global Numbeo cost-of-living city ranking", + "summary": "List the chains OpenSea indexes", "tags": [ - "Numbeo" + "OpenSea" ] } }, - "/numbeo/cost-of-living/rankings-by-country": { + "/opensea/collection/{slug}": { "get": { - "consumes": [ - "application/json" + "description": "Returns public marketplace metadata and trading statistics for one NFT collection: name, description, imagery, verification flag, contract address and chain, social links, current floor price and top collection offer, plus lifetime and rolling one-hour/one-day/seven-day/thirty-day sales, volume, and floor-price change. Delisted and blacklisted collections return 404 rather than an empty payload.", + "operationId": "opensea-collection", + "parameters": [ + { + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "boredapeyachtclub" + } ], - "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). Credential-free public Numbeo data (numbeo.com).", - "operationId": "numbeo-cost-of-living-rankings-by-country", "produces": [ "application/json" ], @@ -327064,11 +362752,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.rankingsByCountryResponseDoc" + "$ref": "#/definitions/opensea.collectionResponseDoc" } }, - "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" } @@ -327085,41 +362785,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get the global Numbeo cost-of-living country ranking", + "summary": "Get an OpenSea collection", "tags": [ - "Numbeo" + "OpenSea" ] } }, - "/numbeo/indices/city/{slug}": { + "/opensea/collection/{slug}/activity": { "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. Credential-free public Numbeo data (numbeo.com).", - "operationId": "numbeo-indices-city", + "description": "Returns a cursor-paginated feed of marketplace events for a collection — sales, listings, offers, transfers, mints, and collection/trait offers — with the counterparties, price, marketplace, and transaction hash. Filter with `event_types` to narrow the feed, for example `event_types=SALE` for a sales-only history.", + "operationId": "opensea-collection-activity", "parameters": [ { - "description": "Numbeo city slug", + "description": "OpenSea collection slug", "in": "path", "name": "slug", "required": true, "type": "string", - "x-example": "Los-Angeles" + "x-example": "boredapeyachtclub" }, { - "description": "Index family", + "default": 20, + "description": "Events per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Comma-separated event types", "enum": [ - "quality-of-life", - "crime", - "health-care", - "pollution", - "traffic", - "property-investment" + "SALE", + "LISTING", + "OFFER", + "TRANSFER", + "MINT", + "COLLECTION_OFFER", + "TRAIT_OFFER" ], "in": "query", - "name": "index", - "required": true, + "name": "event_types", "type": "string" } ], @@ -327130,7 +362840,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.indicesCityResponseDoc" + "$ref": "#/definitions/opensea.activityResponseDoc" } }, "400": { @@ -327145,8 +362855,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -327163,42 +362873,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo city's data for an index family", + "summary": "List an OpenSea collection's marketplace activity", "tags": [ - "Numbeo" + "OpenSea" ] } }, - "/numbeo/indices/country": { + "/opensea/collection/{slug}/best-deals": { "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. Credential-free public Numbeo data (numbeo.com).", - "operationId": "numbeo-indices-country", + "description": "Returns the listed items OpenSea surfaces as the best value in a collection, judged against each item's rarity and the collection floor. This is the curated \"best deals\" shelf from the collection page, not a generic price sort.", + "operationId": "opensea-collection-best-deals", "parameters": [ { - "description": "Country name as Numbeo spells it", - "in": "query", - "name": "country", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "Vietnam" - }, - { - "description": "Index family", - "enum": [ - "quality-of-life", - "crime", - "health-care", - "pollution", - "traffic", - "property-investment" - ], - "in": "query", - "name": "index", - "required": true, - "type": "string" + "x-example": "boredapeyachtclub" } ], "produces": [ @@ -327208,7 +362900,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.indicesCountryResponseDoc" + "$ref": "#/definitions/opensea.itemsShelfResponseDoc" } }, "400": { @@ -327223,8 +362915,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -327241,51 +362933,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo country's data for an index family", + "summary": "List an OpenSea collection's best-value listings", "tags": [ - "Numbeo" + "OpenSea" ] } }, - "/numbeo/indices/rankings": { + "/opensea/collection/{slug}/chart": { "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. Credential-free public Numbeo data (numbeo.com).", - "operationId": "numbeo-indices-rankings", + "description": "Returns a time series for a collection — either its floor price or its traded volume — over the requested window, with each sample in both the settlement token and USD. Use `metric=floor_price` for the floor line and `metric=volume` for the volume bars.", + "operationId": "opensea-collection-chart", "parameters": [ { - "description": "Index family", - "enum": [ - "quality-of-life", - "crime", - "health-care", - "pollution", - "traffic", - "property-investment" - ], - "in": "query", - "name": "index", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, - "type": "string" + "type": "string", + "x-example": "boredapeyachtclub" }, { - "description": "current (default) or historical", + "default": "floor_price", + "description": "Series to return", "enum": [ - "current", - "historical" + "floor_price", + "volume" ], "in": "query", - "name": "scope", + "name": "metric", "type": "string" }, { - "description": "Required when scope=historical, e.g. 2026-mid or 2025", + "default": "SEVEN_DAYS", + "description": "Window", + "enum": [ + "ONE_HOUR", + "ONE_DAY", + "SEVEN_DAYS", + "THIRTY_DAYS", + "ALL_TIME" + ], "in": "query", - "name": "period", - "type": "string", - "x-example": "2026-mid" + "name": "timeframe", + "type": "string" } ], "produces": [ @@ -327295,7 +362985,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.indicesRankingsResponseDoc" + "$ref": "#/definitions/opensea.chartResponseDoc" } }, "400": { @@ -327304,8 +362994,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" } @@ -327322,34 +363018,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get the global Numbeo city ranking for an index family", + "summary": "Get an OpenSea collection's price or volume history", "tags": [ - "Numbeo" + "OpenSea" ] } }, - "/numbeo/indices/rankings-by-country": { + "/opensea/collection/{slug}/depth": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the global country-level ranking for a Numbeo index family. Credential-free public Numbeo data (numbeo.com).", - "operationId": "numbeo-indices-rankings-by-country", + "description": "Returns the full bid/ask ladder for a collection: resting listings and offers grouped into price levels with the quantity available at each. This is the depth chart behind OpenSea's own collection page, and it is the fastest way to see how thin or deep the book is above the floor.", + "operationId": "opensea-collection-depth", "parameters": [ { - "description": "Index family", - "enum": [ - "quality-of-life", - "crime", - "health-care", - "pollution", - "traffic", - "property-investment" - ], - "in": "query", - "name": "index", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, - "type": "string" + "type": "string", + "x-example": "boredapeyachtclub" } ], "produces": [ @@ -327359,7 +363045,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.indicesRankingsByCountryResponseDoc" + "$ref": "#/definitions/opensea.depthResponseDoc" } }, "400": { @@ -327368,8 +363054,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" } @@ -327386,24 +363078,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get the global Numbeo country ranking for an index family", + "summary": "Get an OpenSea collection's order book", "tags": [ - "Numbeo" + "OpenSea" ] } }, - "/nydailynews/article": { + "/opensea/collection/{slug}/holders": { "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", + "description": "Returns a cursor-paginated leaderboard of wallets holding items in the collection, ranked by quantity held, with each holder's address and display name where OpenSea publishes one.", + "operationId": "opensea-collection-holders", "parameters": [ { - "description": "Canonical New York Daily News article URL", - "in": "query", - "name": "url", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.nydailynews.com/2026/09/24/city-hall-must-explain-why-they-broke-disclosure-rules/" + "x-example": "boredapeyachtclub" + }, + { + "default": 20, + "description": "Holders per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "DESC", + "description": "Sort direction by quantity held", + "enum": [ + "ASC", + "DESC" + ], + "in": "query", + "name": "sort_direction", + "type": "string" } ], "produces": [ @@ -327413,7 +363129,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/opensea.collectionHoldersResponseDoc" } }, "400": { @@ -327428,6 +363144,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -327440,30 +363162,98 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Daily News article content", + "summary": "List an OpenSea collection's holders", "tags": [ - "New York Daily News" + "OpenSea" ] } }, - "/nydailynews/author": { + "/opensea/collection/{slug}/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", + "description": "Returns a cursor-paginated page of NFTs in a collection with their traits, rarity rank, current owner, best standing listing, and last sale price. Pass `cursor` from `next_page_cursor` to page forward. Narrow the result set with `listed_only`, `traits`, a `min_price`/`max_price` band, or a `min_rarity`/`max_rarity` rank band — the filters combine, so `traits=Fur:Solid Gold&listed_only=true` returns only buyable Solid Gold apes.", + "operationId": "opensea-collection-items", "parameters": [ { - "description": "Author slug, e.g. rocco-parascandola", - "in": "query", + "description": "OpenSea collection slug", + "in": "path", "name": "slug", + "required": true, "type": "string", - "x-example": "rocco-parascandola" + "x-example": "boredapeyachtclub" }, { - "description": "Canonical nydailynews.com/author// URL; alternative to slug", + "default": 20, + "description": "Items per page, 1-100", "in": "query", - "name": "url", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "PRICE", + "description": "Sort field", + "enum": [ + "PRICE", + "LAST_SALE_DATE", + "RARITY", + "CREATED_DATE" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "default": "ASC", + "description": "Sort direction", + "enum": [ + "ASC", + "DESC" + ], + "in": "query", + "name": "sort_direction", + "type": "string" + }, + { + "description": "Only return items with a standing listing", + "in": "query", + "name": "listed_only", + "type": "boolean" + }, + { + "description": "Comma-separated trait_type:value pairs", + "in": "query", + "name": "traits", "type": "string", - "x-example": "https://www.nydailynews.com/author/rocco-parascandola/" + "x-example": "Fur:Solid Gold,Eyes:Laser Eyes" + }, + { + "description": "Minimum listing price in the collection's native token", + "in": "query", + "name": "min_price", + "type": "number" + }, + { + "description": "Maximum listing price in the collection's native token", + "in": "query", + "name": "max_price", + "type": "number" + }, + { + "description": "Minimum rarity rank (1 is rarest)", + "in": "query", + "name": "min_rarity", + "type": "integer" + }, + { + "description": "Maximum rarity rank", + "in": "query", + "name": "max_rarity", + "type": "integer" } ], "produces": [ @@ -327473,7 +363263,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nyDailyNewsAuthorResponseDoc" + "$ref": "#/definitions/opensea.collectionItemsResponseDoc" } }, "400": { @@ -327488,6 +363278,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -327500,60 +363296,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Daily News author profile", + "summary": "List items in an OpenSea collection", "tags": [ - "New York Daily News" + "OpenSea" ] } }, - "/nydailynews/headlines": { + "/opensea/collection/{slug}/offers": { "get": { - "description": "Returns fresh headlines from one public New York Daily News section page.", - "operationId": "nydailynews-headlines", + "description": "Returns the collection-wide offer book as price levels: how many standing offers sit at each price per item, plus the aggregate offer count and total value across the whole collection. Offers are sorted by price.", + "operationId": "opensea-collection-offers", "parameters": [ { - "description": "New York Daily News section slug", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "boredapeyachtclub" + }, + { + "default": 20, + "description": "Price levels per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "DESC", + "description": "Sort direction by offer price", "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" + "ASC", + "DESC" ], "in": "query", - "name": "section", - "required": true, + "name": "sort_direction", "type": "string" } ], @@ -327564,7 +363347,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/opensea.collectionOffersResponseDoc" } }, "400": { @@ -327573,36 +363356,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 from the public homepage.", - "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": { @@ -327617,50 +363380,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Daily News top stories", - "tags": [ - "New York Daily News" - ] - } - }, - "/nydailynews/sections": { - "get": { - "description": "Returns the public New York Daily News editorial section inventory.", - "operationId": "nydailynews-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get New York Daily News sections", + "summary": "List an OpenSea collection's offer book", "tags": [ - "New York Daily News" + "OpenSea" ] } }, - "/nymag/article": { + "/opensea/collection/{slug}/rarest-items": { "get": { - "description": "Returns public New York Magazine article metadata and body paragraphs from a canonical article URL.", - "operationId": "nymag-article", + "description": "Returns the rarest items in a collection that currently have a standing listing, each with its rarity rank, traits, and asking price. Unlike the trait endpoints, this shelf is scoped to what is actually buyable right now.", + "operationId": "opensea-collection-rarest-items", "parameters": [ { - "description": "Canonical New York Magazine article URL", - "in": "query", - "name": "url", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://nymag.com/intelligencer/example.html" + "x-example": "boredapeyachtclub" } ], "produces": [ @@ -327670,7 +363407,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/opensea.itemsShelfResponseDoc" } }, "400": { @@ -327685,6 +363422,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -327697,24 +363440,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Magazine article content", + "summary": "List an OpenSea collection's rarest listed items", "tags": [ - "New York Magazine" + "OpenSea" ] } }, - "/nymag/author": { + "/opensea/collection/{slug}/search-items": { "get": { - "description": "Returns a New York Magazine author's byline metadata, biography, and recent articles from a canonical author URL.", - "operationId": "nymag-author", + "description": "Runs a keyword search scoped to one collection — matching on item name and trait values — and returns the hits with rarity rank and best standing listing. Narrower than `/opensea/collection/{slug}/items`, which lists everything.", + "operationId": "opensea-collection-search-items", "parameters": [ { - "description": "Canonical New York Magazine author URL", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "boredapeyachtclub" + }, + { + "description": "Search keyword", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://nymag.com/author/john-herrman/" + "x-example": "gold" + }, + { + "default": 20, + "description": "Results per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -327724,7 +363482,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nymagAuthorResponseDoc" + "$ref": "#/definitions/opensea.itemSearchResponseDoc" } }, "400": { @@ -327739,6 +363497,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -327751,34 +363515,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Magazine author profile", + "summary": "Search items inside an OpenSea collection", "tags": [ - "New York Magazine" + "OpenSea" ] } }, - "/nymag/headlines": { + "/opensea/collection/{slug}/social-proof": { "get": { - "description": "Returns fresh headlines from one public New York Magazine section.", - "operationId": "nymag-headlines", + "description": "Returns how many accounts follow or watch a collection, plus the notable collectors OpenSea highlights for it. Useful as a demand signal alongside the trading stats.", + "operationId": "opensea-collection-social-proof", "parameters": [ { - "description": "New York Magazine section slug", - "enum": [ - "intelligencer", - "thecut", - "vulture", - "grub-street", - "curbed", - "strategist", - "select-all", - "science", - "daily" - ], - "in": "query", - "name": "section", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, - "type": "string" + "type": "string", + "x-example": "boredapeyachtclub" } ], "produces": [ @@ -327788,7 +363542,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/opensea.socialProofResponseDoc" } }, "400": { @@ -327797,36 +363551,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get New York Magazine section headlines", - "tags": [ - "New York Magazine" - ] - } - }, - "/nymag/news": { - "get": { - "description": "Returns fresh New York Magazine stories from the public homepage.", - "operationId": "nymag-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -327841,50 +363575,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Magazine top stories", - "tags": [ - "New York Magazine" - ] - } - }, - "/nymag/sections": { - "get": { - "description": "Returns the public New York Magazine section inventory.", - "operationId": "nymag-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get New York Magazine sections", + "summary": "Get an OpenSea collection's social following", "tags": [ - "New York Magazine" + "OpenSea" ] } }, - "/nypost/article": { + "/opensea/collection/{slug}/top-sales": { "get": { - "description": "Returns public New York Post article metadata and body paragraphs from a canonical article URL.", - "operationId": "nypost-article", + "description": "Returns the highest-value sales ever recorded for a collection, with the buyer, seller, price, and transaction hash for each. Unlike `/opensea/collection/{slug}/activity?event_types=SALE`, which is a reverse-chronological feed, this is ranked by sale price.", + "operationId": "opensea-collection-top-sales", "parameters": [ { - "description": "Canonical New York Post article URL", - "in": "query", - "name": "url", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://nypost.com/2026/09/23/us-news/example-article-slug/" + "x-example": "boredapeyachtclub" } ], "produces": [ @@ -327894,7 +363602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/opensea.collectionTopSalesResponseDoc" } }, "400": { @@ -327909,6 +363617,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -327921,24 +363635,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Post article content", + "summary": "List an OpenSea collection's highest-value sales", "tags": [ - "New York Post" + "OpenSea" ] } }, - "/nypost/author": { + "/opensea/collection/{slug}/trait-offers": { "get": { - "description": "Returns a New York Post author's byline metadata, biography, social links, and recent articles from a canonical author URL.", - "operationId": "nypost-author", + "description": "Returns standing offers scoped to a specific trait value rather than the whole collection, as price levels with the trait type and value attached. Useful for pricing rare-trait items against the collection floor.", + "operationId": "opensea-collection-trait-offers", "parameters": [ { - "description": "Canonical New York Post author URL", - "in": "query", - "name": "url", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://nypost.com/author/jane-doe/" + "x-example": "boredapeyachtclub" + }, + { + "default": 20, + "description": "Price levels per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "DESC", + "description": "Sort direction by offer price", + "enum": [ + "ASC", + "DESC" + ], + "in": "query", + "name": "sort_direction", + "type": "string" } ], "produces": [ @@ -327948,7 +363686,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nypostAuthorResponseDoc" + "$ref": "#/definitions/opensea.collectionTraitOffersResponseDoc" } }, "400": { @@ -327963,6 +363701,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -327975,78 +363719,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Post author profile", + "summary": "List an OpenSea collection's trait offer book", "tags": [ - "New York Post" + "OpenSea" ] } }, - "/nypost/headlines": { + "/opensea/collection/{slug}/traits": { "get": { - "description": "Returns fresh headlines from one public New York Post RSS section.", - "operationId": "nypost-headlines", + "description": "Returns a cursor-paginated page of the collection's trait types and the values each takes, with per-value item counts where OpenSea publishes them. Numeric traits carry a comparison operator.", + "operationId": "opensea-collection-traits", "parameters": [ { - "description": "New York Post RSS section slug", - "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" - ], - "in": "query", - "name": "section", + "description": "OpenSea collection slug", + "in": "path", + "name": "slug", "required": true, + "type": "string", + "x-example": "boredapeyachtclub" + }, + { + "default": 20, + "description": "Trait types per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", "type": "string" } ], @@ -328057,7 +363759,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/opensea.collectionTraitsResponseDoc" } }, "400": { @@ -328066,6 +363768,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": { @@ -328078,16 +363792,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Post section headlines", + "summary": "List an OpenSea collection's traits", "tags": [ - "New York Post" + "OpenSea" ] } }, - "/nypost/news": { + "/opensea/collections": { "get": { - "description": "Returns fresh New York Post top stories from its public RSS feed.", - "operationId": "nypost-news", + "description": "Resolves up to 50 collections in a single call from a comma-separated `slugs` list, returning each one's floor price, verification flag, headline stats, and per-marketplace listed-item counts. Use this instead of calling `/opensea/collection/{slug}` in a loop — it costs one upstream request regardless of how many slugs you pass. The `markets` array shows how many items are listed on OpenSea versus other marketplaces for the same collection.", + "operationId": "opensea-collections", + "parameters": [ + { + "description": "Comma-separated collection slugs, at most 50", + "in": "query", + "name": "slugs", + "required": true, + "type": "string", + "x-example": "boredapeyachtclub,azuki" + } + ], "produces": [ "application/json" ], @@ -328095,7 +363819,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/opensea.collectionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -328116,50 +363852,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Post top stories", - "tags": [ - "New York Post" - ] - } - }, - "/nypost/sections": { - "get": { - "description": "Returns the public New York Post RSS section inventory used by the headlines endpoint.", - "operationId": "nypost-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get New York Post RSS sections", + "summary": "Look up several OpenSea collections at once", "tags": [ - "New York Post" + "OpenSea" ] } }, - "/nyt/article": { + "/opensea/drops": { "get": { - "description": "Returns one public New York Times article's metadata and body paragraphs from a canonical article URL.", - "operationId": "nyt-article", + "description": "Returns the NFT drop calendar — either upcoming mints or recently minted drops — with each drop's contract, chain, and parent collection. Use `type=UPCOMING` to watch for launches and `type=RECENTLY_MINTED` for ones that just went live.", + "operationId": "opensea-drops", "parameters": [ { - "description": "Canonical NYT article URL", + "default": "UPCOMING", + "description": "Calendar window", + "enum": [ + "UPCOMING", + "RECENTLY_MINTED" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.nytimes.com/2026/09/20/us/politics/example-story.html" + "name": "type", + "type": "string" + }, + { + "default": 20, + "description": "Drops per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -328169,7 +363895,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.articleResponseDoc" + "$ref": "#/definitions/opensea.dropsResponseDoc" } }, "400": { @@ -328178,18 +363904,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": { @@ -328208,24 +363922,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Times article's content", + "summary": "List the OpenSea drop calendar", "tags": [ - "New York Times" + "OpenSea" ] } }, - "/nyt/author": { + "/opensea/item/{chain}/{contract_address}/{token_id}": { "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", + "description": "Returns one NFT addressed by chain, contract address, and token id, including its traits, rarity rank, current owner, parent collection, best standing listing, and best standing offer. Call `/opensea/chains` for the accepted `chain` values.", + "operationId": "opensea-item", "parameters": [ { - "description": "Canonical NYT author URL", - "in": "query", - "name": "url", + "description": "Chain identifier from /opensea/chains", + "in": "path", + "name": "chain", "required": true, "type": "string", - "x-example": "https://www.nytimes.com/by/maggie-haberman" + "x-example": "ethereum" + }, + { + "description": "NFT contract address", + "in": "path", + "name": "contract_address", + "required": true, + "type": "string", + "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" + }, + { + "description": "Token id within the contract", + "in": "path", + "name": "token_id", + "required": true, + "type": "string", + "x-example": "1" } ], "produces": [ @@ -328235,7 +363965,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.authorResponseDoc" + "$ref": "#/definitions/opensea.itemResponseDoc" } }, "400": { @@ -328244,12 +363974,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -328274,16 +363998,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Times contributor profile", + "summary": "Get a single OpenSea NFT", "tags": [ - "New York Times" + "OpenSea" ] } }, - "/nyt/categories": { + "/opensea/item/{chain}/{contract_address}/{token_id}/activity": { "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", + "description": "Returns the marketplace event history for a single NFT — sales, listings, offers, transfers, and mints — with counterparties, price, and transaction hash. Filter with `event_types`, for example `event_types=SALE,TRANSFER` for an ownership trail.", + "operationId": "opensea-item-activity", + "parameters": [ + { + "description": "Chain identifier from /opensea/chains", + "in": "path", + "name": "chain", + "required": true, + "type": "string", + "x-example": "ethereum" + }, + { + "description": "NFT contract address", + "in": "path", + "name": "contract_address", + "required": true, + "type": "string", + "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" + }, + { + "description": "Token id within the contract", + "in": "path", + "name": "token_id", + "required": true, + "type": "string", + "x-example": "1" + }, + { + "default": 20, + "description": "Events per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Comma-separated event types", + "enum": [ + "SALE", + "LISTING", + "OFFER", + "TRANSFER", + "MINT", + "COLLECTION_OFFER", + "TRAIT_OFFER" + ], + "in": "query", + "name": "event_types", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -328291,7 +364069,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.categoriesResponseDoc" + "$ref": "#/definitions/opensea.activityResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -328312,24 +364102,40 @@ "ApiKeyAuth": [] } ], - "summary": "List New York Times navigation categories", + "summary": "List one OpenSea NFT's event history", "tags": [ - "New York Times" + "OpenSea" ] } }, - "/nyt/headlines": { + "/opensea/item/{chain}/{contract_address}/{token_id}/chart": { "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", + "description": "Returns every indexed sale of one NFT with its timestamp and price, in both the settlement token and USD — the price history behind the chart on an item page. An item that has never sold returns an empty `points` list. For collection-level sale history use `/opensea/collection/{slug}/activity?event_types=SALE`.", + "operationId": "opensea-item-chart", "parameters": [ { - "description": "Section slug from /nyt/sections", - "in": "query", - "name": "section", + "description": "Chain identifier from /opensea/chains", + "in": "path", + "name": "chain", "required": true, "type": "string", - "x-example": "World" + "x-example": "ethereum" + }, + { + "description": "NFT contract address", + "in": "path", + "name": "contract_address", + "required": true, + "type": "string", + "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" + }, + { + "description": "Token id within the contract", + "in": "path", + "name": "token_id", + "required": true, + "type": "string", + "x-example": "2087" } ], "produces": [ @@ -328339,7 +364145,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.headlinesResponseDoc" + "$ref": "#/definitions/opensea.chartResponseDoc" } }, "400": { @@ -328372,16 +364178,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a New York Times section", + "summary": "Get an OpenSea NFT's sale-price history", "tags": [ - "New York Times" + "OpenSea" ] } }, - "/nyt/sections": { + "/opensea/item/{chain}/{contract_address}/{token_id}/depth": { "get": { - "description": "Lists every New York Times section accepted by /nyt/headlines, with its slug, display name, and public feed URL.", - "operationId": "nyt-sections", + "description": "Returns the bid/ask ladder for a single NFT: resting listings and offers grouped into price levels with the quantity at each. Useful for ERC-1155 items where many units trade at different prices.", + "operationId": "opensea-item-depth", + "parameters": [ + { + "description": "Chain identifier from /opensea/chains", + "in": "path", + "name": "chain", + "required": true, + "type": "string", + "x-example": "ethereum" + }, + { + "description": "NFT contract address", + "in": "path", + "name": "contract_address", + "required": true, + "type": "string", + "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" + }, + { + "description": "Token id within the contract", + "in": "path", + "name": "token_id", + "required": true, + "type": "string", + "x-example": "1" + } + ], "produces": [ "application/json" ], @@ -328389,7 +364221,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.sectionsResponseDoc" + "$ref": "#/definitions/opensea.depthResponseDoc" } }, "400": { @@ -328398,6 +364230,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -328416,24 +364254,64 @@ "ApiKeyAuth": [] } ], - "summary": "List New York Times sections", + "summary": "Get an OpenSea NFT's order book", "tags": [ - "New York Times" + "OpenSea" ] } }, - "/nzherald/article": { + "/opensea/item/{chain}/{contract_address}/{token_id}/listings": { "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", + "description": "Returns every standing sell order for one NFT, with price, quantity, validity window, marketplace, and the maker's wallet. An item with no active listings returns an empty list rather than a 404.", + "operationId": "opensea-item-listings", "parameters": [ { - "description": "Canonical NZ Herald article URL", - "in": "query", - "name": "url", + "description": "Chain identifier from /opensea/chains", + "in": "path", + "name": "chain", "required": true, "type": "string", - "x-example": "https://www.nzherald.co.nz/nz/example-article-slug/ABCDEFGHIJKLMNOPQRST1234/" + "x-example": "ethereum" + }, + { + "description": "NFT contract address", + "in": "path", + "name": "contract_address", + "required": true, + "type": "string", + "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" + }, + { + "description": "Token id within the contract", + "in": "path", + "name": "token_id", + "required": true, + "type": "string", + "x-example": "1" + }, + { + "default": 20, + "description": "Listings per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "ASC", + "description": "Sort direction by price", + "enum": [ + "ASC", + "DESC" + ], + "in": "query", + "name": "sort_direction", + "type": "string" } ], "produces": [ @@ -328443,7 +364321,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/opensea.itemOrdersResponseDoc" } }, "400": { @@ -328452,14 +364330,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" } @@ -328476,24 +364354,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get NZ Herald article content", + "summary": "List standing listings for an OpenSea NFT", "tags": [ - "NZ Herald" + "OpenSea" ] } }, - "/nzherald/author": { + "/opensea/item/{chain}/{contract_address}/{token_id}/offers": { "get": { - "description": "Returns an NZ Herald author's byline metadata, biography, headshot, contact details, and recent articles from a canonical author URL.", - "operationId": "nzherald-author", + "description": "Returns every standing bid on one NFT, with price, quantity, validity window, marketplace, and the maker's wallet. An item with no active offers returns an empty list rather than a 404.", + "operationId": "opensea-item-offers", "parameters": [ { - "description": "Canonical NZ Herald author URL", - "in": "query", - "name": "url", + "description": "Chain identifier from /opensea/chains", + "in": "path", + "name": "chain", + "required": true, + "type": "string", + "x-example": "ethereum" + }, + { + "description": "NFT contract address", + "in": "path", + "name": "contract_address", + "required": true, + "type": "string", + "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" + }, + { + "description": "Token id within the contract", + "in": "path", + "name": "token_id", "required": true, "type": "string", - "x-example": "https://www.nzherald.co.nz/author/jane-doe/" + "x-example": "1" + }, + { + "default": 20, + "description": "Offers per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -328503,7 +364410,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nzheraldAuthorResponseDoc" + "$ref": "#/definitions/opensea.itemOrdersResponseDoc" } }, "400": { @@ -328518,6 +364425,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -328530,68 +364443,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get an NZ Herald author profile", + "summary": "List standing offers for an OpenSea NFT", "tags": [ - "NZ Herald" + "OpenSea" ] } }, - "/nzherald/headlines": { + "/opensea/item/{chain}/{contract_address}/{token_id}/owners": { "get": { - "description": "Returns fresh headlines from one public NZ Herald section.", - "operationId": "nzherald-headlines", + "description": "Returns the wallets holding one NFT plus the total owner count. ERC-721 items resolve to a single owner; ERC-1155 items can have many, each with the quantity held.", + "operationId": "opensea-item-owners", "parameters": [ { - "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": "section", + "description": "Chain identifier from /opensea/chains", + "in": "path", + "name": "chain", + "required": true, + "type": "string", + "x-example": "ethereum" + }, + { + "description": "NFT contract address", + "in": "path", + "name": "contract_address", + "required": true, + "type": "string", + "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" + }, + { + "description": "Token id within the contract", + "in": "path", + "name": "token_id", "required": true, + "type": "string", + "x-example": "1" + }, + { + "default": 20, + "description": "Owners per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", "type": "string" } ], @@ -328602,7 +364499,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/opensea.itemOwnersResponseDoc" } }, "400": { @@ -328611,37 +364508,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get NZ Herald section headlines", - "tags": [ - "NZ Herald" - ] - } - }, - "/nzherald/news": { - "get": { - "description": "Returns fresh New Zealand Herald top stories from its public homepage.", - "operationId": "nzherald-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -328661,59 +364532,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get NZ Herald top stories", - "tags": [ - "NZ Herald" - ] - } - }, - "/nzherald/sections": { - "get": { - "description": "Returns the public NZ Herald section inventory used by the headlines endpoint.", - "operationId": "nzherald-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get NZ Herald sections", + "summary": "List the owners of an OpenSea NFT", "tags": [ - "NZ Herald" + "OpenSea" ] } }, - "/ohpolly/collections": { + "/opensea/most-watched": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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 the collections most added to watchlists on OpenSea, with their current floor price and headline stats. A demand signal that leads trading volume, since watchlisting precedes buying.", + "operationId": "opensea-most-watched", "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", + "default": 20, + "description": "Collections to return, 1-100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -328723,7 +364558,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/opensea.collectionShelfResponseDoc" } }, "400": { @@ -328750,41 +364585,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly collections", + "summary": "List the most watchlisted OpenSea collections", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/collections/{handle}/products": { + "/opensea/profile/{identifier}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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 public profile for a wallet, resolved from a wallet address, an ENS name, or an OpenSea username: display name, avatar and banner imagery, verification flag, and linked social handles. Wallet balances, portfolio value, and profit/loss are deliberately not exposed.", + "operationId": "opensea-profile", "parameters": [ { - "description": "Collection handle", + "description": "Wallet address, ENS name, or OpenSea username", "in": "path", - "name": "handle", + "name": "identifier", "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": "vitalik.eth" } ], "produces": [ @@ -328794,7 +364612,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/opensea.profileResponseDoc" } }, "400": { @@ -328827,33 +364645,52 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly collection products", + "summary": "Get a public OpenSea profile", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/pages": { + "/opensea/profile/{identifier}/activity": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized static pages from Oh Polly (https://www.ohpolly.com). The storefront URL is fixed server-side.", - "operationId": "ohpolly-pages", + "description": "Returns a cursor-paginated feed of a wallet's NFT marketplace events — sales, listings, offers, transfers, and mints — with the counterparty, price, and collection for each. Accepts a wallet address, ENS name, or OpenSea username. Scoped to NFT events only; token transfers and swaps are not returned.", + "operationId": "opensea-profile-activity", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "description": "Wallet address, ENS name, or OpenSea username", + "in": "path", + "name": "identifier", + "required": true, + "type": "string", + "x-example": "vitalik.eth" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "default": 20, + "description": "Events per page, 1-100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Comma-separated event types", + "enum": [ + "SALE", + "LISTING", + "OFFER", + "TRANSFER", + "MINT", + "COLLECTION_OFFER", + "TRAIT_OFFER" + ], + "in": "query", + "name": "event_types", + "type": "string" } ], "produces": [ @@ -328863,7 +364700,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/opensea.activityResponseDoc" } }, "400": { @@ -328872,6 +364709,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -328890,27 +364733,37 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly static pages", + "summary": "List a wallet's NFT marketplace activity", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/pages/{handle}": { + "/opensea/profile/{identifier}/collections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized static page detail for one Oh Polly (https://www.ohpolly.com) page handle. The storefront URL is fixed server-side.", - "operationId": "ohpolly-page", + "description": "Returns the collections a wallet holds items in, with how many items it holds in each and that collection's current floor price. Useful for valuing a wallet's holdings collection by collection.", + "operationId": "opensea-profile-collections", "parameters": [ { - "description": "Page handle", + "description": "Wallet address, ENS name, or OpenSea username", "in": "path", - "name": "handle", + "name": "identifier", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "vitalik.eth" + }, + { + "default": 20, + "description": "Collections per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -328920,7 +364773,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/opensea.profileCollectionsResponseDoc" } }, "400": { @@ -328953,33 +364806,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Oh Polly static page", + "summary": "List the collections a wallet holds", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/products": { + "/opensea/profile/{identifier}/created": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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 the collections a wallet created, as opposed to the ones it holds, each with its floor price and trading statistics. Use this to find a creator's full body of work from any one of their collections' contract deployer address.", + "operationId": "opensea-profile-created", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "description": "Wallet address, ENS name, or OpenSea username", + "in": "path", + "name": "identifier", + "required": true, + "type": "string", + "x-example": "0xaba7161a7fb69c88e16ed9f455ce62b791ee4d03" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "default": 20, + "description": "Collections per page, 1-100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "VOLUME", + "description": "Sort field", + "enum": [ + "VOLUME", + "ONE_DAY_VOLUME", + "FLOOR_PRICE", + "SALES" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "default": "DESC", + "description": "Sort direction", + "enum": [ + "ASC", + "DESC" + ], + "in": "query", + "name": "sort_direction", + "type": "string" } ], "produces": [ @@ -328989,7 +364870,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/opensea.profileCollectionsResponseDoc" } }, "400": { @@ -328998,6 +364879,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -329016,27 +364903,48 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly products", + "summary": "List the collections a wallet created", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/products/{handle}": { + "/opensea/profile/{identifier}/items": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized 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 a cursor-paginated page of the NFTs held by a wallet, with each item's collection, rarity rank, and best standing listing. Accepts a wallet address, ENS name, or OpenSea username; a non-address identifier costs one extra resolution lookup.", + "operationId": "opensea-profile-items", "parameters": [ { - "description": "Product handle", + "description": "Wallet address, ENS name, or OpenSea username", "in": "path", - "name": "handle", + "name": "identifier", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "vitalik.eth" + }, + { + "default": 20, + "description": "Items per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "DESC", + "description": "Sort direction by received date", + "enum": [ + "ASC", + "DESC" + ], + "in": "query", + "name": "sort_direction", + "type": "string" } ], "produces": [ @@ -329046,7 +364954,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/opensea.profileItemsResponseDoc" } }, "400": { @@ -329079,45 +364987,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Oh Polly product", + "summary": "List the NFTs a wallet holds", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/products/{handle}/recommendations": { + "/opensea/profile/{identifier}/search-items": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized recommended products for one Oh Polly (https://www.ohpolly.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "ohpolly-product-recommendations", + "description": "Runs a keyword search across a wallet's holdings, matching on item and collection name, and returns the hits with rarity rank and best standing listing. Narrower than `/opensea/profile/{identifier}/items`, which lists everything the wallet holds.", + "operationId": "opensea-profile-search-items", "parameters": [ { - "description": "Product handle", + "description": "Wallet address, ENS name, or OpenSea username", "in": "path", - "name": "handle", + "name": "identifier", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "vitalik.eth" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Search keyword", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "query", + "required": true, + "type": "string", + "x-example": "ape" }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "default": 20, + "description": "Results per page, 1-100", "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -329127,7 +365029,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/opensea.itemSearchResponseDoc" } }, "400": { @@ -329160,41 +365062,55 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly product recommendations", + "summary": "Search the NFTs a wallet holds", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/search/suggest": { + "/opensea/rankings": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from Oh Polly's (https://www.ohpolly.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "ohpolly-search-suggest", + "description": "Returns the collections on one of OpenSea's ranking boards for a given window, each with its ranking score, floor price, and rolling stats. `TRENDING` ranks by recent momentum, `TOP` by absolute volume, and `NEW` surfaces recently launched collections.", + "operationId": "opensea-rankings", "parameters": [ { - "description": "Search query", + "default": "TRENDING", + "description": "Ranking board", + "enum": [ + "TOP", + "TRENDING", + "NEW" + ], "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "wool" + "name": "ranking", + "type": "string" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "default": "ONE_DAY", + "description": "Ranking window", + "enum": [ + "ONE_HOUR", + "ONE_DAY", + "SEVEN_DAYS", + "THIRTY_DAYS", + "ALL_TIME" + ], "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "name": "timeframe", + "type": "string" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "default": 20, + "description": "Collections per page, 1-100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 10 + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous next_page_cursor", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -329204,7 +365120,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/opensea.rankingsResponseDoc" } }, "400": { @@ -329231,42 +365147,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get Oh Polly search suggestions", + "summary": "List ranked OpenSea collections", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/sitemap/urls": { + "/opensea/search/collections": { "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": "Runs a keyword search across OpenSea collections and returns the matches with floor price, verification flag, and headline stats. Use this to resolve a human-readable name to the `slug` the other collection endpoints take.", + "operationId": "opensea-search-collections", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "Search keyword", "in": "query", - "name": "type", + "name": "query", + "required": true, "type": "string", - "x-example": "products" + "x-example": "ape" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "default": 20, + "description": "Results per page, 1-100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -329276,7 +365181,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/opensea.collectionSearchResponseDoc" } }, "400": { @@ -329303,19 +365208,25 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly sitemap URLs", + "summary": "Search OpenSea collections by keyword", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/sitemaps": { + "/opensea/top-movers": { "get": { - "consumes": [ - "application/json" + "description": "Returns the collections with the largest recent floor-price and volume moves, each with its current floor and rolling one-hour and one-day stats. Complements `/opensea/rankings`, which ranks by score rather than by change.", + "operationId": "opensea-top-movers", + "parameters": [ + { + "default": 20, + "description": "Collections to return, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + } ], - "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" ], @@ -329323,7 +365234,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/opensea.collectionShelfResponseDoc" } }, "400": { @@ -329350,19 +365261,43 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly sitemaps", + "summary": "List the biggest movers on OpenSea", "tags": [ - "Oh Polly" + "OpenSea" ] } }, - "/ohpolly/store": { + "/opentable/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized storefront metadata for Oh Polly (https://www.ohpolly.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "ohpolly-store", + "description": "Returns a restaurant's profile (location, cuisines, hours, price band, review summary) plus real-time bookable timeslots for the given date/time and party size. Credential-free.", + "operationId": "opentable-restaurant", + "parameters": [ + { + "description": "OpenTable restaurant id", + "in": "query", + "name": "restaurant_id", + "required": true, + "type": "string", + "x-example": "131459" + }, + { + "description": "Reservation date/time, RFC3339-minute local format; defaults to now", + "in": "query", + "name": "date_time", + "type": "string", + "x-example": "2026-08-04T19:00" + }, + { + "description": "Party size, default 2", + "in": "query", + "name": "party_size", + "type": "integer", + "x-example": 2 + } + ], "produces": [ "application/json" ], @@ -329370,7 +365305,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/opentable.restaurantResponseDoc" } }, "400": { @@ -329379,8 +365314,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" } @@ -329397,36 +365338,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Oh Polly store metadata", + "summary": "Get an OpenTable restaurant's profile and live availability", "tags": [ - "Oh Polly" + "OpenTable" ] } }, - "/oldnavy/categories": { + "/opentable/restaurant/menus": { "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) -- Gap, Banana Republic, and Athleta render their storefront navigation as client-side-only JavaScript with no server-rendered category id to scrape.", - "operationId": "oldnavy-categories", + "description": "Returns a restaurant's menus (sections, items, prices). Credential-free.", + "operationId": "opentable-restaurant-menus", "parameters": [ { - "default": "on", - "description": "Storefront to list -- only on (Old Navy) is currently supported", - "enum": [ - "on" - ], - "in": "query", - "name": "brand", - "type": "string" - }, - { - "description": "Category id to list related categories for; omit to list the top-level divisions", + "description": "OpenTable restaurant id", "in": "query", - "name": "cid", + "name": "restaurant_id", + "required": true, "type": "string", - "x-example": "1185232" + "x-example": "164555" } ], "produces": [ @@ -329436,7 +365368,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.categoriesResponseDoc" + "$ref": "#/definitions/opentable.menusResponseDoc" } }, "400": { @@ -329445,8 +365377,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" } @@ -329463,49 +365401,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Old Navy storefront categories", + "summary": "Get an OpenTable restaurant's menus", "tags": [ - "Old Navy" + "OpenTable" ] } }, - "/oldnavy/category": { + "/opentable/restaurant/reviews": { "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, normalized product summaries with per-color inventory data, and available search facets with live counts.", - "operationId": "oldnavy-category", + "description": "Returns a page of diner reviews (author, text, per-category ratings) for a restaurant. Credential-free.", + "operationId": "opentable-restaurant-reviews", "parameters": [ { - "description": "Category id, from a storefront category page's own cid query parameter", + "description": "OpenTable restaurant id", "in": "query", - "name": "cid", + "name": "restaurant_id", "required": true, "type": "string", - "x-example": "85729" + "x-example": "131459" }, { - "default": "on", - "description": "Storefront to browse", - "enum": [ - "on", - "gap", - "br", - "at" - ], + "description": "Page number, default 1", "in": "query", - "name": "brand", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "default": 1, - "description": "One-based page", + "description": "Reviews per page, default 20", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "size", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -329515,7 +365445,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.categoryResponseDoc" + "$ref": "#/definitions/opentable.reviewsResponseDoc" } }, "400": { @@ -329530,8 +365460,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -329548,40 +365478,64 @@ "ApiKeyAuth": [] } ], - "summary": "Browse an Old Navy, Gap, Banana Republic, or Athleta category", + "summary": "Get a page of an OpenTable restaurant's diner reviews", "tags": [ - "Old Navy" + "OpenTable" ] } }, - "/oldnavy/product": { + "/opentable/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized 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": "Searches restaurants by free-text term (cuisine, name, neighborhood) near a latitude/longitude, for a given date/time and party size, including inline live availability per result. Credential-free.", + "operationId": "opentable-search", "parameters": [ { - "description": "Color-specific product id, from a search result's colors[].id field", + "description": "Free-text search term", "in": "query", - "name": "pid", + "name": "term", "required": true, "type": "string", - "x-example": "907290012" + "x-example": "dinner" }, { - "default": "on", - "description": "Storefront the pid belongs to", - "enum": [ - "on", - "gap", - "br", - "at" - ], + "description": "Search center latitude", "in": "query", - "name": "brand", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 10.7873 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": 106.7407 + }, + { + "description": "Reservation date/time, RFC3339-minute local format; defaults to now", + "in": "query", + "name": "date_time", + "type": "string", + "x-example": "2026-08-04T19:00" + }, + { + "description": "Party size, default 2", + "in": "query", + "name": "party_size", + "type": "integer", + "x-example": 2 + }, + { + "description": "Max results, default 10", + "in": "query", + "name": "size", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -329591,7 +365545,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.productResponseDoc" + "$ref": "#/definitions/opentable.searchResponseDoc" } }, "400": { @@ -329600,11 +365554,43 @@ "$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": "Search OpenTable restaurants near a location", + "tags": [ + "OpenTable" + ] + } + }, + "/otto/categories": { + "get": { + "description": "Returns the public top-level category navigation from Otto.de's server-rendered homepage. Each entry includes its canonical browsing URL.", + "operationId": "otto-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/otto.categoriesResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -329624,68 +365610,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Old Navy, Gap, Banana Republic, or Athleta product", + "summary": "Get Otto.de's top-level categories", "tags": [ - "Old Navy" + "Otto" ] } }, - "/oldnavy/product/availability": { + "/otto/product": { "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 a product's public detail, images, selectable colors and sizes. This endpoint uses a browser renderer because Otto.de product pages require JavaScript rendering.", + "operationId": "otto-product", "parameters": [ { - "description": "Color-level Old Navy/Gap/Banana Republic/Athleta product id", + "description": "Canonical Otto.de product URL returned by otto-search", "in": "query", - "name": "pid", + "name": "url", "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": "zip", - "type": "string", - "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 + "x-example": "https://www.otto.de/p/nike-nike-performance-damen-laufschuh-juniper-trail-3-laufschuh-C2019218809/" } ], "produces": [ @@ -329695,7 +365637,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.availabilityResponseDoc" + "$ref": "#/definitions/otto.productResponseDoc" } }, "400": { @@ -329704,12 +365646,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -329728,48 +365664,30 @@ "ApiKeyAuth": [] } ], - "summary": "Check in-store pickup stock for an Old Navy, Gap, Banana Republic, or Athleta product", + "summary": "Get an Otto.de product", "tags": [ - "Old Navy" + "Otto" ] } }, - "/oldnavy/product/reviews": { + "/otto/search": { "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": "Searches Otto.de's public catalogue and returns the server-rendered product cards. offset advances by Otto's fixed 109-card page size; valid values are 0, 109, 218, and so on.", + "operationId": "otto-search", "parameters": [ { - "description": "Color-specific product id, from a search result's colors[].id field", + "description": "Product search keyword", "in": "query", - "name": "pid", + "name": "q", "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" + "x-example": "laufschuhe" }, { - "default": 1, - "description": "One-based page, 10 reviews per page", + "default": 0, + "description": "Result offset; non-negative multiple of 109", "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page", + "name": "offset", "type": "integer" } ], @@ -329780,7 +365698,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.productReviewsResponseDoc" + "$ref": "#/definitions/otto.searchResponseDoc" } }, "400": { @@ -329813,49 +365731,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get reviews for an Old Navy, Gap, Banana Republic, or Athleta product", + "summary": "Search Otto.de products", "tags": [ - "Old Navy" + "Otto" ] } }, - "/oldnavy/search": { + "/pagesix/article": { "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 normalized 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 public Page Six article metadata and body paragraphs from a canonical article URL.", + "operationId": "pagesix-article", "parameters": [ { - "description": "Search keyword", + "description": "Canonical Page Six article URL", "in": "query", - "name": "keyword", + "name": "url", "required": true, "type": "string", - "x-example": "jeans" + "x-example": "https://pagesix.com/2026/09/24/celebrity-news/example-article-slug/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "default": "on", - "description": "Storefront to search", - "enum": [ - "on", - "gap", - "br", - "at" - ], - "in": "query", - "name": "brand", - "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": 1, - "description": "One-based page", + "ApiKeyAuth": [] + } + ], + "summary": "Get Page Six article content", + "tags": [ + "Page Six" + ] + } + }, + "/pagesix/author": { + "get": { + "description": "Returns a Page Six author's byline metadata, biography, social links, and recent articles from a canonical author URL.", + "operationId": "pagesix-author", + "parameters": [ + { + "description": "Canonical Page Six author URL", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://pagesix.com/author/jane-doe/" } ], "produces": [ @@ -329865,7 +365812,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.searchResponseDoc" + "$ref": "#/definitions/publicnews.pagesixAuthorResponseDoc" } }, "400": { @@ -329880,12 +365827,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -329898,53 +365839,56 @@ "ApiKeyAuth": [] } ], - "summary": "Search Old Navy, Gap, Banana Republic, or Athleta products", + "summary": "Get a Page Six author profile", "tags": [ - "Old Navy" + "Page Six" ] } }, - "/oldnavy/stores": { + "/pagesix/headlines": { "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 fresh headlines from one public Page Six RSS section.", + "operationId": "pagesix-headlines", "parameters": [ { - "description": "Zip code or city to search near", - "in": "query", - "name": "search", - "type": "string", - "x-example": "10001" - }, - { - "description": "Latitude (must be given together with lng)", - "in": "query", - "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", + "description": "Page Six RSS section slug", "enum": [ - "on", - "gap", - "br", - "at" + "awards", + "beauty", + "california-society", + "celebrity-news", + "contributor-content", + "entertainment", + "fashion", + "hollywood", + "hollywood-awards-watch", + "hollywood-media-news", + "hollywood-studio-news", + "lifestyle", + "los-angeles-society", + "media", + "miami-society", + "movies", + "music", + "new-york-city-society", + "palm-beach-society", + "parents", + "real-estate", + "royal-family", + "shopping", + "society", + "sports", + "style", + "taylor-swift", + "travel", + "tv", + "washington-dc-society" ], "in": "query", - "name": "brand", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "awards" } ], "produces": [ @@ -329954,7 +365898,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.storesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -329963,12 +365907,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -329981,46 +365919,16 @@ "ApiKeyAuth": [] } ], - "summary": "Find Old Navy, Gap, Banana Republic, or Athleta store locations", + "summary": "Get Page Six section headlines", "tags": [ - "Old Navy" + "Page Six" ] } }, - "/opensea/activity": { + "/pagesix/news": { "get": { - "description": "Returns the live cross-collection activity feed — every sale, listing, offer, transfer, and mint OpenSea indexes, newest first, with the collection each event belongs to. Filter with `event_types` for a marketplace-wide trade tape.", - "operationId": "opensea-activity", - "parameters": [ - { - "default": 20, - "description": "Events per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Comma-separated event types", - "enum": [ - "SALE", - "LISTING", - "OFFER", - "TRANSFER", - "MINT", - "COLLECTION_OFFER", - "TRAIT_OFFER" - ], - "in": "query", - "name": "event_types", - "type": "string" - } - ], + "description": "Returns fresh Page Six top stories from its public RSS feed.", + "operationId": "pagesix-news", "produces": [ "application/json" ], @@ -330028,13 +365936,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.activityResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -330055,16 +365957,16 @@ "ApiKeyAuth": [] } ], - "summary": "List marketplace-wide OpenSea activity", + "summary": "Get Page Six top stories", "tags": [ - "OpenSea" + "Page Six" ] } }, - "/opensea/categories": { + "/pagesix/sections": { "get": { - "description": "Returns OpenSea's category taxonomy as top-level groups and their child categories, with display names. The child slugs are the canonical category identifiers used across the marketplace.", - "operationId": "opensea-categories", + "description": "Returns the public Page Six RSS section inventory used by the headlines endpoint.", + "operationId": "pagesix-sections", "produces": [ "application/json" ], @@ -330072,11 +365974,87 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Page Six RSS sections", + "tags": [ + "Page Six" + ] + } + }, + "/pandamart/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns pandamart grocery/convenience darkstores delivering to a latitude/longitude. Each store carries its code (the value the store and products endpoints take), name, address, coordinates, budget tier, chain, 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": "pandamart-search", + "parameters": [ + { + "description": "Delivery Hero market. One of sg, pk, bd, hk, my, ph. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph" + ], + "in": "query", + "name": "market", + "type": "string", + "x-example": "sg" }, - "429": { - "description": "Too Many Requests", + { + "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": "Darkstores to return, clamped to 50 (default 20)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Result offset for pagination (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pandamart.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -330093,16 +366071,58 @@ "ApiKeyAuth": [] } ], - "summary": "List OpenSea's browse categories", + "summary": "Search pandamart darkstores near a location", "tags": [ - "OpenSea" + "Pandamart" ] } }, - "/opensea/chains": { + "/pandamart/store": { "get": { - "description": "Returns every blockchain OpenSea indexes, with its identifier, display name, and architecture. The identifiers are the accepted values for the `chain` path parameter on the item endpoints.", - "operationId": "opensea-chains", + "consumes": [ + "application/json" + ], + "description": "Returns one pandamart darkstore's detail by code: name, address, coordinates, budget tier, chain, 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": "pandamart-store", + "parameters": [ + { + "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph" + ], + "in": "query", + "name": "market", + "type": "string", + "x-example": "sg" + }, + { + "description": "Darkstore code, from /pandamart/search's code field", + "in": "query", + "name": "code", + "required": true, + "type": "string", + "x-example": "wsg7" + }, + { + "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" ], @@ -330110,11 +366130,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.chainsResponseDoc" + "$ref": "#/definitions/pandamart.storeResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -330131,24 +366157,42 @@ "ApiKeyAuth": [] } ], - "summary": "List the chains OpenSea indexes", + "summary": "Get one pandamart darkstore's detail", "tags": [ - "OpenSea" + "Pandamart" ] } }, - "/opensea/collection/{slug}": { + "/pandamart/store/categories": { "get": { - "description": "Returns public marketplace metadata and trading statistics for one NFT collection: name, description, imagery, verification flag, contract address and chain, social links, current floor price and top collection offer, plus lifetime and rolling one-hour/one-day/seven-day/thirty-day sales, volume, and floor-price change. Delisted and blacklisted collections return 404 rather than an empty payload.", - "operationId": "opensea-collection", + "consumes": [ + "application/json" + ], + "description": "Returns one darkstore's full category tree: every category and sub-category, each with the upstream-reported product count and (for top-level categories) an image. Sourced from the same page /pandamart/store/products reads, so it costs no extra request beyond a plain store lookup. This lists what categories exist and how large they are -- it does not fetch the items inside any one category, which still requires a resolved delivery-address session this repo could not reproduce. Sub-category product counts are frequently 0 upstream; only top-level counts are reliably populated.", + "operationId": "pandamart-store-categories", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", + "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph" + ], + "in": "query", + "name": "market", + "type": "string", + "x-example": "sg" + }, + { + "description": "Darkstore code, from /pandamart/search's code field", + "in": "query", + "name": "code", "required": true, "type": "string", - "x-example": "boredapeyachtclub" + "x-example": "wsg7" } ], "produces": [ @@ -330158,7 +366202,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionResponseDoc" + "$ref": "#/definitions/pandamart.categoriesResponseDoc" } }, "400": { @@ -330173,12 +366217,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -330191,52 +366229,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get an OpenSea collection", + "summary": "Get one pandamart darkstore's category tree", "tags": [ - "OpenSea" + "Pandamart" ] } }, - "/opensea/collection/{slug}/activity": { + "/pandamart/store/product": { "get": { - "description": "Returns a cursor-paginated feed of marketplace events for a collection — sales, listings, offers, transfers, mints, and collection/trait offers — with the counterparties, price, marketplace, and transaction hash. Filter with `event_types` to narrow the feed, for example `event_types=SALE` for a sales-only history.", - "operationId": "opensea-collection-activity", + "consumes": [ + "application/json" + ], + "description": "Returns one product's full detail by ID: the same fields a shelf/search result carries plus category_id and, for weighable/grocery items, per-unit pricing and nutrition attributes. Resolves the store's page slug internally, so only the darkstore code and product ID are needed.", + "operationId": "pandamart-store-product", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "boredapeyachtclub" - }, - { - "default": 20, - "description": "Events per page, 1-100", + "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph" + ], "in": "query", - "name": "limit", - "type": "integer" + "name": "market", + "type": "string", + "x-example": "sg" }, { - "description": "Opaque pagination cursor from a previous next_page_cursor", + "description": "Darkstore code, from /pandamart/search's code field", "in": "query", - "name": "cursor", - "type": "string" + "name": "code", + "required": true, + "type": "string", + "x-example": "wsg7" }, { - "description": "Comma-separated event types", - "enum": [ - "SALE", - "LISTING", - "OFFER", - "TRANSFER", - "MINT", - "COLLECTION_OFFER", - "TRAIT_OFFER" - ], + "description": "Product ID, from a search/products/categories response's id field", "in": "query", - "name": "event_types", - "type": "string" + "name": "product_id", + "required": true, + "type": "string", + "x-example": "8012454" } ], "produces": [ @@ -330246,7 +366282,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.activityResponseDoc" + "$ref": "#/definitions/pandamart.productDetailResponseDoc" } }, "400": { @@ -330261,12 +366297,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -330279,24 +366309,42 @@ "ApiKeyAuth": [] } ], - "summary": "List an OpenSea collection's marketplace activity", + "summary": "Get one pandamart product's full detail", "tags": [ - "OpenSea" + "Pandamart" ] } }, - "/opensea/collection/{slug}/best-deals": { + "/pandamart/store/products": { "get": { - "description": "Returns the listed items OpenSea surfaces as the best value in a collection, judged against each item's rarity and the collection floor. This is the curated \"best deals\" shelf from the collection page, not a generic price sort.", - "operationId": "opensea-collection-best-deals", + "consumes": [ + "application/json" + ], + "description": "Returns one darkstore's product showcase: every named shelf its own home page displays (deals, new arrivals, category highlights, etc.), each with real prices, stock, and availability. This is the curated set of shelves the store's home page surfaces, not the full category-browsable catalog -- browsing into a specific category page requires a resolved delivery-address session this repo could not reproduce server-side.", + "operationId": "pandamart-store-products", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", + "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph" + ], + "in": "query", + "name": "market", + "type": "string", + "x-example": "sg" + }, + { + "description": "Darkstore code, from /pandamart/search's code field", + "in": "query", + "name": "code", "required": true, "type": "string", - "x-example": "boredapeyachtclub" + "x-example": "wsg7" } ], "produces": [ @@ -330306,7 +366354,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.itemsShelfResponseDoc" + "$ref": "#/definitions/pandamart.productsResponseDoc" } }, "400": { @@ -330321,12 +366369,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -330339,49 +366381,76 @@ "ApiKeyAuth": [] } ], - "summary": "List an OpenSea collection's best-value listings", + "summary": "Get one pandamart darkstore's product showcase", "tags": [ - "OpenSea" + "Pandamart" ] } }, - "/opensea/collection/{slug}/chart": { + "/pandamart/store/search": { "get": { - "description": "Returns a time series for a collection — either its floor price or its traded volume — over the requested window, with each sample in both the settlement token and USD. Use `metric=floor_price` for the floor line and `metric=volume` for the volume bars.", - "operationId": "opensea-collection-chart", + "consumes": [ + "application/json" + ], + "description": "Searches by keyword within one darkstore's own catalog -- the pandamart equivalent of the search box on a darkstore page. Unlike the product showcase's curated shelves, this reaches the store's full catalog by keyword. Returns matching products with real prices, stock, and availability, plus total_products and has_more for pagination via page/limit.", + "operationId": "pandamart-store-search", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", + "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph" + ], + "in": "query", + "name": "market", + "type": "string", + "x-example": "sg" + }, + { + "description": "Darkstore code, from /pandamart/search's code field", + "in": "query", + "name": "code", "required": true, "type": "string", - "x-example": "boredapeyachtclub" + "x-example": "wsg7" }, { - "default": "floor_price", - "description": "Series to return", - "enum": [ - "floor_price", - "volume" - ], + "description": "Product search text", "in": "query", - "name": "metric", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "milk" }, { - "default": "SEVEN_DAYS", - "description": "Window", + "description": "Result order. One of RELEVANCE, PRICE_ASC, PRICE_DESC. Defaults to RELEVANCE.", "enum": [ - "ONE_HOUR", - "ONE_DAY", - "SEVEN_DAYS", - "THIRTY_DAYS", - "ALL_TIME" + "RELEVANCE", + "PRICE_ASC", + "PRICE_DESC" ], "in": "query", - "name": "timeframe", - "type": "string" + "name": "sort", + "type": "string", + "x-example": "RELEVANCE" + }, + { + "description": "1-based result page (default 1)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Products per page, clamped to 10-50 (default 20)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -330391,7 +366460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.chartResponseDoc" + "$ref": "#/definitions/pandamart.storeSearchResponseDoc" } }, "400": { @@ -330400,11 +366469,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search for products within one pandamart darkstore", + "tags": [ + "Pandamart" + ] + } + }, + "/panera/at-work-locations": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the full national Panera at Work location list -- a separate B2B workplace-delivery drop-off program from ordinary cafe pickup/delivery covered by GET /panera/locations. Each location carries its address, coordinates, delivery contact, lead time, the cafe id that services it, and its scheduled drop-off/order-cutoff times per weekday. This is a small, national dataset -- no query parameters are needed.", + "operationId": "panera-at-work-locations", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/panera.atWorkLocationsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -330424,24 +366522,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an OpenSea collection's price or volume history", + "summary": "Get Panera Bread's Panera at Work workplace-delivery locations", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/depth": { + "/panera/cafe": { "get": { - "description": "Returns the full bid/ask ladder for a collection: resting listings and offers grouped into price levels with the quantity available at each. This is the depth chart behind OpenSea's own collection page, and it is the fastest way to see how thin or deep the book is above the floor.", - "operationId": "opensea-collection-depth", + "consumes": [ + "application/json" + ], + "description": "Returns one Panera Bread cafe's address, phone, coordinates, amenity flags, per-fulfillment-channel availability (dine-in, storefront/pickup, rapid pickup, drive-thru, curbside, delivery -- each with its own available/open-now/lead-time-minutes and weekly hours where Panera publishes them) and the published storefront hours for the next calendar week with concrete dates. Cafe ids come from GET /panera/locations. An unknown cafe id returns a 404.", + "operationId": "panera-cafe", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", + "description": "Panera cafe id, from /panera/locations", + "in": "query", + "name": "cafe_id", "required": true, - "type": "string", - "x-example": "boredapeyachtclub" + "type": "integer", + "x-example": 601447 } ], "produces": [ @@ -330451,7 +366552,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.depthResponseDoc" + "$ref": "#/definitions/panera.cafeResponseDoc" } }, "400": { @@ -330484,48 +366585,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an OpenSea collection's order book", + "summary": "Get one Panera Bread cafe's detail and hours", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/holders": { + "/panera/catering-delivery-info": { "get": { - "description": "Returns a cursor-paginated leaderboard of wallets holding items in the collection, ranked by quantity held, with each holder's address and display name where OpenSea publishes one.", - "operationId": "opensea-collection-holders", + "consumes": [ + "application/json" + ], + "description": "Returns one cafe's catering delivery fee, minimum order amount, weekly delivery hours, order-size lead-time tiers (e.g. a $750+ order needs a longer lead time than a smaller one), and upcoming available delivery dates with their order windows. This is Panera's catering delivery flow specifically -- catering pickup happens at the cafe itself, whose hours are already covered by GET /panera/cafe. Returns 404 if the cafe does not offer catering delivery.", + "operationId": "panera-catering-delivery-info", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "boredapeyachtclub" - }, - { - "default": 20, - "description": "Holders per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "DESC", - "description": "Sort direction by quantity held", - "enum": [ - "ASC", - "DESC" - ], + "description": "Panera cafe id, from /panera/locations", "in": "query", - "name": "sort_direction", - "type": "string" + "name": "cafe_id", + "required": true, + "type": "integer", + "x-example": 601447 } ], "produces": [ @@ -330535,7 +366615,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionHoldersResponseDoc" + "$ref": "#/definitions/panera.cateringDeliveryInfoResponseDoc" } }, "400": { @@ -330568,98 +366648,27 @@ "ApiKeyAuth": [] } ], - "summary": "List an OpenSea collection's holders", + "summary": "Get one Panera Bread cafe's catering delivery fee, minimum order, hours and lead times", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/items": { + "/panera/catering-menu": { "get": { - "description": "Returns a cursor-paginated page of NFTs in a collection with their traits, rarity rank, current owner, best standing listing, and last sale price. Pass `cursor` from `next_page_cursor` to page forward. Narrow the result set with `listed_only`, `traits`, a `min_price`/`max_price` band, or a `min_rarity`/`max_rarity` rank band — the filters combine, so `traits=Fur:Solid Gold&listed_only=true` returns only buyable Solid Gold apes.", - "operationId": "opensea-collection-items", + "consumes": [ + "application/json" + ], + "description": "Returns one cafe's catering category list and its full catering item catalog, priced for that specific cafe -- Panera's catering ordering flow is a separate application from its retail site, with its own category structure, pricing and item availability (confirmed live: the same item priced differently between a placeholder default cafe and a real cafe). Categories are a flat list (catering does not publish a category hierarchy the way the retail menu does). Each item carries its price, product type, portion label, whether it is customizable, a full published nutrient panel (calories, calories from fat, fat, saturated fat, trans fat, cholesterol, sodium, carbohydrates, dietary fiber, total sugars, protein, caffeine -- richer than the retail menu's calories/caffeine-only surface), its allergen statement (contains / may-contain, each with an id and display name), and a live in_stock flag from this cafe's current catering stockout feed for today. Cafe ids come from GET /panera/locations.", + "operationId": "panera-catering-menu", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "boredapeyachtclub" - }, - { - "default": 20, - "description": "Items per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "PRICE", - "description": "Sort field", - "enum": [ - "PRICE", - "LAST_SALE_DATE", - "RARITY", - "CREATED_DATE" - ], - "in": "query", - "name": "sort_by", - "type": "string" - }, - { - "default": "ASC", - "description": "Sort direction", - "enum": [ - "ASC", - "DESC" - ], - "in": "query", - "name": "sort_direction", - "type": "string" - }, - { - "description": "Only return items with a standing listing", - "in": "query", - "name": "listed_only", - "type": "boolean" - }, - { - "description": "Comma-separated trait_type:value pairs", - "in": "query", - "name": "traits", - "type": "string", - "x-example": "Fur:Solid Gold,Eyes:Laser Eyes" - }, - { - "description": "Minimum listing price in the collection's native token", - "in": "query", - "name": "min_price", - "type": "number" - }, - { - "description": "Maximum listing price in the collection's native token", - "in": "query", - "name": "max_price", - "type": "number" - }, - { - "description": "Minimum rarity rank (1 is rarest)", - "in": "query", - "name": "min_rarity", - "type": "integer" - }, - { - "description": "Maximum rarity rank", + "description": "Panera cafe id, from /panera/locations", "in": "query", - "name": "max_rarity", - "type": "integer" + "name": "cafe_id", + "required": true, + "type": "integer", + "x-example": 601447 } ], "produces": [ @@ -330669,7 +366678,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionItemsResponseDoc" + "$ref": "#/definitions/panera.cateringMenuResponseDoc" } }, "400": { @@ -330678,12 +366687,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -330702,48 +366705,27 @@ "ApiKeyAuth": [] } ], - "summary": "List items in an OpenSea collection", + "summary": "Get one Panera Bread cafe's catering menu with prices, nutrition and allergens", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/offers": { + "/panera/geocode": { "get": { - "description": "Returns the collection-wide offer book as price levels: how many standing offers sit at each price per item, plus the aggregate offer count and total value across the whole collection. Offers are sorted by price.", - "operationId": "opensea-collection-offers", + "consumes": [ + "application/json" + ], + "description": "Resolves a free-text address, city, or postal code to coordinates using Panera Bread's own locator geocoder -- the same lookup its site uses to center a cafe search. Returns latitude/longitude plus the resolved city, state, country and formatted address. An address Panera cannot resolve returns a single result with resolved false rather than an error.", + "operationId": "panera-geocode", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", + "description": "Free-text address, city, or postal code", + "in": "query", + "name": "address", "required": true, "type": "string", - "x-example": "boredapeyachtclub" - }, - { - "default": 20, - "description": "Price levels per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "DESC", - "description": "Sort direction by offer price", - "enum": [ - "ASC", - "DESC" - ], - "in": "query", - "name": "sort_direction", - "type": "string" + "x-example": "Chicago, IL" } ], "produces": [ @@ -330753,7 +366735,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionOffersResponseDoc" + "$ref": "#/definitions/panera.geocodeResponseDoc" } }, "400": { @@ -330762,12 +366744,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -330786,24 +366762,35 @@ "ApiKeyAuth": [] } ], - "summary": "List an OpenSea collection's offer book", + "summary": "Geocode a free-text address for Panera Bread's locator", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/rarest-items": { + "/panera/item-detail": { "get": { - "description": "Returns the rarest items in a collection that currently have a standing listing, each with its rarity rank, traits, and asking price. Unlike the trait endpoints, this shelf is scoped to what is actually buyable right now.", - "operationId": "opensea-collection-rarest-items", + "consumes": [ + "application/json" + ], + "description": "Returns one menu item's full description, ingredient statement, a full per-serving nutrient panel (richer than GET /panera/menu's calories/caffeine-only surface), its allergen statement, and every selectable size with its own price and calories. item_id may be negative -- GET /panera/menu itself surfaces negative item ids for some items, and they resolve fine here. Returns 404 if Panera publishes no detail page for the given item id at this cafe.", + "operationId": "panera-item-detail", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", + "description": "Panera cafe id, from /panera/locations", + "in": "query", + "name": "cafe_id", "required": true, - "type": "string", - "x-example": "boredapeyachtclub" + "type": "integer", + "x-example": 601447 + }, + { + "description": "Menu item id, from /panera/menu", + "in": "query", + "name": "item_id", + "required": true, + "type": "integer", + "x-example": 650115 } ], "produces": [ @@ -330813,7 +366800,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.itemsShelfResponseDoc" + "$ref": "#/definitions/panera.itemDetailResponseDoc" } }, "400": { @@ -330846,39 +366833,35 @@ "ApiKeyAuth": [] } ], - "summary": "List an OpenSea collection's rarest listed items", + "summary": "Get one Panera Bread menu item's full detail", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/search-items": { + "/panera/item-options": { "get": { - "description": "Runs a keyword search scoped to one collection — matching on item name and trait values — and returns the hits with rarity rank and best standing listing. Narrower than `/opensea/collection/{slug}/items`, which lists everything.", - "operationId": "opensea-collection-search-items", + "consumes": [ + "application/json" + ], + "description": "Returns one item's selectable option groups: for a combo, each group is a slot to fill (for example \"pick 4 sandwiches\", \"pick 1 soup\"), listing every eligible choice; for a single customizable item, each group is one topping/add-in/amount choice (for example No, Light, Regular, Extra). Each group has min_allowed and max_allowed (how many selections it requires). Each option is one selectable choice, with its own selectable variants (amount tiers) each carrying an item_id and price -- price 0 for a variant included at no extra charge. Panera does not publish a resolved display name for options or groups on this surface, so each option carries its raw upstream image_key as the caller-facing identifier instead of a name. An item that is not customizable, or an unknown item id, returns an empty groups list rather than an error -- Panera's own API does not distinguish the two cases. Item ids come from GET /panera/menu.", + "operationId": "panera-item-options", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "boredapeyachtclub" - }, - { - "description": "Search keyword", + "description": "Panera cafe id, from /panera/locations", "in": "query", - "name": "query", + "name": "cafe_id", "required": true, - "type": "string", - "x-example": "gold" + "type": "integer", + "x-example": 601447 }, { - "default": 20, - "description": "Results per page, 1-100", + "description": "Menu item id, from /panera/menu", "in": "query", - "name": "limit", - "type": "integer" + "name": "item_id", + "required": true, + "type": "integer", + "x-example": 643423 } ], "produces": [ @@ -330888,7 +366871,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.itemSearchResponseDoc" + "$ref": "#/definitions/panera.itemOptionsResponseDoc" } }, "400": { @@ -330897,12 +366880,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -330921,24 +366898,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search items inside an OpenSea collection", + "summary": "Get one Panera Bread menu item's selectable option groups", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/social-proof": { + "/panera/locations": { "get": { - "description": "Returns how many accounts follow or watch a collection, plus the notable collectors OpenSea highlights for it. Useful as a demand signal alongside the trading stats.", - "operationId": "opensea-collection-social-proof", + "consumes": [ + "application/json" + ], + "description": "Returns one level of Panera Bread's US cafe locator tree. Omit both state and city to list every US state and territory Panera serves, each with its cafe count. Pass state to list every city in that state, each with its full cafe list -- id, name, street address, city, state, postal code, phone, coordinates and per-cafe amenity flags (for example hasDriveThru, hasDelivery, hasCurbside, hasKiosk). Pass both state and city to narrow to that one city's cafes. A state Panera does not serve, or a city with no match, returns an empty list rather than an error.", + "operationId": "panera-locations", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", - "required": true, + "description": "Two-letter US state abbreviation. Omit to list every state.", + "in": "query", + "name": "state", "type": "string", - "x-example": "boredapeyachtclub" + "x-example": "IL" + }, + { + "description": "City name. Requires state. Omit to list every city in the state.", + "in": "query", + "name": "city", + "type": "string", + "x-example": "Chicago" } ], "produces": [ @@ -330948,7 +366934,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.socialProofResponseDoc" + "$ref": "#/definitions/panera.locationsResponseDoc" } }, "400": { @@ -330957,12 +366943,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -330981,24 +366961,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an OpenSea collection's social following", + "summary": "Browse Panera Bread's US cafe locator", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/top-sales": { + "/panera/menu": { "get": { - "description": "Returns the highest-value sales ever recorded for a collection, with the buyer, seller, price, and transaction hash for each. Unlike `/opensea/collection/{slug}/activity?event_types=SALE`, which is a reverse-chronological feed, this is ranked by sale price.", - "operationId": "opensea-collection-top-sales", + "consumes": [ + "application/json" + ], + "description": "Returns one cafe's full category tree (with subcategories) and its complete item catalog, priced for that specific cafe -- Panera's prices are genuinely per-cafe, not a national list (the same salad has been confirmed live at different prices in Chicago and New York). Each item carries its price, product type, whether it is customizable, its published nutrients (Panera's placard API only ever publishes Calories and Caffeine on this surface -- a fuller macro/micronutrient breakdown is not available credential-free), its allergen statement (contains / may-contain, each with an id and display name), Panera's own wellness/dietary labels (for example Vegan, Vegetarian, Gluten Conscious), and a live in_stock flag from this cafe's current stockout feed. Cafe ids come from GET /panera/locations. An unknown cafe id returns a 404.", + "operationId": "panera-menu", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", + "description": "Panera cafe id, from /panera/locations", + "in": "query", + "name": "cafe_id", "required": true, - "type": "string", - "x-example": "boredapeyachtclub" + "type": "integer", + "x-example": 601447 } ], "produces": [ @@ -331008,7 +366991,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionTopSalesResponseDoc" + "$ref": "#/definitions/panera.menuResponseDoc" } }, "400": { @@ -331041,48 +367024,27 @@ "ApiKeyAuth": [] } ], - "summary": "List an OpenSea collection's highest-value sales", + "summary": "Get one Panera Bread cafe's full menu with prices, nutrition and allergens", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/trait-offers": { + "/panera/quantity-rules": { "get": { - "description": "Returns standing offers scoped to a specific trait value rather than the whole collection, as price levels with the trait type and value attached. Useful for pricing rare-trait items against the collection floor.", - "operationId": "opensea-collection-trait-offers", + "consumes": [ + "application/json" + ], + "description": "Returns one cafe's active order-quantity limits -- promotional or supply-constrained items Panera caps per order (for example a seasonal souffle limited to 6 within a 2-day window). Each rule has a scope (item or group), the item ids it applies to, and one or more day-offset windows each with its own max_quantity. A cafe with no active limits returns an empty rules list, not an error. Cafe ids come from GET /panera/locations.", + "operationId": "panera-quantity-rules", "parameters": [ { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "boredapeyachtclub" - }, - { - "default": 20, - "description": "Price levels per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "DESC", - "description": "Sort direction by offer price", - "enum": [ - "ASC", - "DESC" - ], + "description": "Panera cafe id, from /panera/locations", "in": "query", - "name": "sort_direction", - "type": "string" + "name": "cafe_id", + "required": true, + "type": "integer", + "x-example": 601447 } ], "produces": [ @@ -331092,7 +367054,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionTraitOffersResponseDoc" + "$ref": "#/definitions/panera.quantityRulesResponseDoc" } }, "400": { @@ -331101,12 +367063,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -331125,37 +367081,27 @@ "ApiKeyAuth": [] } ], - "summary": "List an OpenSea collection's trait offer book", + "summary": "Get one Panera Bread cafe's order-quantity limits", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collection/{slug}/traits": { + "/panera/retired-products": { "get": { - "description": "Returns a cursor-paginated page of the collection's trait types and the values each takes, with per-value item counts where OpenSea publishes them. Numeric traits carry a comparison operator.", - "operationId": "opensea-collection-traits", - "parameters": [ - { - "description": "OpenSea collection slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "boredapeyachtclub" - }, - { - "default": 20, - "description": "Trait types per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, + "consumes": [ + "application/json" + ], + "description": "Returns items no longer on the active menu, resolved through the given cafe's own version map -- either permanently retired (availability_stage RETIRED) or currently out of seasonal rotation (SEASONAL, may return). Each item carries its name, description, portion label and image key. Cafe ids come from GET /panera/locations.", + "operationId": "panera-retired-products", + "parameters": [ { - "description": "Opaque pagination cursor from a previous next_page_cursor", + "description": "Panera cafe id, from /panera/locations", "in": "query", - "name": "cursor", - "type": "string" + "name": "cafe_id", + "required": true, + "type": "integer", + "x-example": 601447 } ], "produces": [ @@ -331165,7 +367111,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionTraitsResponseDoc" + "$ref": "#/definitions/panera.retiredProductsResponseDoc" } }, "400": { @@ -331174,12 +367120,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -331198,24 +367138,35 @@ "ApiKeyAuth": [] } ], - "summary": "List an OpenSea collection's traits", + "summary": "Get Panera Bread's retired and seasonal menu items", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/collections": { + "/panera/time-slots": { "get": { - "description": "Resolves up to 50 collections in a single call from a comma-separated `slugs` list, returning each one's floor price, verification flag, headline stats, and per-marketplace listed-item counts. Use this instead of calling `/opensea/collection/{slug}` in a loop — it costs one upstream request regardless of how many slugs you pass. The `markets` array shows how many items are listed on OpenSea versus other marketplaces for the same collection.", - "operationId": "opensea-collections", + "consumes": [ + "application/json" + ], + "description": "Returns one cafe's available pickup/delivery order time-slot windows for one date, plus that date's overall open/close time. Unlike GET /panera/cafe's published storefront hours, this reflects live order-slot availability, not just when the cafe is open -- an empty windows list is a legitimate outcome (e.g. the cafe is closed that day), not an error. date must be YYYY-MM-DD, interpreted in the cafe's own local timezone.", + "operationId": "panera-time-slots", "parameters": [ { - "description": "Comma-separated collection slugs, at most 50", + "description": "Panera cafe id, from /panera/locations", "in": "query", - "name": "slugs", + "name": "cafe_id", + "required": true, + "type": "integer", + "x-example": 601447 + }, + { + "description": "Date, YYYY-MM-DD", + "in": "query", + "name": "date", "required": true, "type": "string", - "x-example": "boredapeyachtclub,azuki" + "x-example": "2026-09-10" } ], "produces": [ @@ -331225,7 +367176,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionsResponseDoc" + "$ref": "#/definitions/panera.timeSlotsResponseDoc" } }, "400": { @@ -331234,12 +367185,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -331258,40 +367203,27 @@ "ApiKeyAuth": [] } ], - "summary": "Look up several OpenSea collections at once", + "summary": "Get one Panera Bread cafe's available order time-slot windows", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/drops": { + "/panera/upsell-suggestions": { "get": { - "description": "Returns the NFT drop calendar — either upcoming mints or recently minted drops — with each drop's contract, chain, and parent collection. Use `type=UPCOMING` to watch for launches and `type=RECENTLY_MINTED` for ones that just went live.", - "operationId": "opensea-drops", + "consumes": [ + "application/json" + ], + "description": "Returns Panera's own suggested add-ons per menu item (for example \"Extra Turkey\" and \"Extra Bacon\" for a Bacon Turkey Bravo sandwich). Item ids on this surface are in a separate id space from /panera/menu's item_id, but both the item and its suggestions carry their own resolved names, so no cross-reference is needed. Cafe ids come from GET /panera/locations.", + "operationId": "panera-upsell-suggestions", "parameters": [ { - "default": "UPCOMING", - "description": "Calendar window", - "enum": [ - "UPCOMING", - "RECENTLY_MINTED" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": 20, - "description": "Drops per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", + "description": "Panera cafe id, from /panera/locations", "in": "query", - "name": "cursor", - "type": "string" + "name": "cafe_id", + "required": true, + "type": "integer", + "x-example": 601447 } ], "produces": [ @@ -331301,7 +367233,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.dropsResponseDoc" + "$ref": "#/definitions/panera.upsellSuggestionsResponseDoc" } }, "400": { @@ -331328,42 +367260,19 @@ "ApiKeyAuth": [] } ], - "summary": "List the OpenSea drop calendar", + "summary": "Get one Panera Bread cafe's per-item upsell suggestions", "tags": [ - "OpenSea" + "Panera" ] } }, - "/opensea/item/{chain}/{contract_address}/{token_id}": { + "/papajohns/allergens": { "get": { - "description": "Returns one NFT addressed by chain, contract address, and token id, including its traits, rarity rank, current owner, parent collection, best standing listing, and best standing offer. Call `/opensea/chains` for the accepted `chain` values.", - "operationId": "opensea-item", - "parameters": [ - { - "description": "Chain identifier from /opensea/chains", - "in": "path", - "name": "chain", - "required": true, - "type": "string", - "x-example": "ethereum" - }, - { - "description": "NFT contract address", - "in": "path", - "name": "contract_address", - "required": true, - "type": "string", - "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - }, - { - "description": "Token id within the contract", - "in": "path", - "name": "token_id", - "required": true, - "type": "string", - "x-example": "1" - } + "consumes": [ + "application/json" ], + "description": "Returns Papa John's complete published item x allergen matrix (crusts, sauces, cheeses, meats, veggies, and more), grouped by section, each item flagged for peanut, tree nut, egg, milk, wheat, soy, fish, shellfish, and sesame content.", + "operationId": "papajohns-allergens", "produces": [ "application/json" ], @@ -331371,19 +367280,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.itemResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/papajohns.allergensResponseDoc" } }, "429": { @@ -331404,68 +367301,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single OpenSea NFT", + "summary": "Get Papa John's full allergen guide", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/item/{chain}/{contract_address}/{token_id}/activity": { + "/papajohns/colombia/menu": { "get": { - "description": "Returns the marketplace event history for a single NFT — sales, listings, offers, transfers, and mints — with counterparties, price, and transaction hash. Filter with `event_types`, for example `event_types=SALE,TRANSFER` for an ownership trail.", - "operationId": "opensea-item-activity", + "consumes": [ + "application/json" + ], + "description": "Returns Papa John's **Colombia** menu with prices in Colombian pesos. Every product lists its priced SKU variants across the four axes Colombia sells on — size, dough, crust and sauce — each with its own price and availability. Colombia runs its own ordering platform, independent of the six markets behind GET /papajohns/intl/menu and of Peru and El Salvador, so it has its own endpoint. Prices are Colombian pesos and are not comparable with any other market. The full catalog is paged through before returning, so the response is complete rather than a first page.", + "operationId": "papajohns-colombia-menu", "parameters": [ { - "description": "Chain identifier from /opensea/chains", - "in": "path", - "name": "chain", - "required": true, - "type": "string", - "x-example": "ethereum" - }, - { - "description": "NFT contract address", - "in": "path", - "name": "contract_address", - "required": true, - "type": "string", - "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - }, - { - "description": "Token id within the contract", - "in": "path", - "name": "token_id", - "required": true, - "type": "string", - "x-example": "1" - }, - { - "default": 20, - "description": "Events per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", + "description": "Return only categories whose name contains this text, case-insensitive, e.g. Pizzas or Bebidas", "in": "query", - "name": "cursor", - "type": "string" + "name": "category", + "type": "string", + "x-example": "Pizzas" }, { - "description": "Comma-separated event types", - "enum": [ - "SALE", - "LISTING", - "OFFER", - "TRANSFER", - "MINT", - "COLLECTION_OFFER", - "TRAIT_OFFER" - ], + "description": "Include every priced SKU variant. Default true; set false for a lighter response carrying only each product's cheapest price.", "in": "query", - "name": "event_types", - "type": "string" + "name": "include_variants", + "type": "boolean", + "x-example": true } ], "produces": [ @@ -331475,7 +367337,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.activityResponseDoc" + "$ref": "#/definitions/papajohns.latamMenuResponseDoc" } }, "400": { @@ -331508,40 +367370,26 @@ "ApiKeyAuth": [] } ], - "summary": "List one OpenSea NFT's event history", + "summary": "Get the Papa John's Colombia priced menu (COP)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/item/{chain}/{contract_address}/{token_id}/chart": { + "/papajohns/deals": { "get": { - "description": "Returns every indexed sale of one NFT with its timestamp and price, in both the settlement token and USD — the price history behind the chart on an item page. An item that has never sold returns an empty `points` list. For collection-level sale history use `/opensea/collection/{slug}/activity?event_types=SALE`.", - "operationId": "opensea-item-chart", + "consumes": [ + "application/json" + ], + "description": "Returns the promotions a Papa John's US or Canada restaurant is currently running. Each offer carries its redemption code, title, description, offer price and — where the deal advertises a saving — the struck-through regular price, plus its artwork and deal-builder link. Pass a store_id from GET /papajohns/store or GET /papajohns/nearby: promotions are store-specific, and the national response is largely placeholders prompting the customer to choose a store, which are omitted here rather than returned as real offers.", + "operationId": "papajohns-deals", "parameters": [ { - "description": "Chain identifier from /opensea/chains", - "in": "path", - "name": "chain", - "required": true, - "type": "string", - "x-example": "ethereum" - }, - { - "description": "NFT contract address", - "in": "path", - "name": "contract_address", - "required": true, - "type": "string", - "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - }, - { - "description": "Token id within the contract", - "in": "path", - "name": "token_id", - "required": true, + "description": "Restaurant id from GET /papajohns/store or GET /papajohns/nearby. Omit for national promotions.", + "in": "query", + "name": "store_id", "type": "string", - "x-example": "2087" + "x-example": "5054" } ], "produces": [ @@ -331551,7 +367399,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.chartResponseDoc" + "$ref": "#/definitions/papajohns.dealsResponseDoc" } }, "400": { @@ -331584,40 +367432,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get an OpenSea NFT's sale-price history", + "summary": "List a Papa John's restaurant's current promotions", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/item/{chain}/{contract_address}/{token_id}/depth": { + "/papajohns/directory": { "get": { - "description": "Returns the bid/ask ladder for a single NFT: resting listings and offers grouped into price levels with the quantity at each. Useful for ERC-1155 items where many units trade at different prices.", - "operationId": "opensea-item-depth", + "consumes": [ + "application/json" + ], + "description": "Returns one level of Papa John's store directory. Omit path for the root country index, then pass a child's path to descend through state, city, and store levels. Each child includes its name, path, URL, store count when available, and whether it is a store leaf. Pass a store child's path to GET /papajohns/store. This is a directory browse; use GET /papajohns/nearby for a coordinate search.", + "operationId": "papajohns-directory", "parameters": [ { - "description": "Chain identifier from /opensea/chains", - "in": "path", - "name": "chain", - "required": true, - "type": "string", - "x-example": "ethereum" - }, - { - "description": "NFT contract address", - "in": "path", - "name": "contract_address", - "required": true, - "type": "string", - "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - }, - { - "description": "Token id within the contract", - "in": "path", - "name": "token_id", - "required": true, + "description": "Directory path from a previous response's children[].path; omit for the root country index", + "in": "query", + "name": "path", "type": "string", - "x-example": "1" + "x-example": "united-states/ca" } ], "produces": [ @@ -331627,7 +367461,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.depthResponseDoc" + "$ref": "#/definitions/papajohns.directoryResponseDoc" } }, "400": { @@ -331660,64 +367494,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get an OpenSea NFT's order book", + "summary": "Browse the Papa John's store directory", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/item/{chain}/{contract_address}/{token_id}/listings": { + "/papajohns/elsalvador/menu": { "get": { - "description": "Returns every standing sell order for one NFT, with price, quantity, validity window, marketplace, and the maker's wallet. An item with no active listings returns an empty list rather than a 404.", - "operationId": "opensea-item-listings", + "consumes": [ + "application/json" + ], + "description": "Returns Papa John's **El Salvador** menu with prices in US dollars. Each pizza lists its full size and crust price matrix — every combination of size (Grande, Gigante) and crust (Masa Original, Masa Delgada, Orilla Rellena de Queso) with that combination's own price — while sides, desserts and extras carry a single price. El Salvador runs its own ordering platform, independent of the six markets behind GET /papajohns/intl/menu and of Colombia and Peru, so it has its own endpoint. This is El Salvador's national menu; the site itself notes that choosing a restaurant can reveal further items.", + "operationId": "papajohns-elsalvador-menu", "parameters": [ { - "description": "Chain identifier from /opensea/chains", - "in": "path", - "name": "chain", - "required": true, - "type": "string", - "x-example": "ethereum" - }, - { - "description": "NFT contract address", - "in": "path", - "name": "contract_address", - "required": true, - "type": "string", - "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - }, - { - "description": "Token id within the contract", - "in": "path", - "name": "token_id", - "required": true, - "type": "string", - "x-example": "1" - }, - { - "default": 20, - "description": "Listings per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "ASC", - "description": "Sort direction by price", - "enum": [ - "ASC", - "DESC" - ], + "description": "Return only categories whose name contains this text, case-insensitive. One of: Pizzas, Entradas, Postres, Extras", "in": "query", - "name": "sort_direction", - "type": "string" + "name": "category", + "type": "string", + "x-example": "Pizzas" } ], "produces": [ @@ -331727,7 +367523,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.itemOrdersResponseDoc" + "$ref": "#/definitions/papajohns.latamMenuResponseDoc" } }, "400": { @@ -331760,53 +367556,27 @@ "ApiKeyAuth": [] } ], - "summary": "List standing listings for an OpenSea NFT", + "summary": "Get the Papa John's El Salvador priced menu (USD)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/item/{chain}/{contract_address}/{token_id}/offers": { + "/papajohns/india/deal": { "get": { - "description": "Returns every standing bid on one NFT, with price, quantity, validity window, marketplace, and the maker's wallet. An item with no active offers returns an empty list rather than a 404.", - "operationId": "opensea-item-offers", + "consumes": [ + "application/json" + ], + "description": "Returns one Papa John's **India** combo or offer with its full composition: each slot in the deal (with its quantity, size, and whether it can be skipped) and every menu item eligible to fill that slot, with each choice's own price in Indian Rupees. This is materially more than the deal row in GET /papajohns/india/menu, which carries only the deal's name, price, and pricing rule. price_type is one of fixedPrice, BuyXGetY, HalfAndHalf, or variablePrice; only fixedPrice deals report a non-zero price. India market only.", + "operationId": "papajohns-india-deal", "parameters": [ { - "description": "Chain identifier from /opensea/chains", - "in": "path", - "name": "chain", - "required": true, - "type": "string", - "x-example": "ethereum" - }, - { - "description": "NFT contract address", - "in": "path", - "name": "contract_address", - "required": true, - "type": "string", - "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - }, - { - "description": "Token id within the contract", - "in": "path", - "name": "token_id", + "description": "Deal id from GET /papajohns/india/menu (items with kind=deal)", + "in": "query", + "name": "deal_id", "required": true, "type": "string", - "x-example": "1" - }, - { - "default": 20, - "description": "Offers per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "17" } ], "produces": [ @@ -331816,7 +367586,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.itemOrdersResponseDoc" + "$ref": "#/definitions/papajohns.indiaDealResponseDoc" } }, "400": { @@ -331849,53 +367619,76 @@ "ApiKeyAuth": [] } ], - "summary": "List standing offers for an OpenSea NFT", + "summary": "Get one Papa John's India deal's composition (INR)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/item/{chain}/{contract_address}/{token_id}/owners": { + "/papajohns/india/menu": { "get": { - "description": "Returns the wallets holding one NFT plus the total owner count. ERC-721 items resolve to a single owner; ERC-1155 items can have many, each with the quantity held.", - "operationId": "opensea-item-owners", + "consumes": [ + "application/json" + ], + "description": "Returns Papa John's **India** menu with live prices in Indian Rupees, from papajohns.in's own ordering backend. This is the India market only -- prices, items, and availability are India-specific and are not comparable to Papa John's US/Canada data (see GET /papajohns/nutrition for US national reference data). Returns every category with its items and deals: list price, strike-through price where a discount is active, dietary tags (Veg, Non Veg, Spicy), images, and the store/channel/day combinations where an item is blacked out. Set include_options=true to also get each item's full size, crust, topping, sauce, and drizzle tree with per-option prices -- this makes the response very large, so prefer GET /papajohns/india/menu/item for one item's options. Pricing is franchise-wide rather than per-store; store_id, channel_id, and day filter item availability, not price, and only take effect when all three are supplied.", + "operationId": "papajohns-india-menu", "parameters": [ { - "description": "Chain identifier from /opensea/chains", - "in": "path", - "name": "chain", - "required": true, + "description": "Return only this category id", + "in": "query", + "name": "category_id", "type": "string", - "x-example": "ethereum" + "x-example": "6" }, { - "description": "NFT contract address", - "in": "path", - "name": "contract_address", - "required": true, + "description": "Hide items blacked out at this store id (see GET /papajohns/india/stores). Only applies together with channel_id and day.", + "in": "query", + "name": "store_id", "type": "string", - "x-example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" + "x-example": "7" }, { - "description": "Token id within the contract", - "in": "path", - "name": "token_id", - "required": true, + "description": "Order channel. One of: 1 (Delivery), 2 (Take Away), 3 (Dine In), 4 (Drive Through Pickup). Only applies together with store_id and day.", + "enum": [ + "1", + "2", + "3", + "4" + ], + "in": "query", + "name": "channel_id", "type": "string", "x-example": "1" }, { - "default": 20, - "description": "Owners per page, 1-100", + "description": "Weekday. One of: 0 (Sunday), 1 (Monday), 2 (Tuesday), 3 (Wednesday), 4 (Thursday), 5 (Friday), 6 (Saturday). Only applies together with store_id and channel_id.", + "enum": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6" + ], "in": "query", - "name": "limit", - "type": "integer" + "name": "day", + "type": "string", + "x-example": "1" }, { - "description": "Opaque pagination cursor from a previous next_page_cursor", + "description": "Return only items carrying this tag, e.g. Veg, Non Veg, Spicy. Case-insensitive.", "in": "query", - "name": "cursor", - "type": "string" + "name": "tag", + "type": "string", + "x-example": "Veg" + }, + { + "description": "Include every item's full size/crust/topping option tree with prices. Default false.", + "in": "query", + "name": "include_options", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -331905,7 +367698,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.itemOwnersResponseDoc" + "$ref": "#/definitions/papajohns.indiaMenuResponseDoc" } }, "400": { @@ -331938,23 +367731,27 @@ "ApiKeyAuth": [] } ], - "summary": "List the owners of an OpenSea NFT", + "summary": "Get the Papa John's India priced menu (INR)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/most-watched": { + "/papajohns/india/menu/item": { "get": { - "description": "Returns the collections most added to watchlists on OpenSea, with their current floor price and headline stats. A demand signal that leads trading volume, since watchlisting precedes buying.", - "operationId": "opensea-most-watched", + "consumes": [ + "application/json" + ], + "description": "Returns one Papa John's **India** menu item with its complete customization tree: every size, and for each size every crust, topping, dipping sauce, drizzle, and base sauce with that option's own price in Indian Rupees. The option group flagged base_price carries the item's base price for that size (the crust group on pizzas) rather than an add-on charge; half_price is the surcharge when the option is applied to one half of a pizza. India market only -- prices are Indian Rupees. Use GET /papajohns/india/menu to discover item ids.", + "operationId": "papajohns-india-menu-item", "parameters": [ { - "default": 20, - "description": "Collections to return, 1-100", + "description": "Item id (saleitem_id) from GET /papajohns/india/menu", "in": "query", - "name": "limit", - "type": "integer" + "name": "item_id", + "required": true, + "type": "string", + "x-example": "71" } ], "produces": [ @@ -331964,7 +367761,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionShelfResponseDoc" + "$ref": "#/definitions/papajohns.indiaMenuItemResponseDoc" } }, "400": { @@ -331973,6 +367770,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -331991,24 +367794,32 @@ "ApiKeyAuth": [] } ], - "summary": "List the most watchlisted OpenSea collections", + "summary": "Get one Papa John's India item with its full options (INR)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/profile/{identifier}": { + "/papajohns/india/stores": { "get": { - "description": "Returns the public profile for a wallet, resolved from a wallet address, an ENS name, or an OpenSea username: display name, avatar and banner imagery, verification flag, and linked social handles. Wallet balances, portfolio value, and profit/loss are deliberately not exposed.", - "operationId": "opensea-profile", + "consumes": [ + "application/json" + ], + "description": "Returns every Papa John's **India** restaurant with its address, phone, coordinates, and weekly opening hours broken down per order channel (delivery, take away, dine in, drive-through pickup). These store ids are what GET /papajohns/india/menu's store_id availability filter is keyed on. India market only -- for US/Canada stores use GET /papajohns/directory, GET /papajohns/store, or GET /papajohns/nearby.", + "operationId": "papajohns-india-stores", "parameters": [ { - "description": "Wallet address, ENS name, or OpenSea username", - "in": "path", - "name": "identifier", - "required": true, + "description": "Return only hours for this order channel. One of: 1 (Delivery), 2 (Take Away), 3 (Dine In), 4 (Drive Through Pickup).", + "enum": [ + "1", + "2", + "3", + "4" + ], + "in": "query", + "name": "channel_id", "type": "string", - "x-example": "vitalik.eth" + "x-example": "1" } ], "produces": [ @@ -332018,7 +367829,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.profileResponseDoc" + "$ref": "#/definitions/papajohns.indiaStoresResponseDoc" } }, "400": { @@ -332027,12 +367838,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -332051,52 +367856,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a public OpenSea profile", + "summary": "List Papa John's India restaurants", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/profile/{identifier}/activity": { + "/papajohns/intl/deals": { "get": { - "description": "Returns a cursor-paginated feed of a wallet's NFT marketplace events — sales, listings, offers, transfers, and mints — with the counterparty, price, and collection for each. Accepts a wallet address, ENS name, or OpenSea username. Scoped to NFT events only; token transfers and swaps are not returned.", - "operationId": "opensea-profile-activity", + "consumes": [ + "application/json" + ], + "description": "Returns the promotions currently running in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain, for either delivery or pickup. Each promotion carries its headline product, description, artwork, the weekdays it runs on, and its start and end dates. Offers that upstream has marked inactive are omitted rather than returned as live.", + "operationId": "papajohns-intl-deals", "parameters": [ { - "description": "Wallet address, ENS name, or OpenSea username", - "in": "path", - "name": "identifier", + "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", + "enum": [ + "chile", + "costa-rica", + "guatemala", + "panama", + "portugal", + "spain" + ], + "in": "query", + "name": "market", "required": true, "type": "string", - "x-example": "vitalik.eth" - }, - { - "default": 20, - "description": "Events per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "spain" }, { - "description": "Comma-separated event types", + "description": "One of: pj_delivery (delivery offers), in_store (pickup/dine-in offers)", "enum": [ - "SALE", - "LISTING", - "OFFER", - "TRANSFER", - "MINT", - "COLLECTION_OFFER", - "TRAIT_OFFER" + "pj_delivery", + "in_store" ], "in": "query", - "name": "event_types", - "type": "string" + "name": "dispatch_method", + "required": true, + "type": "string", + "x-example": "pj_delivery" } ], "produces": [ @@ -332106,7 +367906,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.activityResponseDoc" + "$ref": "#/definitions/papajohns.intlDealsResponseDoc" } }, "400": { @@ -332139,37 +367939,60 @@ "ApiKeyAuth": [] } ], - "summary": "List a wallet's NFT marketplace activity", + "summary": "List Papa John's active promotions (international)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/profile/{identifier}/collections": { + "/papajohns/intl/ingredients": { "get": { - "description": "Returns the collections a wallet holds items in, with how many items it holds in each and that collection's current floor price. Useful for valuing a wallet's holdings collection by collection.", - "operationId": "opensea-profile-collections", + "consumes": [ + "application/json" + ], + "description": "Returns every topping, sauce, and cheese a pizza can be built with on one menu, in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain. Each ingredient reports its family (meat, vegetable, base sauce, and so on), whether it is included on pizzas by default, whether it is charged at the premium rather than the normal rate, and whether it can be applied to just one half. The response also carries what one extra ingredient costs at each size, for both the normal and premium rates. Menu ids come from GET /papajohns/intl/stores.", + "operationId": "papajohns-intl-ingredients", "parameters": [ { - "description": "Wallet address, ENS name, or OpenSea username", - "in": "path", - "name": "identifier", + "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", + "enum": [ + "chile", + "costa-rica", + "guatemala", + "panama", + "portugal", + "spain" + ], + "in": "query", + "name": "market", "required": true, "type": "string", - "x-example": "vitalik.eth" + "x-example": "spain" }, { - "default": 20, - "description": "Collections per page, 1-100", + "description": "Menu id from a restaurant returned by GET /papajohns/intl/stores", "in": "query", - "name": "limit", - "type": "integer" + "name": "menu_id", + "required": true, + "type": "string", + "x-example": "8" }, { - "description": "Opaque pagination cursor from a previous next_page_cursor", + "description": "Return only one ingredient category. One of: base_cheese, base_sauce, extra_cheese, extra_sauce, meat, not_ingredient, premium, vegetable", + "enum": [ + "base_cheese", + "base_sauce", + "extra_cheese", + "extra_sauce", + "meat", + "not_ingredient", + "premium", + "vegetable" + ], "in": "query", - "name": "cursor", - "type": "string" + "name": "category", + "type": "string", + "x-example": "meat" } ], "produces": [ @@ -332179,7 +368002,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.profileCollectionsResponseDoc" + "$ref": "#/definitions/papajohns.intlIngredientsResponseDoc" } }, "400": { @@ -332212,61 +368035,67 @@ "ApiKeyAuth": [] } ], - "summary": "List the collections a wallet holds", + "summary": "Get a Papa John's menu's ingredient catalog (international)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/profile/{identifier}/created": { + "/papajohns/intl/menu": { "get": { - "description": "Returns the collections a wallet created, as opposed to the ones it holds, each with its floor price and trading statistics. Use this to find a creator's full body of work from any one of their collections' contract deployer address.", - "operationId": "opensea-profile-created", + "consumes": [ + "application/json" + ], + "description": "Returns one Papa John's restaurant's full menu with that restaurant's own prices, in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain. Prices are per restaurant, not national, so two restaurants in the same market can differ. Each pizza lists every size and crust combination it is sold in with that combination's own price and, where published, its calorie and portion figures; sides, drinks and desserts list their own portions. Machine codes for size and crust are returned alongside the market's own display labels in the local language. Currency is whatever the market trades in -- euros in Spain and Portugal, Chilean pesos in Chile, and so on -- so do not compare figures across markets. Use GET /papajohns/intl/stores to find a store_id. For India use GET /papajohns/india/menu; for the US and Canada see GET /papajohns/nutrition.", + "operationId": "papajohns-intl-menu", "parameters": [ { - "description": "Wallet address, ENS name, or OpenSea username", - "in": "path", - "name": "identifier", + "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", + "enum": [ + "chile", + "costa-rica", + "guatemala", + "panama", + "portugal", + "spain" + ], + "in": "query", + "name": "market", "required": true, "type": "string", - "x-example": "0xaba7161a7fb69c88e16ed9f455ce62b791ee4d03" - }, - { - "default": 20, - "description": "Collections per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "spain" }, { - "description": "Opaque pagination cursor from a previous next_page_cursor", + "description": "Restaurant id from GET /papajohns/intl/stores. Prices are specific to this restaurant.", "in": "query", - "name": "cursor", - "type": "string" + "name": "store_id", + "required": true, + "type": "string", + "x-example": "9" }, { - "default": "VOLUME", - "description": "Sort field", + "description": "Return only one product kind. One of: pizza, side", "enum": [ - "VOLUME", - "ONE_DAY_VOLUME", - "FLOOR_PRICE", - "SALES" + "pizza", + "side" ], "in": "query", - "name": "sort_by", - "type": "string" + "name": "kind", + "type": "string", + "x-example": "pizza" }, { - "default": "DESC", - "description": "Sort direction", + "description": "Return only products carrying this dietary or heat marker. One of: hot, mild, spicy, vegetarian. Products upstream does not mark are excluded.", "enum": [ - "ASC", - "DESC" + "hot", + "mild", + "spicy", + "vegetarian" ], "in": "query", - "name": "sort_direction", - "type": "string" + "name": "food_type", + "type": "string", + "x-example": "vegetarian" } ], "produces": [ @@ -332276,7 +368105,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.profileCollectionsResponseDoc" + "$ref": "#/definitions/papajohns.intlMenuResponseDoc" } }, "400": { @@ -332309,48 +368138,43 @@ "ApiKeyAuth": [] } ], - "summary": "List the collections a wallet created", + "summary": "Get a Papa John's restaurant's priced menu (international)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/profile/{identifier}/items": { + "/papajohns/intl/offer": { "get": { - "description": "Returns a cursor-paginated page of the NFTs held by a wallet, with each item's collection, rarity rank, and best standing listing. Accepts a wallet address, ENS name, or OpenSea username; a non-address identifier costs one extra resolution lookup.", - "operationId": "opensea-profile-items", + "consumes": [ + "application/json" + ], + "description": "Returns one promotional offer's full composition in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain. This is what a promotion banner from GET /papajohns/intl/deals actually contains: the offer's own price, each choice step a customer works through in order (e.g. \"pick your family pizza\", \"pick a side\"), and every product eligible at that step with the surcharge picking it adds. It also carries the offer's ingredient rules -- how many extras are free, the minimum and maximum that may be chosen, and which ingredient families are allowed. Offer ids come from the offer_id field on a deal.", + "operationId": "papajohns-intl-offer", "parameters": [ { - "description": "Wallet address, ENS name, or OpenSea username", - "in": "path", - "name": "identifier", + "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", + "enum": [ + "chile", + "costa-rica", + "guatemala", + "panama", + "portugal", + "spain" + ], + "in": "query", + "name": "market", "required": true, "type": "string", - "x-example": "vitalik.eth" - }, - { - "default": 20, - "description": "Items per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous next_page_cursor", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "spain" }, { - "default": "DESC", - "description": "Sort direction by received date", - "enum": [ - "ASC", - "DESC" - ], + "description": "Offer id from the offer_id field on GET /papajohns/intl/deals", "in": "query", - "name": "sort_direction", - "type": "string" + "name": "offer_id", + "required": true, + "type": "string", + "x-example": "660" } ], "produces": [ @@ -332360,7 +368184,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.profileItemsResponseDoc" + "$ref": "#/definitions/papajohns.intlOfferResponseDoc" } }, "400": { @@ -332393,39 +368217,43 @@ "ApiKeyAuth": [] } ], - "summary": "List the NFTs a wallet holds", + "summary": "Get one Papa John's offer's composition (international)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/profile/{identifier}/search-items": { + "/papajohns/intl/product": { "get": { - "description": "Runs a keyword search across a wallet's holdings, matching on item and collection name, and returns the hits with rarity rank and best standing listing. Narrower than `/opensea/profile/{identifier}/items`, which lists everything the wallet holds.", - "operationId": "opensea-profile-search-items", + "consumes": [ + "application/json" + ], + "description": "Returns one product's own catalog record in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain -- its description, imagery, dietary markers, and customization rules (whether toppings may be changed, how many extra ingredients are included free, and whether it can be used as one half of a half-and-half pizza). This record carries no price, because pricing is per restaurant: use GET /papajohns/intl/menu for prices. Product ids come from that same endpoint.", + "operationId": "papajohns-intl-product", "parameters": [ { - "description": "Wallet address, ENS name, or OpenSea username", - "in": "path", - "name": "identifier", + "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", + "enum": [ + "chile", + "costa-rica", + "guatemala", + "panama", + "portugal", + "spain" + ], + "in": "query", + "name": "market", "required": true, "type": "string", - "x-example": "vitalik.eth" + "x-example": "spain" }, { - "description": "Search keyword", + "description": "Product id from GET /papajohns/intl/menu", "in": "query", - "name": "query", + "name": "product_id", "required": true, "type": "string", - "x-example": "ape" - }, - { - "default": 20, - "description": "Results per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "8" } ], "produces": [ @@ -332435,7 +368263,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.itemSearchResponseDoc" + "$ref": "#/definitions/papajohns.intlProductResponseDoc" } }, "400": { @@ -332468,55 +368296,86 @@ "ApiKeyAuth": [] } ], - "summary": "Search the NFTs a wallet holds", + "summary": "Get one Papa John's product (international)", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/rankings": { + "/papajohns/intl/stores": { "get": { - "description": "Returns the collections on one of OpenSea's ranking boards for a given window, each with its ranking score, floor price, and rolling stats. `TRENDING` ranks by recent momentum, `TOP` by absolute volume, and `NEW` surfaces recently launched collections.", - "operationId": "opensea-rankings", + "consumes": [ + "application/json" + ], + "description": "Returns Papa John's restaurants in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain -- either every restaurant near a coordinate, or one known restaurant looked up by id. Each restaurant carries its address, coordinates, phone, per-weekday opening hours split by fulfillment channel, accepted payment methods, delivery zones with their minimum-order and free-delivery thresholds, and live delivery/pickup open flags. Restaurants come back ranked by distance with no radius limit, five at a time by default; page and limit walk the rest, and the response reports total_count, the market's whole restaurant total. The returned id is what GET /papajohns/intl/menu prices against, and menu_id is what GET /papajohns/intl/ingredients reads. This covers those six markets only -- for India use GET /papajohns/india/stores, and for the US and Canada use GET /papajohns/directory, GET /papajohns/store, or GET /papajohns/nearby.", + "operationId": "papajohns-intl-stores", "parameters": [ { - "default": "TRENDING", - "description": "Ranking board", + "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", "enum": [ - "TOP", - "TRENDING", - "NEW" + "chile", + "costa-rica", + "guatemala", + "panama", + "portugal", + "spain" ], "in": "query", - "name": "ranking", - "type": "string" + "name": "market", + "required": true, + "type": "string", + "x-example": "spain" }, { - "default": "ONE_DAY", - "description": "Ranking window", + "description": "Look up one known restaurant by id instead of searching a coordinate. Supply either store_id, or both latitude and longitude.", + "in": "query", + "name": "store_id", + "type": "string", + "x-example": "9" + }, + { + "description": "Latitude to search around. Required unless store_id is supplied.", + "in": "query", + "name": "latitude", + "type": "string", + "x-example": "40.4168" + }, + { + "description": "Longitude to search around. Required unless store_id is supplied.", + "in": "query", + "name": "longitude", + "type": "string", + "x-example": "-3.7038" + }, + { + "description": "One of: delivery (default, every nearby restaurant), pickup (only restaurants accepting pickup orders). Ignored when store_id is supplied.", "enum": [ - "ONE_HOUR", - "ONE_DAY", - "SEVEN_DAYS", - "THIRTY_DAYS", - "ALL_TIME" + "delivery", + "pickup" ], "in": "query", - "name": "timeframe", - "type": "string" + "name": "fulfillment", + "type": "string", + "x-example": "delivery" }, { - "default": 20, - "description": "Collections per page, 1-100", + "default": 1, + "description": "One-based page of the distance-ranked restaurants. Ignored for a store_id lookup and for pickup, neither of which is paginated.", "in": "query", - "name": "limit", - "type": "integer" + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Opaque pagination cursor from a previous next_page_cursor", + "default": 5, + "description": "Restaurants per page, 1-100. Ignored for a store_id lookup and for pickup, neither of which is paginated.", "in": "query", - "name": "cursor", - "type": "string" + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer", + "x-example": 5 } ], "produces": [ @@ -332526,7 +368385,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.rankingsResponseDoc" + "$ref": "#/definitions/papajohns.intlStoresResponseDoc" } }, "400": { @@ -332535,6 +368394,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -332553,31 +368418,51 @@ "ApiKeyAuth": [] } ], - "summary": "List ranked OpenSea collections", + "summary": "Find Papa John's restaurants in an international market", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/search/collections": { + "/papajohns/menu": { "get": { - "description": "Runs a keyword search across OpenSea collections and returns the matches with floor price, verification flag, and headline stats. Use this to resolve a human-readable name to the `slug` the other collection endpoints take.", - "operationId": "opensea-search-collections", + "consumes": [ + "application/json" + ], + "description": "Returns a Papa John's US or Canada restaurant's full menu with that restaurant's own prices. Prices are per restaurant, not national -- the same 14-inch pizza can differ by several dollars between two stores -- so pass a store_id from GET /papajohns/store or GET /papajohns/nearby. Omitting it returns the national default menu, flagged as national_default in the response. Each category is returned with its sections and product groups, and every orderable SKU carries its price, calories, serving size, slice count and image. Set include_options to also get each product group's customization axes: every size and crust it is sold in, and every preparation instruction (how much cheese, how well done) with its choices. This is the US and Canada menu -- for India use GET /papajohns/india/menu, and for Chile, Costa Rica, Guatemala, Panama, Portugal or Spain use GET /papajohns/intl/menu.", + "operationId": "papajohns-menu", "parameters": [ { - "description": "Search keyword", + "description": "Restaurant id from GET /papajohns/store or GET /papajohns/nearby. Omit for the national default menu.", "in": "query", - "name": "query", - "required": true, + "name": "store_id", "type": "string", - "x-example": "ape" + "x-example": "5054" }, { - "default": 20, - "description": "Results per page, 1-100", + "description": "Return only one category. One of: dippingsauces, desserts, drinks, extras, papabowls, pizza, sandwiches, sides, wings", + "enum": [ + "dippingsauces", + "desserts", + "drinks", + "extras", + "papabowls", + "pizza", + "sandwiches", + "sides", + "wings" + ], "in": "query", - "name": "limit", - "type": "integer" + "name": "category", + "type": "string", + "x-example": "pizza" + }, + { + "description": "Include each product group's sizes, crusts and preparation instructions. Default false.", + "in": "query", + "name": "include_options", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -332587,7 +368472,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionSearchResponseDoc" + "$ref": "#/definitions/papajohns.menuResponseDoc" } }, "400": { @@ -332596,6 +368481,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -332614,23 +368505,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search OpenSea collections by keyword", + "summary": "Get a Papa John's restaurant's priced menu", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opensea/top-movers": { + "/papajohns/menu/item": { "get": { - "description": "Returns the collections with the largest recent floor-price and volume moves, each with its current floor and rolling one-hour and one-day stats. Complements `/opensea/rankings`, which ranks by score rather than by change.", - "operationId": "opensea-top-movers", + "consumes": [ + "application/json" + ], + "description": "Returns one Papa John's US or Canada menu SKU with that restaurant's price for it, together with the full customization axes of the product group it belongs to: every size and crust the product is sold in, and every preparation instruction with its choices and default. The response also names the category and section the item sits under. Pass a store_id so the price is that restaurant's; omitting it returns the national default price. SKUs come from GET /papajohns/menu.", + "operationId": "papajohns-menu-item", "parameters": [ { - "default": 20, - "description": "Collections to return, 1-100", + "description": "Product sku from GET /papajohns/menu", "in": "query", - "name": "limit", - "type": "integer" + "name": "sku", + "required": true, + "type": "string", + "x-example": "1-1-2-115" + }, + { + "description": "Restaurant id from GET /papajohns/store or GET /papajohns/nearby. Omit for the national default price.", + "in": "query", + "name": "store_id", + "type": "string", + "x-example": "5054" } ], "produces": [ @@ -332640,7 +368542,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opensea.collectionShelfResponseDoc" + "$ref": "#/definitions/papajohns.menuItemResponseDoc" } }, "400": { @@ -332649,6 +368551,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -332667,41 +368575,56 @@ "ApiKeyAuth": [] } ], - "summary": "List the biggest movers on OpenSea", + "summary": "Get one Papa John's menu item with its options", "tags": [ - "OpenSea" + "Papa John's" ] } }, - "/opentable/restaurant": { + "/papajohns/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns a restaurant's profile (location, cuisines, hours, price band, review summary) plus real-time bookable timeslots for the given date/time and party size. Credential-free.", - "operationId": "opentable-restaurant", + "description": "Returns Papa John's stores within a radius of a latitude/longitude, ordered nearest first, with distance, address, phone, hours, timezone, price range, fulfillment services, payment options, and ordering link. The response includes total_in_radius and offset paging. A coordinate with no nearby stores returns an empty list.", + "operationId": "papajohns-nearby", "parameters": [ { - "description": "OpenTable restaurant id", + "description": "Search center latitude", "in": "query", - "name": "restaurant_id", + "name": "latitude", "required": true, - "type": "string", - "x-example": "131459" + "type": "number", + "x-example": 34.0522 }, { - "description": "Reservation date/time, RFC3339-minute local format; defaults to now", + "description": "Search center longitude", "in": "query", - "name": "date_time", - "type": "string", - "x-example": "2026-08-04T19:00" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -118.2437 }, { - "description": "Party size, default 2", + "description": "Search radius in miles, 1-100 (default 25)", "in": "query", - "name": "party_size", + "name": "radius", "type": "integer", - "x-example": 2 + "x-example": 25 + }, + { + "description": "Maximum stores to return, 1-50 (default 10)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Result offset, 0 or greater (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -332711,7 +368634,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opentable.restaurantResponseDoc" + "$ref": "#/definitions/papajohns.nearbyResponseDoc" } }, "400": { @@ -332720,14 +368643,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" } @@ -332744,27 +368661,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an OpenTable restaurant's profile and live availability", + "summary": "Find Papa John's stores near a coordinate", "tags": [ - "OpenTable" + "Papa John's" ] } }, - "/opentable/restaurant/menus": { + "/papajohns/nutrition": { "get": { "consumes": [ "application/json" ], - "description": "Returns a restaurant's menus (sections, items, prices). Credential-free.", - "operationId": "opentable-restaurant-menus", + "description": "Returns Papa John's own published nutrition-facts panel for every item in one category -- full pizzas by name, or a single ingredient family (crust, cheese, sauce, toppings). Each item lists every published size/crust variant with serving size and a full nutrition-facts breakdown (calories, fat, cholesterol, sodium, carbohydrate, fiber, sugars, protein). This is Papa John's national reference data, not priced per-store data -- see GET /papajohns/directory for store lookup.", + "operationId": "papajohns-nutrition", "parameters": [ { - "description": "OpenTable restaurant id", + "description": "One of: cheese, crust, desserts, dipping-sauces, drinks, extras, papa-bowls, papadias, pizzas, sandwiches, sauce, sides, toppings, wings", "in": "query", - "name": "restaurant_id", + "name": "category", "required": true, "type": "string", - "x-example": "164555" + "x-example": "pizzas" } ], "produces": [ @@ -332774,7 +368691,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opentable.menusResponseDoc" + "$ref": "#/definitions/papajohns.nutritionResponseDoc" } }, "400": { @@ -332789,8 +368706,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -332807,41 +368724,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get an OpenTable restaurant's menus", + "summary": "Get one Papa John's nutritional-details category", "tags": [ - "OpenTable" + "Papa John's" ] } }, - "/opentable/restaurant/reviews": { + "/papajohns/peru/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of diner reviews (author, text, per-category ratings) for a restaurant. Credential-free.", - "operationId": "opentable-restaurant-reviews", + "description": "Returns Papa John's **Peru** menu with prices in Peruvian soles, covering the full catalog with categories, images and per-product pricing. Peru runs its own ordering platform, independent of the six markets behind GET /papajohns/intl/menu and of Colombia and El Salvador, so it has its own endpoint. Prices are Peruvian soles and are not comparable with any other market.", + "operationId": "papajohns-peru-menu", "parameters": [ { - "description": "OpenTable restaurant id", + "description": "Return only categories whose name contains this text, case-insensitive, e.g. Promociones or Combos", "in": "query", - "name": "restaurant_id", - "required": true, + "name": "category", "type": "string", - "x-example": "131459" - }, - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Reviews per page, default 20", - "in": "query", - "name": "size", - "type": "integer", - "x-example": 20 + "x-example": "Promociones" } ], "produces": [ @@ -332851,7 +368753,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opentable.reviewsResponseDoc" + "$ref": "#/definitions/papajohns.latamMenuResponseDoc" } }, "400": { @@ -332866,8 +368768,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -332884,64 +368786,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a page of an OpenTable restaurant's diner reviews", + "summary": "Get the Papa John's Peru priced menu (PEN)", "tags": [ - "OpenTable" + "Papa John's" ] } }, - "/opentable/search": { + "/papajohns/poland/menu": { "get": { "consumes": [ "application/json" ], - "description": "Searches restaurants by free-text term (cuisine, name, neighborhood) near a latitude/longitude, for a given date/time and party size, including inline live availability per result. Credential-free.", - "operationId": "opentable-search", + "description": "Returns Papa John's **Poland** menu with prices in Polish zloty. Russia and Poland run one franchise platform of their own, separate from the six markets behind GET /papajohns/intl/menu and from Colombia, Peru and El Salvador, so each has its own endpoint. The catalog is national -- it does not vary by city -- and every product lists its priced variants with size, dough and any stuffed crust. Prices are zloty and are not comparable with any other market.", + "operationId": "papajohns-poland-menu", "parameters": [ { - "description": "Free-text search term", - "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "dinner" - }, - { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 10.7873 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": 106.7407 - }, - { - "description": "Reservation date/time, RFC3339-minute local format; defaults to now", + "description": "Return only sections whose name or slug contains this text, case-insensitive. Slugs work in either market, e.g. pizza, combo, deserty, napitki, sauce, zakuski", "in": "query", - "name": "date_time", + "name": "category", "type": "string", - "x-example": "2026-08-04T19:00" - }, - { - "description": "Party size, default 2", - "in": "query", - "name": "party_size", - "type": "integer", - "x-example": 2 - }, - { - "description": "Max results, default 10", - "in": "query", - "name": "size", - "type": "integer", - "x-example": 10 + "x-example": "pizza" } ], "produces": [ @@ -332951,7 +368815,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/opentable.searchResponseDoc" + "$ref": "#/definitions/papajohns.storefrontMenuResponseDoc" } }, "400": { @@ -332960,43 +368824,11 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Search OpenTable restaurants near a location", - "tags": [ - "OpenTable" - ] - } - }, - "/otto/categories": { - "get": { - "description": "Returns the public top-level category navigation from Otto.de's server-rendered homepage. Each entry includes its canonical browsing URL.", - "operationId": "otto-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/otto.categoriesResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -333016,24 +368848,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Otto.de's top-level categories", + "summary": "Get the Papa John's Poland priced menu (PLN)", "tags": [ - "Otto" + "Papa John's" ] } }, - "/otto/product": { + "/papajohns/russia/menu": { "get": { - "description": "Returns a product's public detail, images, selectable colors and sizes. This endpoint uses a browser renderer because Otto.de product pages require JavaScript rendering.", - "operationId": "otto-product", + "consumes": [ + "application/json" + ], + "description": "Returns Papa John's **Russia** menu with prices in Russian roubles. Russia and Poland run one franchise platform of their own, separate from the six markets behind GET /papajohns/intl/menu and from Colombia, Peru and El Salvador, so each has its own endpoint. The catalog is national -- it does not vary by city -- and every product lists its priced variants with size, dough and any stuffed crust. Prices are roubles and are not comparable with any other market.", + "operationId": "papajohns-russia-menu", "parameters": [ { - "description": "Canonical Otto.de product URL returned by otto-search", + "description": "Return only sections whose name or slug contains this text, case-insensitive. Slugs work in either market, e.g. pizza, combo, deserty, napitki, sauce, zakuski", "in": "query", - "name": "url", - "required": true, + "name": "category", "type": "string", - "x-example": "https://www.otto.de/p/nike-nike-performance-damen-laufschuh-juniper-trail-3-laufschuh-C2019218809/" + "x-example": "pizza" } ], "produces": [ @@ -333043,7 +368877,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/otto.productResponseDoc" + "$ref": "#/definitions/papajohns.storefrontMenuResponseDoc" } }, "400": { @@ -333052,6 +368886,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -333070,31 +368910,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Otto.de product", + "summary": "Get the Papa John's Russia priced menu (RUB)", "tags": [ - "Otto" + "Papa John's" ] } }, - "/otto/search": { + "/papajohns/store": { "get": { - "description": "Searches Otto.de's public catalogue and returns the server-rendered product cards. offset advances by Otto's fixed 109-card page size; valid values are 0, 109, 218, and so on.", - "operationId": "otto-search", + "consumes": [ + "application/json" + ], + "description": "Returns one Papa John's store's published profile: address, phone, coordinates, general and pickup hours, timezone, Google Place id, and ordering link. The path comes from a store child returned by GET /papajohns/directory. Passing a directory path returns 404.", + "operationId": "papajohns-store", "parameters": [ { - "description": "Product search keyword", + "description": "Store path from a /papajohns/directory child marked is_store=true", "in": "query", - "name": "q", + "name": "path", "required": true, "type": "string", - "x-example": "laufschuhe" - }, - { - "default": 0, - "description": "Result offset; non-negative multiple of 109", - "in": "query", - "name": "offset", - "type": "integer" + "x-example": "united-states/ca/91803/alhambra/2136-s-fremont-ave" } ], "produces": [ @@ -333104,7 +368940,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/otto.searchResponseDoc" + "$ref": "#/definitions/papajohns.storeResponseDoc" } }, "400": { @@ -333137,24 +368973,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Otto.de products", + "summary": "Get one Papa John's store", "tags": [ - "Otto" + "Papa John's" ] } }, - "/pagesix/article": { + "/patreon/creator": { "get": { - "description": "Returns public Page Six article metadata and body paragraphs from a canonical article URL.", - "operationId": "pagesix-article", + "consumes": [ + "application/json" + ], + "description": "Returns public profile metadata from a creator's Patreon page: creator identity, summary, images, membership and creation counts, public earnings snapshot, membership/RSS availability flags, and public external profile links. handle is the creator's page handle, e.g. CachyOS for patreon.com/CachyOS.", + "operationId": "patreon-creator", "parameters": [ { - "description": "Canonical Page Six article URL", + "description": "Creator page handle", "in": "query", - "name": "url", + "name": "handle", "required": true, "type": "string", - "x-example": "https://pagesix.com/2026/09/24/celebrity-news/example-article-slug/" + "x-example": "CachyOS" } ], "produces": [ @@ -333164,7 +369003,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/patreon.creatorResponseDoc" } }, "400": { @@ -333179,6 +369018,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -333191,24 +369036,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Page Six article content", + "summary": "Get a public Patreon creator profile", "tags": [ - "Page Six" + "Patreon" ] } }, - "/pagesix/author": { + "/patreon/creator/tiers": { "get": { - "description": "Returns a Page Six author's byline metadata, biography, social links, and recent articles from a canonical author URL.", - "operationId": "pagesix-author", + "consumes": [ + "application/json" + ], + "description": "Returns published membership tiers and their published benefits from a creator's public Patreon page. It excludes member-only entitlements, tier capacity, and member counts. handle is the creator's page handle, e.g. CachyOS for patreon.com/CachyOS.", + "operationId": "patreon-creator-tiers", "parameters": [ { - "description": "Canonical Page Six author URL", + "description": "Creator page handle", "in": "query", - "name": "url", + "name": "handle", "required": true, "type": "string", - "x-example": "https://pagesix.com/author/jane-doe/" + "x-example": "CachyOS" } ], "produces": [ @@ -333218,7 +369066,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.pagesixAuthorResponseDoc" + "$ref": "#/definitions/patreon.membershipTiersResponseDoc" } }, "400": { @@ -333233,6 +369081,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -333245,55 +369099,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Page Six author profile", + "summary": "Get a creator's public Patreon membership tiers", "tags": [ - "Page Six" + "Patreon" ] } }, - "/pagesix/headlines": { + "/patreon/explore": { "get": { - "description": "Returns fresh headlines from one public Page Six RSS section.", - "operationId": "pagesix-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns Patreon's public curated creator shelves for one topic: Top creators, Popular this week, and New on Patreon. topic must be one of podcasts_and_shows, visual_arts, tabletop_games, video_games, music, lifestyle, writing, handicrafts, apps_and_software, social_impact.", + "operationId": "patreon-explore", "parameters": [ { - "description": "Page Six RSS section slug", + "description": "Public Explore topic. Allowed values: podcasts_and_shows, visual_arts, tabletop_games, video_games, music, lifestyle, writing, handicrafts, apps_and_software, social_impact", "enum": [ - "awards", - "beauty", - "california-society", - "celebrity-news", - "contributor-content", - "entertainment", - "fashion", - "hollywood", - "hollywood-awards-watch", - "hollywood-media-news", - "hollywood-studio-news", - "lifestyle", - "los-angeles-society", - "media", - "miami-society", - "movies", + "podcasts_and_shows", + "visual_arts", + "tabletop_games", + "video_games", "music", - "new-york-city-society", - "palm-beach-society", - "parents", - "real-estate", - "royal-family", - "shopping", - "society", - "sports", - "style", - "taylor-swift", - "travel", - "tv", - "washington-dc-society" + "lifestyle", + "writing", + "handicrafts", + "apps_and_software", + "social_impact" ], "in": "query", - "name": "section", + "name": "topic", "required": true, - "type": "string" + "type": "string", + "x-example": "podcasts_and_shows" } ], "produces": [ @@ -333303,7 +369141,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/patreon.exploreResponseDoc" } }, "400": { @@ -333312,6 +369150,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -333324,16 +369168,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Page Six section headlines", + "summary": "Browse public Patreon creators by topic", "tags": [ - "Page Six" + "Patreon" ] } }, - "/pagesix/news": { + "/patreon/rss": { "get": { - "description": "Returns fresh Page Six top stories from its public RSS feed.", - "operationId": "pagesix-news", + "consumes": [ + "application/json" + ], + "description": "Returns public podcast channel metadata and episodes from Patreon's canonical public RSS feed. campaign_id and show_id are the numeric IDs in the public feed URL. Private member feeds and authentication URLs are not supported.", + "operationId": "patreon-rss", + "parameters": [ + { + "description": "Numeric Patreon campaign id", + "in": "query", + "name": "campaign_id", + "required": true, + "type": "string", + "x-example": "80117" + }, + { + "description": "Numeric Patreon show id", + "in": "query", + "name": "show_id", + "required": true, + "type": "string", + "x-example": "1322380" + } + ], "produces": [ "application/json" ], @@ -333341,7 +369206,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/patreon.publicRSSResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -333362,16 +369239,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Page Six top stories", + "summary": "Get an explicitly public Patreon podcast RSS feed", "tags": [ - "Page Six" + "Patreon" ] } }, - "/pagesix/sections": { + "/pcgamer/article": { "get": { - "description": "Returns the public Page Six RSS section inventory used by the headlines endpoint.", - "operationId": "pagesix-sections", + "description": "Returns public PC Gamer article metadata and body paragraphs from a canonical article URL.", + "operationId": "pcgamer-article", + "parameters": [ + { + "description": "Canonical PC Gamer article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.pcgamer.com/games/discord-takes-a-second-swing-at-age-verification-but-dont-worry-this-time-itll-guess-how-old-you-are-with-90-percent-accuracy/" + } + ], "produces": [ "application/json" ], @@ -333379,7 +369266,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$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" } } }, @@ -333388,64 +369293,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Page Six RSS sections", + "summary": "Get PC Gamer article content", "tags": [ - "Page Six" + "PC Gamer" ] } }, - "/pandamart/search": { + "/pcgamer/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns pandamart grocery/convenience darkstores delivering to a latitude/longitude. Each store carries its code (the value the store and products endpoints take), name, address, coordinates, budget tier, chain, 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": "pandamart-search", + "description": "Returns one PC Gamer author's public profile: name, biography, social links, and one page of their recent articles.", + "operationId": "pcgamer-author", "parameters": [ { - "description": "Delivery Hero market. One of sg, pk, bd, hk, my, ph. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph" - ], + "description": "Author slug, e.g. harvey-randall", "in": "query", - "name": "market", + "name": "slug", "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 + "x-example": "harvey-randall" }, { - "description": "Darkstores to return, clamped to 50 (default 20)", + "description": "Canonical pcgamer.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://www.pcgamer.com/author/harvey-randall" }, { - "description": "Result offset for pagination (default 0)", + "default": 1, + "description": "1-based page number; overrides any page number in url", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "page", + "type": "integer" } ], "produces": [ @@ -333455,7 +369333,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pandamart.searchResponseDoc" + "$ref": "#/definitions/publicnews.pcgamerAuthorResponseDoc" } }, "400": { @@ -333464,6 +369342,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -333476,56 +369360,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search pandamart darkstores near a location", + "summary": "Get a PC Gamer author profile", "tags": [ - "Pandamart" + "PC Gamer" ] } }, - "/pandamart/store": { + "/pcgamer/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one pandamart darkstore's detail by code: name, address, coordinates, budget tier, chain, 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": "pandamart-store", + "description": "Returns fresh PC Gamer headlines from one public section hub page.", + "operationId": "pcgamer-headlines", "parameters": [ { - "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", + "description": "PC Gamer section slug", "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph" + "deals", + "games", + "gaming-industry", + "guides", + "hardware", + "movies-tv", + "news", + "software" ], "in": "query", - "name": "market", - "type": "string", - "x-example": "sg" - }, - { - "description": "Darkstore code, from /pandamart/search's code field", - "in": "query", - "name": "code", + "name": "section", "required": true, "type": "string", - "x-example": "wsg7" - }, - { - "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": "deals" } ], "produces": [ @@ -333535,7 +369397,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pandamart.storeResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -333544,12 +369406,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -333562,44 +369418,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one pandamart darkstore's detail", + "summary": "Get PC Gamer section headlines", "tags": [ - "Pandamart" + "PC Gamer" ] } }, - "/pandamart/store/categories": { + "/pcgamer/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one darkstore's full category tree: every category and sub-category, each with the upstream-reported product count and (for top-level categories) an image. Sourced from the same page /pandamart/store/products reads, so it costs no extra request beyond a plain store lookup. This lists what categories exist and how large they are -- it does not fetch the items inside any one category, which still requires a resolved delivery-address session this repo could not reproduce. Sub-category product counts are frequently 0 upstream; only top-level counts are reliably populated.", - "operationId": "pandamart-store-categories", - "parameters": [ - { - "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph" - ], - "in": "query", - "name": "market", - "type": "string", - "x-example": "sg" - }, - { - "description": "Darkstore code, from /pandamart/search's code field", - "in": "query", - "name": "code", - "required": true, - "type": "string", - "x-example": "wsg7" - } - ], + "description": "Returns fresh PC Gamer top stories from the public RSS feed.", + "operationId": "pcgamer-news", "produces": [ "application/json" ], @@ -333607,17 +369435,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pandamart.categoriesResponseDoc" - } - }, - "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" } @@ -333634,50 +369456,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get one pandamart darkstore's category tree", + "summary": "Get PC Gamer top stories", "tags": [ - "Pandamart" + "PC Gamer" ] } }, - "/pandamart/store/product": { + "/pcgamer/sections": { "get": { - "consumes": [ + "description": "Returns the public PC Gamer top-level editorial taxonomy used by the headlines endpoint.", + "operationId": "pcgamer-sections", + "produces": [ "application/json" ], - "description": "Returns one product's full detail by ID: the same fields a shelf/search result carries plus category_id and, for weighable/grocery items, per-unit pricing and nutrition attributes. Resolves the store's page slug internally, so only the darkstore code and product ID are needed.", - "operationId": "pandamart-store-product", - "parameters": [ - { - "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph" - ], - "in": "query", - "name": "market", - "type": "string", - "x-example": "sg" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Darkstore code, from /pandamart/search's code field", - "in": "query", - "name": "code", - "required": true, - "type": "string", - "x-example": "wsg7" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get PC Gamer sections", + "tags": [ + "PC Gamer" + ] + } + }, + "/pcmag/article": { + "get": { + "description": "Returns public PCMag article or product-review metadata and body paragraphs from a canonical article URL.", + "operationId": "pcmag-article", + "parameters": [ { - "description": "Product ID, from a search/products/categories response's id field", + "description": "Canonical PCMag article or review URL", "in": "query", - "name": "product_id", + "name": "url", "required": true, "type": "string", - "x-example": "8012454" + "x-example": "https://www.pcmag.com/news/durabooks-latest-rugged-laptop-goes-to-the-extreme-with-triple-screen-setup" } ], "produces": [ @@ -333687,7 +369509,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pandamart.productDetailResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -333714,42 +369536,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get one pandamart product's full detail", + "summary": "Get PCMag article or review content", "tags": [ - "Pandamart" + "PCMag" ] } }, - "/pandamart/store/products": { + "/pcmag/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one darkstore's product showcase: every named shelf its own home page displays (deals, new arrivals, category highlights, etc.), each with real prices, stock, and availability. This is the curated set of shelves the store's home page surfaces, not the full category-browsable catalog -- browsing into a specific category page requires a resolved delivery-address session this repo could not reproduce server-side.", - "operationId": "pandamart-store-products", + "description": "Returns one PCMag author's public profile: name, role, biography, areas of expertise, social links, and their recent articles.", + "operationId": "pcmag-author", "parameters": [ { - "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph" - ], + "description": "Author slug, e.g. michael-kan", "in": "query", - "name": "market", + "name": "slug", "type": "string", - "x-example": "sg" + "x-example": "michael-kan" }, { - "description": "Darkstore code, from /pandamart/search's code field", + "description": "Canonical pcmag.com/authors/ URL; alternative to slug", "in": "query", - "name": "code", - "required": true, + "name": "url", "type": "string", - "x-example": "wsg7" + "x-example": "https://www.pcmag.com/authors/michael-kan" } ], "produces": [ @@ -333759,7 +369569,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pandamart.productsResponseDoc" + "$ref": "#/definitions/publicnews.pcmagAuthorResponseDoc" } }, "400": { @@ -333786,76 +369596,258 @@ "ApiKeyAuth": [] } ], - "summary": "Get one pandamart darkstore's product showcase", + "summary": "Get a PCMag author profile", "tags": [ - "Pandamart" + "PCMag" ] } }, - "/pandamart/store/search": { + "/pcmag/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches by keyword within one darkstore's own catalog -- the pandamart equivalent of the search box on a darkstore page. Unlike the product showcase's curated shelves, this reaches the store's full catalog by keyword. Returns matching products with real prices, stock, and availability, plus total_products and has_more for pagination via page/limit.", - "operationId": "pandamart-store-search", + "description": "Returns fresh PCMag headlines from one public topic/category hub.", + "operationId": "pcmag-headlines", "parameters": [ { - "description": "Delivery Hero market the store belongs to. One of sg, pk, bd, hk, my, ph. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph" - ], - "in": "query", - "name": "market", - "type": "string", - "x-example": "sg" - }, - { - "description": "Darkstore code, from /pandamart/search's code field", - "in": "query", - "name": "code", - "required": true, - "type": "string", - "x-example": "wsg7" - }, - { - "description": "Product search text", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "milk" - }, - { - "description": "Result order. One of RELEVANCE, PRICE_ASC, PRICE_DESC. Defaults to RELEVANCE.", + "description": "PCMag category slug", "enum": [ - "RELEVANCE", - "PRICE_ASC", - "PRICE_DESC" + "3d-printers", + "accounting", + "ai", + "air-purifiers", + "android", + "android-apps", + "anti-ransomware-for-business", + "antivirus", + "appliances", + "applicant-tracking-systems", + "application-performance-management", + "asset-management", + "audio", + "audio-accessories", + "audio-editing", + "audio-recording", + "background-check-services", + "batteries-power", + "benefits-administration-software", + "billing-invoicing-software", + "blu-ray-players", + "bluetooth-headsets", + "browsers", + "business-card-printing", + "business-plan-software", + "call-center-features", + "camera-accessories", + "cameras", + "car-accessories", + "cars-auto", + "cloud-backup-for-business", + "cloud-file-storage-for-business", + "cloud-infrastructure", + "collaboration", + "communications", + "components", + "computer-mice", + "connected-kitchen", + "contract-management-software", + "credit-card-processors", + "crm-software", + "cryptocurrency", + "dash-cams", + "data-analytics", + "data-visualization-tools", + "database", + "dating", + "desktop-pcs", + "digital-life", + "digital-voice-recorders", + "disaster-recovery", + "dna-testing-kits", + "document-management-software", + "drones", + "e-commerce-fulfillment-services", + "e-commerce-payments", + "e-commerce-software", + "ebook-readers", + "education", + "elearning-authoring-tools", + "electronic-health-record-management", + "email-marketing", + "employee-monitoring", + "employee-monitoring-software", + "employee-shift-scheduling", + "enterprise-accounting-software", + "erp-software", + "expense-tracking-software", + "fax-services", + "file-sync-backup", + "fitness", + "fitness-trackers", + "fleet-management", + "game-controllers-accessories", + "game-streaming-services", + "games", + "gaming", + "gaming-systems", + "gps-navigation", + "graphic-design", + "graphics-cards", + "hard-drives", + "headphones", + "health-fitness", + "heart-rate-monitors", + "help-desk", + "home-automation-hubs", + "home-entertainment", + "home-entertainment-accessories", + "home-security", + "home-security-cameras", + "hosted-email-providers", + "hosted-endpoint-protection", + "hr-software", + "human-resources", + "identity-management", + "infrastructure-management", + "input-devices", + "inventory-management-software", + "ios", + "ipad-apps", + "iphone-apps", + "it-management", + "it-security", + "keyboards", + "language-learning", + "laptop-accessories", + "laptops", + "lead-management", + "lenses", + "linux", + "low-code-app-development", + "macos", + "malware-protection-removal", + "marketing-automation-software", + "meal-kits", + "media-streaming-devices", + "media-streaming-software", + "medical-alert-systems", + "membership-management", + "microsoft-xbox-games", + "mobile-apps", + "mobile-device-management", + "mobile-games", + "mobile-payment-apps", + "mobile-phone-accessories", + "mobile-phones", + "modems-hotspots", + "monitors", + "motherboards", + "music-audio", + "network-attached-storage", + "network-management", + "network-monitoring", + "networking", + "nintendo-games", + "office-suites", + "online-learning-platforms-for-business", + "online-survey-tools", + "onlinecloud-backup-services", + "operating-systems", + "operations", + "parental-control", + "password-managers", + "payroll", + "pc-cases", + "pc-games", + "performance-management", + "personal-finance", + "personal-finance-apps", + "photo-design", + "photo-editing", + "photo-printing", + "podcasting", + "point-of-sale", + "power-supplies", + "printers", + "processors", + "productivity", + "project-management", + "projectors", + "proxies", + "ransomware-protection", + "robot-vacuums", + "sales-marketing", + "scanners", + "secure-file-transfer", + "security", + "security-suites", + "self-service-business-intelligence-tools", + "seo-tools", + "shopping", + "shredders", + "sim-cards", + "smart-displays", + "smart-glasses", + "smart-home", + "smart-lawn-mowers", + "smart-lighting", + "smart-locks", + "smart-plugs", + "smart-scales", + "smart-thermostats", + "smartwatches", + "smb-accounting", + "social-listening-and-influencer-identification", + "social-media", + "social-media-management", + "sony-playstation-games", + "speakers", + "spyware-protection", + "ssds", + "storage", + "streaming-music-services", + "styli", + "subscription-services", + "system-utilities", + "tablet-accessories", + "tablets", + "tax-software", + "team-messaging", + "tech-for-kids", + "time-tracking", + "to-do-list-apps", + "toys", + "tracking-devices-for-kids", + "tracking-devices-for-pets", + "travel", + "tune-up-utilities", + "tvs", + "universal-remotes", + "video", + "video-camera-accessories", + "video-cameras", + "video-conferencing-software", + "video-editing", + "video-streaming-services", + "virtualization", + "voip-phone-services", + "vpn", + "vr", + "wearables", + "web-hosting", + "webcams", + "website-app-building-tools", + "website-builders", + "website-monitoring", + "wi-fi-mesh-networking-systems", + "wi-fi-range-extenders", + "windows", + "wireless-carriers", + "wireless-routers" ], "in": "query", - "name": "sort", + "name": "section", + "required": true, "type": "string", - "x-example": "RELEVANCE" - }, - { - "description": "1-based result page (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Products per page, clamped to 10-50 (default 20)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "3d-printers" } ], "produces": [ @@ -333865,7 +369857,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pandamart.storeSearchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -333886,19 +369878,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search for products within one pandamart darkstore", + "summary": "Get PCMag section headlines", "tags": [ - "Pandamart" + "PCMag" ] } }, - "/panera/at-work-locations": { + "/pcmag/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the full national Panera at Work location list -- a separate B2B workplace-delivery drop-off program from ordinary cafe pickup/delivery covered by GET /panera/locations. Each location carries its address, coordinates, delivery contact, lead time, the cafe id that services it, and its scheduled drop-off/order-cutoff times per weekday. This is a small, national dataset -- no query parameters are needed.", - "operationId": "panera-at-work-locations", + "description": "Returns fresh PCMag top stories from the public news feed.", + "operationId": "pcmag-news", "produces": [ "application/json" ], @@ -333906,7 +369895,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.atWorkLocationsResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -333927,27 +369916,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Panera Bread's Panera at Work workplace-delivery locations", + "summary": "Get PCMag top stories", "tags": [ - "Panera" + "PCMag" ] } }, - "/panera/cafe": { + "/pcmag/sections": { "get": { - "consumes": [ + "description": "Returns the public PCMag product/topic taxonomy accepted by the headlines endpoint.", + "operationId": "pcmag-sections", + "produces": [ "application/json" ], - "description": "Returns one Panera Bread cafe's address, phone, coordinates, amenity flags, per-fulfillment-channel availability (dine-in, storefront/pickup, rapid pickup, drive-thru, curbside, delivery -- each with its own available/open-now/lead-time-minutes and weekly hours where Panera publishes them) and the published storefront hours for the next calendar week with concrete dates. Cafe ids come from GET /panera/locations. An unknown cafe id returns a 404.", - "operationId": "panera-cafe", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PCMag sections", + "tags": [ + "PCMag" + ] + } + }, + "/people/article": { + "get": { + "description": "Returns public PEOPLE article metadata and body paragraphs from a canonical article URL.", + "operationId": "people-article", "parameters": [ { - "description": "Panera cafe id, from /panera/locations", + "description": "Canonical PEOPLE article URL", "in": "query", - "name": "cafe_id", + "name": "url", "required": true, - "type": "integer", - "x-example": 601447 + "type": "string", + "x-example": "https://people.com/example-headline-12345678" } ], "produces": [ @@ -333957,7 +369969,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.cafeResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -333972,12 +369984,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -333990,27 +369996,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread cafe's detail and hours", + "summary": "Get PEOPLE article content", "tags": [ - "Panera" + "PEOPLE" ] } }, - "/panera/catering-delivery-info": { + "/people/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one cafe's catering delivery fee, minimum order amount, weekly delivery hours, order-size lead-time tiers (e.g. a $750+ order needs a longer lead time than a smaller one), and upcoming available delivery dates with their order windows. This is Panera's catering delivery flow specifically -- catering pickup happens at the cafe itself, whose hours are already covered by GET /panera/cafe. Returns 404 if the cafe does not offer catering delivery.", - "operationId": "panera-catering-delivery-info", + "description": "Returns a PEOPLE staff writer or contributor's public profile (name, job title, structured intro fields, biography, personal social links) and recent articles from a canonical author URL.", + "operationId": "people-author", "parameters": [ { - "description": "Panera cafe id, from /panera/locations", + "description": "Canonical PEOPLE author URL", "in": "query", - "name": "cafe_id", + "name": "url", "required": true, - "type": "integer", - "x-example": 601447 + "type": "string", + "x-example": "https://people.com/madison-goldberg-11701619" } ], "produces": [ @@ -334020,7 +370023,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.cateringDeliveryInfoResponseDoc" + "$ref": "#/definitions/publicnews.peopleAuthorResponseDoc" } }, "400": { @@ -334035,12 +370038,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -334053,27 +370050,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread cafe's catering delivery fee, minimum order, hours and lead times", + "summary": "Get a PEOPLE author profile", "tags": [ - "Panera" + "PEOPLE" ] } }, - "/panera/catering-menu": { + "/people/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one cafe's catering category list and its full catering item catalog, priced for that specific cafe -- Panera's catering ordering flow is a separate application from its retail site, with its own category structure, pricing and item availability (confirmed live: the same item priced differently between a placeholder default cafe and a real cafe). Categories are a flat list (catering does not publish a category hierarchy the way the retail menu does). Each item carries its price, product type, portion label, whether it is customizable, a full published nutrient panel (calories, calories from fat, fat, saturated fat, trans fat, cholesterol, sodium, carbohydrates, dietary fiber, total sugars, protein, caffeine -- richer than the retail menu's calories/caffeine-only surface), its allergen statement (contains / may-contain, each with an id and display name), and a live in_stock flag from this cafe's current catering stockout feed for today. Cafe ids come from GET /panera/locations.", - "operationId": "panera-catering-menu", + "description": "Returns fresh headlines from one PEOPLE section listing page. section accepts any slug returned by GET /people/sections (37 values, too many to enumerate inline -- see that endpoint for the full, current list), for example \"celebrity\" or \"royals\".", + "operationId": "people-headlines", "parameters": [ { - "description": "Panera cafe id, from /panera/locations", + "description": "PEOPLE section slug, from GET /people/sections", "in": "query", - "name": "cafe_id", + "name": "section", "required": true, - "type": "integer", - "x-example": 601447 + "type": "string", + "x-example": "celebrity" } ], "produces": [ @@ -334083,7 +370077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.cateringMenuResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -334092,12 +370086,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -334110,29 +370098,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread cafe's catering menu with prices, nutrition and allergens", + "summary": "Get PEOPLE section headlines", "tags": [ - "Panera" + "PEOPLE" ] } }, - "/panera/geocode": { + "/people/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Resolves a free-text address, city, or postal code to coordinates using Panera Bread's own locator geocoder -- the same lookup its site uses to center a cafe search. Returns latitude/longitude plus the resolved city, state, country and formatted address. An address Panera cannot resolve returns a single result with resolved false rather than an error.", - "operationId": "panera-geocode", - "parameters": [ - { - "description": "Free-text address, city, or postal code", - "in": "query", - "name": "address", - "required": true, - "type": "string", - "x-example": "Chicago, IL" - } - ], + "description": "Returns fresh PEOPLE celebrity and entertainment stories from the public homepage.", + "operationId": "people-news", "produces": [ "application/json" ], @@ -334140,13 +370115,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.geocodeResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -334167,35 +370136,50 @@ "ApiKeyAuth": [] } ], - "summary": "Geocode a free-text address for Panera Bread's locator", + "summary": "Get PEOPLE top stories", "tags": [ - "Panera" + "PEOPLE" ] } }, - "/panera/item-detail": { + "/people/sections": { "get": { - "consumes": [ + "description": "Returns the full PEOPLE section/category navigation inventory (37 entries as of 2026-09-24), each with a slug, display name, and public listing URL. Use a returned slug as the section parameter on GET /people/headlines.", + "operationId": "people-sections", + "produces": [ "application/json" ], - "description": "Returns one menu item's full description, ingredient statement, a full per-serving nutrient panel (richer than GET /panera/menu's calories/caffeine-only surface), its allergen statement, and every selectable size with its own price and calories. item_id may be negative -- GET /panera/menu itself surfaces negative item ids for some items, and they resolve fine here. Returns 404 if Panera publishes no detail page for the given item id at this cafe.", - "operationId": "panera-item-detail", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Panera cafe id, from /panera/locations", - "in": "query", - "name": "cafe_id", - "required": true, - "type": "integer", - "x-example": 601447 - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get PEOPLE sections", + "tags": [ + "PEOPLE" + ] + } + }, + "/phillyinquirer/article": { + "get": { + "description": "Returns public Philadelphia Inquirer article metadata and body paragraphs from a canonical story URL.", + "operationId": "phillyinquirer-article", + "parameters": [ { - "description": "Menu item id, from /panera/menu", + "description": "Canonical Philadelphia Inquirer story URL", "in": "query", - "name": "item_id", + "name": "url", "required": true, - "type": "integer", - "x-example": 650115 + "type": "string", + "x-example": "https://www.inquirer.com/news/ice-arrest-philadelphia-california-business-trip-airport-20260924.html" } ], "produces": [ @@ -334205,7 +370189,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.itemDetailResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -334220,12 +370204,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -334238,35 +370216,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread menu item's full detail", + "summary": "Get Philadelphia Inquirer article content", "tags": [ - "Panera" + "Philadelphia Inquirer" ] } }, - "/panera/item-options": { + "/phillyinquirer/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one item's selectable option groups: for a combo, each group is a slot to fill (for example \"pick 4 sandwiches\", \"pick 1 soup\"), listing every eligible choice; for a single customizable item, each group is one topping/add-in/amount choice (for example No, Light, Regular, Extra). Each group has min_allowed and max_allowed (how many selections it requires). Each option is one selectable choice, with its own selectable variants (amount tiers) each carrying an item_id and price -- price 0 for a variant included at no extra charge. Panera does not publish a resolved display name for options or groups on this surface, so each option carries its raw upstream image_key as the caller-facing identifier instead of a name. An item that is not customizable, or an unknown item id, returns an empty groups list rather than an error -- Panera's own API does not distinguish the two cases. Item ids come from GET /panera/menu.", - "operationId": "panera-item-options", + "description": "Returns one Philadelphia Inquirer staff author's public profile: name, role, biography, social links, and their latest listed stories.", + "operationId": "phillyinquirer-author", "parameters": [ { - "description": "Panera cafe id, from /panera/locations", + "description": "Author slug, e.g. gammage_jeff", "in": "query", - "name": "cafe_id", - "required": true, - "type": "integer", - "x-example": 601447 + "name": "slug", + "type": "string", + "x-example": "gammage_jeff" }, { - "description": "Menu item id, from /panera/menu", + "description": "Canonical inquirer.com/author/ URL; alternative to slug", "in": "query", - "name": "item_id", - "required": true, - "type": "integer", - "x-example": 643423 + "name": "url", + "type": "string", + "x-example": "https://www.inquirer.com/author/gammage_jeff/" } ], "produces": [ @@ -334276,7 +370249,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.itemOptionsResponseDoc" + "$ref": "#/definitions/publicnews.phillyinquirerAuthorResponseDoc" } }, "400": { @@ -334285,8 +370258,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -334303,33 +370276,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread menu item's selectable option groups", + "summary": "Get a Philadelphia Inquirer author profile", "tags": [ - "Panera" + "Philadelphia Inquirer" ] } }, - "/panera/locations": { + "/phillyinquirer/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one level of Panera Bread's US cafe locator tree. Omit both state and city to list every US state and territory Panera serves, each with its cafe count. Pass state to list every city in that state, each with its full cafe list -- id, name, street address, city, state, postal code, phone, coordinates and per-cafe amenity flags (for example hasDriveThru, hasDelivery, hasCurbside, hasKiosk). Pass both state and city to narrow to that one city's cafes. A state Panera does not serve, or a city with no match, returns an empty list rather than an error.", - "operationId": "panera-locations", + "description": "Returns fresh Philadelphia Inquirer headlines from one public section feed. Associated Press wire copy is not included.", + "operationId": "phillyinquirer-headlines", "parameters": [ { - "description": "Two-letter US state abbreviation. Omit to list every state.", - "in": "query", - "name": "state", - "type": "string", - "x-example": "IL" - }, - { - "description": "City name. Requires state. Omit to list every city in the state.", + "description": "Philadelphia Inquirer section slug", + "enum": [ + "arts", + "business", + "college-sports", + "crime", + "eagles", + "education", + "entertainment", + "flyers", + "food", + "health", + "high-school-sports", + "life", + "news", + "opinion", + "phillies", + "politics", + "real-estate", + "science", + "sixers", + "soccer", + "south-jersey", + "sports", + "transportation", + "weather" + ], "in": "query", - "name": "city", + "name": "section", + "required": true, "type": "string", - "x-example": "Chicago" + "x-example": "arts" } ], "produces": [ @@ -334339,7 +370329,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.locationsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -334348,12 +370338,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -334366,29 +370350,16 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Panera Bread's US cafe locator", + "summary": "Get Philadelphia Inquirer section headlines", "tags": [ - "Panera" + "Philadelphia Inquirer" ] } }, - "/panera/menu": { + "/phillyinquirer/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one cafe's full category tree (with subcategories) and its complete item catalog, priced for that specific cafe -- Panera's prices are genuinely per-cafe, not a national list (the same salad has been confirmed live at different prices in Chicago and New York). Each item carries its price, product type, whether it is customizable, its published nutrients (Panera's placard API only ever publishes Calories and Caffeine on this surface -- a fuller macro/micronutrient breakdown is not available credential-free), its allergen statement (contains / may-contain, each with an id and display name), Panera's own wellness/dietary labels (for example Vegan, Vegetarian, Gluten Conscious), and a live in_stock flag from this cafe's current stockout feed. Cafe ids come from GET /panera/locations. An unknown cafe id returns a 404.", - "operationId": "panera-menu", - "parameters": [ - { - "description": "Panera cafe id, from /panera/locations", - "in": "query", - "name": "cafe_id", - "required": true, - "type": "integer", - "x-example": 601447 - } - ], + "description": "Returns fresh Philadelphia Inquirer top stories from the public news feed. Associated Press wire copy is not included.", + "operationId": "phillyinquirer-news", "produces": [ "application/json" ], @@ -334396,19 +370367,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.menuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -334429,29 +370388,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread cafe's full menu with prices, nutrition and allergens", + "summary": "Get Philadelphia Inquirer top stories", "tags": [ - "Panera" + "Philadelphia Inquirer" ] } }, - "/panera/quantity-rules": { + "/phillyinquirer/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one cafe's active order-quantity limits -- promotional or supply-constrained items Panera caps per order (for example a seasonal souffle limited to 6 within a 2-day window). Each rule has a scope (item or group), the item ids it applies to, and one or more day-offset windows each with its own max_quantity. A cafe with no active limits returns an empty rules list, not an error. Cafe ids come from GET /panera/locations.", - "operationId": "panera-quantity-rules", - "parameters": [ - { - "description": "Panera cafe id, from /panera/locations", - "in": "query", - "name": "cafe_id", - "required": true, - "type": "integer", - "x-example": 601447 - } - ], + "description": "Returns the public Philadelphia Inquirer section taxonomy accepted by the headlines endpoint.", + "operationId": "phillyinquirer-sections", "produces": [ "application/json" ], @@ -334459,13 +370405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.quantityRulesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -334486,27 +370426,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread cafe's order-quantity limits", + "summary": "Get Philadelphia Inquirer sections", "tags": [ - "Panera" + "Philadelphia Inquirer" ] } }, - "/panera/retired-products": { + "/philstar/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns items no longer on the active menu, resolved through the given cafe's own version map -- either permanently retired (availability_stage RETIRED) or currently out of seasonal rotation (SEASONAL, may return). Each item carries its name, description, portion label and image key. Cafe ids come from GET /panera/locations.", - "operationId": "panera-retired-products", + "description": "Returns public Philstar article metadata and body paragraphs from a canonical article URL. Philstar serves full stories to anonymous readers, so no paywall flag is needed.", + "operationId": "philstar-article", "parameters": [ { - "description": "Panera cafe id, from /panera/locations", + "description": "Canonical Philstar article URL", "in": "query", - "name": "cafe_id", + "name": "url", "required": true, - "type": "integer", - "x-example": 601447 + "type": "string", + "x-example": "https://www.philstar.com/business/2026/09/25/2558683/naysayers-wont-take-away-gcashs-very-exciting-story" } ], "produces": [ @@ -334516,7 +370453,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.retiredProductsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -334525,8 +370462,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -334543,35 +370480,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Panera Bread's retired and seasonal menu items", + "summary": "Get Philstar article content", "tags": [ - "Panera" + "Philstar" ] } }, - "/panera/time-slots": { + "/philstar/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one cafe's available pickup/delivery order time-slot windows for one date, plus that date's overall open/close time. Unlike GET /panera/cafe's published storefront hours, this reflects live order-slot availability, not just when the cafe is open -- an empty windows list is a legitimate outcome (e.g. the cafe is closed that day), not an error. date must be YYYY-MM-DD, interpreted in the cafe's own local timezone.", - "operationId": "panera-time-slots", + "description": "Returns one Philstar author's public archive: name, profile photo when set, and the most recent stories on the first page of the archive. Authors are identified by the numeric id in the byline link (philstar.com/authors//).", + "operationId": "philstar-author", "parameters": [ { - "description": "Panera cafe id, from /panera/locations", + "description": "Numeric Philstar author id from a byline link, e.g. 1805259", "in": "query", - "name": "cafe_id", - "required": true, - "type": "integer", - "x-example": 601447 + "name": "id", + "type": "string", + "x-example": "1805259" }, { - "description": "Date, YYYY-MM-DD", + "description": "Author archive URL, https://www.philstar.com/authors/[/]; alternative to id", "in": "query", - "name": "date", - "required": true, + "name": "url", "type": "string", - "x-example": "2026-09-10" + "x-example": "https://www.philstar.com/authors/1805259/richmond-mercurio" } ], "produces": [ @@ -334581,7 +370513,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.timeSlotsResponseDoc" + "$ref": "#/definitions/publicnews.philstarAuthorResponseDoc" } }, "400": { @@ -334590,8 +370522,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -334608,27 +370540,119 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread cafe's available order time-slot windows", + "summary": "Get a Philstar author archive", "tags": [ - "Panera" + "Philstar" ] } }, - "/panera/upsell-suggestions": { + "/philstar/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Panera's own suggested add-ons per menu item (for example \"Extra Turkey\" and \"Extra Bacon\" for a Bacon Turkey Bravo sandwich). Item ids on this surface are in a separate id space from /panera/menu's item_id, but both the item and its suggestions carry their own resolved names, so no cross-reference is needed. Cafe ids come from GET /panera/locations.", - "operationId": "panera-upsell-suggestions", + "description": "Returns the current headlines from the first page of one public Philstar section page (Philstar publishes no crawlable feeds, so this reads the section page itself).", + "operationId": "philstar-headlines", "parameters": [ { - "description": "Panera cafe id, from /panera/locations", + "description": "Philstar section slug", + "enum": [ + "headlines", + "headlines-climate-and-environment", + "headlines-weather", + "opinion", + "nation", + "world", + "business", + "business-agriculture", + "business-banking", + "business-biz-memos", + "business-business-as-usual", + "business-motoring", + "business-real-estate", + "business-science-and-environment", + "business-stock-commentary", + "business-technology", + "business-telecoms", + "sports", + "sports-deans-corner", + "esport", + "entertainment", + "entertainment-korean-wave", + "entertainment-movies", + "entertainment-music", + "movies", + "music", + "lifestyle", + "lifestyle-arts-and-culture", + "lifestyle-business-life", + "lifestyle-fashion-and-beauty", + "lifestyle-food-and-leisure", + "lifestyle-gadgets", + "lifestyle-health-and-family", + "lifestyle-modern-living", + "lifestyle-on-the-radar", + "lifestyle-pet-life", + "lifestyle-shopping-guide", + "lifestyle-the-budgetarian", + "lifestyle-travel-and-tourism", + "news-commentary", + "videos", + "brandspace", + "campus", + "exam-results", + "lotto-results", + "other-sections-comics", + "other-sections-daily-bread", + "other-sections-education-and-home", + "other-sections-exam-results", + "other-sections-forex", + "other-sections-letters-to-the-editor", + "other-sections-lotto-results", + "other-sections-newsmakers", + "other-sections-star-cover", + "other-sections-supplements", + "other-sections-the-good-news", + "other-sections-word-of-the-day", + "pang-masa", + "pang-masa-pang-movies", + "pang-masa-para-malibang", + "pang-masa-para-manalo", + "pang-masa-pm-sports", + "pang-masa-police-metro", + "pang-masa-punto-mo", + "pilipino-star-ngayon", + "pilipino-star-ngayon-bansa", + "pilipino-star-ngayon-dr-love", + "pilipino-star-ngayon-komiks", + "pilipino-star-ngayon-kutob", + "pilipino-star-ngayon-litra-talk", + "pilipino-star-ngayon-metro", + "pilipino-star-ngayon-opinyon", + "pilipino-star-ngayon-palaro", + "pilipino-star-ngayon-probinsiya", + "pilipino-star-ngayon-showbiz", + "pilipino-star-ngayon-true-confessions", + "banat", + "banat-balita", + "banat-imong-kapalaran", + "banat-kalingawan", + "banat-opinyon", + "banat-palaro", + "banat-punsoy", + "banat-showbiz", + "the-freeman", + "the-freeman-cebu-business", + "the-freeman-cebu-entertainment", + "the-freeman-cebu-lifestyle", + "the-freeman-cebu-news", + "the-freeman-cebu-sports", + "the-freeman-metro-cebu", + "the-freeman-opinion", + "the-freeman-region" + ], "in": "query", - "name": "cafe_id", + "name": "section", "required": true, - "type": "integer", - "x-example": 601447 + "type": "string", + "x-example": "headlines" } ], "produces": [ @@ -334638,7 +370662,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/panera.upsellSuggestionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -334647,12 +370671,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -334665,19 +370683,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Panera Bread cafe's per-item upsell suggestions", + "summary": "Get Philstar section headlines", "tags": [ - "Panera" + "Philstar" ] } }, - "/papajohns/allergens": { + "/philstar/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Papa John's complete published item x allergen matrix (crusts, sauces, cheeses, meats, veggies, and more), grouped by section, each item flagged for peanut, tree nut, egg, milk, wheat, soy, fish, shellfish, and sesame content.", - "operationId": "papajohns-allergens", + "description": "Returns the current Philstar (Philippine Star) top stories from the public homepage: the latest, trending and featured stories with summary, byline, thumbnail and the publication date encoded in the story URL.", + "operationId": "philstar-news", "produces": [ "application/json" ], @@ -334685,13 +370700,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.allergensResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -334706,33 +370715,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Papa John's full allergen guide", + "summary": "Get Philstar top stories", "tags": [ - "Papa John's" + "Philstar" ] } }, - "/papajohns/colombia/menu": { + "/philstar/sections": { "get": { - "consumes": [ + "description": "Returns the public Philstar editorial section inventory: every English, Filipino (Pilipino Star Ngayon, Pang-Masa) and Cebuano (Banat, The Freeman) section page that lists stories.", + "operationId": "philstar-sections", + "produces": [ "application/json" ], - "description": "Returns Papa John's **Colombia** menu with prices in Colombian pesos. Every product lists its priced SKU variants across the four axes Colombia sells on — size, dough, crust and sauce — each with its own price and availability. Colombia runs its own ordering platform, independent of the six markets behind GET /papajohns/intl/menu and of Peru and El Salvador, so it has its own endpoint. Prices are Colombian pesos and are not comparable with any other market. The full catalog is paged through before returning, so the response is complete rather than a first page.", - "operationId": "papajohns-colombia-menu", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Philstar sections", + "tags": [ + "Philstar" + ] + } + }, + "/phonearena/article": { + "get": { + "description": "Returns public PhoneArena news or review metadata and body paragraphs from a canonical article URL. PhoneArena serves pages behind a Cloudflare challenge; when the challenge is not cleared the endpoint returns a 503 error.", + "operationId": "phonearena-article", "parameters": [ { - "description": "Return only categories whose name contains this text, case-insensitive, e.g. Pizzas or Bebidas", + "description": "Canonical PhoneArena article URL", "in": "query", - "name": "category", + "name": "url", + "required": true, "type": "string", - "x-example": "Pizzas" - }, - { - "description": "Include every priced SKU variant. Default true; set false for a lighter response carrying only each product's cheapest price.", - "in": "query", - "name": "include_variants", - "type": "boolean", - "x-example": true + "x-example": "https://www.phonearena.com/news/the-galaxy-z-fold-8-shamelessly-stole-the-crown-from-the-iphone-duo_id183377" } ], "produces": [ @@ -334742,7 +370768,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.latamMenuResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -334757,12 +370783,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -334775,26 +370795,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Papa John's Colombia priced menu (COP)", + "summary": "Get PhoneArena article or review content", "tags": [ - "Papa John's" + "PhoneArena" ] } }, - "/papajohns/deals": { + "/phonearena/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the promotions a Papa John's US or Canada restaurant is currently running. Each offer carries its redemption code, title, description, offer price and — where the deal advertises a saving — the struck-through regular price, plus its artwork and deal-builder link. Pass a store_id from GET /papajohns/store or GET /papajohns/nearby: promotions are store-specific, and the national response is largely placeholders prompting the customer to choose a store, which are omitted here rather than returned as real offers.", - "operationId": "papajohns-deals", + "description": "Returns one PhoneArena staff author's public profile: name, role, biography, image, social links and the recent articles listed on the profile page.", + "operationId": "phonearena-author", "parameters": [ { - "description": "Restaurant id from GET /papajohns/store or GET /papajohns/nearby. Omit for national promotions.", + "description": "Author username, e.g. sebastian.f", "in": "query", - "name": "store_id", + "name": "slug", "type": "string", - "x-example": "5054" + "x-example": "sebastian.f" + }, + { + "description": "Canonical phonearena.com/team/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.phonearena.com/team/sebastian.f" } ], "produces": [ @@ -334804,7 +370828,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.dealsResponseDoc" + "$ref": "#/definitions/publicnews.phonearenaAuthorResponseDoc" } }, "400": { @@ -334819,12 +370843,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -334837,26 +370855,29 @@ "ApiKeyAuth": [] } ], - "summary": "List a Papa John's restaurant's current promotions", + "summary": "Get a PhoneArena author profile", "tags": [ - "Papa John's" + "PhoneArena" ] } }, - "/papajohns/directory": { + "/phonearena/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one level of Papa John's store directory. Omit path for the root country index, then pass a child's path to descend through state, city, and store levels. Each child includes its name, path, URL, store count when available, and whether it is a store leaf. Pass a store child's path to GET /papajohns/store. This is a directory browse; use GET /papajohns/nearby for a coordinate search.", - "operationId": "papajohns-directory", + "description": "Returns up to 100 newest PhoneArena stories or reviews from one public listing. For news-month and reviews, titles are reconstructed from the hero-image file name and published_at is the listing's last-modified time.", + "operationId": "phonearena-headlines", "parameters": [ { - "description": "Directory path from a previous response's children[].path; omit for the root country index", + "description": "PhoneArena listing slug", + "enum": [ + "news", + "news-month", + "reviews" + ], "in": "query", - "name": "path", + "name": "section", + "required": true, "type": "string", - "x-example": "united-states/ca" + "x-example": "news" } ], "produces": [ @@ -334866,7 +370887,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.directoryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -334875,18 +370896,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": { @@ -334899,28 +370908,16 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Papa John's store directory", + "summary": "Get PhoneArena section headlines", "tags": [ - "Papa John's" + "PhoneArena" ] } }, - "/papajohns/elsalvador/menu": { + "/phonearena/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Papa John's **El Salvador** menu with prices in US dollars. Each pizza lists its full size and crust price matrix — every combination of size (Grande, Gigante) and crust (Masa Original, Masa Delgada, Orilla Rellena de Queso) with that combination's own price — while sides, desserts and extras carry a single price. El Salvador runs its own ordering platform, independent of the six markets behind GET /papajohns/intl/menu and of Colombia and Peru, so it has its own endpoint. This is El Salvador's national menu; the site itself notes that choosing a restaurant can reveal further items.", - "operationId": "papajohns-elsalvador-menu", - "parameters": [ - { - "description": "Return only categories whose name contains this text, case-insensitive. One of: Pizzas, Entradas, Postres, Extras", - "in": "query", - "name": "category", - "type": "string", - "x-example": "Pizzas" - } - ], + "description": "Returns PhoneArena's most recent phone news stories (about the last two days) from its public news sitemap, with exact titles and publication times.", + "operationId": "phonearena-news", "produces": [ "application/json" ], @@ -334928,19 +370925,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.latamMenuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -334961,29 +370946,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Papa John's El Salvador priced menu (USD)", + "summary": "Get PhoneArena top stories", "tags": [ - "Papa John's" + "PhoneArena" ] } }, - "/papajohns/india/deal": { + "/phonearena/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Papa John's **India** combo or offer with its full composition: each slot in the deal (with its quantity, size, and whether it can be skipped) and every menu item eligible to fill that slot, with each choice's own price in Indian Rupees. This is materially more than the deal row in GET /papajohns/india/menu, which carries only the deal's name, price, and pricing rule. price_type is one of fixedPrice, BuyXGetY, HalfAndHalf, or variablePrice; only fixedPrice deals report a non-zero price. India market only.", - "operationId": "papajohns-india-deal", - "parameters": [ - { - "description": "Deal id from GET /papajohns/india/menu (items with kind=deal)", - "in": "query", - "name": "deal_id", - "required": true, - "type": "string", - "x-example": "17" - } - ], + "description": "Returns the public PhoneArena listings accepted by the headlines endpoint: recent news, current-month news and current-year reviews.", + "operationId": "phonearena-sections", "produces": [ "application/json" ], @@ -334991,19 +370963,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.indiaDealResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -335024,76 +370984,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Papa John's India deal's composition (INR)", + "summary": "Get PhoneArena sections", "tags": [ - "Papa John's" + "PhoneArena" ] } }, - "/papajohns/india/menu": { + "/physorg/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Papa John's **India** menu with live prices in Indian Rupees, from papajohns.in's own ordering backend. This is the India market only -- prices, items, and availability are India-specific and are not comparable to Papa John's US/Canada data (see GET /papajohns/nutrition for US national reference data). Returns every category with its items and deals: list price, strike-through price where a discount is active, dietary tags (Veg, Non Veg, Spicy), images, and the store/channel/day combinations where an item is blacked out. Set include_options=true to also get each item's full size, crust, topping, sauce, and drizzle tree with per-option prices -- this makes the response very large, so prefer GET /papajohns/india/menu/item for one item's options. Pricing is franchise-wide rather than per-store; store_id, channel_id, and day filter item availability, not price, and only take effect when all three are supplied.", - "operationId": "papajohns-india-menu", + "description": "Returns public Phys.org article metadata and readable body paragraphs from a canonical dated news URL. The service tries proxied HTTP first and uses the production browser fleet when the article edge challenges HTTP. Billing is 2 credits for an HTTP-profile success and 10 credits when browser rendering is required. No author-profile route was verified.", + "operationId": "physorg-article", "parameters": [ { - "description": "Return only this category id", - "in": "query", - "name": "category_id", - "type": "string", - "x-example": "6" - }, - { - "description": "Hide items blacked out at this store id (see GET /papajohns/india/stores). Only applies together with channel_id and day.", - "in": "query", - "name": "store_id", - "type": "string", - "x-example": "7" - }, - { - "description": "Order channel. One of: 1 (Delivery), 2 (Take Away), 3 (Dine In), 4 (Drive Through Pickup). Only applies together with store_id and day.", - "enum": [ - "1", - "2", - "3", - "4" - ], - "in": "query", - "name": "channel_id", - "type": "string", - "x-example": "1" - }, - { - "description": "Weekday. One of: 0 (Sunday), 1 (Monday), 2 (Tuesday), 3 (Wednesday), 4 (Thursday), 5 (Friday), 6 (Saturday). Only applies together with store_id and channel_id.", - "enum": [ - "0", - "1", - "2", - "3", - "4", - "5", - "6" - ], - "in": "query", - "name": "day", - "type": "string", - "x-example": "1" - }, - { - "description": "Return only items carrying this tag, e.g. Veg, Non Veg, Spicy. Case-insensitive.", + "description": "Canonical Phys.org article URL", "in": "query", - "name": "tag", + "name": "url", + "required": true, "type": "string", - "x-example": "Veg" - }, - { - "description": "Include every item's full size/crust/topping option tree with prices. Default false.", - "in": "query", - "name": "include_options", - "type": "boolean", - "x-example": false + "x-example": "https://phys.org/news/2026-09-example-story.html" } ], "produces": [ @@ -335103,7 +371011,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.indiaMenuResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -335118,12 +371026,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -335136,27 +371038,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Papa John's India priced menu (INR)", + "summary": "Get a Phys.org article", "tags": [ - "Papa John's" + "Phys.org" ] } }, - "/papajohns/india/menu/item": { + "/physorg/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Papa John's **India** menu item with its complete customization tree: every size, and for each size every crust, topping, dipping sauce, drizzle, and base sauce with that option's own price in Indian Rupees. The option group flagged base_price carries the item's base price for that size (the crust group on pizzas) rather than an add-on charge; half_price is the surcharge when the option is applied to one half of a pizza. India market only -- prices are Indian Rupees. Use GET /papajohns/india/menu to discover item ids.", - "operationId": "papajohns-india-menu-item", + "description": "Returns current stories from one verified public Phys.org RSS feed. The accepted values are the seven Topics menu feeds plus the Breaking and Editorials feeds. Search and tag feeds are excluded because their paths are disallowed in robots.txt.", + "operationId": "physorg-headlines", "parameters": [ { - "description": "Item id (saleitem_id) from GET /papajohns/india/menu", + "description": "Phys.org RSS feed slug from physorg-sections", + "enum": [ + "nanotech-news", + "physics-news", + "space-news", + "earth-news", + "chemistry-news", + "biology-news", + "science-news", + "breaking", + "editorials" + ], "in": "query", - "name": "item_id", + "name": "section", "required": true, "type": "string", - "x-example": "71" + "x-example": "nanotech-news" } ], "produces": [ @@ -335166,7 +371076,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.indiaMenuItemResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -335175,18 +371085,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": { @@ -335199,34 +371097,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Papa John's India item with its full options (INR)", + "summary": "Get Phys.org section headlines", "tags": [ - "Papa John's" + "Phys.org" ] } }, - "/papajohns/india/stores": { + "/physorg/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every Papa John's **India** restaurant with its address, phone, coordinates, and weekly opening hours broken down per order channel (delivery, take away, dine in, drive-through pickup). These store ids are what GET /papajohns/india/menu's store_id availability filter is keyed on. India market only -- for US/Canada stores use GET /papajohns/directory, GET /papajohns/store, or GET /papajohns/nearby.", - "operationId": "papajohns-india-stores", - "parameters": [ - { - "description": "Return only hours for this order channel. One of: 1 (Delivery), 2 (Take Away), 3 (Dine In), 4 (Drive Through Pickup).", - "enum": [ - "1", - "2", - "3", - "4" - ], - "in": "query", - "name": "channel_id", - "type": "string", - "x-example": "1" - } - ], + "description": "Returns current stories from Phys.org's public all-stories RSS feed. Summaries are publisher-provided teasers. Use physorg-sections to discover the topic and editorial RSS feeds accepted by physorg-headlines.", + "operationId": "physorg-news", "produces": [ "application/json" ], @@ -335234,13 +371114,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.indiaStoresResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -335261,49 +371135,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Papa John's India restaurants", + "summary": "Get Phys.org top stories", "tags": [ - "Papa John's" + "Phys.org" ] } }, - "/papajohns/intl/deals": { + "/physorg/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the promotions currently running in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain, for either delivery or pickup. Each promotion carries its headline product, description, artwork, the weekdays it runs on, and its start and end dates. Offers that upstream has marked inactive are omitted rather than returned as live.", - "operationId": "papajohns-intl-deals", - "parameters": [ - { - "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", - "enum": [ - "chile", - "costa-rica", - "guatemala", - "panama", - "portugal", - "spain" - ], - "in": "query", - "name": "market", - "required": true, - "type": "string", - "x-example": "spain" - }, - { - "description": "One of: pj_delivery (delivery offers), in_store (pickup/dine-in offers)", - "enum": [ - "pj_delivery", - "in_store" - ], - "in": "query", - "name": "dispatch_method", - "required": true, - "type": "string", - "x-example": "pj_delivery" - } - ], + "description": "Lists the seven topic feeds in Phys.org's Topics menu and its two additional public Breaking and Editorials feeds. Every returned slug is accepted by physorg-headlines. Search and tag feeds are excluded because their paths are disallowed in robots.txt.", + "operationId": "physorg-sections", "produces": [ "application/json" ], @@ -335311,93 +371152,74 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.intlDealsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Phys.org RSS sections", + "tags": [ + "Phys.org" + ] + } + }, + "/ping": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns public release metadata for deploy verification. Root `/ping` returns the same payload as a compatibility alias.", + "operationId": "ping", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/api.pingResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } } }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List Papa John's active promotions (international)", + "summary": "Return API metadata", "tags": [ - "Papa John's" + "Meta" ] } }, - "/papajohns/intl/ingredients": { + "/pinterest/board/{username}/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns every topping, sauce, and cheese a pizza can be built with on one menu, in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain. Each ingredient reports its family (meat, vegetable, base sauce, and so on), whether it is included on pizzas by default, whether it is charged at the premium rather than the normal rate, and whether it can be applied to just one half. The response also carries what one extra ingredient costs at each size, for both the normal and premium rates. Menu ids come from GET /papajohns/intl/stores.", - "operationId": "papajohns-intl-ingredients", + "description": "Returns a Pinterest board's metadata (name, description, cover image, pin/follower counts, owner) plus a page of pins from that board. Public data sourced from Pinterest's own board pages.", + "operationId": "pinterest-board", "parameters": [ { - "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", - "enum": [ - "chile", - "costa-rica", - "guatemala", - "panama", - "portugal", - "spain" - ], - "in": "query", - "name": "market", + "description": "Pinterest username that owns the board", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "spain" + "x-example": "patrontequila" }, { - "description": "Menu id from a restaurant returned by GET /papajohns/intl/stores", - "in": "query", - "name": "menu_id", + "description": "Board URL slug, from the board's own /{username}/{slug}/ URL", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "8" - }, - { - "description": "Return only one ingredient category. One of: base_cheese, base_sauce, extra_cheese, extra_sauce, meat, not_ingredient, premium, vegetable", - "enum": [ - "base_cheese", - "base_sauce", - "extra_cheese", - "extra_sauce", - "meat", - "not_ingredient", - "premium", - "vegetable" - ], - "in": "query", - "name": "category", - "type": "string", - "x-example": "meat" + "x-example": "el-cafecito" } ], "produces": [ @@ -335407,7 +371229,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.intlIngredientsResponseDoc" + "$ref": "#/definitions/pinterest.boardResponseDoc" } }, "400": { @@ -335422,8 +371244,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -335440,69 +371262,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Papa John's menu's ingredient catalog (international)", + "summary": "Get a Pinterest board's detail", "tags": [ - "Papa John's" + "Pinterest" ] } }, - "/papajohns/intl/menu": { + "/pinterest/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Papa John's restaurant's full menu with that restaurant's own prices, in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain. Prices are per restaurant, not national, so two restaurants in the same market can differ. Each pizza lists every size and crust combination it is sold in with that combination's own price and, where published, its calorie and portion figures; sides, drinks and desserts list their own portions. Machine codes for size and crust are returned alongside the market's own display labels in the local language. Currency is whatever the market trades in -- euros in Spain and Portugal, Chilean pesos in Chile, and so on -- so do not compare figures across markets. Use GET /papajohns/intl/stores to find a store_id. For India use GET /papajohns/india/menu; for the US and Canada see GET /papajohns/nutrition.", - "operationId": "papajohns-intl-menu", - "parameters": [ - { - "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", - "enum": [ - "chile", - "costa-rica", - "guatemala", - "panama", - "portugal", - "spain" - ], - "in": "query", - "name": "market", - "required": true, - "type": "string", - "x-example": "spain" - }, - { - "description": "Restaurant id from GET /papajohns/intl/stores. Prices are specific to this restaurant.", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "9" - }, - { - "description": "Return only one product kind. One of: pizza, side", - "enum": [ - "pizza", - "side" - ], - "in": "query", - "name": "kind", - "type": "string", - "x-example": "pizza" - }, - { - "description": "Return only products carrying this dietary or heat marker. One of: hot, mild, spicy, vegetarian. Products upstream does not mark are excluded.", - "enum": [ - "hot", - "mild", - "spicy", - "vegetarian" - ], - "in": "query", - "name": "food_type", - "type": "string", - "x-example": "vegetarian" - } - ], + "description": "Returns Pinterest's top-level \"Ideas\" category taxonomy (e.g. \"Animals\", \"Home Decor\", \"Food And Drink\"). Each entry's id is usable directly with GET /pinterest/ideas/{id}. Public data sourced from Pinterest's own ideas.pinterest.com-style category hub.", + "operationId": "pinterest-categories", "produces": [ "application/json" ], @@ -335510,23 +371282,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.intlMenuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/pinterest.categoriesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -335543,43 +371303,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Papa John's restaurant's priced menu (international)", + "summary": "Get Pinterest's \"Ideas\" category list", "tags": [ - "Papa John's" + "Pinterest" ] } }, - "/papajohns/intl/offer": { + "/pinterest/ideas/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one promotional offer's full composition in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain. This is what a promotion banner from GET /papajohns/intl/deals actually contains: the offer's own price, each choice step a customer works through in order (e.g. \"pick your family pizza\", \"pick a side\"), and every product eligible at that step with the surcharge picking it adds. It also carries the offer's ingredient rules -- how many extras are free, the minimum and maximum that may be chosen, and which ingredient families are allowed. Offer ids come from the offer_id field on a deal.", - "operationId": "papajohns-intl-offer", + "description": "Returns one \"Ideas\" category's metadata (name, description, follower count) plus a page of pins from that category's feed. Public data sourced from Pinterest's own ideas category pages.", + "operationId": "pinterest-idea", "parameters": [ { - "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", - "enum": [ - "chile", - "costa-rica", - "guatemala", - "panama", - "portugal", - "spain" - ], - "in": "query", - "name": "market", - "required": true, - "type": "string", - "x-example": "spain" - }, - { - "description": "Offer id from the offer_id field on GET /papajohns/intl/deals", - "in": "query", - "name": "offer_id", + "description": "Pinterest ideas category id. See GET /pinterest/categories for the full list.", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "660" + "x-example": "925056443165" } ], "produces": [ @@ -335589,7 +371333,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.intlOfferResponseDoc" + "$ref": "#/definitions/pinterest.ideaResponseDoc" } }, "400": { @@ -335604,8 +371348,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -335622,43 +371366,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Papa John's offer's composition (international)", + "summary": "Get a Pinterest \"Ideas\" category's detail feed", "tags": [ - "Papa John's" + "Pinterest" ] } }, - "/papajohns/intl/product": { + "/pinterest/pin/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one product's own catalog record in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain -- its description, imagery, dietary markers, and customization rules (whether toppings may be changed, how many extra ingredients are included free, and whether it can be used as one half of a half-and-half pizza). This record carries no price, because pricing is per restaurant: use GET /papajohns/intl/menu for prices. Product ids come from that same endpoint.", - "operationId": "papajohns-intl-product", + "description": "Returns a single Pinterest pin's full detail: title, description, image, board, pinner, comment count, save count, and creation time. Public data sourced from Pinterest's own pin pages.", + "operationId": "pinterest-pin", "parameters": [ { - "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", - "enum": [ - "chile", - "costa-rica", - "guatemala", - "panama", - "portugal", - "spain" - ], - "in": "query", - "name": "market", - "required": true, - "type": "string", - "x-example": "spain" - }, - { - "description": "Product id from GET /papajohns/intl/menu", - "in": "query", - "name": "product_id", + "description": "Pinterest pin id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "8" + "x-example": "52846995624279072" } ], "produces": [ @@ -335668,7 +371396,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.intlProductResponseDoc" + "$ref": "#/definitions/pinterest.pinResponseDoc" } }, "400": { @@ -335683,8 +371411,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -335701,86 +371429,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Papa John's product (international)", + "summary": "Get a Pinterest pin's full detail", "tags": [ - "Papa John's" + "Pinterest" ] } }, - "/papajohns/intl/stores": { + "/pinterest/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Papa John's restaurants in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain -- either every restaurant near a coordinate, or one known restaurant looked up by id. Each restaurant carries its address, coordinates, phone, per-weekday opening hours split by fulfillment channel, accepted payment methods, delivery zones with their minimum-order and free-delivery thresholds, and live delivery/pickup open flags. Restaurants come back ranked by distance with no radius limit, five at a time by default; page and limit walk the rest, and the response reports total_count, the market's whole restaurant total. The returned id is what GET /papajohns/intl/menu prices against, and menu_id is what GET /papajohns/intl/ingredients reads. This covers those six markets only -- for India use GET /papajohns/india/stores, and for the US and Canada use GET /papajohns/directory, GET /papajohns/store, or GET /papajohns/nearby.", - "operationId": "papajohns-intl-stores", + "description": "Returns public Pinterest pins matching a text query: title, description, image, board, and pinner for each result. Public data sourced from Pinterest's own web search.", + "operationId": "pinterest-search", "parameters": [ { - "description": "Market. One of: chile, costa-rica, guatemala, panama, portugal, spain", - "enum": [ - "chile", - "costa-rica", - "guatemala", - "panama", - "portugal", - "spain" - ], + "description": "Search text", "in": "query", - "name": "market", + "name": "query", "required": true, "type": "string", - "x-example": "spain" - }, - { - "description": "Look up one known restaurant by id instead of searching a coordinate. Supply either store_id, or both latitude and longitude.", - "in": "query", - "name": "store_id", - "type": "string", - "x-example": "9" - }, - { - "description": "Latitude to search around. Required unless store_id is supplied.", - "in": "query", - "name": "latitude", - "type": "string", - "x-example": "40.4168" - }, - { - "description": "Longitude to search around. Required unless store_id is supplied.", - "in": "query", - "name": "longitude", - "type": "string", - "x-example": "-3.7038" - }, - { - "description": "One of: delivery (default, every nearby restaurant), pickup (only restaurants accepting pickup orders). Ignored when store_id is supplied.", - "enum": [ - "delivery", - "pickup" - ], - "in": "query", - "name": "fulfillment", - "type": "string", - "x-example": "delivery" - }, - { - "default": 1, - "description": "One-based page of the distance-ranked restaurants. Ignored for a store_id lookup and for pickup, neither of which is paginated.", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "default": 5, - "description": "Restaurants per page, 1-100. Ignored for a store_id lookup and for pickup, neither of which is paginated.", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer", - "x-example": 5 + "x-example": "minimalist living room" } ], "produces": [ @@ -335790,7 +371459,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.intlStoresResponseDoc" + "$ref": "#/definitions/pinterest.searchResponseDoc" } }, "400": { @@ -335799,14 +371468,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" } @@ -335823,51 +371486,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find Papa John's restaurants in an international market", + "summary": "Search Pinterest pins", "tags": [ - "Papa John's" + "Pinterest" ] } }, - "/papajohns/menu": { + "/pinterest/user/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Papa John's US or Canada restaurant's full menu with that restaurant's own prices. Prices are per restaurant, not national -- the same 14-inch pizza can differ by several dollars between two stores -- so pass a store_id from GET /papajohns/store or GET /papajohns/nearby. Omitting it returns the national default menu, flagged as national_default in the response. Each category is returned with its sections and product groups, and every orderable SKU carries its price, calories, serving size, slice count and image. Set include_options to also get each product group's customization axes: every size and crust it is sold in, and every preparation instruction (how much cheese, how well done) with its choices. This is the US and Canada menu -- for India use GET /papajohns/india/menu, and for Chile, Costa Rica, Guatemala, Panama, Portugal or Spain use GET /papajohns/intl/menu.", - "operationId": "papajohns-menu", + "description": "Returns a Pinterest user's public profile: display name, bio, website, avatar, and follower/following/pin/board counts. Public data sourced from Pinterest's own profile pages.", + "operationId": "pinterest-user", "parameters": [ { - "description": "Restaurant id from GET /papajohns/store or GET /papajohns/nearby. Omit for the national default menu.", - "in": "query", - "name": "store_id", - "type": "string", - "x-example": "5054" - }, - { - "description": "Return only one category. One of: dippingsauces, desserts, drinks, extras, papabowls, pizza, sandwiches, sides, wings", - "enum": [ - "dippingsauces", - "desserts", - "drinks", - "extras", - "papabowls", - "pizza", - "sandwiches", - "sides", - "wings" - ], - "in": "query", - "name": "category", + "description": "Pinterest username", + "in": "path", + "name": "username", + "required": true, "type": "string", - "x-example": "pizza" - }, - { - "description": "Include each product group's sizes, crusts and preparation instructions. Default false.", - "in": "query", - "name": "include_options", - "type": "boolean", - "x-example": false + "x-example": "patrontequila" } ], "produces": [ @@ -335877,7 +371516,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.menuResponseDoc" + "$ref": "#/definitions/pinterest.userResponseDoc" } }, "400": { @@ -335892,8 +371531,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -335910,34 +371549,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Papa John's restaurant's priced menu", + "summary": "Get a Pinterest user's public profile", "tags": [ - "Papa John's" + "Pinterest" ] } }, - "/papajohns/menu/item": { + "/pinterest/user/{username}/boards": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Papa John's US or Canada menu SKU with that restaurant's price for it, together with the full customization axes of the product group it belongs to: every size and crust the product is sold in, and every preparation instruction with its choices and default. The response also names the category and section the item sits under. Pass a store_id so the price is that restaurant's; omitting it returns the national default price. SKUs come from GET /papajohns/menu.", - "operationId": "papajohns-menu-item", + "description": "Returns a page of a Pinterest user's own boards: name, description, cover image, and pin/follower counts for each. Public data sourced from Pinterest's own profile pages.", + "operationId": "pinterest-user-boards", "parameters": [ { - "description": "Product sku from GET /papajohns/menu", - "in": "query", - "name": "sku", + "description": "Pinterest username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "1-1-2-115" - }, - { - "description": "Restaurant id from GET /papajohns/store or GET /papajohns/nearby. Omit for the national default price.", - "in": "query", - "name": "store_id", - "type": "string", - "x-example": "5054" + "x-example": "patrontequila" } ], "produces": [ @@ -335947,7 +371579,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.menuItemResponseDoc" + "$ref": "#/definitions/pinterest.userBoardsResponseDoc" } }, "400": { @@ -335956,14 +371588,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" } @@ -335980,56 +371606,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Papa John's menu item with its options", + "summary": "Get a Pinterest user's boards", "tags": [ - "Papa John's" + "Pinterest" ] } }, - "/papajohns/nearby": { + "/pinterest/user/{username}/pins": { "get": { "consumes": [ "application/json" ], - "description": "Returns Papa John's stores within a radius of a latitude/longitude, ordered nearest first, with distance, address, phone, hours, timezone, price range, fulfillment services, payment options, and ordering link. The response includes total_in_radius and offset paging. A coordinate with no nearby stores returns an empty list.", - "operationId": "papajohns-nearby", + "description": "Returns a page of a Pinterest user's own pins: title, description, image, board, and pinner for each. Public data sourced from Pinterest's own profile pages.", + "operationId": "pinterest-user-pins", "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": "Pinterest username", + "in": "path", + "name": "username", "required": true, - "type": "number", - "x-example": -118.2437 - }, - { - "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, 0 or greater (default 0)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "type": "string", + "x-example": "patrontequila" } ], "produces": [ @@ -336039,7 +371636,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.nearbyResponseDoc" + "$ref": "#/definitions/pinterest.userPinsResponseDoc" } }, "400": { @@ -336048,8 +371645,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -336066,27 +371663,33 @@ "ApiKeyAuth": [] } ], - "summary": "Find Papa John's stores near a coordinate", + "summary": "Get a Pinterest user's own pins", "tags": [ - "Papa John's" + "Pinterest" ] } }, - "/papajohns/nutrition": { + "/pitchbook/advisor": { "get": { "consumes": [ "application/json" ], - "description": "Returns Papa John's own published nutrition-facts panel for every item in one category -- full pizzas by name, or a single ingredient family (crust, cheese, sauce, toppings). Each item lists every published size/crust variant with serving size and a full nutrition-facts breakdown (calories, fat, cholesterol, sodium, carbohydrate, fiber, sugars, protein). This is Papa John's national reference data, not priced per-store data -- see GET /papajohns/directory for store lookup.", - "operationId": "papajohns-nutrition", + "description": "Returns the free/teaser content of a PitchBook advisor (service provider, e.g. investment bank, lender, or financing advisory firm) profile page: overview, description, contact/HQ, and a preview of serviced companies/deals, co-lenders, and subsidiaries. PitchBook gates most numeric figures and full lists behind a paid subscription; those come through as empty cells rather than being fabricated. Pass exactly one of `id` or `url`.", + "operationId": "pitchbook-advisor", "parameters": [ { - "description": "One of: cheese, crust, desserts, dipping-sauces, drinks, extras, papa-bowls, papadias, pizzas, sandwiches, sauce, sides, toppings, wings", + "description": "PitchBook advisor id", "in": "query", - "name": "category", - "required": true, + "name": "id", "type": "string", - "x-example": "pizzas" + "x-example": "676215-64" + }, + { + "description": "Absolute https://pitchbook.com/profiles/advisor/ URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://pitchbook.com/profiles/advisor/676215-64" } ], "produces": [ @@ -336096,7 +371699,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.nutritionResponseDoc" + "$ref": "#/definitions/pitchbook.advisorResponseDoc" } }, "400": { @@ -336129,26 +371732,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Papa John's nutritional-details category", + "summary": "PitchBook advisor profile", "tags": [ - "Papa John's" + "PitchBook" ] } }, - "/papajohns/peru/menu": { + "/pitchbook/company": { "get": { "consumes": [ "application/json" ], - "description": "Returns Papa John's **Peru** menu with prices in Peruvian soles, covering the full catalog with categories, images and per-product pricing. Peru runs its own ordering platform, independent of the six markets behind GET /papajohns/intl/menu and of Colombia and El Salvador, so it has its own endpoint. Prices are Peruvian soles and are not comparable with any other market.", - "operationId": "papajohns-peru-menu", + "description": "Returns the free/teaser content of a PitchBook company profile page (overview, description, contact/HQ, industry, funding-round history without dollar amounts, a preview of investors, acquisitions, and subsidiaries). PitchBook gates most numeric figures (deal amounts, cap tables, full investor/LP lists) behind a paid subscription; those come through as empty cells rather than being fabricated. Pass exactly one of `id` or `url`.", + "operationId": "pitchbook-company", "parameters": [ { - "description": "Return only categories whose name contains this text, case-insensitive, e.g. Promociones or Combos", + "description": "PitchBook company id", "in": "query", - "name": "category", + "name": "id", "type": "string", - "x-example": "Promociones" + "x-example": "752821-12" + }, + { + "description": "Absolute https://pitchbook.com/profiles/company/ URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://pitchbook.com/profiles/company/752821-12" } ], "produces": [ @@ -336158,7 +371768,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.latamMenuResponseDoc" + "$ref": "#/definitions/pitchbook.companyResponseDoc" } }, "400": { @@ -336191,26 +371801,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Papa John's Peru priced menu (PEN)", + "summary": "PitchBook company profile", "tags": [ - "Papa John's" + "PitchBook" ] } }, - "/papajohns/poland/menu": { + "/pitchbook/fund": { "get": { "consumes": [ "application/json" ], - "description": "Returns Papa John's **Poland** menu with prices in Polish zloty. Russia and Poland run one franchise platform of their own, separate from the six markets behind GET /papajohns/intl/menu and from Colombia, Peru and El Salvador, so each has its own endpoint. The catalog is national -- it does not vary by city -- and every product lists its priced variants with size, dough and any stuffed crust. Prices are zloty and are not comparable with any other market.", - "operationId": "papajohns-poland-menu", + "description": "Returns the free/teaser content of a PitchBook fund profile page (strategy, status, manager, size, vintage, and a preview of limited partners and benchmark peer funds). PitchBook gates most numeric figures (returns/IRR, full LP lists) behind a paid subscription; those come through as empty cells rather than being fabricated. Pass exactly one of `id` or `url`.", + "operationId": "pitchbook-fund", "parameters": [ { - "description": "Return only sections whose name or slug contains this text, case-insensitive. Slugs work in either market, e.g. pizza, combo, deserty, napitki, sauce, zakuski", + "description": "PitchBook fund id", "in": "query", - "name": "category", + "name": "id", "type": "string", - "x-example": "pizza" + "x-example": "19719-91F" + }, + { + "description": "Absolute https://pitchbook.com/profiles/fund/ URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://pitchbook.com/profiles/fund/19719-91F" } ], "produces": [ @@ -336220,7 +371837,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.storefrontMenuResponseDoc" + "$ref": "#/definitions/pitchbook.fundResponseDoc" } }, "400": { @@ -336253,26 +371870,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Papa John's Poland priced menu (PLN)", + "summary": "PitchBook fund profile", "tags": [ - "Papa John's" + "PitchBook" ] } }, - "/papajohns/russia/menu": { + "/pitchbook/investor": { "get": { "consumes": [ "application/json" ], - "description": "Returns Papa John's **Russia** menu with prices in Russian roubles. Russia and Poland run one franchise platform of their own, separate from the six markets behind GET /papajohns/intl/menu and from Colombia, Peru and El Salvador, so each has its own endpoint. The catalog is national -- it does not vary by city -- and every product lists its priced variants with size, dough and any stuffed crust. Prices are roubles and are not comparable with any other market.", - "operationId": "papajohns-russia-menu", + "description": "Returns the free/teaser content of a PitchBook investor (fund manager/firm) profile page (overview, description, contact/HQ, and a preview of investments, exits, and co-investors). PitchBook gates most numeric figures and full lists behind a paid subscription; those come through as empty cells rather than being fabricated. Pass exactly one of `id` or `url`.", + "operationId": "pitchbook-investor", "parameters": [ { - "description": "Return only sections whose name or slug contains this text, case-insensitive. Slugs work in either market, e.g. pizza, combo, deserty, napitki, sauce, zakuski", + "description": "PitchBook investor id", "in": "query", - "name": "category", + "name": "id", "type": "string", - "x-example": "pizza" + "x-example": "294471-37" + }, + { + "description": "Absolute https://pitchbook.com/profiles/investor/ URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://pitchbook.com/profiles/investor/294471-37" } ], "produces": [ @@ -336282,7 +371906,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.storefrontMenuResponseDoc" + "$ref": "#/definitions/pitchbook.investorResponseDoc" } }, "400": { @@ -336315,27 +371939,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Papa John's Russia priced menu (RUB)", + "summary": "PitchBook investor profile", "tags": [ - "Papa John's" + "PitchBook" ] } }, - "/papajohns/store": { + "/pitchbook/limited-partner": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Papa John's store's published profile: address, phone, coordinates, general and pickup hours, timezone, Google Place id, and ordering link. The path comes from a store child returned by GET /papajohns/directory. Passing a directory path returns 404.", - "operationId": "papajohns-store", + "description": "Returns the free/teaser content of a PitchBook limited partner (institutional investor, e.g. pension fund, endowment, or insurance company) profile page: overview, description, contact, and a preview of fund commitments. PitchBook gates most numeric figures and full lists behind a paid subscription; those come through as empty cells rather than being fabricated. Some limited partner profiles have no FAQ section (thinner profiles) -- this is normal, not a sign of a blocked or broken response. Pass exactly one of `id` or `url`.", + "operationId": "pitchbook-limited-partner", "parameters": [ { - "description": "Store path from a /papajohns/directory child marked is_store=true", + "description": "PitchBook limited partner id", "in": "query", - "name": "path", - "required": true, + "name": "id", "type": "string", - "x-example": "united-states/ca/91803/alhambra/2136-s-fremont-ave" + "x-example": "864326-44" + }, + { + "description": "Absolute https://pitchbook.com/profiles/limited-partner/ URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://pitchbook.com/profiles/limited-partner/864326-44" } ], "produces": [ @@ -336345,7 +371975,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/papajohns.storeResponseDoc" + "$ref": "#/definitions/pitchbook.limitedPartnerResponseDoc" } }, "400": { @@ -336378,27 +372008,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Papa John's store", + "summary": "PitchBook limited partner profile", "tags": [ - "Papa John's" + "PitchBook" ] } }, - "/patreon/creator": { + "/pizzahut/bundle-choices": { "get": { "consumes": [ "application/json" ], - "description": "Returns public profile metadata from a creator's Patreon page: creator identity, summary, images, membership and creation counts, public earnings snapshot, membership/RSS availability flags, and public external profile links. handle is the creator's page handle, e.g. CachyOS for patreon.com/CachyOS.", - "operationId": "patreon-creator", + "description": "Returns one deal/combo's full choice-builder tree -- every named slot it offers (e.g. \"1st Pizza\", \"Wings or Fries\", \"1st Dip\") and every product variant a caller can pick to fill that slot, each with the real price delta selecting it adds over the bundle's base price (zero for a variant already covered by the deal, positive for an upgrade such as a larger size or a specialty pizza). This is a different structure from /pizzahut/modifiers -- that endpoint customizes toppings/sauces on one product variant, while this endpoint swaps whole product variants in and out of a multi-item combo. bundle_code comes from /pizzahut/menu's code field on a type=bundle item.", + "operationId": "pizzahut-bundle-choices", "parameters": [ { - "description": "Creator page handle", + "description": "Pizza Hut's store number, from /pizzahut/stores", "in": "query", - "name": "handle", + "name": "store_number", "required": true, "type": "string", - "x-example": "CachyOS" + "x-example": "040937" + }, + { + "description": "A deal/combo's bundle code, from /pizzahut/menu's code field on a type=bundle item", + "in": "query", + "name": "bundle_code", + "required": true, + "type": "string", + "x-example": "MEAL501BD" + }, + { + "description": "Order channel the deal and pricing reflect (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" } ], "produces": [ @@ -336408,7 +372067,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/patreon.creatorResponseDoc" + "$ref": "#/definitions/pizzahut.bundleChoicesResponseDoc" } }, "400": { @@ -336441,27 +372100,116 @@ "ApiKeyAuth": [] } ], - "summary": "Get a public Patreon creator profile", + "summary": "Get one Pizza Hut deal/combo's full choice-builder tree", "tags": [ - "Patreon" + "Pizza Hut" ] } }, - "/patreon/creator/tiers": { + "/pizzahut/delivery-estimate": { "get": { "consumes": [ "application/json" ], - "description": "Returns published membership tiers and their published benefits from a creator's public Patreon page. It excludes member-only entitlements, tier capacity, and member counts. handle is the creator's page handle, e.g. CachyOS for patreon.com/CachyOS.", - "operationId": "patreon-creator-tiers", + "description": "Checks whether a Pizza Hut 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 Pizza Hut'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, such as the requested delivery_provider not being enabled at that store. For the default INTERNAL provider, a serviceable result does not by itself confirm the address is within a real deliverable radius -- see this endpoint's markdown doc for the caveat. order_subtotal materially affects the fee estimate, so it is required rather than defaulted. pickup_at defaults to 30 minutes from now (an \"order now\" style estimate) when omitted.", + "operationId": "pizzahut-delivery-estimate", "parameters": [ { - "description": "Creator page handle", + "description": "Pizza Hut's store number, from /pizzahut/stores", "in": "query", - "name": "handle", + "name": "store_number", "required": true, "type": "string", - "x-example": "CachyOS" + "x-example": "040937" + }, + { + "description": "Delivery address line 1", + "in": "query", + "name": "address1", + "required": true, + "type": "string", + "x-example": "250 W 57th St" + }, + { + "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": "New York" + }, + { + "description": "Delivery address state, two-letter code", + "in": "query", + "name": "state", + "required": true, + "type": "string", + "x-example": "NY" + }, + { + "description": "Delivery address postal code", + "in": "query", + "name": "postal_code", + "required": true, + "type": "string", + "x-example": "10019" + }, + { + "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": 40.7656 + }, + { + "description": "Delivery address longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -73.982 + }, + { + "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-05T20:00:00Z" + }, + { + "description": "Delivery provider to check (default INTERNAL)", + "enum": [ + "DOORDASH", + "MOCK_DOORDASH", + "INTERNAL" + ], + "in": "query", + "name": "delivery_provider", + "type": "string", + "x-example": "INTERNAL" } ], "produces": [ @@ -336471,7 +372219,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/patreon.membershipTiersResponseDoc" + "$ref": "#/definitions/pizzahut.deliveryEstimateResponseDoc" } }, "400": { @@ -336504,39 +372252,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get a creator's public Patreon membership tiers", + "summary": "Check Pizza Hut delivery serviceability and estimated fee for one store and address", "tags": [ - "Patreon" + "Pizza Hut" ] } }, - "/patreon/explore": { + "/pizzahut/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns Patreon's public curated creator shelves for one topic: Top creators, Popular this week, and New on Patreon. topic must be one of podcasts_and_shows, visual_arts, tabletop_games, video_games, music, lifestyle, writing, handicrafts, apps_and_software, social_impact.", - "operationId": "patreon-explore", + "description": "Returns one restaurant's full menu grouped into categories (e.g. \"Pizza\", \"Wings\", \"Deals\"). Every entry is a product, a bundle (a deal or combo), 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. A product item also lists variants: every other priced size/crust/style option beyond its default (e.g. a pizza's Personal Pan through Large Original Stuffed Crust). 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). Some restaurants also carry products with no category at all (e.g. individual dip cup flavors); these are returned separately as uncategorized_items rather than silently dropped.", + "operationId": "pizzahut-menu", "parameters": [ { - "description": "Public Explore topic. Allowed values: podcasts_and_shows, visual_arts, tabletop_games, video_games, music, lifestyle, writing, handicrafts, apps_and_software, social_impact", + "description": "Pizza Hut's store number, from /pizzahut/stores", + "in": "query", + "name": "store_number", + "required": true, + "type": "string", + "x-example": "040937" + }, + { + "description": "Order channel the menu is priced for (default WEB)", "enum": [ - "podcasts_and_shows", - "visual_arts", - "tabletop_games", - "video_games", - "music", - "lifestyle", - "writing", - "handicrafts", - "apps_and_software", - "social_impact" + "WEB", + "MOBILE", + "POS", + "KIOSK", + "DOORDASH", + "UBEREATS", + "GRUBHUB", + "IOS", + "ANDROID", + "DELIVEROO", + "JUST_EAT", + "CALL_CENTER" ], "in": "query", - "name": "topic", - "required": true, + "name": "channel", "type": "string", - "x-example": "podcasts_and_shows" + "x-example": "WEB" } ], "produces": [ @@ -336546,7 +372303,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/patreon.exploreResponseDoc" + "$ref": "#/definitions/pizzahut.menuResponseDoc" } }, "400": { @@ -336555,6 +372312,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -336573,35 +372336,56 @@ "ApiKeyAuth": [] } ], - "summary": "Browse public Patreon creators by topic", + "summary": "Get one Pizza Hut restaurant's full priced menu", "tags": [ - "Patreon" + "Pizza Hut" ] } }, - "/patreon/rss": { + "/pizzahut/modifiers": { "get": { "consumes": [ "application/json" ], - "description": "Returns public podcast channel metadata and episodes from Patreon's canonical public RSS feed. campaign_id and show_id are the numeric IDs in the public feed URL. Private member feeds and authentication URLs are not supported.", - "operationId": "patreon-rss", + "description": "Returns one product variant's full build-your-own customization tree -- every slot (e.g. \"Pizza Sauce\", \"Pizza Cheese\", \"Pizza Toppings\", \"Crust Finishers\"), every modifier within it (a specific topping, sauce flavor, or seasoning), and every weight/placement option (e.g. Light, Regular, Extra, or a Left/Right/Whole pizza-half placement) with its own real price delta -- zero for an amount already included by default, a positive upcharge for an \"extra\" option. variant_code comes from /pizzahut/menu's variant_code or variants[].variant_code fields.", + "operationId": "pizzahut-modifiers", "parameters": [ { - "description": "Numeric Patreon campaign id", + "description": "Pizza Hut's store number, from /pizzahut/stores", "in": "query", - "name": "campaign_id", + "name": "store_number", "required": true, "type": "string", - "x-example": "80117" + "x-example": "040937" }, { - "description": "Numeric Patreon show id", + "description": "A product's specific size/crust/style variant code, from /pizzahut/menu", "in": "query", - "name": "show_id", + "name": "variant_code", "required": true, "type": "string", - "x-example": "1322380" + "x-example": "variant_CLSS001_010BCYO1T_SIZE060L_BASE020H" + }, + { + "description": "Order channel the customization tree and pricing reflect (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" } ], "produces": [ @@ -336611,7 +372395,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/patreon.publicRSSResponseDoc" + "$ref": "#/definitions/pizzahut.modifiersResponseDoc" } }, "400": { @@ -336644,24 +372428,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an explicitly public Patreon podcast RSS feed", + "summary": "Get one Pizza Hut product variant's full customization tree", "tags": [ - "Patreon" + "Pizza Hut" ] } }, - "/pcgamer/article": { + "/pizzahut/store": { "get": { - "description": "Returns public PC Gamer article metadata and body paragraphs from a canonical article URL.", - "operationId": "pcgamer-article", + "consumes": [ + "application/json" + ], + "description": "Returns one Pizza Hut restaurant's detail by its exact store number, from /pizzahut/stores, including its recurring open hours per order channel (carryout, delivery, dine-in, drive-thru, catering carryout) plus each channel's ordering constraints -- minimum/maximum order amount, whether tipping is offered, and accepted payment methods. A channel this restaurant does not offer at all is omitted from hours rather than reported as always-closed.", + "operationId": "pizzahut-store", "parameters": [ { - "description": "Canonical PC Gamer article URL", + "description": "Pizza Hut's store number, from /pizzahut/stores", "in": "query", - "name": "url", + "name": "store_number", "required": true, "type": "string", - "x-example": "https://www.pcgamer.com/games/discord-takes-a-second-swing-at-age-verification-but-dont-worry-this-time-itll-guess-how-old-you-are-with-90-percent-accuracy/" + "x-example": "040937" } ], "produces": [ @@ -336671,7 +372458,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/pizzahut.storeResponseDoc" } }, "400": { @@ -336686,6 +372473,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -336698,37 +372491,103 @@ "ApiKeyAuth": [] } ], - "summary": "Get PC Gamer article content", + "summary": "Get one Pizza Hut restaurant by its store number", "tags": [ - "PC Gamer" + "Pizza Hut" ] } }, - "/pcgamer/author": { + "/pizzahut/stores": { "get": { - "description": "Returns one PC Gamer author's public profile: name, biography, social links, and one page of their recent articles.", - "operationId": "pcgamer-author", + "consumes": [ + "application/json" + ], + "description": "Returns Pizza Hut 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 /pizzahut/menu and /pizzahut/store take), full address with coordinates, phone, whether it currently accepts online orders, and its timezone.", + "operationId": "pizzahut-stores", "parameters": [ { - "description": "Author slug, e.g. harvey-randall", + "description": "Exact store number", "in": "query", - "name": "slug", + "name": "store_number", "type": "string", - "x-example": "harvey-randall" + "x-example": "040937" }, { - "description": "Canonical pcgamer.com/author/ URL, optionally with a /page/ segment; alternative to slug", + "description": "Restaurant city", "in": "query", - "name": "url", + "name": "city", "type": "string", - "x-example": "https://www.pcgamer.com/author/harvey-randall" + "x-example": "New York" }, { - "default": 1, - "description": "1-based page number; overrides any page number in url", + "description": "Restaurant state, two-letter code", "in": "query", - "name": "page", - "type": "integer" + "name": "state", + "type": "string", + "x-example": "NY" + }, + { + "description": "Restaurant postal code", + "in": "query", + "name": "postal_code", + "type": "string", + "x-example": "10019" + }, + { + "description": "Restaurant name, partial match", + "in": "query", + "name": "name", + "type": "string", + "x-example": "040937" + }, + { + "description": "Exact franchise/operator code", + "in": "query", + "name": "franchise_code", + "type": "string" + }, + { + "description": "Restrict to restaurants Pizza Hut's own storefront marks customer-facing. Unfiltered (upstream default) unless set -- passing true returns zero results for every region tested during research, so it is not defaulted on", + "in": "query", + "name": "appear_in_store_results", + "type": "boolean", + "x-example": false + }, + { + "description": "Restrict to restaurants currently accepting (true) or not accepting (false) online orders. Unfiltered (upstream default) unless set", + "in": "query", + "name": "accepting_online_orders", + "type": "boolean", + "x-example": true + }, + { + "description": "Set true to include archived/closed restaurant records, which the upstream default (unset) already excludes. Set false to make that exclusion explicit", + "in": "query", + "name": "is_archived", + "type": "boolean", + "x-example": false + }, + { + "description": "Sort order", + "enum": [ + "store_number_asc", + "store_number_desc", + "name_asc", + "name_desc", + "franchise_code_asc", + "franchise_code_desc" + ], + "in": "query", + "name": "sort", + "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 } ], "produces": [ @@ -336738,7 +372597,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.pcgamerAuthorResponseDoc" + "$ref": "#/definitions/pizzahut.storesResponseDoc" } }, "400": { @@ -336747,8 +372606,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -336765,32 +372624,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PC Gamer author profile", + "summary": "Search Pizza Hut restaurants by city, state, postal code, name, franchise code, or store number", "tags": [ - "PC Gamer" + "Pizza Hut" ] } }, - "/pcgamer/headlines": { + "/playstation/browse": { "get": { - "description": "Returns fresh PC Gamer headlines from one public section hub page.", - "operationId": "pcgamer-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a page of the PlayStation Store \"all games\" grid with per-item price, platforms, and media, plus the available filter facets (price, genre, platform, subscription, content type, etc.) with value counts. Pass page to advance; next_page is set when more results exist. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-browse", "parameters": [ { - "description": "PC Gamer section slug", - "enum": [ - "deals", - "games", - "gaming-industry", - "guides", - "hardware", - "movies-tv", - "news", - "software" - ], + "default": 1, + "description": "1-based page number", "in": "query", - "name": "section", - "required": true, + "name": "page", + "type": "integer" + }, + { + "default": "us", + "description": "Store country code (ISO, selects currency)", + "in": "query", + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", "type": "string" } ], @@ -336801,7 +372667,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/playstation.gridResponseDoc" } }, "400": { @@ -336822,16 +372688,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get PC Gamer section headlines", + "summary": "Browse the PlayStation Store all-games grid", "tags": [ - "PC Gamer" + "PlayStation" ] } }, - "/pcgamer/news": { + "/playstation/category": { "get": { - "description": "Returns fresh PC Gamer top stories from the public RSS feed.", - "operationId": "pcgamer-news", + "consumes": [ + "application/json" + ], + "description": "Returns a page of a specific PlayStation Store category grid (by category UUID) with per-item price, platforms, and media, plus the available filter facets with value counts. Pass page to advance; next_page is set when more results exist. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-category", + "parameters": [ + { + "description": "Category UUID", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "e7d3a34c-9a4a-4a94-a0d1-e42c94d0a3fb" + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": "us", + "description": "Store country code (ISO, selects currency)", + "in": "query", + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -336839,11 +372739,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/playstation.gridResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -336860,50 +372766,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get PC Gamer top stories", + "summary": "Browse a PlayStation Store category grid", "tags": [ - "PC Gamer" + "PlayStation" ] } }, - "/pcgamer/sections": { + "/playstation/concept": { "get": { - "description": "Returns the public PC Gamer top-level editorial taxonomy used by the headlines endpoint.", - "operationId": "pcgamer-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get PC Gamer sections", - "tags": [ - "PC Gamer" - ] - } - }, - "/pcmag/article": { - "get": { - "description": "Returns public PCMag article or product-review metadata and body paragraphs from a canonical article URL.", - "operationId": "pcmag-article", + "description": "Returns normalized store metadata for a PlayStation concept: title, publisher, release date, platforms, genres, description, content rating, aggregate star rating, the default product's purchase price, media, and the full lists of purchasable editions and add-ons. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-concept", "parameters": [ { - "description": "Canonical PCMag article or review URL", + "description": "Numeric PlayStation concept id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.pcmag.com/news/durabooks-latest-rugged-laptop-goes-to-the-extreme-with-triple-screen-setup" + "x-example": "10000237" + }, + { + "default": "us", + "description": "Store country code (ISO, selects currency)", + "in": "query", + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", + "type": "string" } ], "produces": [ @@ -336913,7 +372810,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/playstation.conceptResponseDoc" } }, "400": { @@ -336940,30 +372837,79 @@ "ApiKeyAuth": [] } ], - "summary": "Get PCMag article or review content", + "summary": "Get PlayStation Store details for a concept (game hub)", "tags": [ - "PCMag" + "PlayStation" ] } }, - "/pcmag/author": { + "/playstation/concept/reviews": { "get": { - "description": "Returns one PCMag author's public profile: name, role, biography, areas of expertise, social links, and their recent articles.", - "operationId": "pcmag-author", + "consumes": [ + "application/json" + ], + "description": "Returns one page of written PlayStation Store reviews for a concept (game hub), each with its title, body, rating, helpful count, spoiler flag, the edition the reviewer owned, and reviewer identity (online id, PS Plus subscriber status, verified-purchase status, avatar). Also includes the concept's aggregate star rating (including its rating distribution). page/page_size page through the full review list (total_count reports the true upstream review count, has_next_page whether a later page has more), sort controls ordering, and rating optionally filters to one star value. Reviews are region-scoped: cc selects the store region whose reviews are returned (and the price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-concept-reviews", "parameters": [ { - "description": "Author slug, e.g. michael-kan", + "description": "Numeric PlayStation concept id", "in": "query", - "name": "slug", + "name": "id", + "required": true, "type": "string", - "x-example": "michael-kan" + "x-example": "10002456" }, { - "description": "Canonical pcmag.com/authors/ URL; alternative to slug", + "default": "us", + "description": "Store country code (ISO)", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.pcmag.com/authors/michael-kan" + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", + "type": "string" + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "maximum": 10000, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 10, + "description": "Reviews per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer" + }, + { + "default": "latest", + "description": "Sort order", + "enum": [ + "latest", + "oldest", + "helpful" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Filter to one star rating (1-5)", + "in": "query", + "maximum": 5, + "minimum": 1, + "name": "rating", + "type": "integer" } ], "produces": [ @@ -336973,7 +372919,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.pcmagAuthorResponseDoc" + "$ref": "#/definitions/playstation.conceptReviewsResponseDoc" } }, "400": { @@ -337000,256 +372946,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PCMag author profile", + "summary": "Get PlayStation concept reviews", "tags": [ - "PCMag" + "PlayStation" ] } }, - "/pcmag/headlines": { + "/playstation/deals": { "get": { - "description": "Returns fresh PCMag headlines from one public topic/category hub.", - "operationId": "pcmag-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the PlayStation Store deals landing page as a list of merchandising shelves (sections), each with its titles and per-item price, plus a flattened, de-duplicated item list across all shelves. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-deals", "parameters": [ { - "description": "PCMag category slug", - "enum": [ - "3d-printers", - "accounting", - "ai", - "air-purifiers", - "android", - "android-apps", - "anti-ransomware-for-business", - "antivirus", - "appliances", - "applicant-tracking-systems", - "application-performance-management", - "asset-management", - "audio", - "audio-accessories", - "audio-editing", - "audio-recording", - "background-check-services", - "batteries-power", - "benefits-administration-software", - "billing-invoicing-software", - "blu-ray-players", - "bluetooth-headsets", - "browsers", - "business-card-printing", - "business-plan-software", - "call-center-features", - "camera-accessories", - "cameras", - "car-accessories", - "cars-auto", - "cloud-backup-for-business", - "cloud-file-storage-for-business", - "cloud-infrastructure", - "collaboration", - "communications", - "components", - "computer-mice", - "connected-kitchen", - "contract-management-software", - "credit-card-processors", - "crm-software", - "cryptocurrency", - "dash-cams", - "data-analytics", - "data-visualization-tools", - "database", - "dating", - "desktop-pcs", - "digital-life", - "digital-voice-recorders", - "disaster-recovery", - "dna-testing-kits", - "document-management-software", - "drones", - "e-commerce-fulfillment-services", - "e-commerce-payments", - "e-commerce-software", - "ebook-readers", - "education", - "elearning-authoring-tools", - "electronic-health-record-management", - "email-marketing", - "employee-monitoring", - "employee-monitoring-software", - "employee-shift-scheduling", - "enterprise-accounting-software", - "erp-software", - "expense-tracking-software", - "fax-services", - "file-sync-backup", - "fitness", - "fitness-trackers", - "fleet-management", - "game-controllers-accessories", - "game-streaming-services", - "games", - "gaming", - "gaming-systems", - "gps-navigation", - "graphic-design", - "graphics-cards", - "hard-drives", - "headphones", - "health-fitness", - "heart-rate-monitors", - "help-desk", - "home-automation-hubs", - "home-entertainment", - "home-entertainment-accessories", - "home-security", - "home-security-cameras", - "hosted-email-providers", - "hosted-endpoint-protection", - "hr-software", - "human-resources", - "identity-management", - "infrastructure-management", - "input-devices", - "inventory-management-software", - "ios", - "ipad-apps", - "iphone-apps", - "it-management", - "it-security", - "keyboards", - "language-learning", - "laptop-accessories", - "laptops", - "lead-management", - "lenses", - "linux", - "low-code-app-development", - "macos", - "malware-protection-removal", - "marketing-automation-software", - "meal-kits", - "media-streaming-devices", - "media-streaming-software", - "medical-alert-systems", - "membership-management", - "microsoft-xbox-games", - "mobile-apps", - "mobile-device-management", - "mobile-games", - "mobile-payment-apps", - "mobile-phone-accessories", - "mobile-phones", - "modems-hotspots", - "monitors", - "motherboards", - "music-audio", - "network-attached-storage", - "network-management", - "network-monitoring", - "networking", - "nintendo-games", - "office-suites", - "online-learning-platforms-for-business", - "online-survey-tools", - "onlinecloud-backup-services", - "operating-systems", - "operations", - "parental-control", - "password-managers", - "payroll", - "pc-cases", - "pc-games", - "performance-management", - "personal-finance", - "personal-finance-apps", - "photo-design", - "photo-editing", - "photo-printing", - "podcasting", - "point-of-sale", - "power-supplies", - "printers", - "processors", - "productivity", - "project-management", - "projectors", - "proxies", - "ransomware-protection", - "robot-vacuums", - "sales-marketing", - "scanners", - "secure-file-transfer", - "security", - "security-suites", - "self-service-business-intelligence-tools", - "seo-tools", - "shopping", - "shredders", - "sim-cards", - "smart-displays", - "smart-glasses", - "smart-home", - "smart-lawn-mowers", - "smart-lighting", - "smart-locks", - "smart-plugs", - "smart-scales", - "smart-thermostats", - "smartwatches", - "smb-accounting", - "social-listening-and-influencer-identification", - "social-media", - "social-media-management", - "sony-playstation-games", - "speakers", - "spyware-protection", - "ssds", - "storage", - "streaming-music-services", - "styli", - "subscription-services", - "system-utilities", - "tablet-accessories", - "tablets", - "tax-software", - "team-messaging", - "tech-for-kids", - "time-tracking", - "to-do-list-apps", - "toys", - "tracking-devices-for-kids", - "tracking-devices-for-pets", - "travel", - "tune-up-utilities", - "tvs", - "universal-remotes", - "video", - "video-camera-accessories", - "video-cameras", - "video-conferencing-software", - "video-editing", - "video-streaming-services", - "virtualization", - "voip-phone-services", - "vpn", - "vr", - "wearables", - "web-hosting", - "webcams", - "website-app-building-tools", - "website-builders", - "website-monitoring", - "wi-fi-mesh-networking-systems", - "wi-fi-range-extenders", - "windows", - "wireless-carriers", - "wireless-routers" - ], + "default": "us", + "description": "Store country code (ISO, selects currency)", "in": "query", - "name": "section", - "required": true, + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", "type": "string" } ], @@ -337260,7 +372982,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/playstation.merchResponseDoc" } }, "400": { @@ -337281,16 +373003,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get PCMag section headlines", + "summary": "Get PlayStation Store deals shelves", "tags": [ - "PCMag" + "PlayStation" ] } }, - "/pcmag/news": { + "/playstation/latest": { "get": { - "description": "Returns fresh PCMag top stories from the public news feed.", - "operationId": "pcmag-news", + "consumes": [ + "application/json" + ], + "description": "Returns the PlayStation Store latest-releases landing page as a list of merchandising shelves (sections), each with its titles and per-item price, plus a flattened, de-duplicated item list across all shelves. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-latest", + "parameters": [ + { + "default": "us", + "description": "Store country code (ISO, selects currency)", + "in": "query", + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -337298,11 +373039,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/playstation.merchResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -337319,50 +373060,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get PCMag top stories", + "summary": "Get PlayStation Store latest-release shelves", "tags": [ - "PCMag" + "PlayStation" ] } }, - "/pcmag/sections": { + "/playstation/page": { "get": { - "description": "Returns the public PCMag product/topic taxonomy accepted by the headlines endpoint.", - "operationId": "pcmag-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get PCMag sections", - "tags": [ - "PCMag" - ] - } - }, - "/people/article": { - "get": { - "description": "Returns public PEOPLE article metadata and body paragraphs from a canonical article URL.", - "operationId": "people-article", + "description": "Reads any PlayStation Store merchandising page by alias (e.g. collections, subscriptions, or a promotional alias) and returns its shelves (sections) plus the curated collection links found on the page. Each collection link carries a category_id (UUID) you can pass to /playstation/category to fetch that collection's full, paginated title grid — the credential-free way to browse themed/curated selections. Known aliases: collections, subscriptions, deals, latest. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-page", "parameters": [ { - "description": "Canonical PEOPLE article URL", + "description": "Merchandising page alias", "in": "query", - "name": "url", + "name": "alias", "required": true, "type": "string", - "x-example": "https://people.com/example-headline-12345678" + "x-example": "collections" + }, + { + "default": "us", + "description": "Store country code (ISO, selects currency)", + "in": "query", + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", + "type": "string" } ], "produces": [ @@ -337372,7 +373104,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/playstation.merchResponseDoc" } }, "400": { @@ -337381,12 +373113,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -337399,24 +373125,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get PEOPLE article content", + "summary": "Get a PlayStation Store merchandising page by alias", "tags": [ - "PEOPLE" + "PlayStation" ] } }, - "/people/author": { + "/playstation/product": { "get": { - "description": "Returns a PEOPLE staff writer or contributor's public profile (name, job title, structured intro fields, biography, personal social links) and recent articles from a canonical author URL.", - "operationId": "people-author", + "consumes": [ + "application/json" + ], + "description": "Returns normalized store metadata for a single PlayStation product/edition: title, np title id, parent concept id, product type and store classification, edition name, publisher, release date, platforms, genres, spoken/screen languages, content rating, aggregate star rating, purchase price, and media. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-product", "parameters": [ { - "description": "Canonical PEOPLE author URL", + "description": "PlayStation product id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://people.com/madison-goldberg-11701619" + "x-example": "UP0001-PPSA01491_00-GAME000000000000" + }, + { + "default": "us", + "description": "Store country code (ISO, selects currency)", + "in": "query", + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", + "type": "string" } ], "produces": [ @@ -337426,7 +373169,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.peopleAuthorResponseDoc" + "$ref": "#/definitions/playstation.productResponseDoc" } }, "400": { @@ -337453,24 +373196,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PEOPLE author profile", + "summary": "Get PlayStation Store details for a single product", "tags": [ - "PEOPLE" + "PlayStation" ] } }, - "/people/headlines": { + "/playstation/search": { "get": { - "description": "Returns fresh headlines from one PEOPLE section listing page. section accepts any slug returned by GET /people/sections (37 values, too many to enumerate inline -- see that endpoint for the full, current list), for example \"celebrity\" or \"royals\".", - "operationId": "people-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a page of PlayStation Store search results (concepts and products) for a term, with pagination and per-item price, platforms, classification, and media. Pass page to advance; next_page is set when more results exist. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-search", "parameters": [ { - "description": "PEOPLE section slug, from GET /people/sections", + "description": "Search term", "in": "query", - "name": "section", + "name": "term", "required": true, "type": "string", - "x-example": "celebrity" + "x-example": "god of war" + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 24, + "description": "Results per page (max 48)", + "in": "query", + "name": "page_size", + "type": "integer" + }, + { + "default": "us", + "description": "Store country code (ISO, selects currency)", + "in": "query", + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", + "type": "string" } ], "produces": [ @@ -337480,7 +373254,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/playstation.searchResponseDoc" } }, "400": { @@ -337501,16 +373275,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get PEOPLE section headlines", + "summary": "Search the PlayStation Store", "tags": [ - "PEOPLE" + "PlayStation" ] } }, - "/people/news": { + "/playstation/suggest": { "get": { - "description": "Returns fresh PEOPLE celebrity and entertainment stories from the public homepage.", - "operationId": "people-news", + "consumes": [ + "application/json" + ], + "description": "Returns typeahead-style PlayStation Store search suggestions for a partial or full term: id, name, classification, platforms, publisher, release date, price, a representative image, and a direct store URL per match. Matching is upstream-ordered and loose (it may include titles that only loosely relate to the term), not a ranked exact-substring search. limit caps how many suggestions are returned (max 20; the upstream API does not honor a higher value). cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", + "operationId": "playstation-suggest", + "parameters": [ + { + "description": "Search term (partial or full)", + "in": "query", + "name": "term", + "required": true, + "type": "string", + "x-example": "god of war" + }, + { + "default": 5, + "description": "Maximum number of suggestions to return (max 20)", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "default": "us", + "description": "Store country code (ISO, selects currency)", + "in": "query", + "name": "cc", + "type": "string" + }, + { + "default": "en", + "description": "Language code", + "in": "query", + "name": "l", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -337518,11 +373326,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/playstation.suggestResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -337539,50 +373347,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get PEOPLE top stories", - "tags": [ - "PEOPLE" - ] - } - }, - "/people/sections": { - "get": { - "description": "Returns the full PEOPLE section/category navigation inventory (37 entries as of 2026-09-24), each with a slug, display name, and public listing URL. Use a returned slug as the section parameter on GET /people/headlines.", - "operationId": "people-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get PEOPLE sections", + "summary": "Get PlayStation Store search suggestions for a term", "tags": [ - "PEOPLE" + "PlayStation" ] } }, - "/phillyinquirer/article": { + "/politico/article": { "get": { - "description": "Returns public Philadelphia Inquirer article metadata and body paragraphs from a canonical story URL.", - "operationId": "phillyinquirer-article", + "description": "Returns a public Politico article's metadata and full body paragraphs from a canonical article URL.", + "operationId": "politico-article", "parameters": [ { - "description": "Canonical Philadelphia Inquirer story URL", + "description": "Canonical www.politico.com article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.inquirer.com/news/ice-arrest-philadelphia-california-business-trip-airport-20260924.html" + "x-example": "https://www.politico.com/news/2026/09/18/congress-f-35-china-investigation-01083647" } ], "produces": [ @@ -337592,7 +373374,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/politico.articleResponseDoc" } }, "400": { @@ -337607,6 +373389,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337619,30 +373407,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philadelphia Inquirer article content", + "summary": "Get Politico article content", "tags": [ - "Philadelphia Inquirer" + "Politico" ] } }, - "/phillyinquirer/author": { + "/politico/author": { "get": { - "description": "Returns one Philadelphia Inquirer staff author's public profile: name, role, biography, social links, and their latest listed stories.", - "operationId": "phillyinquirer-author", + "description": "Returns one Politico staff author's public profile: name, job title, bio, headshot, and their most recent bylined articles. Politico staff pages expose a fixed-size recent-articles list with no pagination.", + "operationId": "politico-author", "parameters": [ { - "description": "Author slug, e.g. gammage_jeff", + "description": "Politico staff slug, e.g. mark-satter", "in": "query", "name": "slug", "type": "string", - "x-example": "gammage_jeff" + "x-example": "mark-satter" }, { - "description": "Canonical inquirer.com/author/ URL; alternative to slug", + "description": "Canonical www.politico.com/staff/ URL, as an alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.inquirer.com/author/gammage_jeff/" + "x-example": "https://www.politico.com/staff/mark-satter" } ], "produces": [ @@ -337652,7 +373440,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.phillyinquirerAuthorResponseDoc" + "$ref": "#/definitions/politico.authorResponseDoc" } }, "400": { @@ -337667,75 +373455,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Philadelphia Inquirer author profile", - "tags": [ - "Philadelphia Inquirer" - ] - } - }, - "/phillyinquirer/headlines": { - "get": { - "description": "Returns fresh Philadelphia Inquirer headlines from one public section feed. Associated Press wire copy is not included.", - "operationId": "phillyinquirer-headlines", - "parameters": [ - { - "description": "Philadelphia Inquirer section slug", - "enum": [ - "arts", - "business", - "college-sports", - "crime", - "eagles", - "education", - "entertainment", - "flyers", - "food", - "health", - "high-school-sports", - "life", - "news", - "opinion", - "phillies", - "politics", - "real-estate", - "science", - "sixers", - "soccer", - "south-jersey", - "sports", - "transportation", - "weather" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string" - } - ], - "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" } @@ -337752,16 +373473,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philadelphia Inquirer section headlines", + "summary": "Get a Politico staff author profile", "tags": [ - "Philadelphia Inquirer" + "Politico" ] } }, - "/phillyinquirer/news": { + "/politico/categories": { "get": { - "description": "Returns fresh Philadelphia Inquirer top stories from the public news feed. Associated Press wire copy is not included.", - "operationId": "phillyinquirer-news", + "description": "Returns Politico's full public section navigation tree, grouped the same way the site's own nav menu groups it. Use a section's slug directly as the topic parameter on politico-topic.", + "operationId": "politico-categories", "produces": [ "application/json" ], @@ -337769,7 +373490,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/politico.categoriesResponseDoc" } }, "429": { @@ -337790,16 +373511,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philadelphia Inquirer top stories", + "summary": "Get Politico section navigation", "tags": [ - "Philadelphia Inquirer" + "Politico" ] } }, - "/phillyinquirer/sections": { + "/politico/headlines": { "get": { - "description": "Returns the public Philadelphia Inquirer section taxonomy accepted by the headlines endpoint.", - "operationId": "phillyinquirer-sections", + "description": "Returns fresh headlines from Politico's public, site-wide RSS feed.", + "operationId": "politico-headlines", "produces": [ "application/json" ], @@ -337807,7 +373528,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/politico.headlinesResponseDoc" } }, "429": { @@ -337828,24 +373549,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philadelphia Inquirer sections", + "summary": "Get Politico site-wide headlines", "tags": [ - "Philadelphia Inquirer" + "Politico" ] } }, - "/philstar/article": { + "/politico/topic": { "get": { - "description": "Returns public Philstar article metadata and body paragraphs from a canonical article URL. Philstar serves full stories to anonymous readers, so no paywall flag is needed.", - "operationId": "philstar-article", + "description": "Returns the newest public Politico stories on one section archive page. topic is a section slug -- see politico-categories for the full known value space.", + "operationId": "politico-topic", "parameters": [ { - "description": "Canonical Philstar article URL", + "description": "Politico section slug", "in": "query", - "name": "url", + "name": "topic", "required": true, "type": "string", - "x-example": "https://www.philstar.com/business/2026/09/25/2558683/naysayers-wont-take-away-gcashs-very-exciting-story" + "x-example": "congress-news-updates-analysis" } ], "produces": [ @@ -337855,7 +373576,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/politico.topicResponseDoc" } }, "400": { @@ -337870,6 +373591,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337882,30 +373609,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philstar article content", + "summary": "Get Politico section archive", "tags": [ - "Philstar" + "Politico" ] } }, - "/philstar/author": { + "/polygon/article": { "get": { - "description": "Returns one Philstar author's public archive: name, profile photo when set, and the most recent stories on the first page of the archive. Authors are identified by the numeric id in the byline link (philstar.com/authors//).", - "operationId": "philstar-author", + "description": "Returns public Polygon article metadata and body paragraphs from a canonical article URL.", + "operationId": "polygon-article", "parameters": [ { - "description": "Numeric Philstar author id from a byline link, e.g. 1805259", - "in": "query", - "name": "id", - "type": "string", - "x-example": "1805259" - }, - { - "description": "Author archive URL, https://www.philstar.com/authors/[/]; alternative to id", + "description": "Canonical Polygon article URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.philstar.com/authors/1805259/richmond-mercurio" + "x-example": "https://www.polygon.com/best-marvel-video-games-ever/" } ], "produces": [ @@ -337915,145 +373636,122 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.philstarAuthorResponseDoc" + "$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 Philstar author archive", - "tags": [ - "Philstar" - ] - } - }, - "/philstar/headlines": { - "get": { - "description": "Returns the current headlines from the first page of one public Philstar section page (Philstar publishes no crawlable feeds, so this reads the section page itself).", - "operationId": "philstar-headlines", - "parameters": [ - { - "description": "Philstar section slug", - "enum": [ - "headlines", - "headlines-climate-and-environment", - "headlines-weather", - "opinion", - "nation", - "world", - "business", - "business-agriculture", - "business-banking", - "business-biz-memos", - "business-business-as-usual", - "business-motoring", - "business-real-estate", - "business-science-and-environment", - "business-stock-commentary", - "business-technology", - "business-telecoms", - "sports", - "sports-deans-corner", - "esport", - "entertainment", - "entertainment-korean-wave", - "entertainment-movies", - "entertainment-music", - "movies", - "music", - "lifestyle", - "lifestyle-arts-and-culture", - "lifestyle-business-life", - "lifestyle-fashion-and-beauty", - "lifestyle-food-and-leisure", - "lifestyle-gadgets", - "lifestyle-health-and-family", - "lifestyle-modern-living", - "lifestyle-on-the-radar", - "lifestyle-pet-life", - "lifestyle-shopping-guide", - "lifestyle-the-budgetarian", - "lifestyle-travel-and-tourism", - "news-commentary", - "videos", - "brandspace", - "campus", - "exam-results", - "lotto-results", - "other-sections-comics", - "other-sections-daily-bread", - "other-sections-education-and-home", - "other-sections-exam-results", - "other-sections-forex", - "other-sections-letters-to-the-editor", - "other-sections-lotto-results", - "other-sections-newsmakers", - "other-sections-star-cover", - "other-sections-supplements", - "other-sections-the-good-news", - "other-sections-word-of-the-day", - "pang-masa", - "pang-masa-pang-movies", - "pang-masa-para-malibang", - "pang-masa-para-manalo", - "pang-masa-pm-sports", - "pang-masa-police-metro", - "pang-masa-punto-mo", - "pilipino-star-ngayon", - "pilipino-star-ngayon-bansa", - "pilipino-star-ngayon-dr-love", - "pilipino-star-ngayon-komiks", - "pilipino-star-ngayon-kutob", - "pilipino-star-ngayon-litra-talk", - "pilipino-star-ngayon-metro", - "pilipino-star-ngayon-opinyon", - "pilipino-star-ngayon-palaro", - "pilipino-star-ngayon-probinsiya", - "pilipino-star-ngayon-showbiz", - "pilipino-star-ngayon-true-confessions", - "banat", - "banat-balita", - "banat-imong-kapalaran", - "banat-kalingawan", - "banat-opinyon", - "banat-palaro", - "banat-punsoy", - "banat-showbiz", - "the-freeman", - "the-freeman-cebu-business", - "the-freeman-cebu-entertainment", - "the-freeman-cebu-lifestyle", - "the-freeman-cebu-news", - "the-freeman-cebu-sports", - "the-freeman-metro-cebu", - "the-freeman-opinion", - "the-freeman-region" + "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 Polygon article content", + "tags": [ + "Polygon" + ] + } + }, + "/polygon/author": { + "get": { + "description": "Returns a Polygon author's byline metadata, biography, social links, and recent articles from a canonical author URL.", + "operationId": "polygon-author", + "parameters": [ + { + "description": "Canonical Polygon author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.polygon.com/author/venter-jason/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.polygonAuthorResponseDoc" + } + }, + "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 Polygon author profile", + "tags": [ + "Polygon" + ] + } + }, + "/polygon/headlines": { + "get": { + "description": "Returns fresh headlines from one public Polygon RSS section.", + "operationId": "polygon-headlines", + "parameters": [ + { + "description": "Polygon RSS section slug", + "enum": [ + "gaming-news", + "gaming-reviews", + "gaming-previews", + "gaming-features", + "entertainment-news", + "movie-tv-reviews", + "entertainment-features", + "anime", + "horror", + "sci-fi", + "fantasy", + "what-to-play", + "what-to-watch", + "guides", + "videos" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "gaming-news" } ], "produces": [ @@ -338084,16 +373782,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philstar section headlines", + "summary": "Get Polygon section headlines", "tags": [ - "Philstar" + "Polygon" ] } }, - "/philstar/news": { + "/polygon/news": { "get": { - "description": "Returns the current Philstar (Philippine Star) top stories from the public homepage: the latest, trending and featured stories with summary, byline, thumbnail and the publication date encoded in the story URL.", - "operationId": "philstar-news", + "description": "Returns fresh Polygon top stories from its public RSS feed.", + "operationId": "polygon-news", "produces": [ "application/json" ], @@ -338104,6 +373802,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -338116,16 +373820,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philstar top stories", + "summary": "Get Polygon top stories", "tags": [ - "Philstar" + "Polygon" ] } }, - "/philstar/sections": { + "/polygon/sections": { "get": { - "description": "Returns the public Philstar editorial section inventory: every English, Filipino (Pilipino Star Ngayon, Pang-Masa) and Cebuano (Banat, The Freeman) section page that lists stories.", - "operationId": "philstar-sections", + "description": "Returns the public Polygon RSS section inventory used by the headlines endpoint.", + "operationId": "polygon-sections", "produces": [ "application/json" ], @@ -338142,24 +373846,84 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philstar sections", + "summary": "Get Polygon RSS sections", "tags": [ - "Philstar" + "Polygon" ] } }, - "/phonearena/article": { + "/polymarket/activity/trades": { "get": { - "description": "Returns public PhoneArena news or review metadata and body paragraphs from a canonical article URL. PhoneArena serves pages behind a Cloudflare challenge; when the challenge is not cleared the endpoint returns a 503 error.", - "operationId": "phonearena-article", + "consumes": [ + "application/json" + ], + "description": "Returns normalized public trade rows used by Polymarket's `/activity` page from credential-free Data API trades JSON. The `taker_only` enum accepts `true` and `false`; the `filter_type` enum accepts `CASH`; the `filter_amount` enum accepts `1`, `5`, `10`, `100`, `1000`, `10000`, and `100000`.", + "operationId": "polymarket-activity-trades", "parameters": [ { - "description": "Canonical PhoneArena article URL", + "description": "Maximum trades, defaults to 50 and supports up to 100", "in": "query", - "name": "url", - "required": true, + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Result offset, defaults to 0 and supports up to 10000", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "default": "true", + "description": "Taker-only filter", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "taker_only", + "type": "string" + }, + { + "default": "CASH", + "description": "Activity amount filter type", + "enum": [ + "CASH" + ], + "in": "query", + "name": "filter_type", + "type": "string" + }, + { + "default": "1", + "description": "Minimum filtered amount", + "enum": [ + "1", + "5", + "10", + "100", + "1000", + "10000", + "100000" + ], + "in": "query", + "name": "filter_amount", + "type": "string" + }, + { + "description": "Optional Polymarket event id", + "in": "query", + "name": "event_id", "type": "string", - "x-example": "https://www.phonearena.com/news/the-galaxy-z-fold-8-shamelessly-stole-the-crown-from-the-iphone-duo_id183377" + "x-example": "101772" + }, + { + "description": "Optional market condition id", + "in": "query", + "name": "market", + "type": "string", + "x-example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b" } ], "produces": [ @@ -338169,7 +373933,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/polymarket.activityTradesResponseDoc" } }, "400": { @@ -338178,8 +373942,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338196,30 +373960,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get PhoneArena article or review content", + "summary": "List Polymarket activity trades", "tags": [ - "PhoneArena" + "Polymarket" ] } }, - "/phonearena/author": { + "/polymarket/clob/market/{condition_id}": { "get": { - "description": "Returns one PhoneArena staff author's public profile: name, role, biography, image, social links and the recent articles listed on the profile page.", - "operationId": "phonearena-author", + "consumes": [ + "application/json" + ], + "description": "Returns one public CLOB market detail row by market condition id, including tokens, reward settings, order acceptance state, tags, and fees.", + "operationId": "polymarket-clob-market", "parameters": [ { - "description": "Author username, e.g. sebastian.f", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "sebastian.f" - }, - { - "description": "Canonical phonearena.com/team/ URL; alternative to slug", - "in": "query", - "name": "url", + "description": "Polymarket market condition id", + "in": "path", + "name": "condition_id", + "required": true, "type": "string", - "x-example": "https://www.phonearena.com/team/sebastian.f" + "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" } ], "produces": [ @@ -338229,7 +373990,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.phonearenaAuthorResponseDoc" + "$ref": "#/definitions/polymarket.clobMarketResponseDoc" } }, "400": { @@ -338244,6 +374005,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -338256,27 +374023,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PhoneArena author profile", + "summary": "Get Polymarket CLOB market", "tags": [ - "PhoneArena" + "Polymarket" ] } }, - "/phonearena/headlines": { + "/polymarket/dashboards/macro": { "get": { - "description": "Returns up to 100 newest PhoneArena stories or reviews from one public listing. For news-month and reviews, titles are reconstructed from the hero-image file name and published_at is the listing's last-modified time.", - "operationId": "phonearena-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized macroeconomic event rows for Polymarket's `/dashboards/macro` page using credential-free Gamma `events/keyset` JSON with the `macro` tag.", + "operationId": "polymarket-dashboard-macro", "parameters": [ { - "description": "PhoneArena listing slug", - "enum": [ - "news", - "news-month", - "reviews" - ], + "description": "Maximum macro events, defaults to 20 and supports up to 100", "in": "query", - "name": "section", - "required": true, + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Optional keyset cursor from a prior macro dashboard response", + "in": "query", + "name": "cursor", "type": "string" } ], @@ -338287,7 +374058,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/polymarket.macroDashboardResponseDoc" } }, "400": { @@ -338296,6 +374067,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -338308,16 +374085,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get PhoneArena section headlines", + "summary": "List Polymarket macro dashboard events", "tags": [ - "PhoneArena" + "Polymarket" ] } }, - "/phonearena/news": { + "/polymarket/data/followers/{address}": { "get": { - "description": "Returns PhoneArena's most recent phone news stories (about the last two days) from its public news sitemap, with exact titles and publication times.", - "operationId": "phonearena-news", + "consumes": [ + "application/json" + ], + "description": "Returns public follower rows for one Polymarket address from Gamma v1 data JSON.", + "operationId": "polymarket-data-followers", + "parameters": [ + { + "description": "Wallet address", + "in": "path", + "name": "address", + "required": true, + "type": "string", + "x-example": "0x0000000000000000000000000000000000000000" + }, + { + "description": "Rows to return", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Optional upstream sort field", + "in": "query", + "name": "order", + "type": "string", + "x-example": "createdAt" + }, + { + "default": false, + "description": "Sort ascending when true", + "in": "query", + "name": "ascending", + "type": "boolean" + }, + { + "description": "Optional upstream cursor", + "in": "query", + "name": "after_cursor", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -338325,7 +374149,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -338346,16 +374176,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get PhoneArena top stories", + "summary": "Polymarket data followers", "tags": [ - "PhoneArena" + "Polymarket" ] } }, - "/phonearena/sections": { + "/polymarket/data/following/{address}": { "get": { - "description": "Returns the public PhoneArena listings accepted by the headlines endpoint: recent news, current-month news and current-year reviews.", - "operationId": "phonearena-sections", + "consumes": [ + "application/json" + ], + "description": "Returns public following rows for one Polymarket address from Gamma v1 data JSON.", + "operationId": "polymarket-data-following", + "parameters": [ + { + "description": "Wallet address", + "in": "path", + "name": "address", + "required": true, + "type": "string", + "x-example": "0x0000000000000000000000000000000000000000" + }, + { + "description": "Rows to return", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Optional upstream sort field", + "in": "query", + "name": "order", + "type": "string", + "x-example": "createdAt" + }, + { + "default": false, + "description": "Sort ascending when true", + "in": "query", + "name": "ascending", + "type": "boolean" + }, + { + "description": "Optional upstream cursor", + "in": "query", + "name": "after_cursor", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -338363,7 +374240,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -338384,19 +374267,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get PhoneArena sections", + "summary": "Polymarket data following", "tags": [ - "PhoneArena" + "Polymarket" ] } }, - "/ping": { + "/polymarket/data/follows/counts/{address}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public release metadata for deploy verification. Root `/ping` returns the same payload as a compatibility alias.", - "operationId": "ping", + "description": "Returns public follower and following counts for one Polymarket address from Gamma v1 data JSON.", + "operationId": "polymarket-data-follows-counts", + "parameters": [ + { + "description": "Wallet address", + "in": "path", + "name": "address", + "required": true, + "type": "string", + "x-example": "0x0000000000000000000000000000000000000000" + } + ], "produces": [ "application/json" ], @@ -338404,45 +374297,54 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/api.pingResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "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" } } }, - "summary": "Return API metadata", + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Polymarket data follow counts", "tags": [ - "Meta" + "Polymarket" ] } }, - "/pinterest/board/{username}/{slug}": { + "/polymarket/event/id/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Pinterest board's metadata (name, description, cover image, pin/follower counts, owner) plus a page of pins from that board. Public data sourced from Pinterest's own board pages.", - "operationId": "pinterest-board", + "description": "Returns one normalized Polymarket event from credential-free public Gamma event JSON. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-event-detail-by-id", "parameters": [ { - "description": "Pinterest username that owns the board", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "patrontequila" - }, - { - "description": "Board URL slug, from the board's own /{username}/{slug}/ URL", + "description": "Polymarket event id", "in": "path", - "name": "slug", + "name": "id", "required": true, "type": "string", - "x-example": "el-cafecito" + "x-example": "30615" } ], "produces": [ @@ -338452,7 +374354,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pinterest.boardResponseDoc" + "$ref": "#/definitions/polymarket.eventDetailResponseDoc" } }, "400": { @@ -338467,8 +374369,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338485,19 +374387,80 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pinterest board's detail", + "summary": "Get Polymarket event detail by id", "tags": [ - "Pinterest" + "Polymarket" ] } }, - "/pinterest/categories": { + "/polymarket/event/id/{id}/activity": { "get": { "consumes": [ "application/json" ], - "description": "Returns Pinterest's top-level \"Ideas\" category taxonomy (e.g. \"Animals\", \"Home Decor\", \"Food And Drink\"). Each entry's id is usable directly with GET /pinterest/ideas/{id}. Public data sourced from Pinterest's own ideas.pinterest.com-style category hub.", - "operationId": "pinterest-categories", + "description": "Returns normalized public trade rows for one Polymarket event from credential-free Data API trades JSON. The `taker_only` enum accepts `true` and `false`; the `filter_type` enum accepts `CASH`; the `filter_amount` enum accepts `1`, `5`, `10`, `100`, `1000`, `10000`, and `100000`. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-event-activity-by-id", + "parameters": [ + { + "description": "Polymarket event id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "30615" + }, + { + "description": "Maximum trades, defaults to 50 and supports up to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Result offset, defaults to 0 and supports up to 10000", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "default": "true", + "description": "Accepted for compatibility with the global activity contract; scoped upstream requests are filtered by event id", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "taker_only", + "type": "string" + }, + { + "default": "CASH", + "description": "Activity amount filter type", + "enum": [ + "CASH" + ], + "in": "query", + "name": "filter_type", + "type": "string" + }, + { + "default": "1", + "description": "Minimum filtered amount", + "enum": [ + "1", + "5", + "10", + "100", + "1000", + "10000", + "100000" + ], + "in": "query", + "name": "filter_amount", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -338505,11 +374468,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pinterest.categoriesResponseDoc" + "$ref": "#/definitions/polymarket.activityTradesResponseDoc" } }, - "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" } @@ -338526,27 +374501,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Pinterest's \"Ideas\" category list", + "summary": "List Polymarket event activity trades by id", "tags": [ - "Pinterest" + "Polymarket" ] } }, - "/pinterest/ideas/{id}": { + "/polymarket/event/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one \"Ideas\" category's metadata (name, description, follower count) plus a page of pins from that category's feed. Public data sourced from Pinterest's own ideas category pages.", - "operationId": "pinterest-idea", + "description": "Returns one normalized Polymarket event from credential-free public Gamma event JSON. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-event-detail", "parameters": [ { - "description": "Pinterest ideas category id. See GET /pinterest/categories for the full list.", + "description": "Polymarket event slug", "in": "path", - "name": "id", + "name": "slug", "required": true, "type": "string", - "x-example": "925056443165" + "x-example": "world-cup-winner" } ], "produces": [ @@ -338556,7 +374531,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pinterest.ideaResponseDoc" + "$ref": "#/definitions/polymarket.eventDetailResponseDoc" } }, "400": { @@ -338571,8 +374546,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338589,27 +374564,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pinterest \"Ideas\" category's detail feed", + "summary": "Get Polymarket event detail", "tags": [ - "Pinterest" + "Polymarket" ] } }, - "/pinterest/pin/{id}": { + "/polymarket/event/{slug}/activity": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Pinterest pin's full detail: title, description, image, board, pinner, comment count, save count, and creation time. Public data sourced from Pinterest's own pin pages.", - "operationId": "pinterest-pin", + "description": "Returns normalized public trade rows for one Polymarket event from credential-free Data API trades JSON. The `taker_only` enum accepts `true` and `false`; the `filter_type` enum accepts `CASH`; the `filter_amount` enum accepts `1`, `5`, `10`, `100`, `1000`, `10000`, and `100000`. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-event-activity", "parameters": [ { - "description": "Pinterest pin id", + "description": "Polymarket event slug", "in": "path", - "name": "id", + "name": "slug", "required": true, "type": "string", - "x-example": "52846995624279072" + "x-example": "world-cup-winner" + }, + { + "description": "Maximum trades, defaults to 50 and supports up to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Result offset, defaults to 0 and supports up to 10000", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "default": "true", + "description": "Accepted for compatibility with the global activity contract; scoped upstream requests are filtered by event id", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "taker_only", + "type": "string" + }, + { + "default": "CASH", + "description": "Activity amount filter type", + "enum": [ + "CASH" + ], + "in": "query", + "name": "filter_type", + "type": "string" + }, + { + "default": "1", + "description": "Minimum filtered amount", + "enum": [ + "1", + "5", + "10", + "100", + "1000", + "10000", + "100000" + ], + "in": "query", + "name": "filter_amount", + "type": "string" } ], "produces": [ @@ -338619,7 +374645,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pinterest.pinResponseDoc" + "$ref": "#/definitions/polymarket.activityTradesResponseDoc" } }, "400": { @@ -338634,8 +374660,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338652,27 +374678,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pinterest pin's full detail", + "summary": "List Polymarket event activity trades", "tags": [ - "Pinterest" + "Polymarket" ] } }, - "/pinterest/search": { + "/polymarket/events": { "get": { "consumes": [ "application/json" ], - "description": "Returns public Pinterest pins matching a text query: title, description, image, board, and pinner for each result. Public data sourced from Pinterest's own web search.", - "operationId": "pinterest-search", + "description": "Returns normalized event rows from Polymarket's credential-free public Gamma events JSON.", + "operationId": "polymarket-events", "parameters": [ { - "description": "Search text", + "description": "Maximum events, defaults to 25 and supports up to 100", "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "minimalist living room" + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Result offset, defaults to 0 and supports up to 10000", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "default": "volume24hr", + "description": "Sort field", + "enum": [ + "volume24hr", + "volume", + "liquidity", + "endDate", + "updatedAt", + "createdAt", + "id", + "slug", + "title", + "question", + "label" + ], + "in": "query", + "name": "order", + "type": "string" + }, + { + "default": false, + "description": "Sort ascending when true", + "in": "query", + "name": "ascending", + "type": "boolean" + }, + { + "description": "Closed filter", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "closed", + "type": "string" } ], "produces": [ @@ -338682,7 +374751,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pinterest.searchResponseDoc" + "$ref": "#/definitions/polymarket.eventsResponseDoc" } }, "400": { @@ -338691,8 +374760,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338709,27 +374778,71 @@ "ApiKeyAuth": [] } ], - "summary": "Search Pinterest pins", + "summary": "List Polymarket events", "tags": [ - "Pinterest" + "Polymarket" ] } }, - "/pinterest/user/{username}": { + "/polymarket/events/similar": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Pinterest user's public profile: display name, bio, website, avatar, and follower/following/pin/board counts. Public data sourced from Pinterest's own profile pages.", - "operationId": "pinterest-user", + "description": "Returns normalized similar events from Polymarket's credential-free public Gamma events/similar JSON.", + "operationId": "polymarket-events-similar", "parameters": [ { - "description": "Pinterest username", - "in": "path", - "name": "username", - "required": true, + "description": "Polymarket event id", + "in": "query", + "name": "id", + "type": "integer", + "x-example": 30615 + }, + { + "description": "Event title", + "in": "query", + "name": "event_title", "type": "string", - "x-example": "patrontequila" + "x-example": "World Cup Winner" + }, + { + "description": "Event slug", + "in": "query", + "name": "event_slug", + "type": "string", + "x-example": "world-cup-winner" + }, + { + "description": "Market title", + "in": "query", + "name": "market_title", + "type": "string", + "x-example": "Will Spain win the 2026 FIFA World Cup?" + }, + { + "description": "Market slug", + "in": "query", + "name": "market_slug", + "type": "string", + "x-example": "will-spain-win-the-2026-fifa-world-cup-963" + }, + { + "description": "Maximum events, defaults to 10 and supports up to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Closed filter", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "closed", + "type": "string" } ], "produces": [ @@ -338739,7 +374852,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pinterest.userResponseDoc" + "$ref": "#/definitions/polymarket.similarEventsResponseDoc" } }, "400": { @@ -338748,14 +374861,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" } @@ -338772,27 +374879,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pinterest user's public profile", + "summary": "Find similar Polymarket events", "tags": [ - "Pinterest" + "Polymarket" ] } }, - "/pinterest/user/{username}/boards": { + "/polymarket/events/{id}/tags": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a Pinterest user's own boards: name, description, cover image, and pin/follower counts for each. Public data sourced from Pinterest's own profile pages.", - "operationId": "pinterest-user-boards", + "description": "Returns normalized tag rows attached to one Polymarket event id.", + "operationId": "polymarket-event-tags", "parameters": [ { - "description": "Pinterest username", + "description": "Polymarket event id", "in": "path", - "name": "username", + "name": "id", "required": true, "type": "string", - "x-example": "patrontequila" + "x-example": "30615" } ], "produces": [ @@ -338802,7 +374909,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pinterest.userBoardsResponseDoc" + "$ref": "#/definitions/polymarket.tagsResponseDoc" } }, "400": { @@ -338811,8 +374918,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338829,27 +374936,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pinterest user's boards", + "summary": "List tags for a Polymarket event", "tags": [ - "Pinterest" + "Polymarket" ] } }, - "/pinterest/user/{username}/pins": { + "/polymarket/fee-types": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a Pinterest user's own pins: title, description, image, board, and pinner for each. Public data sourced from Pinterest's own profile pages.", - "operationId": "pinterest-user-pins", + "description": "Returns public fee type data from Polymarket Gamma. This is a normalized wrapper around credential-free public JSON.", + "operationId": "polymarket-fee-types", "parameters": [ { - "description": "Pinterest username", - "in": "path", - "name": "username", - "required": true, + "description": "Optional upstream active filter", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "active", + "type": "string" + }, + { + "description": "Optional upstream search filter", + "in": "query", + "name": "search", "type": "string", - "x-example": "patrontequila" + "x-example": "sports" } ], "produces": [ @@ -338859,7 +374975,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pinterest.userPinsResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -338868,8 +374984,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338886,33 +375002,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pinterest user's own pins", + "summary": "Polymarket fee types", "tags": [ - "Pinterest" + "Polymarket" ] } }, - "/pitchbook/advisor": { + "/polymarket/games": { "get": { "consumes": [ "application/json" ], - "description": "Returns the free/teaser content of a PitchBook advisor (service provider, e.g. investment bank, lender, or financing advisory firm) profile page: overview, description, contact/HQ, and a preview of serviced companies/deals, co-lenders, and subsidiaries. PitchBook gates most numeric figures and full lists behind a paid subscription; those come through as empty cells rather than being fabricated. Pass exactly one of `id` or `url`.", - "operationId": "pitchbook-advisor", + "description": "Returns public game rows from Polymarket Gamma.", + "operationId": "polymarket-games", "parameters": [ { - "description": "PitchBook advisor id", + "description": "Optional sport filter", "in": "query", - "name": "id", + "name": "sport", "type": "string", - "x-example": "676215-64" + "x-example": "basketball" }, { - "description": "Absolute https://pitchbook.com/profiles/advisor/ URL", + "description": "Optional ticker filter", "in": "query", - "name": "url", + "name": "ticker", "type": "string", - "x-example": "https://pitchbook.com/profiles/advisor/676215-64" + "x-example": "nba-sas-nyk-2026-06-08" } ], "produces": [ @@ -338922,7 +375038,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pitchbook.advisorResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -338931,8 +375047,89 @@ "$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": "Polymarket games", + "tags": [ + "Polymarket" + ] + } + }, + "/polymarket/homepage/feed": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized rows for Polymarket homepage feeds discovered from the public web app and backed by credential-free Gamma JSON. The `feed` enum accepts `trending`, `breaking`, `new`, `politics`, `sports`, `crypto`, `esports`, `iran`, `finance`, `geopolitics`, `tech`, `culture`, `economy`, `weather`, `mentions`, and `elections`. Most feeds return events from Gamma `events/keyset`; `breaking` returns high-movement market rows and `mentions` returns open event search matches.", + "operationId": "polymarket-homepage-feed", + "parameters": [ + { + "default": "trending", + "description": "Homepage feed", + "enum": [ + "trending", + "breaking", + "new", + "politics", + "sports", + "crypto", + "esports", + "iran", + "finance", + "geopolitics", + "tech", + "culture", + "economy", + "weather", + "mentions", + "elections" + ], + "in": "query", + "name": "feed", + "type": "string" + }, + { + "description": "Maximum rows, defaults to 20 and supports up to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Optional keyset cursor from a prior event feed response", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/polymarket.homepageFeedResponseDoc" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -338955,33 +375152,50 @@ "ApiKeyAuth": [] } ], - "summary": "PitchBook advisor profile", + "summary": "List Polymarket homepage feed rows", "tags": [ - "PitchBook" + "Polymarket" ] } }, - "/pitchbook/company": { + "/polymarket/leaderboard": { "get": { "consumes": [ "application/json" ], - "description": "Returns the free/teaser content of a PitchBook company profile page (overview, description, contact/HQ, industry, funding-round history without dollar amounts, a preview of investors, acquisitions, and subsidiaries). PitchBook gates most numeric figures (deal amounts, cap tables, full investor/LP lists) behind a paid subscription; those come through as empty cells rather than being fabricated. Pass exactly one of `id` or `url`.", - "operationId": "pitchbook-company", + "description": "Returns normalized trader leaderboard rows from Polymarket's credential-free Data API leaderboard JSON. The `window` enum accepts `1d`, `7d`, `30d`, and `all`; the `sort_by` enum accepts `profit` and `volume`.", + "operationId": "polymarket-leaderboard", "parameters": [ { - "description": "PitchBook company id", + "default": "30d", + "description": "Leaderboard time window", + "enum": [ + "1d", + "7d", + "30d", + "all" + ], "in": "query", - "name": "id", - "type": "string", - "x-example": "752821-12" + "name": "window", + "type": "string" + }, + { + "default": "profit", + "description": "Leaderboard sort", + "enum": [ + "profit", + "volume" + ], + "in": "query", + "name": "sort_by", + "type": "string" }, { - "description": "Absolute https://pitchbook.com/profiles/company/ URL", + "description": "Maximum rows, defaults to 20 and supports up to 100", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://pitchbook.com/profiles/company/752821-12" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -338991,7 +375205,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pitchbook.companyResponseDoc" + "$ref": "#/definitions/polymarket.leaderboardResponseDoc" } }, "400": { @@ -339000,12 +375214,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -339024,33 +375232,86 @@ "ApiKeyAuth": [] } ], - "summary": "PitchBook company profile", + "summary": "List Polymarket leaderboard rows", "tags": [ - "PitchBook" + "Polymarket" ] } }, - "/pitchbook/fund": { + "/polymarket/market-clarifications": { "get": { "consumes": [ "application/json" ], - "description": "Returns the free/teaser content of a PitchBook fund profile page (strategy, status, manager, size, vintage, and a preview of limited partners and benchmark peer funds). PitchBook gates most numeric figures (returns/IRR, full LP lists) behind a paid subscription; those come through as empty cells rather than being fabricated. Pass exactly one of `id` or `url`.", - "operationId": "pitchbook-fund", + "description": "Returns public market clarification rows from Polymarket Gamma.", + "operationId": "polymarket-market-clarifications", "parameters": [ { - "description": "PitchBook fund id", + "description": "Optional market id filter", "in": "query", - "name": "id", + "name": "market_id", "type": "string", - "x-example": "19719-91F" + "x-example": "558934" }, { - "description": "Absolute https://pitchbook.com/profiles/fund/ URL", + "description": "Optional event id filter", "in": "query", - "name": "url", + "name": "event_id", "type": "string", - "x-example": "https://pitchbook.com/profiles/fund/19719-91F" + "x-example": "30615" + }, + { + "description": "Optional upstream state filter", + "in": "query", + "name": "state", + "type": "string", + "x-example": "resolved" + }, + { + "description": "Optional upstream question id filter", + "in": "query", + "name": "question_id", + "type": "string" + }, + { + "description": "Optional transaction hash filter", + "in": "query", + "name": "tx_hash", + "type": "string" + }, + { + "description": "Rows to return", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Optional upstream sort field", + "in": "query", + "name": "order", + "type": "string", + "x-example": "createdAt" + }, + { + "default": false, + "description": "Sort ascending when true", + "in": "query", + "name": "ascending", + "type": "boolean" + }, + { + "description": "Optional upstream cursor", + "in": "query", + "name": "after_cursor", + "type": "string" } ], "produces": [ @@ -339060,7 +375321,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pitchbook.fundResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -339069,12 +375330,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -339093,33 +375348,27 @@ "ApiKeyAuth": [] } ], - "summary": "PitchBook fund profile", + "summary": "Polymarket market clarifications", "tags": [ - "PitchBook" + "Polymarket" ] } }, - "/pitchbook/investor": { + "/polymarket/market/condition/{condition_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the free/teaser content of a PitchBook investor (fund manager/firm) profile page (overview, description, contact/HQ, and a preview of investments, exits, and co-investors). PitchBook gates most numeric figures and full lists behind a paid subscription; those come through as empty cells rather than being fabricated. Pass exactly one of `id` or `url`.", - "operationId": "pitchbook-investor", + "description": "Returns one normalized Polymarket market from credential-free public Gamma market JSON by condition id. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-market-detail-by-condition", "parameters": [ { - "description": "PitchBook investor id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "294471-37" - }, - { - "description": "Absolute https://pitchbook.com/profiles/investor/ URL", - "in": "query", - "name": "url", + "description": "Polymarket market condition id", + "in": "path", + "name": "condition_id", + "required": true, "type": "string", - "x-example": "https://pitchbook.com/profiles/investor/294471-37" + "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" } ], "produces": [ @@ -339129,7 +375378,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pitchbook.investorResponseDoc" + "$ref": "#/definitions/polymarket.marketDetailResponseDoc" } }, "400": { @@ -339162,33 +375411,78 @@ "ApiKeyAuth": [] } ], - "summary": "PitchBook investor profile", + "summary": "Get Polymarket market detail by condition id", "tags": [ - "PitchBook" + "Polymarket" ] } }, - "/pitchbook/limited-partner": { + "/polymarket/market/condition/{condition_id}/activity": { "get": { "consumes": [ "application/json" ], - "description": "Returns the free/teaser content of a PitchBook limited partner (institutional investor, e.g. pension fund, endowment, or insurance company) profile page: overview, description, contact, and a preview of fund commitments. PitchBook gates most numeric figures and full lists behind a paid subscription; those come through as empty cells rather than being fabricated. Some limited partner profiles have no FAQ section (thinner profiles) -- this is normal, not a sign of a blocked or broken response. Pass exactly one of `id` or `url`.", - "operationId": "pitchbook-limited-partner", + "description": "Returns normalized public trade rows for one Polymarket market condition id from credential-free Data API trades JSON. The `taker_only` enum accepts `true` and `false`; the `filter_type` enum accepts `CASH`; the `filter_amount` enum accepts `1`, `5`, `10`, `100`, `1000`, `10000`, and `100000`. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-market-activity-by-condition", "parameters": [ { - "description": "PitchBook limited partner id", - "in": "query", - "name": "id", + "description": "Polymarket market condition id", + "in": "path", + "name": "condition_id", + "required": true, "type": "string", - "x-example": "864326-44" + "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" }, { - "description": "Absolute https://pitchbook.com/profiles/limited-partner/ URL", + "description": "Maximum trades, defaults to 50 and supports up to 100", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://pitchbook.com/profiles/limited-partner/864326-44" + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Result offset, defaults to 0 and supports up to 10000", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "default": "true", + "description": "Accepted for compatibility with the global activity contract; scoped upstream requests are filtered by condition id", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "taker_only", + "type": "string" + }, + { + "default": "CASH", + "description": "Activity amount filter type", + "enum": [ + "CASH" + ], + "in": "query", + "name": "filter_type", + "type": "string" + }, + { + "default": "1", + "description": "Minimum filtered amount", + "enum": [ + "1", + "5", + "10", + "100", + "1000", + "10000", + "100000" + ], + "in": "query", + "name": "filter_amount", + "type": "string" } ], "produces": [ @@ -339198,7 +375492,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pitchbook.limitedPartnerResponseDoc" + "$ref": "#/definitions/polymarket.activityTradesResponseDoc" } }, "400": { @@ -339231,56 +375525,27 @@ "ApiKeyAuth": [] } ], - "summary": "PitchBook limited partner profile", + "summary": "List Polymarket market activity trades by condition id", "tags": [ - "PitchBook" + "Polymarket" ] } }, - "/pizzahut/bundle-choices": { + "/polymarket/market/condition/{condition_id}/liquidity": { "get": { "consumes": [ "application/json" ], - "description": "Returns one deal/combo's full choice-builder tree -- every named slot it offers (e.g. \"1st Pizza\", \"Wings or Fries\", \"1st Dip\") and every product variant a caller can pick to fill that slot, each with the real price delta selecting it adds over the bundle's base price (zero for a variant already covered by the deal, positive for an upgrade such as a larger size or a specialty pizza). This is a different structure from /pizzahut/modifiers -- that endpoint customizes toppings/sauces on one product variant, while this endpoint swaps whole product variants in and out of a multi-item combo. bundle_code comes from /pizzahut/menu's code field on a type=bundle item.", - "operationId": "pizzahut-bundle-choices", + "description": "Returns a public market liquidity snapshot that joins Gamma market detail with credential-free public CLOB market-data reads when token ids are available. This endpoint is not a trading endpoint and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-market-liquidity-by-condition", "parameters": [ { - "description": "Pizza Hut's store number, from /pizzahut/stores", - "in": "query", - "name": "store_number", - "required": true, - "type": "string", - "x-example": "040937" - }, - { - "description": "A deal/combo's bundle code, from /pizzahut/menu's code field on a type=bundle item", - "in": "query", - "name": "bundle_code", + "description": "Polymarket market condition id", + "in": "path", + "name": "condition_id", "required": true, "type": "string", - "x-example": "MEAL501BD" - }, - { - "description": "Order channel the deal and pricing reflect (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": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" } ], "produces": [ @@ -339290,7 +375555,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pizzahut.bundleChoicesResponseDoc" + "$ref": "#/definitions/polymarket.marketLiquidityResponseDoc" } }, "400": { @@ -339323,116 +375588,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Pizza Hut deal/combo's full choice-builder tree", + "summary": "Get Polymarket market liquidity by condition id", "tags": [ - "Pizza Hut" + "Polymarket" ] } }, - "/pizzahut/delivery-estimate": { + "/polymarket/market/slug/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Checks whether a Pizza Hut 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 Pizza Hut'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, such as the requested delivery_provider not being enabled at that store. For the default INTERNAL provider, a serviceable result does not by itself confirm the address is within a real deliverable radius -- see this endpoint's markdown doc for the caveat. order_subtotal materially affects the fee estimate, so it is required rather than defaulted. pickup_at defaults to 30 minutes from now (an \"order now\" style estimate) when omitted.", - "operationId": "pizzahut-delivery-estimate", + "description": "Returns one normalized Polymarket market from credential-free public Gamma market JSON. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-market-detail-by-slug", "parameters": [ { - "description": "Pizza Hut's store number, from /pizzahut/stores", - "in": "query", - "name": "store_number", - "required": true, - "type": "string", - "x-example": "040937" - }, - { - "description": "Delivery address line 1", - "in": "query", - "name": "address1", - "required": true, - "type": "string", - "x-example": "250 W 57th St" - }, - { - "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": "New York" - }, - { - "description": "Delivery address state, two-letter code", - "in": "query", - "name": "state", - "required": true, - "type": "string", - "x-example": "NY" - }, - { - "description": "Delivery address postal code", - "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "10019" - }, - { - "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": 40.7656 - }, - { - "description": "Delivery address longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -73.982 - }, - { - "description": "Order subtotal before fees, in dollars", - "in": "query", - "name": "order_subtotal", + "description": "Polymarket market slug", + "in": "path", + "name": "slug", "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-05T20:00:00Z" - }, - { - "description": "Delivery provider to check (default INTERNAL)", - "enum": [ - "DOORDASH", - "MOCK_DOORDASH", - "INTERNAL" - ], - "in": "query", - "name": "delivery_provider", "type": "string", - "x-example": "INTERNAL" + "x-example": "nba-sas-nyk-2026-06-08" } ], "produces": [ @@ -339442,7 +375618,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pizzahut.deliveryEstimateResponseDoc" + "$ref": "#/definitions/polymarket.marketDetailResponseDoc" } }, "400": { @@ -339475,48 +375651,27 @@ "ApiKeyAuth": [] } ], - "summary": "Check Pizza Hut delivery serviceability and estimated fee for one store and address", + "summary": "Get Polymarket market detail by slug", "tags": [ - "Pizza Hut" + "Polymarket" ] } }, - "/pizzahut/menu": { + "/polymarket/market/slug/{slug}/liquidity": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's full menu grouped into categories (e.g. \"Pizza\", \"Wings\", \"Deals\"). Every entry is a product, a bundle (a deal or combo), 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. A product item also lists variants: every other priced size/crust/style option beyond its default (e.g. a pizza's Personal Pan through Large Original Stuffed Crust). 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). Some restaurants also carry products with no category at all (e.g. individual dip cup flavors); these are returned separately as uncategorized_items rather than silently dropped.", - "operationId": "pizzahut-menu", + "description": "Returns a public market liquidity snapshot that joins Gamma market detail with credential-free public CLOB market-data reads when token ids are available. This endpoint is not a trading endpoint and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-market-liquidity-by-slug", "parameters": [ { - "description": "Pizza Hut's store number, from /pizzahut/stores", - "in": "query", - "name": "store_number", + "description": "Polymarket market slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "040937" - }, - { - "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": "nba-sas-nyk-2026-06-08" } ], "produces": [ @@ -339526,7 +375681,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pizzahut.menuResponseDoc" + "$ref": "#/definitions/polymarket.marketLiquidityResponseDoc" } }, "400": { @@ -339559,56 +375714,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Pizza Hut restaurant's full priced menu", + "summary": "Get Polymarket market liquidity by slug", "tags": [ - "Pizza Hut" + "Polymarket" ] } }, - "/pizzahut/modifiers": { + "/polymarket/market/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one product variant's full build-your-own customization tree -- every slot (e.g. \"Pizza Sauce\", \"Pizza Cheese\", \"Pizza Toppings\", \"Crust Finishers\"), every modifier within it (a specific topping, sauce flavor, or seasoning), and every weight/placement option (e.g. Light, Regular, Extra, or a Left/Right/Whole pizza-half placement) with its own real price delta -- zero for an amount already included by default, a positive upcharge for an \"extra\" option. variant_code comes from /pizzahut/menu's variant_code or variants[].variant_code fields.", - "operationId": "pizzahut-modifiers", + "description": "Returns one normalized Polymarket market from credential-free public Gamma market JSON. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-market-detail", "parameters": [ { - "description": "Pizza Hut's store number, from /pizzahut/stores", - "in": "query", - "name": "store_number", - "required": true, - "type": "string", - "x-example": "040937" - }, - { - "description": "A product's specific size/crust/style variant code, from /pizzahut/menu", - "in": "query", - "name": "variant_code", + "description": "Polymarket market id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "variant_CLSS001_010BCYO1T_SIZE060L_BASE020H" - }, - { - "description": "Order channel the customization tree and pricing reflect (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": "558934" } ], "produces": [ @@ -339618,7 +375744,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pizzahut.modifiersResponseDoc" + "$ref": "#/definitions/polymarket.marketDetailResponseDoc" } }, "400": { @@ -339651,27 +375777,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Pizza Hut product variant's full customization tree", + "summary": "Get Polymarket market detail by id", "tags": [ - "Pizza Hut" + "Polymarket" ] } }, - "/pizzahut/store": { + "/polymarket/market/{id}/liquidity": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Pizza Hut restaurant's detail by its exact store number, from /pizzahut/stores, including its recurring open hours per order channel (carryout, delivery, dine-in, drive-thru, catering carryout) plus each channel's ordering constraints -- minimum/maximum order amount, whether tipping is offered, and accepted payment methods. A channel this restaurant does not offer at all is omitted from hours rather than reported as always-closed.", - "operationId": "pizzahut-store", + "description": "Returns a public market liquidity snapshot that joins Gamma market detail with credential-free public CLOB market-data reads when token ids are available. This endpoint is not a trading endpoint and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-market-liquidity", "parameters": [ { - "description": "Pizza Hut's store number, from /pizzahut/stores", - "in": "query", - "name": "store_number", + "description": "Polymarket market id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "040937" + "x-example": "558934" } ], "produces": [ @@ -339681,7 +375807,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pizzahut.storeResponseDoc" + "$ref": "#/definitions/polymarket.marketLiquidityResponseDoc" } }, "400": { @@ -339714,103 +375840,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Pizza Hut restaurant by its store number", + "summary": "Get Polymarket market liquidity", "tags": [ - "Pizza Hut" + "Polymarket" ] } }, - "/pizzahut/stores": { + "/polymarket/market/{id}/tags": { "get": { "consumes": [ "application/json" ], - "description": "Returns Pizza Hut 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 /pizzahut/menu and /pizzahut/store take), full address with coordinates, phone, whether it currently accepts online orders, and its timezone.", - "operationId": "pizzahut-stores", + "description": "Returns normalized tag rows attached to one Polymarket market id.", + "operationId": "polymarket-market-tags", "parameters": [ { - "description": "Exact store number", - "in": "query", - "name": "store_number", - "type": "string", - "x-example": "040937" - }, - { - "description": "Restaurant city", - "in": "query", - "name": "city", - "type": "string", - "x-example": "New York" - }, - { - "description": "Restaurant state, two-letter code", - "in": "query", - "name": "state", - "type": "string", - "x-example": "NY" - }, - { - "description": "Restaurant postal code", - "in": "query", - "name": "postal_code", - "type": "string", - "x-example": "10019" - }, - { - "description": "Restaurant name, partial match", - "in": "query", - "name": "name", - "type": "string", - "x-example": "040937" - }, - { - "description": "Exact franchise/operator code", - "in": "query", - "name": "franchise_code", - "type": "string" - }, - { - "description": "Restrict to restaurants Pizza Hut's own storefront marks customer-facing. Unfiltered (upstream default) unless set -- passing true returns zero results for every region tested during research, so it is not defaulted on", - "in": "query", - "name": "appear_in_store_results", - "type": "boolean", - "x-example": false - }, - { - "description": "Restrict to restaurants currently accepting (true) or not accepting (false) online orders. Unfiltered (upstream default) unless set", - "in": "query", - "name": "accepting_online_orders", - "type": "boolean", - "x-example": true - }, - { - "description": "Set true to include archived/closed restaurant records, which the upstream default (unset) already excludes. Set false to make that exclusion explicit", - "in": "query", - "name": "is_archived", - "type": "boolean", - "x-example": false - }, - { - "description": "Sort order", - "enum": [ - "store_number_asc", - "store_number_desc", - "name_asc", - "name_desc", - "franchise_code_asc", - "franchise_code_desc" - ], - "in": "query", - "name": "sort", + "description": "Polymarket market id", + "in": "path", + "name": "id", + "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": "558934" } ], "produces": [ @@ -339820,7 +375870,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pizzahut.storesResponseDoc" + "$ref": "#/definitions/polymarket.tagsResponseDoc" } }, "400": { @@ -339847,39 +375897,69 @@ "ApiKeyAuth": [] } ], - "summary": "Search Pizza Hut restaurants by city, state, postal code, name, franchise code, or store number", + "summary": "List tags for a Polymarket market", "tags": [ - "Pizza Hut" + "Polymarket" ] } }, - "/playstation/browse": { + "/polymarket/markets": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of the PlayStation Store \"all games\" grid with per-item price, platforms, and media, plus the available filter facets (price, genre, platform, subscription, content type, etc.) with value counts. Pass page to advance; next_page is set when more results exist. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-browse", + "description": "Returns normalized market rows from Polymarket's credential-free public Gamma markets JSON.", + "operationId": "polymarket-markets", "parameters": [ { - "default": 1, - "description": "1-based page number", + "description": "Maximum markets, defaults to 25 and supports up to 100", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 25 }, { - "default": "us", - "description": "Store country code (ISO, selects currency)", + "description": "Result offset, defaults to 0 and supports up to 10000", "in": "query", - "name": "cc", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "default": "volume24hr", + "description": "Sort field", + "enum": [ + "volume24hr", + "volume", + "liquidity", + "endDate", + "updatedAt", + "createdAt", + "id", + "slug", + "title", + "question", + "label" + ], + "in": "query", + "name": "order", "type": "string" }, { - "default": "en", - "description": "Language code", + "default": false, + "description": "Sort ascending when true", "in": "query", - "name": "l", + "name": "ascending", + "type": "boolean" + }, + { + "description": "Closed filter", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "closed", "type": "string" } ], @@ -339890,7 +375970,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.gridResponseDoc" + "$ref": "#/definitions/polymarket.marketsResponseDoc" } }, "400": { @@ -339899,6 +375979,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -339911,47 +375997,79 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the PlayStation Store all-games grid", + "summary": "List Polymarket markets", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/playstation/category": { + "/polymarket/predictions": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a specific PlayStation Store category grid (by category UUID) with per-item price, platforms, and media, plus the available filter facets with value counts. Pass page to advance; next_page is set when more results exist. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-category", + "description": "Returns normalized event rows for the Polymarket `/predictions` page using credential-free Gamma `events/keyset` JSON. The `status` enum accepts `active`, `resolved`, and `all`; the `sort` enum accepts `competitive`, `volume`, `volume_24hr`, `ending_soon`, `liquidity`, `newest`, and `closed_time`; the `recurrence` enum accepts `hourly`, `daily`, `weekly`, `monthly`, and `yearly`.", + "operationId": "polymarket-predictions", "parameters": [ { - "description": "Category UUID", + "default": "active", + "description": "Prediction status", + "enum": [ + "active", + "resolved", + "all" + ], "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "e7d3a34c-9a4a-4a94-a0d1-e42c94d0a3fb" + "name": "status", + "type": "string" }, { - "default": 1, - "description": "1-based page number", + "default": "competitive", + "description": "Prediction sort", + "enum": [ + "competitive", + "volume", + "volume_24hr", + "ending_soon", + "liquidity", + "newest", + "closed_time" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "sort", + "type": "string" }, { - "default": "us", - "description": "Store country code (ISO, selects currency)", + "description": "Optional tag slug", "in": "query", - "name": "cc", + "name": "tag", + "type": "string", + "x-example": "politics" + }, + { + "description": "Optional recurrence filter", + "enum": [ + "hourly", + "daily", + "weekly", + "monthly", + "yearly" + ], + "in": "query", + "name": "recurrence", "type": "string" }, { - "default": "en", - "description": "Language code", + "description": "Maximum events, defaults to 20 and supports up to 100", "in": "query", - "name": "l", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Optional keyset cursor from a prior predictions response", + "in": "query", + "name": "cursor", "type": "string" } ], @@ -339962,7 +376080,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.gridResponseDoc" + "$ref": "#/definitions/polymarket.predictionsResponseDoc" } }, "400": { @@ -339971,8 +376089,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -339989,41 +376107,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a PlayStation Store category grid", + "summary": "List Polymarket predictions", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/playstation/concept": { + "/polymarket/rewards/market/{condition_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized store metadata for a PlayStation concept: title, publisher, release date, platforms, genres, description, content rating, aggregate star rating, the default product's purchase price, media, and the full lists of purchasable editions and add-ons. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-concept", + "description": "Returns one public rewards-market row from Polymarket CLOB rewards JSON by market condition id.", + "operationId": "polymarket-rewards-market", "parameters": [ { - "description": "Numeric PlayStation concept id", - "in": "query", - "name": "id", + "description": "Polymarket market condition id", + "in": "path", + "name": "condition_id", "required": true, "type": "string", - "x-example": "10000237" - }, - { - "default": "us", - "description": "Store country code (ISO, selects currency)", - "in": "query", - "name": "cc", - "type": "string" - }, - { - "default": "en", - "description": "Language code", - "in": "query", - "name": "l", - "type": "string" + "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" } ], "produces": [ @@ -340033,7 +376137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.conceptResponseDoc" + "$ref": "#/definitions/polymarket.rewardsMarketResponseDoc" } }, "400": { @@ -340048,6 +376152,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -340060,79 +376170,92 @@ "ApiKeyAuth": [] } ], - "summary": "Get PlayStation Store details for a concept (game hub)", + "summary": "Get Polymarket rewards market", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/playstation/concept/reviews": { + "/polymarket/rewards/markets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of written PlayStation Store reviews for a concept (game hub), each with its title, body, rating, helpful count, spoiler flag, the edition the reviewer owned, and reviewer identity (online id, PS Plus subscriber status, verified-purchase status, avatar). Also includes the concept's aggregate star rating (including its rating distribution). page/page_size page through the full review list (total_count reports the true upstream review count, has_next_page whether a later page has more), sort controls ordering, and rating optionally filters to one star value. Reviews are region-scoped: cc selects the store region whose reviews are returned (and the price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-concept-reviews", + "description": "Returns normalized public rewards-market rows used by Polymarket's `/rewards` page. The `order_by` enum accepts `market`, `earnings`, `max_spread`, `min_size`, `rate_per_day`, `price`, `earning_percentage`, and `spread`; the `position` enum accepts `asc` and `desc`; the `tag_slug` enum accepts `all`, `politics`, `sports`, `crypto`, `pop-culture`, `middle-east`, `business`, and `science`.", + "operationId": "polymarket-rewards-markets", "parameters": [ { - "description": "Numeric PlayStation concept id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "10002456" - }, - { - "default": "us", - "description": "Store country code (ISO)", + "default": "market", + "description": "Rewards market sort", + "enum": [ + "market", + "earnings", + "max_spread", + "min_size", + "rate_per_day", + "price", + "earning_percentage", + "spread" + ], "in": "query", - "name": "cc", + "name": "order_by", "type": "string" }, { - "default": "en", - "description": "Language code", + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "l", + "name": "position", "type": "string" }, { - "default": 1, - "description": "1-based page number", + "description": "Reward program date in YYYY-MM-DD format; defaults to today in UTC", "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "date", + "type": "string", + "x-example": "2026-06-07" }, { - "default": 10, - "description": "Reviews per page", + "description": "Optional market question search text", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page_size", - "type": "integer" + "name": "q", + "type": "string", + "x-example": "bitcoin" }, { - "default": "latest", - "description": "Sort order", + "default": "all", + "description": "Rewards category", "enum": [ - "latest", - "oldest", - "helpful" + "all", + "politics", + "sports", + "crypto", + "pop-culture", + "middle-east", + "business", + "science" ], "in": "query", - "name": "sort", + "name": "tag_slug", "type": "string" }, { - "description": "Filter to one star rating (1-5)", + "description": "Optional rewards cursor from a prior response; defaults to MA==", "in": "query", - "maximum": 5, - "minimum": 1, - "name": "rating", - "type": "integer" + "name": "cursor", + "type": "string", + "x-example": "MA==" + }, + { + "description": "Maximum rows, defaults to 100 and supports up to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -340142,7 +376265,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.conceptReviewsResponseDoc" + "$ref": "#/definitions/polymarket.rewardsMarketsResponseDoc" } }, "400": { @@ -340151,8 +376274,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -340169,33 +376292,81 @@ "ApiKeyAuth": [] } ], - "summary": "Get PlayStation concept reviews", + "summary": "List Polymarket rewards markets", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/playstation/deals": { + "/polymarket/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the PlayStation Store deals landing page as a list of merchandising shelves (sections), each with its titles and per-item price, plus a flattened, de-duplicated item list across all shelves. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-deals", + "description": "Searches Polymarket's credential-free public search JSON and returns normalized event results. The `status` enum accepts `open`, `closed`, and `all`; the `sort` enum accepts `relevance`, `volume24hr`, `volume`, `liquidity`, and `endDate`.", + "operationId": "polymarket-search", "parameters": [ { - "default": "us", - "description": "Store country code (ISO, selects currency)", + "description": "Search query", "in": "query", - "name": "cc", + "name": "q", + "required": true, + "type": "string", + "x-example": "bitcoin" + }, + { + "description": "Maximum events, defaults to 10 and supports up to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "default": "open", + "description": "Event status filter", + "enum": [ + "open", + "closed", + "all" + ], + "in": "query", + "name": "status", "type": "string" }, { - "default": "en", - "description": "Language code", + "default": "relevance", + "description": "Search sort", + "enum": [ + "relevance", + "volume24hr", + "volume", + "liquidity", + "endDate" + ], "in": "query", - "name": "l", + "name": "sort", "type": "string" + }, + { + "default": false, + "description": "Sort ascending when true", + "in": "query", + "name": "ascending", + "type": "boolean" + }, + { + "default": false, + "description": "Include matching tags", + "in": "query", + "name": "include_tags", + "type": "boolean" + }, + { + "default": false, + "description": "Include matching profiles", + "in": "query", + "name": "include_profiles", + "type": "boolean" } ], "produces": [ @@ -340205,7 +376376,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.merchResponseDoc" + "$ref": "#/definitions/polymarket.searchResponseDoc" } }, "400": { @@ -340214,59 +376385,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get PlayStation Store deals shelves", - "tags": [ - "PlayStation" - ] - } - }, - "/playstation/latest": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the PlayStation Store latest-releases landing page as a list of merchandising shelves (sections), each with its titles and per-item price, plus a flattened, de-duplicated item list across all shelves. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-latest", - "parameters": [ - { - "default": "us", - "description": "Store country code (ISO, selects currency)", - "in": "query", - "name": "cc", - "type": "string" - }, - { - "default": "en", - "description": "Language code", - "in": "query", - "name": "l", - "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/playstation.merchResponseDoc" - } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -340283,43 +376409,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get PlayStation Store latest-release shelves", + "summary": "Search Polymarket events", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/playstation/page": { + "/polymarket/sports": { "get": { "consumes": [ "application/json" ], - "description": "Reads any PlayStation Store merchandising page by alias (e.g. collections, subscriptions, or a promotional alias) and returns its shelves (sections) plus the curated collection links found on the page. Each collection link carries a category_id (UUID) you can pass to /playstation/category to fetch that collection's full, paginated title grid — the credential-free way to browse themed/curated selections. Known aliases: collections, subscriptions, deals, latest. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-page", - "parameters": [ - { - "description": "Merchandising page alias", - "in": "query", - "name": "alias", - "required": true, - "type": "string", - "x-example": "collections" - }, - { - "default": "us", - "description": "Store country code (ISO, selects currency)", - "in": "query", - "name": "cc", - "type": "string" - }, - { - "default": "en", - "description": "Language code", - "in": "query", - "name": "l", - "type": "string" - } - ], + "description": "Returns public sports reference data from Polymarket Gamma.", + "operationId": "polymarket-sports", "produces": [ "application/json" ], @@ -340327,11 +376429,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.merchResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -340348,41 +376456,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PlayStation Store merchandising page by alias", + "summary": "Polymarket sports", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/playstation/product": { + "/polymarket/sports/by-partner": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized store metadata for a single PlayStation product/edition: title, np title id, parent concept id, product type and store classification, edition name, publisher, release date, platforms, genres, spoken/screen languages, content rating, aggregate star rating, purchase price, and media. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-product", + "description": "Returns public sports reference data from Polymarket Gamma filtered by partner identifiers.", + "operationId": "polymarket-sports-by-partner", "parameters": [ { - "description": "PlayStation product id", + "description": "Partner name", "in": "query", - "name": "id", - "required": true, + "name": "partner", "type": "string", - "x-example": "UP0001-PPSA01491_00-GAME000000000000" - }, - { - "default": "us", - "description": "Store country code (ISO, selects currency)", - "in": "query", - "name": "cc", - "type": "string" + "x-example": "nba" }, { - "default": "en", - "description": "Language code", + "description": "Partner external id", "in": "query", - "name": "l", - "type": "string" + "name": "external_id", + "type": "string", + "x-example": "123" } ], "produces": [ @@ -340392,7 +376492,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.productResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -340401,8 +376501,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -340419,57 +376519,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get PlayStation Store details for a single product", + "summary": "Polymarket sports by partner", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/playstation/search": { + "/polymarket/sports/market-types": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of PlayStation Store search results (concepts and products) for a term, with pagination and per-item price, platforms, classification, and media. Pass page to advance; next_page is set when more results exist. cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-search", - "parameters": [ - { - "description": "Search term", - "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "god of war" - }, - { - "default": 1, - "description": "1-based page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 24, - "description": "Results per page (max 48)", - "in": "query", - "name": "page_size", - "type": "integer" - }, - { - "default": "us", - "description": "Store country code (ISO, selects currency)", - "in": "query", - "name": "cc", - "type": "string" - }, - { - "default": "en", - "description": "Language code", - "in": "query", - "name": "l", - "type": "string" - } - ], + "description": "Returns public sports market type reference data from Polymarket Gamma.", + "operationId": "polymarket-sports-market-types", "produces": [ "application/json" ], @@ -340477,7 +376539,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.searchResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -340486,6 +376548,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -340498,50 +376566,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search the PlayStation Store", + "summary": "Polymarket sports market types", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/playstation/suggest": { + "/polymarket/sports/summary": { "get": { "consumes": [ "application/json" ], - "description": "Returns typeahead-style PlayStation Store search suggestions for a partial or full term: id, name, classification, platforms, publisher, release date, price, a representative image, and a direct store URL per match. Matching is upstream-ordered and loose (it may include titles that only loosely relate to the term), not a ranked exact-substring search. limit caps how many suggestions are returned (max 20; the upstream API does not honor a higher value). cc selects the store region (and price currency); l accepts a language code or locale such as en or en-US, with the locale's primary language used for text. Credential-free public PlayStation Store data.", - "operationId": "playstation-suggest", - "parameters": [ - { - "description": "Search term (partial or full)", - "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "god of war" - }, - { - "default": 5, - "description": "Maximum number of suggestions to return (max 20)", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "default": "us", - "description": "Store country code (ISO, selects currency)", - "in": "query", - "name": "cc", - "type": "string" - }, - { - "default": "en", - "description": "Language code", - "in": "query", - "name": "l", - "type": "string" - } - ], + "description": "Returns public sports summary data from Polymarket Gamma.", + "operationId": "polymarket-sports-summary", "produces": [ "application/json" ], @@ -340549,7 +376586,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/playstation.suggestResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -340558,6 +376595,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -340570,24 +376613,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get PlayStation Store search suggestions for a term", + "summary": "Polymarket sports summary", "tags": [ - "PlayStation" + "Polymarket" ] } }, - "/politico/article": { + "/polymarket/sports/{id}": { "get": { - "description": "Returns a public Politico article's metadata and full body paragraphs from a canonical article URL.", - "operationId": "politico-article", + "consumes": [ + "application/json" + ], + "description": "Returns public sport detail data from Polymarket Gamma.", + "operationId": "polymarket-sport", "parameters": [ { - "description": "Canonical www.politico.com article URL", - "in": "query", - "name": "url", + "description": "Polymarket sport id", + "in": "path", + "name": "id", "required": true, - "type": "string", - "x-example": "https://www.politico.com/news/2026/09/18/congress-f-35-china-investigation-01083647" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -340597,7 +376643,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/politico.articleResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -340630,30 +376676,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Politico article content", + "summary": "Polymarket sport detail", "tags": [ - "Politico" + "Polymarket" ] } }, - "/politico/author": { + "/polymarket/sports/{id}/external-partners": { "get": { - "description": "Returns one Politico staff author's public profile: name, job title, bio, headshot, and their most recent bylined articles. Politico staff pages expose a fixed-size recent-articles list with no pagination.", - "operationId": "politico-author", + "consumes": [ + "application/json" + ], + "description": "Returns public external partner data for one sport from Polymarket Gamma.", + "operationId": "polymarket-sport-external-partners", "parameters": [ { - "description": "Politico staff slug, e.g. mark-satter", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "mark-satter" - }, - { - "description": "Canonical www.politico.com/staff/ URL, as an alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.politico.com/staff/mark-satter" + "description": "Polymarket sport id", + "in": "path", + "name": "id", + "required": true, + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -340663,7 +376706,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/politico.authorResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -340696,16 +376739,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Politico staff author profile", + "summary": "Polymarket sport external partners", "tags": [ - "Politico" + "Polymarket" ] } }, - "/politico/categories": { + "/polymarket/sports/{id}/external-partners/{partner_ref}": { "get": { - "description": "Returns Politico's full public section navigation tree, grouped the same way the site's own nav menu groups it. Use a section's slug directly as the topic parameter on politico-topic.", - "operationId": "politico-categories", + "consumes": [ + "application/json" + ], + "description": "Returns public external partner data for one sport partner reference from Polymarket Gamma.", + "operationId": "polymarket-sport-external-partner", + "parameters": [ + { + "description": "Polymarket sport id", + "in": "path", + "name": "id", + "required": true, + "type": "integer", + "x-example": 1 + }, + { + "description": "Partner reference", + "in": "path", + "name": "partner_ref", + "required": true, + "type": "string", + "x-example": "nba" + } + ], "produces": [ "application/json" ], @@ -340713,7 +376777,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/politico.categoriesResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -340734,16 +376810,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Politico section navigation", + "summary": "Polymarket sport external partner", "tags": [ - "Politico" + "Polymarket" ] } }, - "/politico/headlines": { + "/polymarket/spotlights": { "get": { - "description": "Returns fresh headlines from Politico's public, site-wide RSS feed.", - "operationId": "politico-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns public spotlight data from Polymarket Gamma.", + "operationId": "polymarket-spotlights", "produces": [ "application/json" ], @@ -340751,7 +376830,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/politico.headlinesResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -340772,24 +376857,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get Politico site-wide headlines", + "summary": "Polymarket spotlights", "tags": [ - "Politico" + "Polymarket" ] } }, - "/politico/topic": { + "/polymarket/spotlights/keyset": { "get": { - "description": "Returns the newest public Politico stories on one section archive page. topic is a section slug -- see politico-categories for the full known value space.", - "operationId": "politico-topic", + "consumes": [ + "application/json" + ], + "description": "Returns public spotlight keyset data from Polymarket Gamma.", + "operationId": "polymarket-spotlights-keyset", "parameters": [ { - "description": "Politico section slug", + "description": "Rows to return", "in": "query", - "name": "topic", - "required": true, + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Optional upstream sort field", + "in": "query", + "name": "order", "type": "string", - "x-example": "congress-news-updates-analysis" + "x-example": "createdAt" + }, + { + "default": false, + "description": "Sort ascending when true", + "in": "query", + "name": "ascending", + "type": "boolean" + }, + { + "description": "Optional upstream cursor", + "in": "query", + "name": "after_cursor", + "type": "string" } ], "produces": [ @@ -340799,7 +376913,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/politico.topicResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -340808,12 +376922,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -340832,24 +376940,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Politico section archive", + "summary": "Polymarket spotlight keyset", "tags": [ - "Politico" + "Polymarket" ] } }, - "/polygon/article": { + "/polymarket/spotlights/{slug}": { "get": { - "description": "Returns public Polygon article metadata and body paragraphs from a canonical article URL.", - "operationId": "polygon-article", + "consumes": [ + "application/json" + ], + "description": "Returns public spotlight detail data from Polymarket Gamma.", + "operationId": "polymarket-spotlight", "parameters": [ { - "description": "Canonical Polygon article URL", - "in": "query", - "name": "url", + "description": "Spotlight slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.polygon.com/best-marvel-video-games-ever/" + "x-example": "nfl-draft" } ], "produces": [ @@ -340859,7 +376970,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -340874,6 +376985,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -340886,26 +377003,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polygon article content", + "summary": "Polymarket spotlight detail", "tags": [ - "Polygon" + "Polymarket" ] } }, - "/polygon/author": { + "/polymarket/status": { "get": { - "description": "Returns a Polygon author's byline metadata, biography, social links, and recent articles from a canonical author URL.", - "operationId": "polygon-author", - "parameters": [ - { - "description": "Canonical Polygon author URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.polygon.com/author/venter-jason/" - } + "consumes": [ + "application/json" ], + "description": "Returns public Polymarket Gamma status data.", + "operationId": "polymarket-status", "produces": [ "application/json" ], @@ -340913,7 +377023,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.polygonAuthorResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -340922,8 +377032,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -340940,40 +377050,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Polygon author profile", + "summary": "Polymarket status", "tags": [ - "Polygon" + "Polymarket" ] } }, - "/polygon/headlines": { + "/polymarket/tag/slug/{slug}": { "get": { - "description": "Returns fresh headlines from one public Polygon RSS section.", - "operationId": "polygon-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one normalized Polymarket tag from credential-free public Gamma tag JSON.", + "operationId": "polymarket-tag-by-slug", "parameters": [ { - "description": "Polygon RSS section slug", - "enum": [ - "gaming-news", - "gaming-reviews", - "gaming-previews", - "gaming-features", - "entertainment-news", - "movie-tv-reviews", - "entertainment-features", - "anime", - "horror", - "sci-fi", - "fantasy", - "what-to-play", - "what-to-watch", - "guides", - "videos" - ], - "in": "query", - "name": "section", + "description": "Polymarket tag slug", + "in": "path", + "name": "slug", "required": true, - "type": "string" + "type": "string", + "x-example": "crypto" + }, + { + "description": "Optional upstream locale", + "in": "query", + "name": "locale", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -340983,7 +377087,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/polymarket.tagResponseDoc" } }, "400": { @@ -340992,6 +377096,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": { @@ -341004,16 +377120,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polygon section headlines", + "summary": "Get a Polymarket tag by slug", "tags": [ - "Polygon" + "Polymarket" ] } }, - "/polygon/news": { + "/polymarket/tag/slug/{slug}/related-tags": { "get": { - "description": "Returns fresh Polygon top stories from its public RSS feed.", - "operationId": "polygon-news", + "consumes": [ + "application/json" + ], + "description": "Returns normalized related tag rows from Polymarket's credential-free public Gamma related-tags JSON.", + "operationId": "polymarket-related-tags-by-slug", + "parameters": [ + { + "description": "Polymarket tag slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "crypto" + }, + { + "description": "Omit empty related tags", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "omit_empty", + "type": "string" + }, + { + "description": "Optional upstream status filter", + "in": "query", + "name": "status", + "type": "string", + "x-example": "active" + }, + { + "description": "Optional upstream locale", + "in": "query", + "name": "locale", + "type": "string", + "x-example": "en" + } + ], "produces": [ "application/json" ], @@ -341021,7 +377174,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/polymarket.tagsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -341042,110 +377201,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polygon top stories", - "tags": [ - "Polygon" - ] - } - }, - "/polygon/sections": { - "get": { - "description": "Returns the public Polygon RSS section inventory used by the headlines endpoint.", - "operationId": "polygon-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Polygon RSS sections", + "summary": "Get related Polymarket tags by slug", "tags": [ - "Polygon" + "Polymarket" ] } }, - "/polymarket/activity/trades": { + "/polymarket/tag/slug/{slug}/related-tags/tags": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public trade rows used by Polymarket's `/activity` page from credential-free Data API trades JSON. The `taker_only` enum accepts `true` and `false`; the `filter_type` enum accepts `CASH`; the `filter_amount` enum accepts `1`, `5`, `10`, `100`, `1000`, `10000`, and `100000`.", - "operationId": "polymarket-activity-trades", + "description": "Returns normalized related tag rows from Polymarket's credential-free public Gamma related-tags/tags JSON.", + "operationId": "polymarket-related-tag-rows-by-slug", "parameters": [ { - "description": "Maximum trades, defaults to 50 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - }, - { - "description": "Result offset, defaults to 0 and supports up to 10000", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "description": "Polymarket tag slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "crypto" }, { - "default": "true", - "description": "Taker-only filter", + "description": "Omit empty related tags", "enum": [ "true", "false" ], "in": "query", - "name": "taker_only", - "type": "string" - }, - { - "default": "CASH", - "description": "Activity amount filter type", - "enum": [ - "CASH" - ], - "in": "query", - "name": "filter_type", - "type": "string" - }, - { - "default": "1", - "description": "Minimum filtered amount", - "enum": [ - "1", - "5", - "10", - "100", - "1000", - "10000", - "100000" - ], - "in": "query", - "name": "filter_amount", + "name": "omit_empty", "type": "string" }, { - "description": "Optional Polymarket event id", + "description": "Optional upstream status filter", "in": "query", - "name": "event_id", + "name": "status", "type": "string", - "x-example": "101772" + "x-example": "active" }, { - "description": "Optional market condition id", + "description": "Optional upstream locale", "in": "query", - "name": "market", + "name": "locale", "type": "string", - "x-example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b" + "x-example": "en" } ], "produces": [ @@ -341155,7 +377255,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.activityTradesResponseDoc" + "$ref": "#/definitions/polymarket.tagsResponseDoc" } }, "400": { @@ -341182,27 +377282,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket activity trades", + "summary": "Get related Polymarket tag rows by slug", "tags": [ "Polymarket" ] } }, - "/polymarket/clob/market/{condition_id}": { + "/polymarket/tag/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one public CLOB market detail row by market condition id, including tokens, reward settings, order acceptance state, tags, and fees.", - "operationId": "polymarket-clob-market", + "description": "Returns one normalized Polymarket tag from credential-free public Gamma tag JSON.", + "operationId": "polymarket-tag", "parameters": [ { - "description": "Polymarket market condition id", + "description": "Polymarket tag id", "in": "path", - "name": "condition_id", + "name": "id", "required": true, "type": "string", - "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" + "x-example": "21" + }, + { + "default": false, + "description": "Include upstream template data when supported", + "in": "query", + "name": "include_template", + "type": "boolean" + }, + { + "description": "Optional upstream locale", + "in": "query", + "name": "locale", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -341212,7 +377326,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.clobMarketResponseDoc" + "$ref": "#/definitions/polymarket.tagResponseDoc" } }, "400": { @@ -341245,32 +377359,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket CLOB market", + "summary": "Get a Polymarket tag by id", "tags": [ "Polymarket" ] } }, - "/polymarket/dashboards/macro": { + "/polymarket/tag/{id}/related-tags": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized macroeconomic event rows for Polymarket's `/dashboards/macro` page using credential-free Gamma `events/keyset` JSON with the `macro` tag.", - "operationId": "polymarket-dashboard-macro", + "description": "Returns normalized related tag rows from Polymarket's credential-free public Gamma related-tags JSON.", + "operationId": "polymarket-related-tags", "parameters": [ { - "description": "Maximum macro events, defaults to 20 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "description": "Polymarket tag id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "21" }, { - "description": "Optional keyset cursor from a prior macro dashboard response", + "description": "Omit empty related tags", + "enum": [ + "true", + "false" + ], "in": "query", - "name": "cursor", + "name": "omit_empty", "type": "string" + }, + { + "description": "Optional upstream status filter", + "in": "query", + "name": "status", + "type": "string", + "x-example": "active" + }, + { + "description": "Optional upstream locale", + "in": "query", + "name": "locale", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -341280,7 +377413,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.macroDashboardResponseDoc" + "$ref": "#/definitions/polymarket.tagsResponseDoc" } }, "400": { @@ -341307,61 +377440,51 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket macro dashboard events", + "summary": "Get related Polymarket tags by id", "tags": [ "Polymarket" ] } }, - "/polymarket/data/followers/{address}": { + "/polymarket/tag/{id}/related-tags/tags": { "get": { "consumes": [ "application/json" ], - "description": "Returns public follower rows for one Polymarket address from Gamma v1 data JSON.", - "operationId": "polymarket-data-followers", + "description": "Returns normalized related tag rows from Polymarket's credential-free public Gamma related-tags/tags JSON.", + "operationId": "polymarket-related-tag-rows", "parameters": [ { - "description": "Wallet address", + "description": "Polymarket tag id", "in": "path", - "name": "address", + "name": "id", "required": true, "type": "string", - "x-example": "0x0000000000000000000000000000000000000000" - }, - { - "description": "Rows to return", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "x-example": "21" }, { - "description": "Result offset", + "description": "Omit empty related tags", + "enum": [ + "true", + "false" + ], "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "omit_empty", + "type": "string" }, { - "description": "Optional upstream sort field", + "description": "Optional upstream status filter", "in": "query", - "name": "order", + "name": "status", "type": "string", - "x-example": "createdAt" - }, - { - "default": false, - "description": "Sort ascending when true", - "in": "query", - "name": "ascending", - "type": "boolean" + "x-example": "active" }, { - "description": "Optional upstream cursor", + "description": "Optional upstream locale", "in": "query", - "name": "after_cursor", - "type": "string" + "name": "locale", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -341371,7 +377494,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/polymarket.tagsResponseDoc" } }, "400": { @@ -341398,61 +377521,70 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket data followers", + "summary": "Get related Polymarket tag rows by id", "tags": [ "Polymarket" ] } }, - "/polymarket/data/following/{address}": { + "/polymarket/tags": { "get": { "consumes": [ "application/json" ], - "description": "Returns public following rows for one Polymarket address from Gamma v1 data JSON.", - "operationId": "polymarket-data-following", + "description": "Returns normalized tag rows from Polymarket's credential-free public Gamma tags JSON.", + "operationId": "polymarket-tags", "parameters": [ { - "description": "Wallet address", - "in": "path", - "name": "address", - "required": true, - "type": "string", - "x-example": "0x0000000000000000000000000000000000000000" - }, - { - "description": "Rows to return", + "description": "Maximum tags, defaults to 25 and supports up to 100", "in": "query", "name": "limit", "type": "integer", "x-example": 25 }, { - "description": "Result offset", + "description": "Result offset, defaults to 0 and supports up to 10000", "in": "query", "name": "offset", "type": "integer", "x-example": 0 }, { - "description": "Optional upstream sort field", + "default": "label", + "description": "Sort field", + "enum": [ + "volume24hr", + "volume", + "liquidity", + "endDate", + "updatedAt", + "createdAt", + "id", + "slug", + "title", + "question", + "label" + ], "in": "query", "name": "order", - "type": "string", - "x-example": "createdAt" + "type": "string" }, { - "default": false, - "description": "Sort ascending when true", + "description": "Sort ascending flag", + "enum": [ + "true", + "false" + ], "in": "query", "name": "ascending", - "type": "boolean" + "type": "string" }, { - "description": "Optional upstream cursor", + "description": "Optional upstream locale", "in": "query", - "name": "after_cursor", - "type": "string" + "name": "locale", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -341462,7 +377594,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/polymarket.tagsResponseDoc" } }, "400": { @@ -341489,27 +377621,74 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket data following", + "summary": "List Polymarket tags", "tags": [ "Polymarket" ] } }, - "/polymarket/data/follows/counts/{address}": { + "/polymarket/teams": { "get": { "consumes": [ "application/json" ], - "description": "Returns public follower and following counts for one Polymarket address from Gamma v1 data JSON.", - "operationId": "polymarket-data-follows-counts", + "description": "Returns public team reference data from Polymarket Gamma.", + "operationId": "polymarket-teams", "parameters": [ { - "description": "Wallet address", - "in": "path", - "name": "address", - "required": true, + "description": "Optional league filter", + "in": "query", + "name": "league", "type": "string", - "x-example": "0x0000000000000000000000000000000000000000" + "x-example": "NBA" + }, + { + "description": "Optional team name filter", + "in": "query", + "name": "name", + "type": "string", + "x-example": "Knicks" + }, + { + "description": "Optional abbreviation filter", + "in": "query", + "name": "abbreviation", + "type": "string", + "x-example": "NYK" + }, + { + "description": "Optional provider id filter", + "in": "query", + "name": "provider_id", + "type": "string" + }, + { + "description": "Rows to return", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Optional upstream sort field", + "in": "query", + "name": "order", + "type": "string", + "x-example": "name" + }, + { + "default": false, + "description": "Sort ascending when true", + "in": "query", + "name": "ascending", + "type": "boolean" } ], "produces": [ @@ -341546,27 +377725,33 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket data follow counts", + "summary": "Polymarket teams", "tags": [ "Polymarket" ] } }, - "/polymarket/event/id/{id}": { + "/polymarket/teams/by-partner": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized Polymarket event from credential-free public Gamma event JSON. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-event-detail-by-id", + "description": "Returns public team reference data from Polymarket Gamma filtered by partner identifiers.", + "operationId": "polymarket-teams-by-partner", "parameters": [ { - "description": "Polymarket event id", - "in": "path", - "name": "id", - "required": true, + "description": "Partner name", + "in": "query", + "name": "partner", "type": "string", - "x-example": "30615" + "x-example": "nba" + }, + { + "description": "Partner external id", + "in": "query", + "name": "external_id", + "type": "string", + "x-example": "123" } ], "produces": [ @@ -341576,7 +377761,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.eventDetailResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -341585,12 +377770,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -341609,78 +377788,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket event detail by id", + "summary": "Polymarket teams by partner", "tags": [ "Polymarket" ] } }, - "/polymarket/event/id/{id}/activity": { + "/polymarket/teams/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public trade rows for one Polymarket event from credential-free Data API trades JSON. The `taker_only` enum accepts `true` and `false`; the `filter_type` enum accepts `CASH`; the `filter_amount` enum accepts `1`, `5`, `10`, `100`, `1000`, `10000`, and `100000`. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-event-activity-by-id", + "description": "Returns public team detail data from Polymarket Gamma.", + "operationId": "polymarket-team", "parameters": [ { - "description": "Polymarket event id", + "description": "Polymarket team id", "in": "path", "name": "id", "required": true, - "type": "string", - "x-example": "30615" - }, - { - "description": "Maximum trades, defaults to 50 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - }, - { - "description": "Result offset, defaults to 0 and supports up to 10000", - "in": "query", - "name": "offset", "type": "integer", - "x-example": 0 - }, - { - "default": "true", - "description": "Accepted for compatibility with the global activity contract; scoped upstream requests are filtered by event id", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "taker_only", - "type": "string" - }, - { - "default": "CASH", - "description": "Activity amount filter type", - "enum": [ - "CASH" - ], - "in": "query", - "name": "filter_type", - "type": "string" - }, - { - "default": "1", - "description": "Minimum filtered amount", - "enum": [ - "1", - "5", - "10", - "100", - "1000", - "10000", - "100000" - ], - "in": "query", - "name": "filter_amount", - "type": "string" + "x-example": 3270556 } ], "produces": [ @@ -341690,7 +377818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.activityTradesResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -341723,27 +377851,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket event activity trades by id", + "summary": "Polymarket team detail", "tags": [ "Polymarket" ] } }, - "/polymarket/event/{slug}": { + "/polymarket/teams/{id}/external-partners": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized Polymarket event from credential-free public Gamma event JSON. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-event-detail", + "description": "Returns public external partner data for one team from Polymarket Gamma.", + "operationId": "polymarket-team-external-partners", "parameters": [ { - "description": "Polymarket event slug", + "description": "Polymarket team id", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "world-cup-winner" + "type": "integer", + "x-example": 3270556 } ], "produces": [ @@ -341753,7 +377881,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.eventDetailResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -341786,78 +377914,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket event detail", + "summary": "Polymarket team external partners", "tags": [ "Polymarket" ] } }, - "/polymarket/event/{slug}/activity": { + "/polymarket/teams/{id}/external-partners/{partner_ref}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public trade rows for one Polymarket event from credential-free Data API trades JSON. The `taker_only` enum accepts `true` and `false`; the `filter_type` enum accepts `CASH`; the `filter_amount` enum accepts `1`, `5`, `10`, `100`, `1000`, `10000`, and `100000`. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-event-activity", + "description": "Returns public external partner data for one team partner reference from Polymarket Gamma.", + "operationId": "polymarket-team-external-partner", "parameters": [ { - "description": "Polymarket event slug", + "description": "Polymarket team id", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "world-cup-winner" - }, - { - "description": "Maximum trades, defaults to 50 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - }, - { - "description": "Result offset, defaults to 0 and supports up to 10000", - "in": "query", - "name": "offset", "type": "integer", - "x-example": 0 - }, - { - "default": "true", - "description": "Accepted for compatibility with the global activity contract; scoped upstream requests are filtered by event id", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "taker_only", - "type": "string" - }, - { - "default": "CASH", - "description": "Activity amount filter type", - "enum": [ - "CASH" - ], - "in": "query", - "name": "filter_type", - "type": "string" - }, - { - "default": "1", - "description": "Minimum filtered amount", - "enum": [ - "1", - "5", - "10", - "100", - "1000", - "10000", - "100000" - ], - "in": "query", - "name": "filter_amount", - "type": "string" + "x-example": 3270556 + }, + { + "description": "Partner reference", + "in": "path", + "name": "partner_ref", + "required": true, + "type": "string", + "x-example": "nba" } ], "produces": [ @@ -341867,7 +377952,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.activityTradesResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -341900,70 +377985,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket event activity trades", + "summary": "Polymarket team external partner", "tags": [ "Polymarket" ] } }, - "/polymarket/events": { + "/polymarket/token/{token_id}/midpoint": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized event rows from Polymarket's credential-free public Gamma events JSON.", - "operationId": "polymarket-events", + "description": "Returns the public CLOB midpoint for one Polymarket token id.", + "operationId": "polymarket-token-midpoint", "parameters": [ { - "description": "Maximum events, defaults to 25 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 - }, - { - "description": "Result offset, defaults to 0 and supports up to 10000", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "default": "volume24hr", - "description": "Sort field", - "enum": [ - "volume24hr", - "volume", - "liquidity", - "endDate", - "updatedAt", - "createdAt", - "id", - "slug", - "title", - "question", - "label" - ], - "in": "query", - "name": "order", - "type": "string" - }, - { - "default": false, - "description": "Sort ascending when true", - "in": "query", - "name": "ascending", - "type": "boolean" - }, - { - "description": "Closed filter", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "closed", - "type": "string" + "description": "Polymarket CLOB token id", + "in": "path", + "name": "token_id", + "required": true, + "type": "string", + "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" } ], "produces": [ @@ -341973,7 +378015,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.eventsResponseDoc" + "$ref": "#/definitions/polymarket.tokenMidpointResponseDoc" } }, "400": { @@ -341982,6 +378024,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -342000,71 +378048,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket events", + "summary": "Get Polymarket token midpoint", "tags": [ "Polymarket" ] } }, - "/polymarket/events/similar": { + "/polymarket/token/{token_id}/orderbook": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized similar events from Polymarket's credential-free public Gamma events/similar JSON.", - "operationId": "polymarket-events-similar", + "description": "Returns public CLOB order-book depth for one Polymarket token id.", + "operationId": "polymarket-token-orderbook", "parameters": [ { - "description": "Polymarket event id", - "in": "query", - "name": "id", - "type": "integer", - "x-example": 30615 - }, - { - "description": "Event title", - "in": "query", - "name": "event_title", - "type": "string", - "x-example": "World Cup Winner" - }, - { - "description": "Event slug", - "in": "query", - "name": "event_slug", - "type": "string", - "x-example": "world-cup-winner" - }, - { - "description": "Market title", - "in": "query", - "name": "market_title", - "type": "string", - "x-example": "Will Spain win the 2026 FIFA World Cup?" - }, - { - "description": "Market slug", - "in": "query", - "name": "market_slug", + "description": "Polymarket CLOB token id", + "in": "path", + "name": "token_id", + "required": true, "type": "string", - "x-example": "will-spain-win-the-2026-fifa-world-cup-963" - }, - { - "description": "Maximum events, defaults to 10 and supports up to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Closed filter", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "closed", - "type": "string" + "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" } ], "produces": [ @@ -342074,7 +378078,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.similarEventsResponseDoc" + "$ref": "#/definitions/polymarket.tokenOrderBookResponseDoc" } }, "400": { @@ -342083,6 +378087,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -342101,27 +378111,38 @@ "ApiKeyAuth": [] } ], - "summary": "Find similar Polymarket events", + "summary": "Get Polymarket token order book", "tags": [ "Polymarket" ] } }, - "/polymarket/events/{id}/tags": { + "/polymarket/token/{token_id}/price": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized tag rows attached to one Polymarket event id.", - "operationId": "polymarket-event-tags", + "description": "Returns the public CLOB buy or sell price for one Polymarket token id.", + "operationId": "polymarket-token-price", "parameters": [ { - "description": "Polymarket event id", + "description": "Polymarket CLOB token id", "in": "path", - "name": "id", + "name": "token_id", "required": true, "type": "string", - "x-example": "30615" + "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" + }, + { + "default": "buy", + "description": "Order side used for the CLOB price", + "enum": [ + "buy", + "sell" + ], + "in": "query", + "name": "side", + "type": "string" } ], "produces": [ @@ -342131,7 +378152,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagsResponseDoc" + "$ref": "#/definitions/polymarket.tokenPriceResponseDoc" } }, "400": { @@ -342140,6 +378161,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -342158,36 +378185,64 @@ "ApiKeyAuth": [] } ], - "summary": "List tags for a Polymarket event", + "summary": "Get Polymarket token price", "tags": [ "Polymarket" ] } }, - "/polymarket/fee-types": { + "/polymarket/token/{token_id}/price-history": { "get": { "consumes": [ "application/json" ], - "description": "Returns public fee type data from Polymarket Gamma. This is a normalized wrapper around credential-free public JSON.", - "operationId": "polymarket-fee-types", + "description": "Returns public CLOB price-history points for one Polymarket token id.", + "operationId": "polymarket-token-price-history", "parameters": [ { - "description": "Optional upstream active filter", + "description": "Polymarket CLOB token id", + "in": "path", + "name": "token_id", + "required": true, + "type": "string", + "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" + }, + { + "default": "1d", + "description": "History interval", "enum": [ - "true", - "false" + "1m", + "1h", + "6h", + "1d", + "1w", + "all", + "max" ], "in": "query", - "name": "active", + "name": "interval", "type": "string" }, { - "description": "Optional upstream search filter", + "description": "Data point resolution in minutes; 0 uses the default 60; maximum 1440", "in": "query", - "name": "search", - "type": "string", - "x-example": "sports" + "name": "fidelity", + "type": "integer", + "x-example": 60 + }, + { + "description": "Optional Unix timestamp lower bound", + "in": "query", + "name": "start_ts", + "type": "integer", + "x-example": 1780754400 + }, + { + "description": "Optional Unix timestamp upper bound", + "in": "query", + "name": "end_ts", + "type": "integer", + "x-example": 1780840800 } ], "produces": [ @@ -342197,7 +378252,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/polymarket.tokenPriceHistoryResponseDoc" } }, "400": { @@ -342206,6 +378261,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -342224,33 +378285,27 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket fee types", + "summary": "Get Polymarket token price history", "tags": [ "Polymarket" ] } }, - "/polymarket/games": { + "/polymarket/token/{token_id}/spread": { "get": { "consumes": [ "application/json" ], - "description": "Returns public game rows from Polymarket Gamma.", - "operationId": "polymarket-games", + "description": "Returns the public CLOB spread for one Polymarket token id.", + "operationId": "polymarket-token-spread", "parameters": [ { - "description": "Optional sport filter", - "in": "query", - "name": "sport", - "type": "string", - "x-example": "basketball" - }, - { - "description": "Optional ticker filter", - "in": "query", - "name": "ticker", + "description": "Polymarket CLOB token id", + "in": "path", + "name": "token_id", + "required": true, "type": "string", - "x-example": "nba-sas-nyk-2026-06-08" + "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" } ], "produces": [ @@ -342260,7 +378315,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/polymarket.tokenSpreadResponseDoc" } }, "400": { @@ -342269,6 +378324,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -342287,57 +378348,28 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket games", + "summary": "Get Polymarket token spread", "tags": [ "Polymarket" ] } }, - "/polymarket/homepage/feed": { - "get": { + "/polymarket/tokens/midpoints": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized rows for Polymarket homepage feeds discovered from the public web app and backed by credential-free Gamma JSON. The `feed` enum accepts `trending`, `breaking`, `new`, `politics`, `sports`, `crypto`, `esports`, `iran`, `finance`, `geopolitics`, `tech`, `culture`, `economy`, `weather`, `mentions`, and `elections`. Most feeds return events from Gamma `events/keyset`; `breaking` returns high-movement market rows and `mentions` returns open event search matches.", - "operationId": "polymarket-homepage-feed", + "description": "Returns public CLOB midpoints for up to 25 Polymarket token ids. This uses credential-free public CLOB market-data JSON and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-tokens-midpoints", "parameters": [ { - "default": "trending", - "description": "Homepage feed", - "enum": [ - "trending", - "breaking", - "new", - "politics", - "sports", - "crypto", - "esports", - "iran", - "finance", - "geopolitics", - "tech", - "culture", - "economy", - "weather", - "mentions", - "elections" - ], - "in": "query", - "name": "feed", - "type": "string" - }, - { - "description": "Maximum rows, defaults to 20 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "Optional keyset cursor from a prior event feed response", - "in": "query", - "name": "cursor", - "type": "string" + "description": "Token ids request body", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/polymarket.BatchTokenMidpointsOption" + } } ], "produces": [ @@ -342347,7 +378379,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.homepageFeedResponseDoc" + "$ref": "#/definitions/polymarket.batchTokenMidpointsResponseDoc" } }, "400": { @@ -342356,6 +378388,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -342374,50 +378412,28 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket homepage feed rows", + "summary": "Get Polymarket token midpoints", "tags": [ "Polymarket" ] } }, - "/polymarket/leaderboard": { - "get": { + "/polymarket/tokens/orderbooks": { + "post": { "consumes": [ "application/json" ], - "description": "Returns normalized trader leaderboard rows from Polymarket's credential-free Data API leaderboard JSON. The `window` enum accepts `1d`, `7d`, `30d`, and `all`; the `sort_by` enum accepts `profit` and `volume`.", - "operationId": "polymarket-leaderboard", + "description": "Returns public CLOB order-book depth for up to 25 Polymarket token ids. This uses credential-free public CLOB market-data JSON and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-tokens-orderbooks", "parameters": [ { - "default": "30d", - "description": "Leaderboard time window", - "enum": [ - "1d", - "7d", - "30d", - "all" - ], - "in": "query", - "name": "window", - "type": "string" - }, - { - "default": "profit", - "description": "Leaderboard sort", - "enum": [ - "profit", - "volume" - ], - "in": "query", - "name": "sort_by", - "type": "string" - }, - { - "description": "Maximum rows, defaults to 20 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "description": "Token ids request body", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/polymarket.BatchTokenOrderBooksOption" + } } ], "produces": [ @@ -342427,7 +378443,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.leaderboardResponseDoc" + "$ref": "#/definitions/polymarket.batchTokenOrderBooksResponseDoc" } }, "400": { @@ -342436,6 +378452,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -342454,86 +378476,28 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket leaderboard rows", + "summary": "Get Polymarket token order books", "tags": [ "Polymarket" ] } }, - "/polymarket/market-clarifications": { - "get": { + "/polymarket/tokens/prices": { + "post": { "consumes": [ "application/json" ], - "description": "Returns public market clarification rows from Polymarket Gamma.", - "operationId": "polymarket-market-clarifications", + "description": "Returns public CLOB buy and sell prices for up to 25 Polymarket token ids. The `side` enum accepts `buy` and `sell`; when omitted, both sides are returned. This uses credential-free public CLOB market-data JSON and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-tokens-prices", "parameters": [ { - "description": "Optional market id filter", - "in": "query", - "name": "market_id", - "type": "string", - "x-example": "558934" - }, - { - "description": "Optional event id filter", - "in": "query", - "name": "event_id", - "type": "string", - "x-example": "30615" - }, - { - "description": "Optional upstream state filter", - "in": "query", - "name": "state", - "type": "string", - "x-example": "resolved" - }, - { - "description": "Optional upstream question id filter", - "in": "query", - "name": "question_id", - "type": "string" - }, - { - "description": "Optional transaction hash filter", - "in": "query", - "name": "tx_hash", - "type": "string" - }, - { - "description": "Rows to return", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 - }, - { - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Optional upstream sort field", - "in": "query", - "name": "order", - "type": "string", - "x-example": "createdAt" - }, - { - "default": false, - "description": "Sort ascending when true", - "in": "query", - "name": "ascending", - "type": "boolean" - }, - { - "description": "Optional upstream cursor", - "in": "query", - "name": "after_cursor", - "type": "string" + "description": "Token ids request body", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/polymarket.BatchTokenPricesOption" + } } ], "produces": [ @@ -342543,7 +378507,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/polymarket.batchTokenPricesResponseDoc" } }, "400": { @@ -342552,6 +378516,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -342570,27 +378540,28 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket market clarifications", + "summary": "Get Polymarket token prices", "tags": [ "Polymarket" ] } }, - "/polymarket/market/condition/{condition_id}": { - "get": { + "/polymarket/tokens/spreads": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one normalized Polymarket market from credential-free public Gamma market JSON by condition id. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-market-detail-by-condition", + "description": "Returns public CLOB spreads for up to 25 Polymarket token ids. This uses credential-free public CLOB market-data JSON and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", + "operationId": "polymarket-tokens-spreads", "parameters": [ { - "description": "Polymarket market condition id", - "in": "path", - "name": "condition_id", + "description": "Token ids request body", + "in": "body", + "name": "body", "required": true, - "type": "string", - "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" + "schema": { + "$ref": "#/definitions/polymarket.BatchTokenSpreadsOption" + } } ], "produces": [ @@ -342600,7 +378571,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.marketDetailResponseDoc" + "$ref": "#/definitions/polymarket.batchTokenSpreadsResponseDoc" } }, "400": { @@ -342633,78 +378604,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket market detail by condition id", + "summary": "Get Polymarket token spreads", "tags": [ "Polymarket" ] } }, - "/polymarket/market/condition/{condition_id}/activity": { + "/polymarket/tournaments": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public trade rows for one Polymarket market condition id from credential-free Data API trades JSON. The `taker_only` enum accepts `true` and `false`; the `filter_type` enum accepts `CASH`; the `filter_amount` enum accepts `1`, `5`, `10`, `100`, `1000`, `10000`, and `100000`. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-market-activity-by-condition", + "description": "Returns public tournament reference data from Polymarket Gamma.", + "operationId": "polymarket-tournaments", "parameters": [ { - "description": "Polymarket market condition id", - "in": "path", - "name": "condition_id", - "required": true, - "type": "string", - "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" - }, - { - "description": "Maximum trades, defaults to 50 and supports up to 100", + "description": "Rows to return", "in": "query", "name": "limit", "type": "integer", - "x-example": 50 + "x-example": 25 }, { - "description": "Result offset, defaults to 0 and supports up to 10000", + "description": "Result offset", "in": "query", "name": "offset", "type": "integer", "x-example": 0 }, { - "default": "true", - "description": "Accepted for compatibility with the global activity contract; scoped upstream requests are filtered by condition id", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "taker_only", - "type": "string" - }, - { - "default": "CASH", - "description": "Activity amount filter type", - "enum": [ - "CASH" - ], + "description": "Optional upstream sort field", "in": "query", - "name": "filter_type", - "type": "string" + "name": "order", + "type": "string", + "x-example": "name" }, { - "default": "1", - "description": "Minimum filtered amount", - "enum": [ - "1", - "5", - "10", - "100", - "1000", - "10000", - "100000" - ], + "default": false, + "description": "Sort ascending when true", "in": "query", - "name": "filter_amount", - "type": "string" + "name": "ascending", + "type": "boolean" } ], "produces": [ @@ -342714,7 +378654,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.activityTradesResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -342723,12 +378663,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -342747,27 +378681,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket market activity trades by condition id", + "summary": "Polymarket tournaments", "tags": [ "Polymarket" ] } }, - "/polymarket/market/condition/{condition_id}/liquidity": { + "/polymarket/tournaments/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a public market liquidity snapshot that joins Gamma market detail with credential-free public CLOB market-data reads when token ids are available. This endpoint is not a trading endpoint and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-market-liquidity-by-condition", + "description": "Returns public tournament detail data from Polymarket Gamma.", + "operationId": "polymarket-tournament", "parameters": [ { - "description": "Polymarket market condition id", + "description": "Polymarket tournament id", "in": "path", - "name": "condition_id", + "name": "id", "required": true, - "type": "string", - "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -342777,7 +378711,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.marketLiquidityResponseDoc" + "$ref": "#/definitions/polymarket.publicDataResponseDoc" } }, "400": { @@ -342810,27 +378744,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket market liquidity by condition id", + "summary": "Polymarket tournament detail", "tags": [ "Polymarket" ] } }, - "/polymarket/market/slug/{slug}": { + "/popeyes/faq": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized Polymarket market from credential-free public Gamma market JSON. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-market-detail-by-slug", + "description": "Returns a page of Popeyes' published customer-support FAQ -- questions and answers such as \"How do I remove items from my cart?\". This is public help-center content, not account/order-specific support state, and does not require an order id or any customer identifier.", + "operationId": "popeyes-faq", "parameters": [ { - "description": "Polymarket market slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "nba-sas-nyk-2026-06-08" + "description": "Maximum FAQ entries to return, 1-100 (default 20)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Number of FAQ entries to skip, for paging (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -342840,7 +378780,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.marketDetailResponseDoc" + "$ref": "#/definitions/popeyes.faqResponseDoc" } }, "400": { @@ -342849,12 +378789,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -342873,27 +378807,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket market detail by slug", + "summary": "List Popeyes' published customer-support FAQ", "tags": [ - "Polymarket" + "Popeyes" ] } }, - "/polymarket/market/slug/{slug}/liquidity": { + "/popeyes/location": { "get": { "consumes": [ "application/json" ], - "description": "Returns a public market liquidity snapshot that joins Gamma market detail with credential-free public CLOB market-data reads when token ids are available. This endpoint is not a trading endpoint and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-market-liquidity-by-slug", + "description": "Returns one restaurant's full detail -- the same fields /popeyes/locations returns per restaurant (address, coordinates, phone, operator, amenity flags, full published hours) -- looked up directly by its numeric store id instead of a coordinate/radius search. Useful when the store id is already known, e.g. from a prior /popeyes/locations call. An unknown store id returns a 404.", + "operationId": "popeyes-location", "parameters": [ { - "description": "Polymarket market slug", - "in": "path", - "name": "slug", + "description": "Popeyes' numeric store id, from /popeyes/locations", + "in": "query", + "name": "store_id", "required": true, "type": "string", - "x-example": "nba-sas-nyk-2026-06-08" + "x-example": "14156" + }, + { + "description": "Restaurant market: `US` (default) or `CA`", + "in": "query", + "name": "market", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -342903,7 +378844,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.marketLiquidityResponseDoc" + "$ref": "#/definitions/popeyes.locationResponseDoc" } }, "400": { @@ -342936,27 +378877,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket market liquidity by slug", + "summary": "Look up one Popeyes restaurant directly by store id", "tags": [ - "Polymarket" + "Popeyes" ] } }, - "/polymarket/market/{id}": { + "/popeyes/locations": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized Polymarket market from credential-free public Gamma market JSON. This endpoint does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-market-detail", + "description": "Returns Popeyes restaurants near a latitude/longitude. Each restaurant carries its internal id and numeric store id (the value /popeyes/menu takes), 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 Popeyes returns an empty list rather than an error.", + "operationId": "popeyes-locations", "parameters": [ { - "description": "Polymarket market id", - "in": "path", - "name": "id", + "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": "Restaurant market: `US` (default) or `CA`", + "in": "query", + "name": "market", "type": "string", - "x-example": "558934" + "x-example": "US" } ], "produces": [ @@ -342966,7 +378936,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.marketDetailResponseDoc" + "$ref": "#/definitions/popeyes.locationsResponseDoc" } }, "400": { @@ -342999,27 +378969,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket market detail by id", + "summary": "Find Popeyes restaurants near a location", "tags": [ - "Polymarket" + "Popeyes" ] } }, - "/polymarket/market/{id}/liquidity": { + "/popeyes/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns a public market liquidity snapshot that joins Gamma market detail with credential-free public CLOB market-data reads when token ids are available. This endpoint is not a trading endpoint and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-market-liquidity", + "description": "Returns one restaurant's menu grouped into categories (e.g. \"Big Box\", \"Chicken Wraps\"). Every entry is an item, a combo, a picker (a variant-choice product such as \"choose your side\") or a bundle, and carries a price reflecting this specific restaurant when Popeyes reports one for that exact entry -- a missing price does not mean the item is free, it means this restaurant's pricing call did not cover that entry. Some menu entries are published directly at the top level outside any named section; these are grouped into a synthetic \"Featured\" category (featured true). Entries of type ITEM also carry published nutrition facts and allergen data when Popeyes reports them for that item; COMBO/PICKER/BUNDLE entries do not carry their own nutrition/allergen data.", + "operationId": "popeyes-menu", "parameters": [ { - "description": "Polymarket market id", - "in": "path", - "name": "id", + "description": "Popeyes' numeric store id, from /popeyes/locations", + "in": "query", + "name": "store_id", "required": true, "type": "string", - "x-example": "558934" + "x-example": "14156" + }, + { + "description": "Restaurant market: `US` (default) or `CA`", + "in": "query", + "name": "market", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -343029,7 +379006,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.marketLiquidityResponseDoc" + "$ref": "#/definitions/popeyes.menuResponseDoc" } }, "400": { @@ -343062,27 +379039,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket market liquidity", + "summary": "Get one Popeyes restaurant's menu with real per-store pricing", "tags": [ - "Polymarket" + "Popeyes" ] } }, - "/polymarket/market/{id}/tags": { + "/popeyes/offers": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized tag rows attached to one Polymarket market id.", - "operationId": "polymarket-market-tags", + "description": "Returns a page of Popeyes' promotional offers/deals catalog -- named value deals (e.g. \"3Pc Signature Chicken for $5\"), percentage-off combos, and paper coupons. This is CMS content describing the offer catalog, the same kind of public data /popeyes/menu already reads from -- not a personalized or store-specific list, and not account/loyalty state. A missing price does not mean free; a price of 0 means the offer's discount is not expressed as a flat price (see offer_tag/name instead, e.g. a percentage-off deal). requires_authentication reflects the offer's own published redemption rules, not any account state this endpoint reads. The catalog spans hundreds of entries including ones no longer running; there is no upstream \"currently active\" flag, so pages should be read as reference data, not a guarantee every entry is live right now.", + "operationId": "popeyes-offers", "parameters": [ { - "description": "Polymarket market id", - "in": "path", - "name": "id", - "required": true, + "description": "Maximum offers to return, 1-100 (default 20)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Number of offers to skip, for paging (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Restaurant market: US (default) or CA", + "in": "query", + "name": "market", "type": "string", - "x-example": "558934" + "x-example": "US" } ], "produces": [ @@ -343092,7 +379082,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagsResponseDoc" + "$ref": "#/definitions/popeyes.offersResponseDoc" } }, "400": { @@ -343119,70 +379109,40 @@ "ApiKeyAuth": [] } ], - "summary": "List tags for a Polymarket market", + "summary": "List Popeyes' promotional deals and coupons", "tags": [ - "Polymarket" + "Popeyes" ] } }, - "/polymarket/markets": { + "/popeyes/promotions": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized market rows from Polymarket's credential-free public Gamma markets JSON.", - "operationId": "polymarket-markets", + "description": "Returns a page of Popeyes Rewards' bonus-points promotion catalog -- flat or multiplied points bonuses tied to a qualifying purchase (e.g. \"Get Double Bonus Points on Your Cart, minimum $20\"), distinct from /popeyes/offers (priced menu deals) and /popeyes/quests (multi-step challenges). This is public CMS content, not a signed-in member's own applied-promotions state. points_multiplier and bonus_points are mutually exclusive in practice -- a promotion is either an \"Nx points\" campaign or a flat bonus. start_date/end_date bound the promotion's published active window when Popeyes sets one; both empty means no published window restriction, not that the promotion is permanently active.", + "operationId": "popeyes-promotions", "parameters": [ { - "description": "Maximum markets, defaults to 25 and supports up to 100", + "description": "Maximum promotions to return, 1-100 (default 20)", "in": "query", "name": "limit", "type": "integer", - "x-example": 25 + "x-example": 20 }, { - "description": "Result offset, defaults to 0 and supports up to 10000", + "description": "Number of promotions to skip, for paging (default 0)", "in": "query", "name": "offset", "type": "integer", "x-example": 0 }, { - "default": "volume24hr", - "description": "Sort field", - "enum": [ - "volume24hr", - "volume", - "liquidity", - "endDate", - "updatedAt", - "createdAt", - "id", - "slug", - "title", - "question", - "label" - ], - "in": "query", - "name": "order", - "type": "string" - }, - { - "default": false, - "description": "Sort ascending when true", - "in": "query", - "name": "ascending", - "type": "boolean" - }, - { - "description": "Closed filter", - "enum": [ - "true", - "false" - ], + "description": "Restaurant market: US (default) or CA", "in": "query", - "name": "closed", - "type": "string" + "name": "market", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -343192,7 +379152,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.marketsResponseDoc" + "$ref": "#/definitions/popeyes.promotionsResponseDoc" } }, "400": { @@ -343219,80 +379179,40 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket markets", + "summary": "List Popeyes Rewards' bonus-points promotion catalog", "tags": [ - "Polymarket" + "Popeyes" ] } }, - "/polymarket/predictions": { + "/popeyes/quests": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized event rows for the Polymarket `/predictions` page using credential-free Gamma `events/keyset` JSON. The `status` enum accepts `active`, `resolved`, and `all`; the `sort` enum accepts `competitive`, `volume`, `volume_24hr`, `ending_soon`, `liquidity`, `newest`, and `closed_time`; the `recurrence` enum accepts `hourly`, `daily`, `weekly`, `monthly`, and `yearly`.", - "operationId": "polymarket-predictions", + "description": "Returns a page of Popeyes Rewards' loyalty-challenge catalog -- named multi-step challenges and their reward (e.g. \"Make Two Purchases, Get FREE Chicken Sandwich in the form of 550 Bonus Points\"). This is public CMS content describing the challenge and its incentive, the same class of public promotional data as /popeyes/offers -- not scoped to any signed-in member and does not report which quests a given account has completed or activated. step_count is how many steps make up the quest; this build does not expose each step's own purchase-requirement rules.", + "operationId": "popeyes-quests", "parameters": [ { - "default": "active", - "description": "Prediction status", - "enum": [ - "active", - "resolved", - "all" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "default": "competitive", - "description": "Prediction sort", - "enum": [ - "competitive", - "volume", - "volume_24hr", - "ending_soon", - "liquidity", - "newest", - "closed_time" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Optional tag slug", - "in": "query", - "name": "tag", - "type": "string", - "x-example": "politics" - }, - { - "description": "Optional recurrence filter", - "enum": [ - "hourly", - "daily", - "weekly", - "monthly", - "yearly" - ], + "description": "Maximum quests to return, 1-100 (default 20)", "in": "query", - "name": "recurrence", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Maximum events, defaults to 20 and supports up to 100", + "description": "Number of quests to skip, for paging (default 0)", "in": "query", - "name": "limit", + "name": "offset", "type": "integer", - "x-example": 20 + "x-example": 0 }, { - "description": "Optional keyset cursor from a prior predictions response", + "description": "Restaurant market: US (default) or CA", "in": "query", - "name": "cursor", - "type": "string" + "name": "market", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -343302,7 +379222,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.predictionsResponseDoc" + "$ref": "#/definitions/popeyes.questsResponseDoc" } }, "400": { @@ -343329,27 +379249,40 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket predictions", + "summary": "List Popeyes Rewards' loyalty-challenge catalog", "tags": [ - "Polymarket" + "Popeyes" ] } }, - "/polymarket/rewards/market/{condition_id}": { + "/popeyes/rewards": { "get": { "consumes": [ "application/json" ], - "description": "Returns one public rewards-market row from Polymarket CLOB rewards JSON by market condition id.", - "operationId": "polymarket-rewards-market", + "description": "Returns a page of Popeyes Rewards' points-redemption catalog -- menu items and combos a member can redeem directly for a fixed number of loyalty points (e.g. \"600 points for Cheese Bites\"), distinct from /popeyes/offers (priced deals), /popeyes/quests (challenges) and /popeyes/promotions (bonus-points campaigns). This is public CMS content, not a signed-in member's own points balance or redemption history. points is the loyalty points cost to redeem; other per-account/per-order redemption restrictions Popeyes may publish on a reward are not exposed by this endpoint.", + "operationId": "popeyes-rewards", "parameters": [ { - "description": "Polymarket market condition id", - "in": "path", - "name": "condition_id", - "required": true, + "description": "Maximum rewards to return, 1-100 (default 20)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Number of rewards to skip, for paging (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Restaurant market: US (default) or CA", + "in": "query", + "name": "market", "type": "string", - "x-example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327" + "x-example": "US" } ], "produces": [ @@ -343359,7 +379292,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.rewardsMarketResponseDoc" + "$ref": "#/definitions/popeyes.rewardsResponseDoc" } }, "400": { @@ -343368,12 +379301,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -343392,94 +379319,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket rewards market", + "summary": "List Popeyes Rewards' points-redemption catalog", "tags": [ - "Polymarket" - ] - } - }, - "/polymarket/rewards/markets": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized public rewards-market rows used by Polymarket's `/rewards` page. The `order_by` enum accepts `market`, `earnings`, `max_spread`, `min_size`, `rate_per_day`, `price`, `earning_percentage`, and `spread`; the `position` enum accepts `asc` and `desc`; the `tag_slug` enum accepts `all`, `politics`, `sports`, `crypto`, `pop-culture`, `middle-east`, `business`, and `science`.", - "operationId": "polymarket-rewards-markets", - "parameters": [ - { - "default": "market", - "description": "Rewards market sort", - "enum": [ - "market", - "earnings", - "max_spread", - "min_size", - "rate_per_day", - "price", - "earning_percentage", - "spread" - ], - "in": "query", - "name": "order_by", - "type": "string" - }, - { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "position", - "type": "string" - }, - { - "description": "Reward program date in YYYY-MM-DD format; defaults to today in UTC", - "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-06-07" - }, - { - "description": "Optional market question search text", - "in": "query", - "name": "q", - "type": "string", - "x-example": "bitcoin" - }, - { - "default": "all", - "description": "Rewards category", - "enum": [ - "all", - "politics", - "sports", - "crypto", - "pop-culture", - "middle-east", - "business", - "science" - ], - "in": "query", - "name": "tag_slug", - "type": "string" - }, - { - "description": "Optional rewards cursor from a prior response; defaults to MA==", - "in": "query", - "name": "cursor", - "type": "string", - "x-example": "MA==" - }, - { - "description": "Maximum rows, defaults to 100 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 100 - } - ], + "Popeyes" + ] + } + }, + "/popularmechanics/news": { + "get": { + "description": "Returns current stories from Popular Mechanics' public all-stories 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": "popularmechanics-news", "produces": [ "application/json" ], @@ -343487,13 +379336,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.rewardsMarketsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -343514,81 +379357,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket rewards markets", + "summary": "Get Popular Mechanics top stories", "tags": [ - "Polymarket" + "Popular Mechanics" ] } }, - "/polymarket/search": { + "/poshmark/brand/{name}": { "get": { "consumes": [ "application/json" ], - "description": "Searches Polymarket's credential-free public search JSON and returns normalized event results. The `status` enum accepts `open`, `closed`, and `all`; the `sort` enum accepts `relevance`, `volume24hr`, `volume`, `liquidity`, and `endDate`.", - "operationId": "polymarket-search", + "description": "Returns a page of normalized Poshmark listings for a given brand name (e.g. Nike), the same browsing view as Poshmark's own brand pages. Pass a previous response's next_max_id back as max_id to fetch the next page. Credential-free public data sourced from Poshmark's own server-rendered brand page and, for pages past the first, Poshmark's own JSON pagination API.", + "operationId": "poshmark-brand", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", + "description": "Poshmark brand name, matching the path segment of a /brand/{name} URL", + "in": "path", + "name": "name", "required": true, "type": "string", - "x-example": "bitcoin" - }, - { - "description": "Maximum events, defaults to 10 and supports up to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "default": "open", - "description": "Event status filter", - "enum": [ - "open", - "closed", - "all" - ], - "in": "query", - "name": "status", - "type": "string" + "x-example": "Nike" }, { - "default": "relevance", - "description": "Search sort", - "enum": [ - "relevance", - "volume24hr", - "volume", - "liquidity", - "endDate" - ], + "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", "in": "query", - "name": "sort", + "name": "max_id", "type": "string" - }, - { - "default": false, - "description": "Sort ascending when true", - "in": "query", - "name": "ascending", - "type": "boolean" - }, - { - "default": false, - "description": "Include matching tags", - "in": "query", - "name": "include_tags", - "type": "boolean" - }, - { - "default": false, - "description": "Include matching profiles", - "in": "query", - "name": "include_profiles", - "type": "boolean" } ], "produces": [ @@ -343598,7 +379393,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.searchResponseDoc" + "$ref": "#/definitions/poshmark.BrandResponse" } }, "400": { @@ -343613,8 +379408,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -343631,19 +379426,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Polymarket events", + "summary": "Browse Poshmark listings by brand", "tags": [ - "Polymarket" + "Poshmark" ] } }, - "/polymarket/sports": { + "/poshmark/brands": { "get": { "consumes": [ "application/json" ], - "description": "Returns public sports reference data from Polymarket Gamma.", - "operationId": "polymarket-sports", + "description": "Returns Poshmark's full brand directory: every brand Poshmark recognizes (name, slug, logo, known aliases), not just brands with active listings for a given search or category filter. Useful for resolving a brand name to the exact value the brand/search filters expect. Credential-free public data sourced from Poshmark's own server-rendered brand directory page.", + "operationId": "poshmark-brands", "produces": [ "application/json" ], @@ -343651,17 +379446,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/poshmark.brandsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -343678,35 +379467,19 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket sports", + "summary": "Get the full Poshmark brand directory", "tags": [ - "Polymarket" + "Poshmark" ] } }, - "/polymarket/sports/by-partner": { + "/poshmark/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns public sports reference data from Polymarket Gamma filtered by partner identifiers.", - "operationId": "polymarket-sports-by-partner", - "parameters": [ - { - "description": "Partner name", - "in": "query", - "name": "partner", - "type": "string", - "x-example": "nba" - }, - { - "description": "Partner external id", - "in": "query", - "name": "external_id", - "type": "string", - "x-example": "123" - } - ], + "description": "Returns Poshmark's full department/category browse taxonomy (e.g. Women > Shoes, Men > Jackets & Coats). Each entry's path resolves directly against the category endpoint. This is reference data that changes rarely, so responses are cached. Credential-free public data sourced from Poshmark's own server-rendered category pages.", + "operationId": "poshmark-categories", "produces": [ "application/json" ], @@ -343714,17 +379487,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/poshmark.categoriesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -343741,19 +379508,35 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket sports by partner", + "summary": "Get the Poshmark department/category browse taxonomy", "tags": [ - "Polymarket" + "Poshmark" ] } }, - "/polymarket/sports/market-types": { + "/poshmark/category/{path}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public sports market type reference data from Polymarket Gamma.", - "operationId": "polymarket-sports-market-types", + "description": "Returns a page of normalized Poshmark listings for a given category path (e.g. Women-Shoes, Men-Shirts), the same browsing view as Poshmark's own category pages. Pass a previous response's next_max_id back as max_id to fetch the next page. Credential-free public data sourced from Poshmark's own server-rendered category page and, for pages past the first, Poshmark's own JSON pagination API.", + "operationId": "poshmark-category", + "parameters": [ + { + "description": "Poshmark category path segment, e.g. Women-Shoes, Men-Shirts", + "in": "path", + "name": "path", + "required": true, + "type": "string", + "x-example": "Women-Shoes" + }, + { + "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", + "in": "query", + "name": "max_id", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -343761,7 +379544,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/poshmark.CategoryResponse" } }, "400": { @@ -343770,8 +379553,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" } @@ -343788,19 +379577,35 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket sports market types", + "summary": "Browse Poshmark listings by category", "tags": [ - "Polymarket" + "Poshmark" ] } }, - "/polymarket/sports/summary": { + "/poshmark/closet/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public sports summary data from Polymarket Gamma.", - "operationId": "polymarket-sports-summary", + "description": "Returns a normalized Poshmark closet (seller storefront) page: the seller's public profile and reputation stats (followers, ratings, items sold) plus a first page of their currently available listings and total listing count. Pass a previous response's next_max_id back as max_id to fetch the next page of listings; paginated responses omit the seller profile to avoid a second upstream fetch, so fetch without max_id first to get seller fields. Credential-free public data sourced from Poshmark's own server-rendered closet page and, for pages past the first, Poshmark's own JSON pagination API.", + "operationId": "poshmark-closet", + "parameters": [ + { + "description": "Poshmark seller username, the path segment of a /closet/{username} URL", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "maltimar" + }, + { + "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", + "in": "query", + "name": "max_id", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -343808,7 +379613,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/poshmark.ClosetResponse" } }, "400": { @@ -343817,8 +379622,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" } @@ -343835,27 +379646,27 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket sports summary", + "summary": "Get Poshmark seller closet (storefront)", "tags": [ - "Polymarket" + "Poshmark" ] } }, - "/polymarket/sports/{id}": { + "/poshmark/listing/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public sport detail data from Polymarket Gamma.", - "operationId": "polymarket-sport", + "description": "Returns a normalized Poshmark item-detail page: the full listing (description, all photos, size/brand/condition, inventory), its seller's profile, public comments, and similar listings Poshmark itself surfaces on the same page. Credential-free public data sourced from Poshmark's own server-rendered listing page.", + "operationId": "poshmark-listing", "parameters": [ { - "description": "Polymarket sport id", + "description": "Poshmark listing id, the trailing id segment of a /listing/{slug}-{id} URL", "in": "path", "name": "id", "required": true, - "type": "integer", - "x-example": 1 + "type": "string", + "x-example": "6a3fed1de9c77df92e2c0cc6" } ], "produces": [ @@ -343865,7 +379676,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/poshmark.ListingResponse" } }, "400": { @@ -343880,8 +379691,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -343898,27 +379709,40 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket sport detail", + "summary": "Get Poshmark listing detail", "tags": [ - "Polymarket" + "Poshmark" ] } }, - "/polymarket/sports/{id}/external-partners": { + "/poshmark/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns public external partner data for one sport from Polymarket Gamma.", - "operationId": "polymarket-sport-external-partners", + "description": "Searches Poshmark for clothing, shoes, and accessory listings, returning normalized listing summaries (title, price, brand, size, condition, seller, images) plus the total matching count and an opaque pagination cursor. Pass a previous response's next_max_id back as max_id to fetch the next page. Credential-free public data sourced from Poshmark's own server-rendered search page and, for pages past the first, Poshmark's own JSON pagination API.", + "operationId": "poshmark-search", "parameters": [ { - "description": "Polymarket sport id", - "in": "path", - "name": "id", + "description": "Free-text keyword search", + "in": "query", + "name": "query", "required": true, - "type": "integer", - "x-example": 1 + "type": "string", + "x-example": "nike jacket" + }, + { + "description": "Department filter, e.g. Women, Men, Kids", + "in": "query", + "name": "department", + "type": "string", + "x-example": "Men" + }, + { + "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", + "in": "query", + "name": "max_id", + "type": "string" } ], "produces": [ @@ -343928,7 +379752,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/poshmark.searchResponseDoc" } }, "400": { @@ -343937,14 +379761,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" } @@ -343961,35 +379779,33 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket sport external partners", + "summary": "Search Poshmark listings", "tags": [ - "Polymarket" + "Poshmark" ] } }, - "/polymarket/sports/{id}/external-partners/{partner_ref}": { + "/poshmark/trend/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public external partner data for one sport partner reference from Polymarket Gamma.", - "operationId": "polymarket-sport-external-partner", + "description": "Returns a page of normalized Poshmark listings for a curated trend/showroom collection (e.g. \"Vintage Celine Handbags\"), the same browsing view as Poshmark's own trend pages. Pass a previous response's next_max_id back as max_id to fetch the next page. Credential-free public data sourced from Poshmark's own server-rendered trend page and, for pages past the first, Poshmark's own JSON pagination API.", + "operationId": "poshmark-trend", "parameters": [ { - "description": "Polymarket sport id", + "description": "Poshmark trend/showroom id, the trailing id segment of a /trend/{slug}-{id} URL", "in": "path", "name": "id", "required": true, - "type": "integer", - "x-example": 1 + "type": "string", + "x-example": "964e80193927e69b518f631b" }, { - "description": "Partner reference", - "in": "path", - "name": "partner_ref", - "required": true, - "type": "string", - "x-example": "nba" + "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", + "in": "query", + "name": "max_id", + "type": "string" } ], "produces": [ @@ -343999,7 +379815,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/poshmark.TrendResponse" } }, "400": { @@ -344014,8 +379830,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -344032,19 +379848,19 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket sport external partner", + "summary": "Browse a Poshmark trend/showroom collection", "tags": [ - "Polymarket" + "Poshmark" ] } }, - "/polymarket/spotlights": { + "/prada/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns public spotlight data from Polymarket Gamma.", - "operationId": "polymarket-spotlights", + "description": "Returns Prada's (prada.com) full category taxonomy -- every browsable category with its own breadcrumb path and canonical URL -- plus the two gender values products.prada.com currently carries. categories[].id is exactly the value prada-category accepts as its own category_id parameter; genders[].value is exactly what prada-search and prada-category accept as their own gender parameter.", + "operationId": "prada-categories", "produces": [ "application/json" ], @@ -344052,13 +379868,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/prada.categoriesResponseDoc" } }, "429": { @@ -344079,53 +379889,65 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket spotlights", + "summary": "List Prada's category taxonomy and gender filter values", "tags": [ - "Polymarket" + "Prada" ] } }, - "/polymarket/spotlights/keyset": { + "/prada/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns public spotlight keyset data from Polymarket Gamma.", - "operationId": "polymarket-spotlights-keyset", + "description": "Browses one Prada category by ID, returning every product/color variant in it. category_id is required and must be one of prada-categories' own categories[].id values. gender optionally narrows to one of prada-categories' own genders[].value values. sort selects Prada's own relevance ranking or one of its price/newest orderings. A category with no products returns a well-formed empty result rather than an error.", + "operationId": "prada-category", "parameters": [ { - "description": "Rows to return", + "description": "Category ID, from prada-categories' own categories[].id field", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "name": "category_id", + "required": true, + "type": "string", + "x-example": "10062US" }, { - "description": "Result offset", + "description": "Gender filter. Allowed values: Woman, Man", + "enum": [ + "Woman", + "Man" + ], "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "gender", + "type": "string", + "x-example": "Woman" }, { - "description": "Optional upstream sort field", + "description": "Sort order. Allowed values: suggested, price_asc, price_desc, newest. Defaults to suggested (Prada's own relevance ranking)", + "enum": [ + "suggested", + "price_asc", + "price_desc", + "newest" + ], "in": "query", - "name": "order", + "name": "sort", "type": "string", - "x-example": "createdAt" + "x-example": "price_asc" }, { - "default": false, - "description": "Sort ascending when true", + "description": "One-based page number, defaults to 1", "in": "query", - "name": "ascending", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Optional upstream cursor", + "description": "Results per page, defaults to 24, maximum 100", "in": "query", - "name": "after_cursor", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -344135,7 +379957,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/prada.categoryResponseDoc" } }, "400": { @@ -344162,27 +379984,27 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket spotlight keyset", + "summary": "Browse a Prada category", "tags": [ - "Polymarket" + "Prada" ] } }, - "/polymarket/spotlights/{slug}": { + "/prada/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns public spotlight detail data from Polymarket Gamma.", - "operationId": "polymarket-spotlight", + "description": "Returns normalized product-detail data for one Prada product/color variant: name, price, stock, available sizes, breadcrumb, alternate colors, and images. pv is the product/color identifier, returned by prada-search's, prada-category's, and this endpoint's own products[].pv/other_colors[] fields (also the trailing path segment of a Prada product URL). description and the full image gallery are populated on a best-effort basis from the product's own page and may be briefly absent even for a valid pv; every other field is always populated. An unknown pv returns a not-found error.", + "operationId": "prada-product", "parameters": [ { - "description": "Spotlight slug", - "in": "path", - "name": "slug", + "description": "Product/color identifier, from a search, category, or product result's own pv field", + "in": "query", + "name": "pv", "required": true, "type": "string", - "x-example": "nfl-draft" + "x-example": "1BA274_2CYS_F0002_V_YO0" } ], "produces": [ @@ -344192,7 +380014,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/prada.productResponseDoc" } }, "400": { @@ -344225,19 +380047,67 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket spotlight detail", + "summary": "Get a Prada product", "tags": [ - "Polymarket" + "Prada" ] } }, - "/polymarket/status": { + "/prada/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns public Polymarket Gamma status data.", - "operationId": "polymarket-status", + "description": "Searches Prada's (prada.com) product catalog by keyword, through its own public search index. q is required; gender and sort are the same optional values prada-category accepts. Keyword search is 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": "prada-search", + "parameters": [ + { + "description": "Free-text search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "galleria bag" + }, + { + "description": "Gender filter. Allowed values: Woman, Man", + "enum": [ + "Woman", + "Man" + ], + "in": "query", + "name": "gender", + "type": "string", + "x-example": "Woman" + }, + { + "description": "Sort order. Allowed values: suggested, price_asc, price_desc, newest. Defaults to suggested (Prada's own relevance ranking)", + "enum": [ + "suggested", + "price_asc", + "price_desc", + "newest" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "newest" + }, + { + "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": [ "application/json" ], @@ -344245,7 +380115,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/prada.searchResponseDoc" } }, "400": { @@ -344272,34 +380142,61 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket status", + "summary": "Search Prada products", "tags": [ - "Polymarket" + "Prada" ] } }, - "/polymarket/tag/slug/{slug}": { + "/prada/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized Polymarket tag from credential-free public Gamma tag JSON.", - "operationId": "polymarket-tag-by-slug", + "description": "Locates Prada's (prada.com) physical retail stores worldwide, through its own public store-locator search. All parameters are optional: with none set, this returns Prada's full worldwide store list (up to limit). query is a free-text location search (city, country, or store name); lat/lng (both required together) narrow it to a geo-radius search, optionally sized with radius_km (defaults to 50, maximum 20000). A search with genuinely zero matches returns a well-formed empty result rather than an error.", + "operationId": "prada-stores", "parameters": [ { - "description": "Polymarket tag slug", - "in": "path", - "name": "slug", - "required": true, + "description": "Free-text location search (city, country, or store name)", + "in": "query", + "name": "query", "type": "string", - "x-example": "crypto" + "x-example": "New York" }, { - "description": "Optional upstream locale", + "description": "Search-center latitude, -90..90. Requires lng.", "in": "query", - "name": "locale", - "type": "string", - "x-example": "en" + "name": "lat", + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Search-center longitude, -180..180. Requires lat.", + "in": "query", + "name": "lng", + "type": "number", + "x-example": -74.006 + }, + { + "description": "Search radius in kilometers around lat/lng, defaults to 50, maximum 20000. Requires lat and lng.", + "in": "query", + "name": "radius_km", + "type": "number", + "x-example": 50 + }, + { + "description": "Maximum stores returned, defaults to 20, maximum 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Result offset for pagination, defaults to 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -344309,7 +380206,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagResponseDoc" + "$ref": "#/definitions/prada.storesResponseDoc" } }, "400": { @@ -344318,12 +380215,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -344342,51 +380233,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Polymarket tag by slug", + "summary": "Locate Prada retail stores", "tags": [ - "Polymarket" + "Prada" ] } }, - "/polymarket/tag/slug/{slug}/related-tags": { + "/prada/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized related tag rows from Polymarket's credential-free public Gamma related-tags JSON.", - "operationId": "polymarket-related-tags-by-slug", + "description": "Returns Prada's own search-box typeahead suggestions for a partial query -- a ranked list of suggested search phrases with the live result count each one would return. Pass a suggestion straight through to prada-search's own q parameter for product results. A query with no genuine matches returns a well-formed empty result rather than an error.", + "operationId": "prada-suggest", "parameters": [ { - "description": "Polymarket tag slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "crypto" - }, - { - "description": "Omit empty related tags", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "omit_empty", - "type": "string" - }, - { - "description": "Optional upstream status filter", + "description": "Partial search query", "in": "query", - "name": "status", + "name": "q", + "required": true, "type": "string", - "x-example": "active" + "x-example": "bag" }, { - "description": "Optional upstream locale", + "description": "Maximum suggestions, defaults to 10, maximum 20", "in": "query", - "name": "locale", - "type": "string", - "x-example": "en" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -344396,7 +380270,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagsResponseDoc" + "$ref": "#/definitions/prada.suggestResponseDoc" } }, "400": { @@ -344423,53 +380297,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get related Polymarket tags by slug", + "summary": "Get Prada search-box suggestions", "tags": [ - "Polymarket" + "Prada" ] } }, - "/polymarket/tag/slug/{slug}/related-tags/tags": { + "/pristine-auction/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized related tag rows from Polymarket's credential-free public Gamma related-tags/tags JSON.", - "operationId": "polymarket-related-tag-rows-by-slug", - "parameters": [ - { - "description": "Polymarket tag slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "crypto" - }, - { - "description": "Omit empty related tags", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "omit_empty", - "type": "string" - }, - { - "description": "Optional upstream status filter", - "in": "query", - "name": "status", - "type": "string", - "x-example": "active" - }, - { - "description": "Optional upstream locale", - "in": "query", - "name": "locale", - "type": "string", - "x-example": "en" - } - ], + "description": "Returns the whole value space for pristine-auction-search's category, auction_type, sort, and status params. categories[] is fetched live (with a current listing count per category, refreshed on every call); auction_types[], sort[], and statuses[] are pristineauction.com's own fixed, small search-form value sets.", + "operationId": "pristine-auction-categories", "produces": [ "application/json" ], @@ -344477,17 +380317,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/pristineauction.categoriesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -344504,41 +380338,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get related Polymarket tag rows by slug", + "summary": "Discover Pristine Auction's search enum values", "tags": [ - "Polymarket" + "Pristine Auction" ] } }, - "/polymarket/tag/{id}": { + "/pristine-auction/lot/{lot_number}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one normalized Polymarket tag from credential-free public Gamma tag JSON.", - "operationId": "polymarket-tag", + "description": "Returns one pristineauction.com lot's full detail: title, description, image gallery, price (current high bid, or realized/sold price once the auction has ended), auction end time, sport/collectible category, auction type, no-reserve flag, and view/watch/bid counts. lot_number comes from pristine-auction-search's results[].lot_number. Credential-free public data -- see the endpoint markdown for the transport used.", + "operationId": "pristine-auction-lot-detail", "parameters": [ { - "description": "Polymarket tag id", + "description": "A lot_number from pristine-auction-search's results", "in": "path", - "name": "id", + "name": "lot_number", "required": true, - "type": "string", - "x-example": "21" - }, - { - "default": false, - "description": "Include upstream template data when supported", - "in": "query", - "name": "include_template", - "type": "boolean" - }, - { - "description": "Optional upstream locale", - "in": "query", - "name": "locale", - "type": "string", - "x-example": "en" + "type": "integer", + "x-example": 13154611 } ], "produces": [ @@ -344548,7 +380368,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagResponseDoc" + "$ref": "#/definitions/pristineauction.lotDetailResponseDoc" } }, "400": { @@ -344563,8 +380383,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -344581,51 +380401,139 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Polymarket tag by id", + "summary": "Get a Pristine Auction lot's full detail", "tags": [ - "Polymarket" + "Pristine Auction" ] } }, - "/polymarket/tag/{id}/related-tags": { + "/pristine-auction/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized related tag rows from Polymarket's credential-free public Gamma related-tags JSON.", - "operationId": "polymarket-related-tags", + "description": "Browses or searches pristineauction.com's current sports card and memorabilia auction lots. term or category is required, matching pristineauction.com's own search form. All enum values (category, auction_type, sort, status) come from pristine-auction-categories. status=completed browses ended/sold lots (a prices-realized view); the default (all statuses) mirrors the site's own default. Every filter is optional and combines with AND semantics. Credential-free public data -- see the endpoint markdown for the transport used.", + "operationId": "pristine-auction-search", "parameters": [ { - "description": "Polymarket tag id", - "in": "path", - "name": "id", - "required": true, + "description": "Free-text search across lot titles. term or category is required.", + "in": "query", + "name": "term", "type": "string", - "x-example": "21" + "x-example": "mantle" }, { - "description": "Omit empty related tags", + "description": "One value from pristine-auction-categories' categories[].slug. term or category is required.", "enum": [ - "true", - "false" + "fine-art", + "baseball", + "basketball", + "boxing-ufc", + "coins-bullion", + "comic-books", + "football", + "golf", + "historical", + "hockey", + "music", + "other-sports", + "pop-culture", + "racing", + "soccer", + "trading-cards", + "wrestling" ], "in": "query", - "name": "omit_empty", - "type": "string" + "name": "category", + "type": "string", + "x-example": "baseball" }, { - "description": "Optional upstream status filter", + "description": "Comma-separated auction-type filter. Omit to include every auction type.", + "enum": [ + "previous_featured", + "ten_minute", + "daily", + "classic", + "fine_art", + "jewelry", + "pop_culture", + "tcg", + "helmet", + "nascar_foundation", + "sports_cards", + "coin", + "sports_gear", + "jersey", + "frame_it_up", + "fall_showcase", + "elite", + "live_stream" + ], + "in": "query", + "name": "auction_type", + "type": "string", + "x-example": "daily,classic" + }, + { + "description": "Comma-separated auction-status filter. status=completed browses ended/sold lots. Omit to include every status.", + "enum": [ + "future", + "active", + "canceled", + "completed", + "forfeited" + ], "in": "query", "name": "status", "type": "string", "x-example": "active" }, { - "description": "Optional upstream locale", + "description": "Result order, default newly-listed.", + "enum": [ + "newly-listed", + "bid-time-descending", + "price-descending", + "price-ascending", + "ending-soonest", + "ending-last", + "bid-count-descending", + "bid-count-ascending" + ], "in": "query", - "name": "locale", + "name": "sort", "type": "string", - "x-example": "en" + "x-example": "ending-soonest" + }, + { + "description": "Minimum current bid price in USD, inclusive. Omit or 0 for no minimum.", + "in": "query", + "name": "min_price", + "type": "number" + }, + { + "description": "Maximum current bid price in USD, inclusive. Omit or 0 for no maximum.", + "in": "query", + "name": "max_price", + "type": "number" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page. pristineauction.com only accepts 15, 30, or 60; any other value is rejected. Default 30.", + "enum": [ + 15, + 30, + 60 + ], + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -344635,7 +380543,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagsResponseDoc" + "$ref": "#/definitions/pristineauction.searchResponseDoc" } }, "400": { @@ -344644,8 +380552,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -344662,51 +380570,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get related Polymarket tags by id", + "summary": "Search Pristine Auction's live auction inventory", "tags": [ - "Polymarket" + "Pristine Auction" ] } }, - "/polymarket/tag/{id}/related-tags/tags": { + "/pristine-marketplace/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized related tag rows from Polymarket's credential-free public Gamma related-tags/tags JSON.", - "operationId": "polymarket-related-tag-rows", + "description": "Returns normalized collections from Pristine Marketplace (https://www.pristinemarketplace.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "pristine-marketplace-collections", "parameters": [ { - "description": "Polymarket tag id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "21" - }, - { - "description": "Omit empty related tags", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "omit_empty", - "type": "string" - }, - { - "description": "Optional upstream status filter", + "description": "1-based page, defaults to 1", "in": "query", - "name": "status", - "type": "string", - "x-example": "active" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Optional upstream locale", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "locale", - "type": "string", - "x-example": "en" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -344716,7 +380606,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagsResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -344743,70 +380633,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get related Polymarket tag rows by id", + "summary": "List Pristine Marketplace collections", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/tags": { + "/pristine-marketplace/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized tag rows from Polymarket's credential-free public Gamma tags JSON.", - "operationId": "polymarket-tags", + "description": "Returns normalized products from one Pristine Marketplace (https://www.pristinemarketplace.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug (typically a player, team, or memorabilia-type collection, e.g. `pop-culture`).", + "operationId": "pristine-marketplace-collection-products", "parameters": [ { - "description": "Maximum tags, defaults to 25 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "description": "Collection handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "pop-culture" }, { - "description": "Result offset, defaults to 0 and supports up to 10000", + "description": "1-based page, defaults to 1", "in": "query", - "name": "offset", + "name": "page", "type": "integer", - "x-example": 0 - }, - { - "default": "label", - "description": "Sort field", - "enum": [ - "volume24hr", - "volume", - "liquidity", - "endDate", - "updatedAt", - "createdAt", - "id", - "slug", - "title", - "question", - "label" - ], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "Sort ascending flag", - "enum": [ - "true", - "false" - ], - "in": "query", - "name": "ascending", - "type": "string" + "x-example": 1 }, { - "description": "Optional upstream locale", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "locale", - "type": "string", - "x-example": "en" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -344816,7 +380677,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tagsResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -344825,6 +380686,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -344843,74 +380710,90 @@ "ApiKeyAuth": [] } ], - "summary": "List Polymarket tags", + "summary": "List Pristine Marketplace collection products", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/teams": { + "/pristine-marketplace/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns public team reference data from Polymarket Gamma.", - "operationId": "polymarket-teams", + "description": "Returns normalized static pages from Pristine Marketplace (https://www.pristinemarketplace.com). The storefront URL is fixed server-side. The storefront's \"Shop by Sport\" navigation (NFL, MLB, NBA, NHL, NASCAR) resolves to pages here (handles `nfl`, `mlb`, `nba`, `nhl`, `nascar`), not to a separate collections-style resource -- each is a landing page linking into many player/team collections.", + "operationId": "pristine-marketplace-pages", "parameters": [ { - "description": "Optional league filter", - "in": "query", - "name": "league", - "type": "string", - "x-example": "NBA" - }, - { - "description": "Optional team name filter", - "in": "query", - "name": "name", - "type": "string", - "x-example": "Knicks" - }, - { - "description": "Optional abbreviation filter", - "in": "query", - "name": "abbreviation", - "type": "string", - "x-example": "NYK" - }, - { - "description": "Optional provider id filter", + "description": "1-based page, defaults to 1", "in": "query", - "name": "provider_id", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Rows to return", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 25 + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + } }, - { - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "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 Pristine Marketplace static pages", + "tags": [ + "PristineMarketplace" + ] + } + }, + "/pristine-marketplace/pages/{handle}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized static page detail for one Pristine Marketplace (https://www.pristinemarketplace.com) page handle. The storefront URL is fixed server-side. The \"Shop by Sport\" nav landing pages are reachable here as handles `nfl`, `mlb`, `nba`, `nhl`, and `nascar`.", + "operationId": "pristine-marketplace-page", + "parameters": [ { - "description": "Optional upstream sort field", - "in": "query", - "name": "order", + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "name" - }, - { - "default": false, - "description": "Sort ascending when true", - "in": "query", - "name": "ascending", - "type": "boolean" + "x-example": "nfl" } ], "produces": [ @@ -344920,7 +380803,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -344929,6 +380812,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -344947,33 +380836,33 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket teams", + "summary": "Get a Pristine Marketplace static page", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/teams/by-partner": { + "/pristine-marketplace/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns public team reference data from Polymarket Gamma filtered by partner identifiers.", - "operationId": "polymarket-teams-by-partner", + "description": "Returns normalized products from Pristine Marketplace's (https://www.pristinemarketplace.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "pristine-marketplace-products", "parameters": [ { - "description": "Partner name", + "description": "1-based page, defaults to 1", "in": "query", - "name": "partner", - "type": "string", - "x-example": "nba" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Partner external id", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "external_id", - "type": "string", - "x-example": "123" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -344983,7 +380872,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -345010,27 +380899,27 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket teams by partner", + "summary": "List Pristine Marketplace products", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/teams/{id}": { + "/pristine-marketplace/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public team detail data from Polymarket Gamma.", - "operationId": "polymarket-team", + "description": "Returns normalized product detail for one Pristine Marketplace (https://www.pristinemarketplace.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "pristine-marketplace-product", "parameters": [ { - "description": "Polymarket team id", + "description": "Product handle", "in": "path", - "name": "id", + "name": "handle", "required": true, - "type": "integer", - "x-example": 3270556 + "type": "string", + "x-example": "product-handle" } ], "produces": [ @@ -345040,7 +380929,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -345073,27 +380962,45 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket team detail", + "summary": "Get a Pristine Marketplace product", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/teams/{id}/external-partners": { + "/pristine-marketplace/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns public external partner data for one team from Polymarket Gamma.", - "operationId": "polymarket-team-external-partners", + "description": "Returns normalized recommended products for one Pristine Marketplace (https://www.pristinemarketplace.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "pristine-marketplace-product-recommendations", "parameters": [ { - "description": "Polymarket team id", + "description": "Product handle", "in": "path", - "name": "id", + "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": 3270556 + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], + "in": "query", + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -345103,7 +381010,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -345136,35 +381043,26 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket team external partners", + "summary": "List Pristine Marketplace product recommendations", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/teams/{id}/external-partners/{partner_ref}": { + "/pristine-marketplace/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns public external partner data for one team partner reference from Polymarket Gamma.", - "operationId": "polymarket-team-external-partner", + "description": "Returns one page of Pristine Marketplace's (https://www.pristinemarketplace.com) public Judge.me store review feed. This is a store-wide, most-recent-first feed, not a per-product one: confirmed live, the storefront's own on-page review widget draws from and displays this same feed (labeled \"Reviews for other products\" on an individual product page), and no product/handle filter parameter narrows it. The storefront URL is fixed server-side. Judge.me fixes 5 reviews per upstream page regardless of any requested size, so this endpoint has no `limit` parameter -- `page` maps 1:1 onto Judge.me's own pagination.", + "operationId": "pristine-marketplace-reviews", "parameters": [ { - "description": "Polymarket team id", - "in": "path", - "name": "id", - "required": true, + "description": "1-based page, defaults to 1. 5 reviews per page.", + "in": "query", + "name": "page", "type": "integer", - "x-example": 3270556 - }, - { - "description": "Partner reference", - "in": "path", - "name": "partner_ref", - "required": true, - "type": "string", - "x-example": "nba" + "x-example": 1 } ], "produces": [ @@ -345174,7 +381072,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/shopifybrands.reviewsResponseDoc" } }, "400": { @@ -345183,12 +381081,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -345207,27 +381099,41 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket team external partner", + "summary": "List Pristine Marketplace store reviews", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/token/{token_id}/midpoint": { + "/pristine-marketplace/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public CLOB midpoint for one Polymarket token id.", - "operationId": "polymarket-token-midpoint", + "description": "Returns normalized products from Pristine Marketplace's (https://www.pristinemarketplace.com) own native full-text search results page, distinct from `/pristine-marketplace/search/suggest`'s predictive suggestions. The storefront URL is fixed server-side. Per-page size is fixed by the storefront's own theme (16 products per page) and is not adjustable; `limit` is honored only as an upper bound on the returned page.", + "operationId": "pristine-marketplace-search", "parameters": [ { - "description": "Polymarket CLOB token id", - "in": "path", - "name": "token_id", + "description": "Search query text", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" + "x-example": "jordan" + }, + { + "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, but never exceeds the storefront's own fixed 16-per-page grid", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 16 } ], "produces": [ @@ -345237,7 +381143,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tokenMidpointResponseDoc" + "$ref": "#/definitions/shopifybrands.siteSearchResponseDoc" } }, "400": { @@ -345246,12 +381152,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -345270,27 +381170,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token midpoint", + "summary": "Search Pristine Marketplace products", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/token/{token_id}/orderbook": { + "/pristine-marketplace/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns public CLOB order-book depth for one Polymarket token id.", - "operationId": "polymarket-token-orderbook", + "description": "Returns products, collections, and query suggestions from Pristine Marketplace's (https://www.pristinemarketplace.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "pristine-marketplace-search-suggest", "parameters": [ { - "description": "Polymarket CLOB token id", - "in": "path", - "name": "token_id", + "description": "Search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" + "x-example": "jordan" + }, + { + "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": [ @@ -345300,7 +381214,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tokenOrderBookResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -345309,12 +381223,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -345333,38 +381241,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token order book", + "summary": "Get Pristine Marketplace search suggestions", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/token/{token_id}/price": { + "/pristine-marketplace/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public CLOB buy or sell price for one Polymarket token id.", - "operationId": "polymarket-token-price", + "description": "Returns capped URL entries from Pristine Marketplace's (https://www.pristinemarketplace.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "pristine-marketplace-sitemap-urls", "parameters": [ { - "description": "Polymarket CLOB token id", - "in": "path", - "name": "token_id", - "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": "81927025054404355287140018940169293739219157042658469116956164881873598220211" + "x-example": "products" }, { - "default": "buy", - "description": "Order side used for the CLOB price", - "enum": [ - "buy", - "sell" - ], + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "side", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -345374,7 +381286,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tokenPriceResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -345383,12 +381295,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -345407,66 +381313,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token price", + "summary": "List Pristine Marketplace sitemap URLs", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/token/{token_id}/price-history": { + "/pristine-marketplace/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns public CLOB price-history points for one Polymarket token id.", - "operationId": "polymarket-token-price-history", - "parameters": [ - { - "description": "Polymarket CLOB token id", - "in": "path", - "name": "token_id", - "required": true, - "type": "string", - "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" - }, - { - "default": "1d", - "description": "History interval", - "enum": [ - "1m", - "1h", - "6h", - "1d", - "1w", - "all", - "max" - ], - "in": "query", - "name": "interval", - "type": "string" + "description": "Returns child sitemap URLs from Pristine Marketplace's (https://www.pristinemarketplace.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "pristine-marketplace-sitemaps", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + } }, - { - "description": "Data point resolution in minutes; 0 uses the default 60; maximum 1440", - "in": "query", - "name": "fidelity", - "type": "integer", - "x-example": 60 + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Optional Unix timestamp lower bound", - "in": "query", - "name": "start_ts", - "type": "integer", - "x-example": 1780754400 + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Optional Unix timestamp upper bound", - "in": "query", - "name": "end_ts", - "type": "integer", - "x-example": 1780840800 + "ApiKeyAuth": [] } ], + "summary": "List Pristine Marketplace sitemaps", + "tags": [ + "PristineMarketplace" + ] + } + }, + "/pristine-marketplace/store": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized storefront metadata for Pristine Marketplace (https://www.pristinemarketplace.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "pristine-marketplace-store", "produces": [ "application/json" ], @@ -345474,7 +381380,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/polymarket.tokenPriceHistoryResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -345483,12 +381389,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -345507,27 +381407,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token price history", + "summary": "Get Pristine Marketplace store metadata", "tags": [ - "Polymarket" + "PristineMarketplace" ] } }, - "/polymarket/token/{token_id}/spread": { + "/producthunt/category/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public CLOB spread for one Polymarket token id.", - "operationId": "polymarket-token-spread", + "description": "Returns the category page payload for a Product Hunt category slug.", + "operationId": "producthunt-category", "parameters": [ { - "description": "Polymarket CLOB token id", + "description": "Product Hunt category slug", "in": "path", - "name": "token_id", + "name": "slug", "required": true, "type": "string", - "x-example": "81927025054404355287140018940169293739219157042658469116956164881873598220211" + "x-example": "\"vibe-coding\"" } ], "produces": [ @@ -345535,31 +381435,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped category payload", "schema": { - "$ref": "#/definitions/polymarket.tokenSpreadResponseDoc" + "$ref": "#/definitions/producthunt.categoryResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Category 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" } @@ -345570,28 +381470,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token spread", + "summary": "Retrieve Product Hunt category details", "tags": [ - "Polymarket" + "ProductHunt" ] } }, - "/polymarket/tokens/midpoints": { - "post": { + "/producthunt/category/{slug}/products": { + "get": { "consumes": [ "application/json" ], - "description": "Returns public CLOB midpoints for up to 25 Polymarket token ids. This uses credential-free public CLOB market-data JSON and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-tokens-midpoints", + "description": "Returns the products in a Product Hunt category (now backed by Product Hunt topics), cursor-paginated. Pass the `cursor` from a previous response's `end_cursor` to page; `page_size` controls the batch size. `page`, `featured_only`, `order` and `tags` are accepted for compatibility but no longer affect the result.", + "operationId": "producthunt-category-products", "parameters": [ { - "description": "Token ids request body", - "in": "body", - "name": "body", + "description": "Product Hunt category slug", + "in": "path", + "name": "slug", "required": true, - "schema": { - "$ref": "#/definitions/polymarket.BatchTokenMidpointsOption" - } + "type": "string", + "x-example": "\"developer-tools\"" + }, + { + "description": "Pagination cursor from a previous response's end_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": 15, + "description": "Page size (number of products)", + "in": "query", + "name": "page_size", + "type": "integer" + }, + { + "default": true, + "description": "Accepted for compatibility; no longer affects results", + "in": "query", + "name": "featured_only", + "type": "boolean" + }, + { + "default": "highest_rated", + "description": "Accepted for compatibility; no longer affects results", + "in": "query", + "name": "order", + "type": "string" + }, + { + "default": 1, + "description": "Accepted for compatibility; use cursor to paginate", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Accepted for compatibility; no longer affects results", + "in": "query", + "name": "tags", + "type": "string" } ], "produces": [ @@ -345599,31 +381538,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped category products payload", "schema": { - "$ref": "#/definitions/polymarket.batchTokenMidpointsResponseDoc" + "$ref": "#/definitions/producthunt.categoryProductsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Category 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" } @@ -345634,28 +381573,87 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token midpoints", + "summary": "Retrieve Product Hunt category products", "tags": [ - "Polymarket" + "ProductHunt" ] } }, - "/polymarket/tokens/orderbooks": { - "post": { + "/producthunt/leaderboard": { + "get": { "consumes": [ "application/json" ], - "description": "Returns public CLOB order-book depth for up to 25 Polymarket token ids. This uses credential-free public CLOB market-data JSON and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-tokens-orderbooks", + "description": "Fetches Product Hunt leaderboard data for daily, weekly, monthly, or yearly scopes via Product Hunt GraphQL.", + "operationId": "producthunt-leaderboard", "parameters": [ { - "description": "Token ids request body", - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/polymarket.BatchTokenOrderBooksOption" - } + "default": "daily", + "description": "Leaderboard scope: daily, weekly, monthly, yearly", + "enum": [ + "daily", + "weekly", + "monthly", + "yearly" + ], + "in": "query", + "name": "scope", + "type": "string" + }, + { + "description": "Anchor date in YYYY-MM-DD format. Used to derive missing year/month/day/week values.", + "format": "date", + "in": "query", + "name": "date", + "type": "string", + "x-example": "2026-01-29" + }, + { + "description": "Leaderboard year override", + "in": "query", + "name": "year", + "type": "integer", + "x-example": 2026 + }, + { + "description": "Daily/monthly month override", + "in": "query", + "name": "month", + "type": "integer", + "x-example": 1 + }, + { + "description": "Daily day override", + "in": "query", + "name": "day", + "type": "integer", + "x-example": 29 + }, + { + "description": "Weekly ISO week override", + "in": "query", + "name": "week", + "type": "integer", + "x-example": 5 + }, + { + "default": true, + "description": "Featured products only", + "in": "query", + "name": "featured", + "type": "boolean" + }, + { + "description": "Ranking order override. Defaults to scope rank enum.", + "in": "query", + "name": "order", + "type": "string" + }, + { + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -345663,31 +381661,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped typed leaderboard payload", "schema": { - "$ref": "#/definitions/polymarket.batchTokenOrderBooksResponseDoc" + "$ref": "#/definitions/producthunt.leaderboardResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Product 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" } @@ -345698,28 +381696,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token order books", + "summary": "Retrieve Product Hunt leaderboard", "tags": [ - "Polymarket" + "ProductHunt" ] } }, - "/polymarket/tokens/prices": { - "post": { + "/producthunt/product/{id}": { + "get": { "consumes": [ "application/json" ], - "description": "Returns public CLOB buy and sell prices for up to 25 Polymarket token ids. The `side` enum accepts `buy` and `sell`; when omitted, both sides are returned. This uses credential-free public CLOB market-data JSON and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-tokens-prices", + "description": "Returns the core Product Hunt product details.", + "operationId": "producthunt-product", "parameters": [ { - "description": "Token ids request body", - "in": "body", - "name": "body", + "description": "Product Hunt slug or numeric ID", + "in": "path", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/polymarket.BatchTokenPricesOption" - } + "type": "string", + "x-example": "\"chronicle-6\"" } ], "produces": [ @@ -345727,31 +381724,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped product payload (map[string]any)", "schema": { - "$ref": "#/definitions/polymarket.batchTokenPricesResponseDoc" + "$ref": "#/definitions/producthunt.productResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Product 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" } @@ -345762,28 +381759,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token prices", + "summary": "Retrieve Product Hunt product details", "tags": [ - "Polymarket" + "ProductHunt" ] } }, - "/polymarket/tokens/spreads": { - "post": { + "/producthunt/product/{id}/about": { + "get": { "consumes": [ "application/json" ], - "description": "Returns public CLOB spreads for up to 25 Polymarket token ids. This uses credential-free public CLOB market-data JSON and does not require a Polymarket user token, wallet signature, cookies, or personal account authentication.", - "operationId": "polymarket-tokens-spreads", + "description": "Returns the richer Product Hunt about-page payload, including launch, forum, review tags, and media data.", + "operationId": "producthunt-about", "parameters": [ { - "description": "Token ids request body", - "in": "body", - "name": "body", + "description": "Product Hunt slug", + "in": "path", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/polymarket.BatchTokenSpreadsOption" - } + "type": "string", + "x-example": "\"producthunt\"" } ], "produces": [ @@ -345791,31 +381787,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped typed about-page payload", "schema": { - "$ref": "#/definitions/polymarket.batchTokenSpreadsResponseDoc" + "$ref": "#/definitions/producthunt.aboutResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Product 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" } @@ -345826,47 +381822,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get Polymarket token spreads", + "summary": "Retrieve Product Hunt product about page", "tags": [ - "Polymarket" + "ProductHunt" ] } }, - "/polymarket/tournaments": { + "/producthunt/product/{id}/alternatives": { "get": { "consumes": [ "application/json" ], - "description": "Returns public tournament reference data from Polymarket Gamma.", - "operationId": "polymarket-tournaments", + "description": "Returns paginated alternatives, tags, and related discussions for a Product Hunt product.", + "operationId": "producthunt-alternatives", "parameters": [ { - "description": "Rows to return", + "description": "Product Hunt slug", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "\"clico\"" + }, + { + "default": 10, + "description": "Page size", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "name": "first", + "type": "integer" }, { - "description": "Result offset", + "description": "Pagination cursor", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "cursor", + "type": "string" }, { - "description": "Optional upstream sort field", + "default": "most_relevant", + "description": "Sort order", "in": "query", "name": "order", - "type": "string", - "x-example": "name" + "type": "string" }, { - "default": false, - "description": "Sort ascending when true", + "description": "Comma-separated tag slugs", "in": "query", - "name": "ascending", - "type": "boolean" + "name": "tags", + "type": "string" } ], "produces": [ @@ -345874,25 +381876,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped alternatives payload", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/producthunt.alternativesResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Product 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" } @@ -345903,27 +381911,52 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket tournaments", + "summary": "Retrieve Product Hunt product alternatives", "tags": [ - "Polymarket" + "ProductHunt" ] } }, - "/polymarket/tournaments/{id}": { + "/producthunt/product/{id}/customers": { "get": { "consumes": [ "application/json" ], - "description": "Returns public tournament detail data from Polymarket Gamma.", - "operationId": "polymarket-tournament", + "description": "Returns paginated customer products for a Product Hunt product using Product Hunt's ProductCustomersPage GraphQL operation.", + "operationId": "producthunt-customers", "parameters": [ { - "description": "Polymarket tournament id", + "description": "Product Hunt slug", "in": "path", "name": "id", "required": true, - "type": "integer", - "x-example": 2 + "type": "string", + "x-example": "\"openai\"" + }, + { + "default": "customers", + "description": "Product Hunt customers order", + "enum": [ + "customers", + "latest_launch" + ], + "in": "query", + "name": "order", + "type": "string" + }, + { + "default": 1, + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 10, + "description": "Results per page", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -345931,31 +381964,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped customers payload", "schema": { - "$ref": "#/definitions/polymarket.publicDataResponseDoc" + "$ref": "#/definitions/producthunt.customersResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Product 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" } @@ -345966,33 +381999,41 @@ "ApiKeyAuth": [] } ], - "summary": "Polymarket tournament detail", + "summary": "Retrieve Product Hunt product customers", "tags": [ - "Polymarket" + "ProductHunt" ] } }, - "/popeyes/faq": { + "/producthunt/product/{id}/launches": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of Popeyes' published customer-support FAQ -- questions and answers such as \"How do I remove items from my cart?\". This is public help-center content, not account/order-specific support state, and does not require an order id or any customer identifier.", - "operationId": "popeyes-faq", + "description": "Returns paginated launch posts for a Product Hunt product using Product Hunt's ProductPageLaunches GraphQL operation.", + "operationId": "producthunt-launches", "parameters": [ { - "description": "Maximum FAQ entries to return, 1-100 (default 20)", + "description": "Product Hunt slug", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "\"openai\"" + }, + { + "description": "Pagination cursor", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "cursor", + "type": "string" }, { - "description": "Number of FAQ entries to skip, for paging (default 0)", + "default": "DATE", + "description": "Product Hunt launch order", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "order", + "type": "string", + "x-example": "DATE" } ], "produces": [ @@ -346000,25 +382041,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped launches payload", "schema": { - "$ref": "#/definitions/popeyes.faqResponseDoc" + "$ref": "#/definitions/producthunt.launchesResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Product 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" } @@ -346029,34 +382076,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Popeyes' published customer-support FAQ", + "summary": "Retrieve Product Hunt product launches", "tags": [ - "Popeyes" + "ProductHunt" ] } }, - "/popeyes/location": { + "/producthunt/product/{id}/makers": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's full detail -- the same fields /popeyes/locations returns per restaurant (address, coordinates, phone, operator, amenity flags, full published hours) -- looked up directly by its numeric store id instead of a coordinate/radius search. Useful when the store id is already known, e.g. from a prior /popeyes/locations call. An unknown store id returns a 404.", - "operationId": "popeyes-location", + "description": "Returns maker items for a Product Hunt product.", + "operationId": "producthunt-makers", "parameters": [ { - "description": "Popeyes' numeric store id, from /popeyes/locations", - "in": "query", - "name": "store_id", + "description": "Product Hunt slug", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "14156" + "x-example": "\"clico\"" }, { - "description": "Restaurant market: `US` (default) or `CA`", + "description": "Pagination cursor", "in": "query", - "name": "market", - "type": "string", - "x-example": "US" + "name": "cursor", + "type": "string" } ], "produces": [ @@ -346064,31 +382110,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped makers payload", "schema": { - "$ref": "#/definitions/popeyes.locationResponseDoc" + "$ref": "#/definitions/producthunt.makersResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Product 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" } @@ -346099,56 +382145,27 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Popeyes restaurant directly by store id", + "summary": "Retrieve Product Hunt product makers", "tags": [ - "Popeyes" + "ProductHunt" ] } }, - "/popeyes/locations": { + "/producthunt/product/{id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns Popeyes restaurants near a latitude/longitude. Each restaurant carries its internal id and numeric store id (the value /popeyes/menu takes), 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 Popeyes returns an empty list rather than an error.", - "operationId": "popeyes-locations", + "description": "Returns detailed review items for a Product Hunt product.", + "operationId": "producthunt-reviews", "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", + "description": "Product Hunt slug", + "in": "path", + "name": "id", "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": "Restaurant market: `US` (default) or `CA`", - "in": "query", - "name": "market", "type": "string", - "x-example": "US" + "x-example": "\"clico\"" } ], "produces": [ @@ -346156,31 +382173,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped detailed reviews payload", "schema": { - "$ref": "#/definitions/popeyes.locationsResponseDoc" + "$ref": "#/definitions/producthunt.reviewsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Product 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" } @@ -346191,34 +382208,61 @@ "ApiKeyAuth": [] } ], - "summary": "Find Popeyes restaurants near a location", + "summary": "Retrieve Product Hunt product detailed reviews", "tags": [ - "Popeyes" + "ProductHunt" ] } }, - "/popeyes/menu": { + "/producthunt/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's menu grouped into categories (e.g. \"Big Box\", \"Chicken Wraps\"). Every entry is an item, a combo, a picker (a variant-choice product such as \"choose your side\") or a bundle, and carries a price reflecting this specific restaurant when Popeyes reports one for that exact entry -- a missing price does not mean the item is free, it means this restaurant's pricing call did not cover that entry. Some menu entries are published directly at the top level outside any named section; these are grouped into a synthetic \"Featured\" category (featured true). Entries of type ITEM also carry published nutrition facts and allergen data when Popeyes reports them for that item; COMBO/PICKER/BUNDLE entries do not carry their own nutrition/allergen data.", - "operationId": "popeyes-menu", + "description": "Performs a full-text Product Hunt search and returns matching products, users, or launches.", + "operationId": "producthunt-search", "parameters": [ { - "description": "Popeyes' numeric store id, from /popeyes/locations", + "description": "Search keywords", "in": "query", - "name": "store_id", + "name": "query", "required": true, "type": "string", - "x-example": "14156" + "x-example": "\"ai\"" }, { - "description": "Restaurant market: `US` (default) or `CA`", + "default": "product", + "description": "Result type: **product** (default), **user**, or **launch**", + "enum": [ + "product", + "user", + "launch" + ], "in": "query", - "name": "market", + "name": "type", + "type": "string" + }, + { + "description": "Page number (1-based)", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 2 + }, + { + "default": false, + "description": "Launch search only: featured launches only", + "in": "query", + "name": "featured", + "type": "boolean" + }, + { + "description": "Launch search only: comma-separated topic slugs", + "in": "query", + "name": "topics", "type": "string", - "x-example": "US" + "x-example": "ai-chatbots,chrome-extensions" } ], "produces": [ @@ -346226,31 +382270,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped search payload (map[string]any)", "schema": { - "$ref": "#/definitions/popeyes.menuResponseDoc" + "$ref": "#/definitions/producthunt.searchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "No results 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" } @@ -346261,40 +382305,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Popeyes restaurant's menu with real per-store pricing", + "summary": "Search for products, users, or launches on Product Hunt", "tags": [ - "Popeyes" + "ProductHunt" ] } }, - "/popeyes/offers": { + "/propublica/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of Popeyes' promotional offers/deals catalog -- named value deals (e.g. \"3Pc Signature Chicken for $5\"), percentage-off combos, and paper coupons. This is CMS content describing the offer catalog, the same kind of public data /popeyes/menu already reads from -- not a personalized or store-specific list, and not account/loyalty state. A missing price does not mean free; a price of 0 means the offer's discount is not expressed as a flat price (see offer_tag/name instead, e.g. a percentage-off deal). requires_authentication reflects the offer's own published redemption rules, not any account state this endpoint reads. The catalog spans hundreds of entries including ones no longer running; there is no upstream \"currently active\" flag, so pages should be read as reference data, not a guarantee every entry is live right now.", - "operationId": "popeyes-offers", + "description": "Returns public ProPublica article metadata (title, author(s), published/updated dates, dek) and body paragraphs from a canonical article URL.", + "operationId": "propublica-article", "parameters": [ { - "description": "Maximum offers to return, 1-100 (default 20)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "Number of offers to skip, for paging (default 0)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Restaurant market: US (default) or CA", + "description": "Canonical ProPublica article URL", "in": "query", - "name": "market", + "name": "url", + "required": true, "type": "string", - "x-example": "US" + "x-example": "https://www.propublica.org/article/fbi-susan-collins-navatek-campaign-donations-investigation" } ], "produces": [ @@ -346304,7 +382332,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/popeyes.offersResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -346313,8 +382341,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -346331,40 +382359,31 @@ "ApiKeyAuth": [] } ], - "summary": "List Popeyes' promotional deals and coupons", + "summary": "Get ProPublica article content", "tags": [ - "Popeyes" + "ProPublica" ] } }, - "/popeyes/promotions": { + "/propublica/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of Popeyes Rewards' bonus-points promotion catalog -- flat or multiplied points bonuses tied to a qualifying purchase (e.g. \"Get Double Bonus Points on Your Cart, minimum $20\"), distinct from /popeyes/offers (priced menu deals) and /popeyes/quests (multi-step challenges). This is public CMS content, not a signed-in member's own applied-promotions state. points_multiplier and bonus_points are mutually exclusive in practice -- a promotion is either an \"Nx points\" campaign or a flat bonus. start_date/end_date bound the promotion's published active window when Popeyes sets one; both empty means no published window restriction, not that the promotion is permanently active.", - "operationId": "popeyes-promotions", + "description": "Returns one ProPublica staff/contributor's public profile: name, bio, contact email and social accounts where published, and one page of their recent bylined stories.", + "operationId": "propublica-author", "parameters": [ { - "description": "Maximum promotions to return, 1-100 (default 20)", + "description": "Canonical propublica.org/people/ URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.propublica.org/people/william-turton" }, { - "description": "Number of promotions to skip, for paging (default 0)", + "description": "1-based page of recent stories to return; defaults to 1", "in": "query", - "name": "offset", + "name": "page", "type": "integer", - "x-example": 0 - }, - { - "description": "Restaurant market: US (default) or CA", - "in": "query", - "name": "market", - "type": "string", - "x-example": "US" + "x-example": 1 } ], "produces": [ @@ -346374,7 +382393,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/popeyes.promotionsResponseDoc" + "$ref": "#/definitions/publicnews.propublicaAuthorResponseDoc" } }, "400": { @@ -346383,8 +382402,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -346401,40 +382420,59 @@ "ApiKeyAuth": [] } ], - "summary": "List Popeyes Rewards' bonus-points promotion catalog", + "summary": "Get a ProPublica staff profile", "tags": [ - "Popeyes" + "ProPublica" ] } }, - "/popeyes/quests": { + "/propublica/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of Popeyes Rewards' loyalty-challenge catalog -- named multi-step challenges and their reward (e.g. \"Make Two Purchases, Get FREE Chicken Sandwich in the form of 550 Bonus Points\"). This is public CMS content describing the challenge and its incentive, the same class of public promotional data as /popeyes/offers -- not scoped to any signed-in member and does not report which quests a given account has completed or activated. step_count is how many steps make up the quest; this build does not expose each step's own purchase-requirement rules.", - "operationId": "popeyes-quests", + "description": "Returns fresh headlines from one public ProPublica topic feed.", + "operationId": "propublica-headlines", "parameters": [ { - "description": "Maximum quests to return, 1-100 (default 20)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "Number of quests to skip, for paging (default 0)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Restaurant market: US (default) or CA", + "description": "ProPublica topic slug", + "enum": [ + "abortion", + "biden-administration", + "civil-rights", + "courts", + "criminal-justice", + "debt", + "democracy", + "department-of-governmental-efficiency", + "education", + "environment", + "health-care", + "health-insurance", + "immigration", + "jan-6", + "labor", + "mental-health", + "military", + "nonprofits", + "police", + "politics", + "pollution", + "pregnancy", + "prison", + "racial-justice", + "real-estate", + "regulation", + "sex-and-gender", + "sports", + "stock", + "taxes", + "technology", + "trump-administration", + "usaid" + ], "in": "query", - "name": "market", + "name": "section", + "required": true, "type": "string", - "x-example": "US" + "x-example": "abortion" } ], "produces": [ @@ -346444,7 +382482,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/popeyes.questsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -346453,6 +382491,38 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ProPublica topic headlines", + "tags": [ + "ProPublica" + ] + } + }, + "/propublica/news": { + "get": { + "description": "Returns fresh ProPublica top stories from its public RSS feed.", + "operationId": "propublica-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -346471,42 +382541,45 @@ "ApiKeyAuth": [] } ], - "summary": "List Popeyes Rewards' loyalty-challenge catalog", + "summary": "Get ProPublica top stories", "tags": [ - "Popeyes" + "ProPublica" ] } }, - "/popeyes/rewards": { + "/propublica/sections": { "get": { - "consumes": [ + "description": "Returns the complete public topic inventory accepted by /api/v1/propublica/headlines.", + "operationId": "propublica-sections", + "produces": [ "application/json" ], - "description": "Returns a page of Popeyes Rewards' points-redemption catalog -- menu items and combos a member can redeem directly for a fixed number of loyalty points (e.g. \"600 points for Cheese Bites\"), distinct from /popeyes/offers (priced deals), /popeyes/quests (challenges) and /popeyes/promotions (bonus-points campaigns). This is public CMS content, not a signed-in member's own points balance or redemption history. points is the loyalty points cost to redeem; other per-account/per-order redemption restrictions Popeyes may publish on a reward are not exposed by this endpoint.", - "operationId": "popeyes-rewards", - "parameters": [ - { - "description": "Maximum rewards to return, 1-100 (default 20)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "Number of rewards to skip, for paging (default 0)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Restaurant market: US (default) or CA", - "in": "query", - "name": "market", - "type": "string", - "x-example": "US" + "ApiKeyAuth": [] } ], + "summary": "Get ProPublica topics", + "tags": [ + "ProPublica" + ] + } + }, + "/psa/autographfacts/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "PSA AutographFacts' full subject-category list -- the discovery endpoint for the category_id parameter used to browse subjects. Categories span far beyond sports: Baseball, Basketball, Football, Boxing, Golf, Hockey, Soccer, Tennis, MMA, Miscellaneous Sports, Cycling, Olympics, Motorsports, Entertainment, Music, Writers/Authors/Artists, Space Exploration, U.S. Presidents, and Historical & Political Figures.", + "operationId": "psa-autographfacts-categories", "produces": [ "application/json" ], @@ -346514,23 +382587,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/popeyes.rewardsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/psa.autographFactsCategoriesResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -346541,16 +382602,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Popeyes Rewards' points-redemption catalog", + "summary": "List PSA AutographFacts categories", "tags": [ - "Popeyes" + "PSA" ] } }, - "/popularmechanics/news": { + "/psa/autographfacts/gallery": { "get": { - "description": "Returns current stories from Popular Mechanics' public all-stories 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": "popularmechanics-news", + "consumes": [ + "application/json" + ], + "description": "One autograph subject's full exemplar image gallery: real, captioned examples of authenticated signed items PSA keeps on file for this subject (signed photos, cards, baseballs, letters, contracts, and more), used as authentication reference material. subject_id is the numeric id from a psa-autographfacts-subjects result.", + "operationId": "psa-autographfacts-gallery", + "parameters": [ + { + "description": "Numeric subject id, from a psa-autographfacts-subjects result", + "in": "query", + "name": "subject_id", + "required": true, + "type": "string", + "x-example": "1" + } + ], "produces": [ "application/json" ], @@ -346558,11 +382632,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/psa.autographFactsGalleryResponseDoc" } }, - "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" } @@ -346579,33 +382665,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Popular Mechanics top stories", + "summary": "Get a PSA AutographFacts subject's exemplar image gallery", "tags": [ - "Popular Mechanics" + "PSA" ] } }, - "/poshmark/brand/{name}": { + "/psa/autographfacts/subject": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of normalized Poshmark listings for a given brand name (e.g. Nike), the same browsing view as Poshmark's own brand pages. Pass a previous response's next_max_id back as max_id to fetch the next page. Credential-free public data sourced from Poshmark's own server-rendered brand page and, for pages past the first, Poshmark's own JSON pagination API.", - "operationId": "poshmark-brand", + "description": "One autograph subject's full public reference page: PSA's own authentication notes (signing habits, forgery risk, signature evolution), a general biography, and a per-item-type price guide (e.g. 3x5/AP card, photo, check, letter, single-signed ball -- item types vary by subject). subject_id is the numeric id from a psa-autographfacts-subjects result.", + "operationId": "psa-autographfacts-subject", "parameters": [ { - "description": "Poshmark brand name, matching the path segment of a /brand/{name} URL", - "in": "path", - "name": "name", + "description": "Numeric subject id, from a psa-autographfacts-subjects result", + "in": "query", + "name": "subject_id", "required": true, "type": "string", - "x-example": "Nike" - }, - { - "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", - "in": "query", - "name": "max_id", - "type": "string" + "x-example": "1" } ], "produces": [ @@ -346615,7 +382695,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/poshmark.BrandResponse" + "$ref": "#/definitions/psa.autographFactsSubjectResponseDoc" } }, "400": { @@ -346648,19 +382728,29 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Poshmark listings by brand", + "summary": "Get a PSA AutographFacts subject's profile and price guide", "tags": [ - "Poshmark" + "PSA" ] } }, - "/poshmark/brands": { + "/psa/autographfacts/subjects": { "get": { "consumes": [ "application/json" ], - "description": "Returns Poshmark's full brand directory: every brand Poshmark recognizes (name, slug, logo, known aliases), not just brands with active listings for a given search or category filter. Useful for resolving a brand name to the exact value the brand/search filters expect. Credential-free public data sourced from Poshmark's own server-rendered brand directory page.", - "operationId": "poshmark-brands", + "description": "Every autograph subject PSA AutographFacts lists for one category, each with the numeric subject_id to pass to psa-autographfacts-subject for that subject's full profile and price guide.", + "operationId": "psa-autographfacts-subjects", + "parameters": [ + { + "description": "Category id, from psa-autographfacts-categories", + "in": "query", + "name": "category_id", + "required": true, + "type": "integer", + "x-example": 4 + } + ], "produces": [ "application/json" ], @@ -346668,7 +382758,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/poshmark.brandsResponseDoc" + "$ref": "#/definitions/psa.autographFactsSubjectsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { @@ -346689,19 +382785,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get the full Poshmark brand directory", + "summary": "List PSA AutographFacts subjects in a category", "tags": [ - "Poshmark" + "PSA" ] } }, - "/poshmark/categories": { + "/psa/cardfacts/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns Poshmark's full department/category browse taxonomy (e.g. Women > Shoes, Men > Jackets & Coats). Each entry's path resolves directly against the category endpoint. This is reference data that changes rarely, so responses are cached. Credential-free public data sourced from Poshmark's own server-rendered category pages.", - "operationId": "poshmark-categories", + "description": "PSA CardFacts' full category list -- the discovery endpoint for the category_id parameter used to browse sets. Nine categories: Baseball, Basketball, Boxing, Football, Golf, Hockey, Misc Sports, Multi-Sport, and Non-Sports/TCG.", + "operationId": "psa-cardfacts-categories", "produces": [ "application/json" ], @@ -346709,7 +382805,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/poshmark.categoriesResponseDoc" + "$ref": "#/definitions/psa.cardFactsCategoriesResponseDoc" } }, "500": { @@ -346717,12 +382813,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -346730,33 +382820,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Poshmark department/category browse taxonomy", + "summary": "List PSA CardFacts categories", "tags": [ - "Poshmark" + "PSA" ] } }, - "/poshmark/category/{path}": { + "/psa/cardfacts/checklist": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of normalized Poshmark listings for a given category path (e.g. Women-Shoes, Men-Shirts), the same browsing view as Poshmark's own category pages. Pass a previous response's next_max_id back as max_id to fetch the next page. Credential-free public data sourced from Poshmark's own server-rendered category page and, for pages past the first, Poshmark's own JSON pagination API.", - "operationId": "poshmark-category", + "description": "One set's full card checklist: every card's name and printed number (number is empty for sets PSA lists without one, e.g. many autograph/player-only card sets). set_id is the numeric id from a psa-cardfacts-sets result.", + "operationId": "psa-cardfacts-checklist", "parameters": [ { - "description": "Poshmark category path segment, e.g. Women-Shoes, Men-Shirts", - "in": "path", - "name": "path", + "description": "Numeric set id, from a psa-cardfacts-sets result", + "in": "query", + "name": "set_id", "required": true, "type": "string", - "x-example": "Women-Shoes" - }, - { - "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", - "in": "query", - "name": "max_id", - "type": "string" + "x-example": "34071" } ], "produces": [ @@ -346766,7 +382850,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/poshmark.CategoryResponse" + "$ref": "#/definitions/psa.cardFactsChecklistResponseDoc" } }, "400": { @@ -346775,12 +382859,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -346799,33 +382877,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Poshmark listings by category", + "summary": "Get a PSA CardFacts set's card checklist", "tags": [ - "Poshmark" + "PSA" ] } }, - "/poshmark/closet/{username}": { + "/psa/cardfacts/sets": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Poshmark closet (seller storefront) page: the seller's public profile and reputation stats (followers, ratings, items sold) plus a first page of their currently available listings and total listing count. Pass a previous response's next_max_id back as max_id to fetch the next page of listings; paginated responses omit the seller profile to avoid a second upstream fetch, so fetch without max_id first to get seller fields. Credential-free public data sourced from Poshmark's own server-rendered closet page and, for pages past the first, Poshmark's own JSON pagination API.", - "operationId": "poshmark-closet", + "description": "Every card set PSA CardFacts lists for one category, each with the numeric set_id to pass to psa-cardfacts-checklist for that set's full card checklist.", + "operationId": "psa-cardfacts-sets", "parameters": [ { - "description": "Poshmark seller username, the path segment of a /closet/{username} URL", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "maltimar" - }, - { - "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", + "description": "Category id, from psa-cardfacts-categories", "in": "query", - "name": "max_id", - "type": "string" + "name": "category_id", + "required": true, + "type": "integer", + "x-example": 13 } ], "produces": [ @@ -346835,7 +382907,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/poshmark.ClosetResponse" + "$ref": "#/definitions/psa.cardFactsSetsResponseDoc" } }, "400": { @@ -346844,12 +382916,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -346868,27 +382934,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Poshmark seller closet (storefront)", + "summary": "List PSA CardFacts sets in a category", "tags": [ - "Poshmark" + "PSA" ] } }, - "/poshmark/listing/{id}": { + "/psa/cert-lookup": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized Poshmark item-detail page: the full listing (description, all photos, size/brand/condition, inventory), its seller's profile, public comments, and similar listings Poshmark itself surfaces on the same page. Credential-free public data sourced from Poshmark's own server-rendered listing page.", - "operationId": "poshmark-listing", + "description": "Looks up PSA's own public Cert Verification record for one PSA-graded card by its certification number: item title, grade, label type, reverse cert/barcode flag, year, brand/title, subject, card number, category, PSA's own price estimate, and this-cert's-own population figures (population for this exact card+grade, and pop-higher). Scoped to PSA's trading-card department; a cert number issued under a different PSA division (autographs, tickets) returns a not-found error. PSA's full Population Report and Auction Prices Realized both require a PSA/Collectors account login and are not available through this endpoint.", + "operationId": "psa-cert-lookup", "parameters": [ { - "description": "Poshmark listing id, the trailing id segment of a /listing/{slug}-{id} URL", - "in": "path", - "name": "id", + "description": "PSA certification number, numeric, e.g. \\", + "in": "query", + "name": "cert_number", "required": true, "type": "string", - "x-example": "6a3fed1de9c77df92e2c0cc6" + "x-example": "125866845" } ], "produces": [ @@ -346898,7 +382964,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/poshmark.ListingResponse" + "$ref": "#/definitions/psa.certLookupResponseDoc" } }, "400": { @@ -346931,40 +382997,74 @@ "ApiKeyAuth": [] } ], - "summary": "Get Poshmark listing detail", + "summary": "Verify a PSA certification number", "tags": [ - "Poshmark" + "PSA" ] } }, - "/poshmark/search": { + "/psa/price-guide/categories": { "get": { "consumes": [ "application/json" ], - "description": "Searches Poshmark for clothing, shoes, and accessory listings, returning normalized listing summaries (title, price, brand, size, condition, seller, images) plus the total matching count and an opaque pagination cursor. Pass a previous response's next_max_id back as max_id to fetch the next page. Credential-free public data sourced from Poshmark's own server-rendered search page and, for pages past the first, Poshmark's own JSON pagination API.", - "operationId": "poshmark-search", + "description": "PSA Price Guide's full category list -- the discovery endpoint for the category_path parameter used to browse or fetch a set's price table. Every category is a distinct collectible type (Baseball Cards, Basketball Cards, Boxing Cards, Football Cards, Golf Cards, Hockey Cards, Soccer Cards, Non-Sports/TCG Cards, Racing Cards, Sports Tickets, Tennis, Unopened Packs, Presidential Autographs, Sports Autographs, Professional Model/Game-Used Bats, Graded Baseballs).", + "operationId": "psa-price-guide-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/psa.priceGuideCategoriesResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List PSA Price Guide categories", + "tags": [ + "PSA" + ] + } + }, + "/psa/price-guide/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches PSA Price Guide by free text (a player/subject name or set name), matching PSA's own site search box. Each result is a matching set with the query's matching cards/items inside it; use a result's category_path, set_path and set_id as the input to psa-price-guide-set to fetch that set's full price table.", + "operationId": "psa-price-guide-search", "parameters": [ { - "description": "Free-text keyword search", + "description": "Free-text search term, e.g. a player/subject name or set name", "in": "query", "name": "query", "required": true, "type": "string", - "x-example": "nike jacket" + "x-example": "griffey" }, { - "description": "Department filter, e.g. Women, Men, Kids", + "description": "One-based result page, default 1", "in": "query", - "name": "department", - "type": "string", - "x-example": "Men" + "name": "page", + "type": "integer" }, { - "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", + "description": "Results per page, default 50, max 100", "in": "query", - "name": "max_id", - "type": "string" + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -346974,7 +383074,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/poshmark.searchResponseDoc" + "$ref": "#/definitions/psa.priceGuideSearchResponseDoc" } }, "400": { @@ -347001,33 +383101,43 @@ "ApiKeyAuth": [] } ], - "summary": "Search Poshmark listings", + "summary": "Search PSA Price Guide", "tags": [ - "Poshmark" + "PSA" ] } }, - "/poshmark/trend/{id}": { + "/psa/price-guide/set": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of normalized Poshmark listings for a curated trend/showroom collection (e.g. \"Vintage Celine Handbags\"), the same browsing view as Poshmark's own trend pages. Pass a previous response's next_max_id back as max_id to fetch the next page. Credential-free public data sourced from Poshmark's own server-rendered trend page and, for pages past the first, Poshmark's own JSON pagination API.", - "operationId": "poshmark-trend", + "description": "Fetches one PSA Price Guide set's full grade-by-grade price table: every card in the set with PSA's own formatted price per grade column (the set's own grade columns vary -- a vintage set may carry more/lower grade tiers than a modern one). category_path, set_path and set_id together identify the set; use the matching fields from a psa-price-guide-search result, or category_path from psa-price-guide-categories combined with a set_path/set_id found by browsing PSA's own category page.", + "operationId": "psa-price-guide-set", "parameters": [ { - "description": "Poshmark trend/showroom id, the trailing id segment of a /trend/{slug}-{id} URL", - "in": "path", - "name": "id", + "description": "Category URL path segment, from psa-price-guide-categories or a psa-price-guide-search result", + "in": "query", + "name": "category_path", "required": true, "type": "string", - "x-example": "964e80193927e69b518f631b" + "x-example": "baseball-card-values" }, { - "description": "Opaque pagination cursor from a previous response's next_max_id. Omit for the first page", + "description": "Set URL path segment, from a psa-price-guide-search result", "in": "query", - "name": "max_id", - "type": "string" + "name": "set_path", + "required": true, + "type": "string", + "x-example": "1974-topps" + }, + { + "description": "PSA's own numeric set id, from a psa-price-guide-search result", + "in": "query", + "name": "set_id", + "required": true, + "type": "string", + "x-example": "1239" } ], "produces": [ @@ -347037,7 +383147,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/poshmark.TrendResponse" + "$ref": "#/definitions/psa.priceGuideSetResponseDoc" } }, "400": { @@ -347070,19 +383180,19 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Poshmark trend/showroom collection", + "summary": "Get a PSA Price Guide set's price table", "tags": [ - "Poshmark" + "PSA" ] } }, - "/prada/categories": { + "/psa/probatfacts/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns Prada's (prada.com) full category taxonomy -- every browsable category with its own breadcrumb path and canonical URL -- plus the two gender values products.prada.com currently carries. categories[].id is exactly the value prada-category accepts as its own category_id parameter; genders[].value is exactly what prada-search and prada-category accept as their own gender parameter.", - "operationId": "prada-categories", + "description": "PSA ProBatFacts' full player-category list -- the discovery endpoint for the category_id parameter used to browse players. Baseball-bat authentication only, split by Hall of Fame status: Hall of Fame Players, Star Players.", + "operationId": "psa-probatfacts-categories", "produces": [ "application/json" ], @@ -347090,17 +383200,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/prada.categoriesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/psa.probatFactsCategoriesResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -347111,65 +383215,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Prada's category taxonomy and gender filter values", + "summary": "List PSA ProBatFacts categories", "tags": [ - "Prada" + "PSA" ] } }, - "/prada/category": { + "/psa/probatfacts/gallery": { "get": { "consumes": [ "application/json" ], - "description": "Browses one Prada category by ID, returning every product/color variant in it. category_id is required and must be one of prada-categories' own categories[].id values. gender optionally narrows to one of prada-categories' own genders[].value values. sort selects Prada's own relevance ranking or one of its price/newest orderings. A category with no products returns a well-formed empty result rather than an error.", - "operationId": "prada-category", + "description": "One player's full exemplar image gallery: real, captioned examples of authenticated bats PSA keeps on file for this player, used as authentication reference material. subject_id is the numeric id from a psa-probatfacts-subjects result.", + "operationId": "psa-probatfacts-gallery", "parameters": [ { - "description": "Category ID, from prada-categories' own categories[].id field", + "description": "Numeric subject id, from a psa-probatfacts-subjects result", "in": "query", - "name": "category_id", + "name": "subject_id", "required": true, "type": "string", - "x-example": "10062US" - }, - { - "description": "Gender filter. Allowed values: Woman, Man", - "enum": [ - "Woman", - "Man" - ], - "in": "query", - "name": "gender", - "type": "string", - "x-example": "Woman" - }, - { - "description": "Sort order. Allowed values: suggested, price_asc, price_desc, newest. Defaults to suggested (Prada's own relevance ranking)", - "enum": [ - "suggested", - "price_asc", - "price_desc", - "newest" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "price_asc" - }, - { - "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": "1490" } ], "produces": [ @@ -347179,7 +383245,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/prada.categoryResponseDoc" + "$ref": "#/definitions/psa.probatFactsGalleryResponseDoc" } }, "400": { @@ -347188,8 +383254,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" } @@ -347206,27 +383278,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Prada category", + "summary": "Get a PSA ProBatFacts player's exemplar image gallery", "tags": [ - "Prada" + "PSA" ] } }, - "/prada/product": { + "/psa/probatfacts/subject": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized product-detail data for one Prada product/color variant: name, price, stock, available sizes, breadcrumb, alternate colors, and images. pv is the product/color identifier, returned by prada-search's, prada-category's, and this endpoint's own products[].pv/other_colors[] fields (also the trailing path segment of a Prada product URL). description and the full image gallery are populated on a best-effort basis from the product's own page and may be briefly absent even for a valid pv; every other field is always populated. An unknown pv returns a not-found error.", - "operationId": "prada-product", + "description": "One player's full public reference page: PSA's own bat-authentication notes (professional models used, signature placement) and a general player biography. Unlike psa-autographfacts-subject, this carries no price guide. subject_id is the numeric id from a psa-probatfacts-subjects result.", + "operationId": "psa-probatfacts-subject", "parameters": [ { - "description": "Product/color identifier, from a search, category, or product result's own pv field", + "description": "Numeric subject id, from a psa-probatfacts-subjects result", "in": "query", - "name": "pv", + "name": "subject_id", "required": true, "type": "string", - "x-example": "1BA274_2CYS_F0002_V_YO0" + "x-example": "1490" } ], "produces": [ @@ -347236,7 +383308,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/prada.productResponseDoc" + "$ref": "#/definitions/psa.probatFactsSubjectResponseDoc" } }, "400": { @@ -347251,8 +383323,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -347269,65 +383341,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Prada product", + "summary": "Get a PSA ProBatFacts player's bat-authentication reference page", "tags": [ - "Prada" + "PSA" ] } }, - "/prada/search": { + "/psa/probatfacts/subjects": { "get": { "consumes": [ "application/json" ], - "description": "Searches Prada's (prada.com) product catalog by keyword, through its own public search index. q is required; gender and sort are the same optional values prada-category accepts. Keyword search is 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": "prada-search", + "description": "Every player PSA ProBatFacts lists for one category, each with the numeric subject_id to pass to psa-probatfacts-subject for that player's full bat-authentication reference page.", + "operationId": "psa-probatfacts-subjects", "parameters": [ { - "description": "Free-text search query", + "description": "Category id, from psa-probatfacts-categories", "in": "query", - "name": "q", + "name": "category_id", "required": true, - "type": "string", - "x-example": "galleria bag" - }, - { - "description": "Gender filter. Allowed values: Woman, Man", - "enum": [ - "Woman", - "Man" - ], - "in": "query", - "name": "gender", - "type": "string", - "x-example": "Woman" - }, - { - "description": "Sort order. Allowed values: suggested, price_asc, price_desc, newest. Defaults to suggested (Prada's own relevance ranking)", - "enum": [ - "suggested", - "price_asc", - "price_desc", - "newest" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "newest" - }, - { - "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": 29 } ], "produces": [ @@ -347337,7 +383371,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/prada.searchResponseDoc" + "$ref": "#/definitions/psa.probatFactsSubjectsResponseDoc" } }, "400": { @@ -347346,8 +383380,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -347364,63 +383398,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Prada products", + "summary": "List PSA ProBatFacts subjects in a category", "tags": [ - "Prada" + "PSA" ] } }, - "/prada/stores": { + "/psa/ticketfacts/categories": { "get": { "consumes": [ "application/json" ], - "description": "Locates Prada's (prada.com) physical retail stores worldwide, through its own public store-locator search. All parameters are optional: with none set, this returns Prada's full worldwide store list (up to limit). query is a free-text location search (city, country, or store name); lat/lng (both required together) narrow it to a geo-radius search, optionally sized with radius_km (defaults to 50, maximum 20000). A search with genuinely zero matches returns a well-formed empty result rather than an error.", - "operationId": "prada-stores", - "parameters": [ - { - "description": "Free-text location search (city, country, or store name)", - "in": "query", - "name": "query", - "type": "string", - "x-example": "New York" - }, - { - "description": "Search-center latitude, -90..90. Requires lng.", - "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.7128 - }, - { - "description": "Search-center longitude, -180..180. Requires lat.", - "in": "query", - "name": "lng", - "type": "number", - "x-example": -74.006 - }, - { - "description": "Search radius in kilometers around lat/lng, defaults to 50, maximum 20000. Requires lat and lng.", - "in": "query", - "name": "radius_km", - "type": "number", - "x-example": 50 - }, - { - "description": "Maximum stores returned, defaults to 20, maximum 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "Result offset for pagination, defaults to 0", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - } - ], + "description": "PSA TicketFacts' full event-category list -- the discovery endpoint for the category_id parameter used to browse events. Spans NFL, MLB and NBA historic events: Super Bowl, World Series, MLB All Star Game, Historic Baseball Events, and Historic Basketball Events.", + "operationId": "psa-ticketfacts-categories", "produces": [ "application/json" ], @@ -347428,23 +383418,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/prada.storesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/psa.ticketFactsCategoriesResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -347455,34 +383433,27 @@ "ApiKeyAuth": [] } ], - "summary": "Locate Prada retail stores", + "summary": "List PSA TicketFacts categories", "tags": [ - "Prada" + "PSA" ] } }, - "/prada/suggest": { + "/psa/ticketfacts/gallery": { "get": { "consumes": [ "application/json" ], - "description": "Returns Prada's own search-box typeahead suggestions for a partial query -- a ranked list of suggested search phrases with the live result count each one would return. Pass a suggestion straight through to prada-search's own q parameter for product results. A query with no genuine matches returns a well-formed empty result rather than an error.", - "operationId": "prada-suggest", + "description": "One event's full exemplar image gallery: real, captioned examples of authenticated tickets from this event PSA keeps on file, used as authentication reference material. subject_id is the numeric id from a psa-ticketfacts-subjects result.", + "operationId": "psa-ticketfacts-gallery", "parameters": [ { - "description": "Partial search query", + "description": "Numeric subject id, from a psa-ticketfacts-subjects result", "in": "query", - "name": "q", + "name": "subject_id", "required": true, "type": "string", - "x-example": "bag" - }, - { - "description": "Maximum suggestions, defaults to 10, maximum 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "1147" } ], "produces": [ @@ -347492,7 +383463,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/prada.suggestResponseDoc" + "$ref": "#/definitions/psa.ticketFactsGalleryResponseDoc" } }, "400": { @@ -347501,46 +383472,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 Prada search-box suggestions", - "tags": [ - "Prada" - ] - } - }, - "/pristine-auction/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the whole value space for pristine-auction-search's category, auction_type, sort, and status params. categories[] is fetched live (with a current listing count per category, refreshed on every call); auction_types[], sort[], and statuses[] are pristineauction.com's own fixed, small search-form value sets.", - "operationId": "pristine-auction-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/pristineauction.categoriesResponseDoc" - } }, "500": { "description": "Internal Server Error", @@ -347560,27 +383496,27 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Pristine Auction's search enum values", + "summary": "Get a PSA TicketFacts event's exemplar image gallery", "tags": [ - "Pristine Auction" + "PSA" ] } }, - "/pristine-auction/lot/{lot_number}": { + "/psa/ticketfacts/subject": { "get": { "consumes": [ "application/json" ], - "description": "Returns one pristineauction.com lot's full detail: title, description, image gallery, price (current high bid, or realized/sold price once the auction has ended), auction end time, sport/collectible category, auction type, no-reserve flag, and view/watch/bid counts. lot_number comes from pristine-auction-search's results[].lot_number. Credential-free public data -- see the endpoint markdown for the transport used.", - "operationId": "pristine-auction-lot-detail", + "description": "One event's full public ticket reference page: PSA's own historical writeup of the event and the ticket(s) involved. Unlike psa-autographfacts-subject, this carries no price guide. subject_id is the numeric id from a psa-ticketfacts-subjects result.", + "operationId": "psa-ticketfacts-subject", "parameters": [ { - "description": "A lot_number from pristine-auction-search's results", - "in": "path", - "name": "lot_number", + "description": "Numeric subject id, from a psa-ticketfacts-subjects result", + "in": "query", + "name": "subject_id", "required": true, - "type": "integer", - "x-example": 13154611 + "type": "string", + "x-example": "1147" } ], "produces": [ @@ -347590,7 +383526,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pristineauction.lotDetailResponseDoc" + "$ref": "#/definitions/psa.ticketFactsSubjectResponseDoc" } }, "400": { @@ -347623,139 +383559,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pristine Auction lot's full detail", + "summary": "Get a PSA TicketFacts event's ticket reference page", "tags": [ - "Pristine Auction" + "PSA" ] } }, - "/pristine-auction/search": { + "/psa/ticketfacts/subjects": { "get": { "consumes": [ "application/json" ], - "description": "Browses or searches pristineauction.com's current sports card and memorabilia auction lots. term or category is required, matching pristineauction.com's own search form. All enum values (category, auction_type, sort, status) come from pristine-auction-categories. status=completed browses ended/sold lots (a prices-realized view); the default (all statuses) mirrors the site's own default. Every filter is optional and combines with AND semantics. Credential-free public data -- see the endpoint markdown for the transport used.", - "operationId": "pristine-auction-search", + "description": "Every event PSA TicketFacts lists for one category, each with the numeric subject_id to pass to psa-ticketfacts-subject for that event's full ticket reference page.", + "operationId": "psa-ticketfacts-subjects", "parameters": [ { - "description": "Free-text search across lot titles. term or category is required.", - "in": "query", - "name": "term", - "type": "string", - "x-example": "mantle" - }, - { - "description": "One value from pristine-auction-categories' categories[].slug. term or category is required.", - "enum": [ - "fine-art", - "baseball", - "basketball", - "boxing-ufc", - "coins-bullion", - "comic-books", - "football", - "golf", - "historical", - "hockey", - "music", - "other-sports", - "pop-culture", - "racing", - "soccer", - "trading-cards", - "wrestling" - ], - "in": "query", - "name": "category", - "type": "string", - "x-example": "baseball" - }, - { - "description": "Comma-separated auction-type filter. Omit to include every auction type.", - "enum": [ - "previous_featured", - "ten_minute", - "daily", - "classic", - "fine_art", - "jewelry", - "pop_culture", - "tcg", - "helmet", - "nascar_foundation", - "sports_cards", - "coin", - "sports_gear", - "jersey", - "frame_it_up", - "fall_showcase", - "elite", - "live_stream" - ], - "in": "query", - "name": "auction_type", - "type": "string", - "x-example": "daily,classic" - }, - { - "description": "Comma-separated auction-status filter. status=completed browses ended/sold lots. Omit to include every status.", - "enum": [ - "future", - "active", - "canceled", - "completed", - "forfeited" - ], - "in": "query", - "name": "status", - "type": "string", - "x-example": "active" - }, - { - "description": "Result order, default newly-listed.", - "enum": [ - "newly-listed", - "bid-time-descending", - "price-descending", - "price-ascending", - "ending-soonest", - "ending-last", - "bid-count-descending", - "bid-count-ascending" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "ending-soonest" - }, - { - "description": "Minimum current bid price in USD, inclusive. Omit or 0 for no minimum.", - "in": "query", - "name": "min_price", - "type": "number" - }, - { - "description": "Maximum current bid price in USD, inclusive. Omit or 0 for no maximum.", - "in": "query", - "name": "max_price", - "type": "number" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page. pristineauction.com only accepts 15, 30, or 60; any other value is rejected. Default 30.", - "enum": [ - 15, - 30, - 60 - ], + "description": "Category id, from psa-ticketfacts-categories", "in": "query", - "name": "per_page", - "type": "integer" + "name": "category_id", + "required": true, + "type": "integer", + "x-example": 21 } ], "produces": [ @@ -347765,7 +383589,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pristineauction.searchResponseDoc" + "$ref": "#/definitions/psa.ticketFactsSubjectsResponseDoc" } }, "400": { @@ -347792,19 +383616,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Pristine Auction's live auction inventory", + "summary": "List PSA TicketFacts subjects in a category", "tags": [ - "Pristine Auction" + "PSA" ] } }, - "/pristine-marketplace/collections": { + "/psastore/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized collections from Pristine Marketplace (https://www.pristinemarketplace.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "pristine-marketplace-collections", + "description": "Returns normalized collections from the PSA Team Store (https://store.psacard.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "psastore-collections", "parameters": [ { "description": "1-based page, defaults to 1", @@ -347855,19 +383679,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Pristine Marketplace collections", + "summary": "List PSA Store collections", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/collections/{handle}/products": { + "/psastore/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from one Pristine Marketplace (https://www.pristinemarketplace.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug (typically a player, team, or memorabilia-type collection, e.g. `pop-culture`).", - "operationId": "pristine-marketplace-collection-products", + "description": "Returns normalized products from one PSA Team Store (https://store.psacard.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "psastore-collection-products", "parameters": [ { "description": "Collection handle", @@ -347875,7 +383699,7 @@ "name": "handle", "required": true, "type": "string", - "x-example": "pop-culture" + "x-example": "collection-handle" }, { "description": "1-based page, defaults to 1", @@ -347932,19 +383756,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Pristine Marketplace collection products", + "summary": "List PSA Store collection products", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/pages": { + "/psastore/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Pristine Marketplace (https://www.pristinemarketplace.com). The storefront URL is fixed server-side. The storefront's \"Shop by Sport\" navigation (NFL, MLB, NBA, NHL, NASCAR) resolves to pages here (handles `nfl`, `mlb`, `nba`, `nhl`, `nascar`), not to a separate collections-style resource -- each is a landing page linking into many player/team collections.", - "operationId": "pristine-marketplace-pages", + "description": "Returns normalized static pages from the PSA Team Store (https://store.psacard.com). The storefront URL is fixed server-side.", + "operationId": "psastore-pages", "parameters": [ { "description": "1-based page, defaults to 1", @@ -347995,19 +383819,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Pristine Marketplace static pages", + "summary": "List PSA Store static pages", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/pages/{handle}": { + "/psastore/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one Pristine Marketplace (https://www.pristinemarketplace.com) page handle. The storefront URL is fixed server-side. The \"Shop by Sport\" nav landing pages are reachable here as handles `nfl`, `mlb`, `nba`, `nhl`, and `nascar`.", - "operationId": "pristine-marketplace-page", + "description": "Returns normalized static page detail for one PSA Team Store (https://store.psacard.com) page handle. The storefront URL is fixed server-side.", + "operationId": "psastore-page", "parameters": [ { "description": "Page handle", @@ -348015,7 +383839,7 @@ "name": "handle", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "page-handle" } ], "produces": [ @@ -348058,19 +383882,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pristine Marketplace static page", + "summary": "Get a PSA Store static page", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/products": { + "/psastore/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from Pristine Marketplace's (https://www.pristinemarketplace.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "pristine-marketplace-products", + "description": "Returns normalized products from the PSA Team Store's (https://store.psacard.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "psastore-products", "parameters": [ { "description": "1-based page, defaults to 1", @@ -348121,19 +383945,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Pristine Marketplace products", + "summary": "List PSA Store products", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/products/{handle}": { + "/psastore/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized product detail for one Pristine Marketplace (https://www.pristinemarketplace.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "pristine-marketplace-product", + "description": "Returns normalized product detail for one PSA Team Store (https://store.psacard.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "psastore-product", "parameters": [ { "description": "Product handle", @@ -348184,19 +384008,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Pristine Marketplace product", + "summary": "Get a PSA Store product", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/products/{handle}/recommendations": { + "/psastore/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized recommended products for one Pristine Marketplace (https://www.pristinemarketplace.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "pristine-marketplace-product-recommendations", + "description": "Returns normalized recommended products for one PSA Team Store (https://store.psacard.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "psastore-product-recommendations", "parameters": [ { "description": "Product handle", @@ -348265,26 +384089,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Pristine Marketplace product recommendations", + "summary": "List PSA Store product recommendations", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/reviews": { + "/psastore/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Pristine Marketplace's (https://www.pristinemarketplace.com) public Judge.me store review feed. This is a store-wide, most-recent-first feed, not a per-product one: confirmed live, the storefront's own on-page review widget draws from and displays this same feed (labeled \"Reviews for other products\" on an individual product page), and no product/handle filter parameter narrows it. The storefront URL is fixed server-side. Judge.me fixes 5 reviews per upstream page regardless of any requested size, so this endpoint has no `limit` parameter -- `page` maps 1:1 onto Judge.me's own pagination.", - "operationId": "pristine-marketplace-reviews", + "description": "Returns products, collections, and query suggestions from the PSA Team Store's (https://store.psacard.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "psastore-search-suggest", "parameters": [ { - "description": "1-based page, defaults to 1. 5 reviews per page.", + "description": "Search query", "in": "query", - "name": "page", + "name": "q", + "required": true, + "type": "string", + "x-example": "case" + }, + { + "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": 1 + "x-example": 10 } ], "produces": [ @@ -348294,7 +384133,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.reviewsResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -348321,41 +384160,42 @@ "ApiKeyAuth": [] } ], - "summary": "List Pristine Marketplace store reviews", + "summary": "Get PSA Store search suggestions", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/search": { + "/psastore/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from Pristine Marketplace's (https://www.pristinemarketplace.com) own native full-text search results page, distinct from `/pristine-marketplace/search/suggest`'s predictive suggestions. The storefront URL is fixed server-side. Per-page size is fixed by the storefront's own theme (16 products per page) and is not adjustable; `limit` is honored only as an upper bound on the returned page.", - "operationId": "pristine-marketplace-search", + "description": "Returns capped URL entries from the PSA Team Store's (https://store.psacard.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "psastore-sitemap-urls", "parameters": [ { - "description": "Search query text", + "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": "q", - "required": true, + "name": "type", "type": "string", - "x-example": "jordan" - }, - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "products" }, { - "description": "Maximum products, defaults to 50 and supports up to 250, but never exceeds the storefront's own fixed 16-per-page grid", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 16 + "x-example": 50 } ], "produces": [ @@ -348365,7 +384205,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.siteSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -348392,43 +384232,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Pristine Marketplace products", + "summary": "List PSA Store sitemap URLs", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/search/suggest": { + "/psastore/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Pristine Marketplace's (https://www.pristinemarketplace.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "pristine-marketplace-search-suggest", - "parameters": [ - { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "jordan" - }, - { - "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 child sitemap URLs from the PSA Team Store's (https://store.psacard.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "psastore-sitemaps", "produces": [ "application/json" ], @@ -348436,7 +384252,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -348463,44 +384279,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Pristine Marketplace search suggestions", + "summary": "List PSA Store sitemaps", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/sitemap/urls": { + "/psastore/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns capped URL entries from Pristine Marketplace's (https://www.pristinemarketplace.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "pristine-marketplace-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 normalized storefront metadata for the PSA Team Store (https://store.psacard.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "psastore-store", "produces": [ "application/json" ], @@ -348508,7 +384299,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -348535,19 +384326,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Pristine Marketplace sitemap URLs", + "summary": "Get PSA Store store metadata", "tags": [ - "PristineMarketplace" + "PSAStore" ] } }, - "/pristine-marketplace/sitemaps": { + "/punch/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public Punch article metadata and body paragraphs from a canonical article URL.", + "operationId": "punch-article", + "parameters": [ + { + "description": "Canonical Punch article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://punchng.com/example-article-slug/" + } ], - "description": "Returns child sitemap URLs from Pristine Marketplace's (https://www.pristinemarketplace.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "pristine-marketplace-sitemaps", "produces": [ "application/json" ], @@ -348555,7 +384353,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -348564,8 +384362,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -348582,19 +384380,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Pristine Marketplace sitemaps", + "summary": "Get Punch article content", "tags": [ - "PristineMarketplace" + "Punch" ] } }, - "/pristine-marketplace/store": { + "/punch/author": { "get": { - "consumes": [ - "application/json" + "description": "Returns a Punch author's byline name and recent articles from a canonical author URL.", + "operationId": "punch-author", + "parameters": [ + { + "description": "Canonical Punch author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://punchng.com/author/example-author/" + } ], - "description": "Returns normalized storefront metadata for Pristine Marketplace (https://www.pristinemarketplace.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "pristine-marketplace-store", "produces": [ "application/json" ], @@ -348602,7 +384407,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/publicnews.punchAuthorResponseDoc" } }, "400": { @@ -348611,8 +384416,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -348629,27 +384434,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get Pristine Marketplace store metadata", + "summary": "Get a Punch author archive", "tags": [ - "PristineMarketplace" + "Punch" ] } }, - "/producthunt/category/{slug}": { + "/punch/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the category page payload for a Product Hunt category slug.", - "operationId": "producthunt-category", + "description": "Returns fresh headlines from one Punch topic page.", + "operationId": "punch-headlines", "parameters": [ { - "description": "Product Hunt category slug", - "in": "path", - "name": "slug", + "description": "Punch topic slug", + "enum": [ + "business", + "columns", + "continuation-from-print", + "diaspora", + "editorial", + "education", + "entertainment", + "feature", + "featured", + "foreign-news", + "health", + "healthwise", + "information-technology", + "interactive", + "interview", + "latest-news", + "law-digest-2", + "letters", + "metro-plus", + "news", + "opinion", + "osun-decides", + "panorama", + "politics", + "punch-lite", + "sex-relationship", + "smart-tips", + "society", + "special-features", + "spice", + "sponsored", + "sports", + "technology", + "top-stories", + "video", + "weekend-starter" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "\"vibe-coding\"" + "x-example": "business" } ], "produces": [ @@ -348657,31 +384497,57 @@ ], "responses": { "200": { - "description": "Wrapped category payload", + "description": "OK", "schema": { - "$ref": "#/definitions/producthunt.categoryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Category not found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Punch section headlines", + "tags": [ + "Punch" + ] + } + }, + "/punch/news": { + "get": { + "description": "Returns fresh Punch top stories from its public RSS feed.", + "operationId": "punch-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" } @@ -348692,99 +384558,63 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt category details", + "summary": "Get Punch top stories", "tags": [ - "ProductHunt" + "Punch" ] } }, - "/producthunt/category/{slug}/products": { + "/punch/sections": { "get": { - "consumes": [ + "description": "Returns the live-verified Punch topic (section) inventory used by the headlines endpoint.", + "operationId": "punch-sections", + "produces": [ "application/json" ], - "description": "Returns the products in a Product Hunt category (now backed by Product Hunt topics), cursor-paginated. Pass the `cursor` from a previous response's `end_cursor` to page; `page_size` controls the batch size. `page`, `featured_only`, `order` and `tags` are accepted for compatibility but no longer affect the result.", - "operationId": "producthunt-category-products", - "parameters": [ - { - "description": "Product Hunt category slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "\"developer-tools\"" - }, - { - "description": "Pagination cursor from a previous response's end_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": 15, - "description": "Page size (number of products)", - "in": "query", - "name": "page_size", - "type": "integer" - }, - { - "default": true, - "description": "Accepted for compatibility; no longer affects results", - "in": "query", - "name": "featured_only", - "type": "boolean" - }, - { - "default": "highest_rated", - "description": "Accepted for compatibility; no longer affects results", - "in": "query", - "name": "order", - "type": "string" - }, - { - "default": 1, - "description": "Accepted for compatibility; use cursor to paginate", - "in": "query", - "name": "page", - "type": "integer" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Accepted for compatibility; no longer affects results", - "in": "query", - "name": "tags", - "type": "string" + "ApiKeyAuth": [] } ], + "summary": "Get Punch sections", + "tags": [ + "Punch" + ] + } + }, + "/quince/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Quince's full product facet taxonomy sourced from the same Algolia index quince-search uses: every business department (Women, Men, Kids & Baby, Home, CPG, Emerging), department, category, material, primary color, and size value Quince currently has products for, each with its own live product count. The returned business_departments[].value/categories[].value/materials[].value/colors[].value/sizes[].value values are exactly what quince-search accepts as its own department/category/material/color/size parameters. sizes spans every product type Quince sells (apparel letter sizes, shoe sizes, rug/furniture dimensions, bedding sizes, and more) since it is one index-wide facet.", + "operationId": "quince-categories", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped category products payload", - "schema": { - "$ref": "#/definitions/producthunt.categoryProductsResponseDoc" - } - }, - "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Category not found", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/quince.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" } @@ -348795,119 +384625,37 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt category products", + "summary": "List Quince's product facet taxonomy", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/leaderboard": { + "/quince/navigation": { "get": { "consumes": [ "application/json" ], - "description": "Fetches Product Hunt leaderboard data for daily, weekly, monthly, or yearly scopes via Product Hunt GraphQL.", - "operationId": "producthunt-leaderboard", - "parameters": [ - { - "default": "daily", - "description": "Leaderboard scope: daily, weekly, monthly, yearly", - "enum": [ - "daily", - "weekly", - "monthly", - "yearly" - ], - "in": "query", - "name": "scope", - "type": "string" - }, - { - "description": "Anchor date in YYYY-MM-DD format. Used to derive missing year/month/day/week values.", - "format": "date", - "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-01-29" - }, - { - "description": "Leaderboard year override", - "in": "query", - "name": "year", - "type": "integer", - "x-example": 2026 - }, - { - "description": "Daily/monthly month override", - "in": "query", - "name": "month", - "type": "integer", - "x-example": 1 - }, - { - "description": "Daily day override", - "in": "query", - "name": "day", - "type": "integer", - "x-example": 29 - }, - { - "description": "Weekly ISO week override", - "in": "query", - "name": "week", - "type": "integer", - "x-example": 5 - }, - { - "default": true, - "description": "Featured products only", - "in": "query", - "name": "featured", - "type": "boolean" - }, - { - "description": "Ranking order override. Defaults to scope rank enum.", - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "string" - } - ], + "description": "Returns Quince's full header navigation mega-menu: top-level tabs (Women, Men, Home, Baby & Kids, Travel, Bags & Accessories, Jewelry, Beauty & Wellness, Gifts, plus promotional tabs like New Arrivals/Best Sellers/$50 Cashmere), each broken into the same named subcategory groups (for example Apparel, Jewelry, Shoes) shown in Quince's own nav dropdown, with a directly browsable slug on every category and link. This is a distinct taxonomy from quince-categories' Algolia facets: navigation is Quince's own curated site structure, while quince-categories reports live per-value product counts for quince-search's own filter parameters.", + "operationId": "quince-navigation", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped typed leaderboard payload", - "schema": { - "$ref": "#/definitions/producthunt.leaderboardResponseDoc" - } - }, - "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Product not found", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/quince.navigationResponseDoc" } }, "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" } @@ -348918,27 +384666,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt leaderboard", + "summary": "Get Quince's header navigation menu", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/product/{id}": { + "/quince/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns the core Product Hunt product details.", - "operationId": "producthunt-product", + "description": "Returns normalized product-detail data for one Quince product: title, description, review summary, every selectable option (color swatches with hex codes, sizes), and every color/size variant with its own price, original (\"traditional retail\") price, stock status, and SKU. handle is the product's URL path on quince.com (for example women/cashmere/cashmere-crewneck-sweater), returned by quince-search's own products[].handle field.", + "operationId": "quince-product", "parameters": [ { - "description": "Product Hunt slug or numeric ID", - "in": "path", - "name": "id", + "description": "Product URL handle, from a search result's products[].handle field", + "in": "query", + "name": "handle", "required": true, "type": "string", - "x-example": "\"chronicle-6\"" + "x-example": "women/cashmere/cashmere-crewneck-sweater" } ], "produces": [ @@ -348946,31 +384694,31 @@ ], "responses": { "200": { - "description": "Wrapped product payload (map[string]any)", + "description": "OK", "schema": { - "$ref": "#/definitions/producthunt.productResponseDoc" + "$ref": "#/definitions/quince.productResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Product 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" } @@ -348981,27 +384729,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt product details", + "summary": "Get a Quince product", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/product/{id}/about": { + "/quince/product/faq": { "get": { "consumes": [ "application/json" ], - "description": "Returns the richer Product Hunt about-page payload, including launch, forum, review tags, and media data.", - "operationId": "producthunt-about", + "description": "Returns a Quince product's own question/answer content (e.g. sizing, care, fit), from the same structured product data quince-product-reviews uses. handle is the same value quince-product accepts. Not every product carries FAQ content -- a product with none returns a well-formed empty result.", + "operationId": "quince-product-faq", "parameters": [ { - "description": "Product Hunt slug", - "in": "path", - "name": "id", + "description": "Product URL handle, from a search result's products[].handle field", + "in": "query", + "name": "handle", "required": true, "type": "string", - "x-example": "\"producthunt\"" + "x-example": "women/cashmere/cashmere-crewneck-sweater" } ], "produces": [ @@ -349009,31 +384757,31 @@ ], "responses": { "200": { - "description": "Wrapped typed about-page payload", + "description": "OK", "schema": { - "$ref": "#/definitions/producthunt.aboutResponseDoc" + "$ref": "#/definitions/quince.productFAQResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Product 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" } @@ -349044,53 +384792,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt product about page", + "summary": "Get a Quince product's FAQ content", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/product/{id}/alternatives": { + "/quince/product/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated alternatives, tags, and related discussions for a Product Hunt product.", - "operationId": "producthunt-alternatives", + "description": "Returns a sample of a Quince product's normalized customer reviews (author, date, rating, review body), plus the product's overall aggregate rating and review count. handle is the same value quince-product accepts. The reviews returned are the sample Quince's own page carries in its structured product data (confirmed live: 25 reviews on every product sampled during research), not a paginated feed of the full review history. A product with no reviews yet returns a well-formed empty result.", + "operationId": "quince-product-reviews", "parameters": [ { - "description": "Product Hunt slug", - "in": "path", - "name": "id", + "description": "Product URL handle, from a search result's products[].handle field", + "in": "query", + "name": "handle", "required": true, "type": "string", - "x-example": "\"clico\"" - }, - { - "default": 10, - "description": "Page size", - "in": "query", - "name": "first", - "type": "integer" - }, - { - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "most_relevant", - "description": "Sort order", - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "Comma-separated tag slugs", - "in": "query", - "name": "tags", - "type": "string" + "x-example": "women/cashmere/cashmere-crewneck-sweater" } ], "produces": [ @@ -349098,31 +384820,31 @@ ], "responses": { "200": { - "description": "Wrapped alternatives payload", + "description": "OK", "schema": { - "$ref": "#/definitions/producthunt.alternativesResponseDoc" + "$ref": "#/definitions/quince.productReviewsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Product 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" } @@ -349133,52 +384855,89 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt product alternatives", + "summary": "Get Quince product reviews", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/product/{id}/customers": { + "/quince/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated customer products for a Product Hunt product using Product Hunt's ProductCustomersPage GraphQL operation.", - "operationId": "producthunt-customers", + "description": "Searches or browses Quince's (quince.com) product catalog through its own public Algolia search index. q, department, category, material, color, size, min_price, and max_price are all optional and combine as an AND -- unlike some other families' search/category-browse split, 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 catalog by Quince's own relevance/popularity ranking. department accepts one of the values quince-categories' own business_departments[].value field returns (for example Women, Men, Kids & Baby, Home, CPG, Emerging); category, material, color, and size similarly accept values from quince-categories' own categories[].value/materials[].value/colors[].value/sizes[].value fields (or quince-navigation's own browsable category/subcategory slugs for a curated, hierarchical alternative to the flat category facet). Keyword search is Algolia's own typo-tolerant relevance ranking, not a guaranteed exact match. A query with genuinely zero matches (for example a nonsense string) returns a well-formed empty result rather than an error.", + "operationId": "quince-search", "parameters": [ { - "description": "Product Hunt slug", - "in": "path", - "name": "id", - "required": true, + "description": "Free-text search query", + "in": "query", + "name": "q", "type": "string", - "x-example": "\"openai\"" + "x-example": "cashmere sweater" }, { - "default": "customers", - "description": "Product Hunt customers order", - "enum": [ - "customers", - "latest_launch" - ], + "description": "Business department facet filter, from quince-categories' own business_departments[].value field", "in": "query", - "name": "order", - "type": "string" + "name": "department", + "type": "string", + "x-example": "Women" }, { - "default": 1, - "description": "Page number", + "description": "Category facet filter, from quince-categories' own categories[].value field", + "in": "query", + "name": "category", + "type": "string", + "x-example": "Apparel" + }, + { + "description": "Material facet filter, from quince-categories' own materials[].value field", + "in": "query", + "name": "material", + "type": "string", + "x-example": "Cashmere" + }, + { + "description": "Primary color facet filter, from quince-categories' own colors[].value field", + "in": "query", + "name": "color", + "type": "string", + "x-example": "Grey" + }, + { + "description": "Size facet filter, from quince-categories' own sizes[].value field", + "in": "query", + "name": "size", + "type": "string", + "x-example": "M" + }, + { + "description": "Minimum price (inclusive), in USD", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 25 + }, + { + "description": "Maximum price (inclusive), in USD", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 100 + }, + { + "description": "One-based page number, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "default": 10, - "description": "Results per page", + "description": "Results per page, defaults to 24, maximum 100", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -349186,31 +384945,25 @@ ], "responses": { "200": { - "description": "Wrapped customers payload", + "description": "OK", "schema": { - "$ref": "#/definitions/producthunt.customersResponseDoc" + "$ref": "#/definitions/quince.searchResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Product 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" } @@ -349221,41 +384974,40 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt product customers", + "summary": "Search or browse Quince products", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/product/{id}/launches": { + "/quince/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated launch posts for a Product Hunt product using Product Hunt's ProductPageLaunches GraphQL operation.", - "operationId": "producthunt-launches", + "description": "Returns capped URL entries from Quince's own sitemaps matching the requested type. Each entry's handle is populated from the URL's own path (tracking/variant query parameters stripped) -- for type products, this is directly the value quince-product's own handle parameter expects.", + "operationId": "quince-sitemap-urls", "parameters": [ { - "description": "Product Hunt slug", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "\"openai\"" - }, - { - "description": "Pagination cursor", + "description": "Sitemap type. Allowed values: all, products, collections, subcollections, pages", + "enum": [ + "all", + "products", + "collections", + "subcollections", + "pages" + ], "in": "query", - "name": "cursor", - "type": "string" + "name": "type", + "type": "string", + "x-example": "products" }, { - "default": "DATE", - "description": "Product Hunt launch order", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "order", - "type": "string", - "x-example": "DATE" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -349263,31 +385015,25 @@ ], "responses": { "200": { - "description": "Wrapped launches payload", + "description": "OK", "schema": { - "$ref": "#/definitions/producthunt.launchesResponseDoc" + "$ref": "#/definitions/quince.sitemapURLsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Product 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" } @@ -349298,65 +385044,37 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt product launches", + "summary": "List Quince sitemap URLs", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/product/{id}/makers": { + "/quince/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns maker items for a Product Hunt product.", - "operationId": "producthunt-makers", - "parameters": [ - { - "description": "Product Hunt slug", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "\"clico\"" - }, - { - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "string" - } - ], + "description": "Returns Quince's US-region child sitemaps (products, collections, subcollections, and static pages) with an inferred type, from quince.com's own public sitemap index.", + "operationId": "quince-sitemaps", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped makers payload", - "schema": { - "$ref": "#/definitions/producthunt.makersResponseDoc" - } - }, - "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Product not found", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/quince.sitemapsResponseDoc" } }, "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" } @@ -349367,27 +385085,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt product makers", + "summary": "List Quince sitemaps", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/product/{id}/reviews": { + "/quince/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns detailed review items for a Product Hunt product.", - "operationId": "producthunt-reviews", + "description": "Returns Quince's own search-box typeahead suggestions for a partial query: a flat list of suggested search phrases, no product data. Pass a suggestion straight through to quince-search's own q parameter for product results. A query with no genuine matches returns a well-formed empty result rather than an error.", + "operationId": "quince-suggest", "parameters": [ { - "description": "Product Hunt slug", - "in": "path", - "name": "id", + "description": "Search query prefix", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "\"clico\"" + "x-example": "cash" } ], "produces": [ @@ -349395,31 +385113,25 @@ ], "responses": { "200": { - "description": "Wrapped detailed reviews payload", + "description": "OK", "schema": { - "$ref": "#/definitions/producthunt.reviewsResponseDoc" + "$ref": "#/definitions/quince.suggestResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Product 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" } @@ -349430,61 +385142,26 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Product Hunt product detailed reviews", + "summary": "Get Quince search suggestions", "tags": [ - "ProductHunt" + "Quince" ] } }, - "/producthunt/search": { + "/raisingcanes/directory": { "get": { "consumes": [ "application/json" ], - "description": "Performs a full-text Product Hunt search and returns matching products, users, or launches.", - "operationId": "producthunt-search", + "description": "Returns one level of Raising Cane's store directory tree. Omit path for the root, which lists the US states Raising Cane's operates in; pass a child's path to descend (state to cities, city to 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 record rather than another directory level -- pass its path to GET /raisingcanes/store. This is a directory browse, not a proximity search: use GET /raisingcanes/nearby for a radius lookup.", + "operationId": "raisingcanes-directory", "parameters": [ { - "description": "Search keywords", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "\"ai\"" - }, - { - "default": "product", - "description": "Result type: **product** (default), **user**, or **launch**", - "enum": [ - "product", - "user", - "launch" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Page number (1-based)", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 2 - }, - { - "default": false, - "description": "Launch search only: featured launches only", - "in": "query", - "name": "featured", - "type": "boolean" - }, - { - "description": "Launch search only: comma-separated topic slugs", + "description": "Directory path from a previous response's children[].path, e.g. la. Omit for the root state index.", "in": "query", - "name": "topics", + "name": "path", "type": "string", - "x-example": "ai-chatbots,chrome-extensions" + "x-example": "la" } ], "produces": [ @@ -349492,31 +385169,31 @@ ], "responses": { "200": { - "description": "Wrapped search payload (map[string]any)", + "description": "OK", "schema": { - "$ref": "#/definitions/producthunt.searchResponseDoc" + "$ref": "#/definitions/raisingcanes.directoryResponseDoc" } }, "400": { - "description": "Missing or invalid 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", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -349527,26 +385204,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search for products, users, or launches on Product Hunt", + "summary": "Browse the Raising Cane's store directory", "tags": [ - "ProductHunt" + "Raising Cane's" ] } }, - "/propublica/article": { + "/raisingcanes/menu": { "get": { - "description": "Returns public ProPublica article metadata (title, author(s), published/updated dates, dek) and body paragraphs from a canonical article URL.", - "operationId": "propublica-article", - "parameters": [ - { - "description": "Canonical ProPublica article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.propublica.org/article/fbi-susan-collins-navatek-campaign-donations-investigation" - } + "consumes": [ + "application/json" ], + "description": "Returns Raising Cane's full published menu: every section (Combos, Tailgates, Extras, Drinks) and every item, each with its name, Raising Cane's own item description (commonly ending in a calorie count or range), and image. This is a single fixed national menu page, not a per-store or per-region menu -- it takes no parameters. Raising Cane's does not publish price on this page; pricing lives behind the separate order.raisingcanes.com ordering flow, which needs a selected store and is out of scope here.", + "operationId": "raisingcanes-menu", "produces": [ "application/json" ], @@ -349554,17 +385224,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/raisingcanes.menuResponseDoc" } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -349581,31 +385251,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get ProPublica article content", + "summary": "Get Raising Cane's full published menu", "tags": [ - "ProPublica" + "Raising Cane's" ] } }, - "/propublica/author": { + "/raisingcanes/nearby": { "get": { - "description": "Returns one ProPublica staff/contributor's public profile: name, bio, contact email and social accounts where published, and one page of their recent bylined stories.", - "operationId": "propublica-author", + "consumes": [ + "application/json" + ], + "description": "Returns Raising Cane's restaurants within a radius of a latitude/longitude, ordered nearest first, each with its distance in miles and kilometres, address, coordinates, timezone, price tier and which pickup/delivery services it offers. This proximity result carries less detail than GET /raisingcanes/store (Raising Cane's own nearby-search key is not configured with hours or phone) -- each result's `path` chains straight into GET /raisingcanes/store for the full record. `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 Raising Cane's nearby returns an empty list rather than an error.", + "operationId": "raisingcanes-nearby", "parameters": [ { - "description": "Canonical propublica.org/people/ URL", + "description": "Search center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Search center longitude", "in": "query", - "name": "url", + "name": "longitude", "required": true, - "type": "string", - "x-example": "https://www.propublica.org/people/william-turton" + "type": "number", + "x-example": -74.006 }, { - "description": "1-based page of recent stories to return; defaults to 1", + "description": "Search radius in miles, 1-100 (default 25)", "in": "query", - "name": "page", + "name": "radius", "type": "integer", - "x-example": 1 + "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": [ @@ -349615,7 +385310,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.propublicaAuthorResponseDoc" + "$ref": "#/definitions/raisingcanes.nearbyResponseDoc" } }, "400": { @@ -349630,6 +385325,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -349642,58 +385343,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a ProPublica staff profile", + "summary": "Find Raising Cane's stores near a coordinate, nearest first", "tags": [ - "ProPublica" + "Raising Cane's" ] } }, - "/propublica/headlines": { + "/raisingcanes/promotion": { "get": { - "description": "Returns fresh headlines from one public ProPublica topic feed.", - "operationId": "propublica-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one Raising Cane's promotion's published official terms: title and official-rules text (eligibility, prize details, effective date), exactly as the promotion's own page publishes them, as separate paragraphs in publication order. Promotion paths come from GET /raisingcanes/promotions entries. A path with no promotion at it (expired, mistyped, or the empty path some index entries carry) returns a 404.", + "operationId": "raisingcanes-promotion", "parameters": [ { - "description": "ProPublica topic slug", - "enum": [ - "abortion", - "biden-administration", - "civil-rights", - "courts", - "criminal-justice", - "debt", - "democracy", - "department-of-governmental-efficiency", - "education", - "environment", - "health-care", - "health-insurance", - "immigration", - "jan-6", - "labor", - "mental-health", - "military", - "nonprofits", - "police", - "politics", - "pollution", - "pregnancy", - "prison", - "racial-justice", - "real-estate", - "regulation", - "sex-and-gender", - "sports", - "stock", - "taxes", - "technology", - "trump-administration", - "usaid" - ], + "description": "Promotion page slug from a /raisingcanes/promotions entry's path", "in": "query", - "name": "section", + "name": "path", "required": true, - "type": "string" + "type": "string", + "x-example": "first-50-promotion" } ], "produces": [ @@ -349703,7 +385373,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/raisingcanes.promotionResponseDoc" } }, "400": { @@ -349712,6 +385382,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": { @@ -349724,16 +385406,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get ProPublica topic headlines", + "summary": "Get one Raising Cane's promotion's terms", "tags": [ - "ProPublica" + "Raising Cane's" ] } }, - "/propublica/news": { + "/raisingcanes/promotions": { "get": { - "description": "Returns fresh ProPublica top stories from its public RSS feed.", - "operationId": "propublica-news", + "consumes": [ + "application/json" + ], + "description": "Returns Raising Cane's full promotions index: every current and past sweepstakes, giveaway, and other promotion the site links to, grouped under Raising Cane's own category headings (e.g. \"Sweepstakes & Giveaways\", \"Lucky Promotions\", \"First Promotions\"). Each entry's path chains into GET /raisingcanes/promotion for that promotion's full official-rules text. Some entries carry an empty path -- Raising Cane's own index links a since-expired promotion back to the homepage rather than removing the entry; treat an empty path as no longer resolvable rather than a bug.", + "operationId": "raisingcanes-promotions", "produces": [ "application/json" ], @@ -349741,7 +385426,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/raisingcanes.promotionsResponseDoc" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -349762,45 +385453,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get ProPublica top stories", + "summary": "Browse Raising Cane's promotions index", "tags": [ - "ProPublica" + "Raising Cane's" ] } }, - "/propublica/sections": { + "/raisingcanes/store": { "get": { - "description": "Returns the complete public topic inventory accepted by /api/v1/propublica/headlines.", - "operationId": "propublica-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Returns one Raising Cane's store: name, full postal address, phone, coordinates, its general weekly hours plus separately published dine-in and drive-thru hours, Raising Cane's own per-store amenity labels (e.g. DRIVE_THRU, CURBSIDE_PICKUP), which pickup/delivery services it offers, and its Google Place id. Store paths come from GET /raisingcanes/directory entries whose is_store is true. Passing a directory path here returns a 404 rather than a hollow record.", + "operationId": "raisingcanes-store", + "parameters": [ { - "ApiKeyAuth": [] + "description": "Store path from a /raisingcanes/directory child with is_store true", + "in": "query", + "name": "path", + "required": true, + "type": "string", + "x-example": "la/gonzales/625-airline-hwy" } ], - "summary": "Get ProPublica topics", - "tags": [ - "ProPublica" - ] - } - }, - "/psa/autographfacts/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "PSA AutographFacts' full subject-category list -- the discovery endpoint for the category_id parameter used to browse subjects. Categories span far beyond sports: Baseball, Basketball, Football, Boxing, Golf, Hockey, Soccer, Tennis, MMA, Miscellaneous Sports, Cycling, Olympics, Motorsports, Entertainment, Music, Writers/Authors/Artists, Space Exploration, U.S. Presidents, and Historical & Political Figures.", - "operationId": "psa-autographfacts-categories", "produces": [ "application/json" ], @@ -349808,11 +385483,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.autographFactsCategoriesResponseDoc" + "$ref": "#/definitions/raisingcanes.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" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -349823,27 +385516,24 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA AutographFacts categories", + "summary": "Get one Raising Cane's store's detail", "tags": [ - "PSA" + "Raising Cane's" ] } }, - "/psa/autographfacts/gallery": { + "/rappler/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "One autograph subject's full exemplar image gallery: real, captioned examples of authenticated signed items PSA keeps on file for this subject (signed photos, cards, baseballs, letters, contracts, and more), used as authentication reference material. subject_id is the numeric id from a psa-autographfacts-subjects result.", - "operationId": "psa-autographfacts-gallery", + "description": "Returns public Rappler article metadata and body paragraphs from a canonical article URL. Rappler+ member-tier stories are flagged with paywalled.", + "operationId": "rappler-article", "parameters": [ { - "description": "Numeric subject id, from a psa-autographfacts-subjects result", + "description": "Canonical Rappler article URL", "in": "query", - "name": "subject_id", + "name": "url", "required": true, "type": "string", - "x-example": "1" + "x-example": "https://www.rappler.com/sports/tennis-alex-eala-tatiana-prozorova-singapore-open-september-24-2026/" } ], "produces": [ @@ -349853,7 +385543,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.autographFactsGalleryResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -349868,12 +385558,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -349886,27 +385570,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA AutographFacts subject's exemplar image gallery", + "summary": "Get Rappler article content", "tags": [ - "PSA" + "Rappler" ] } }, - "/psa/autographfacts/subject": { + "/rappler/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "One autograph subject's full public reference page: PSA's own authentication notes (signing habits, forgery risk, signature evolution), a general biography, and a per-item-type price guide (e.g. 3x5/AP card, photo, check, letter, single-signed ball -- item types vary by subject). subject_id is the numeric id from a psa-autographfacts-subjects result.", - "operationId": "psa-autographfacts-subject", + "description": "Returns one Rappler author's public profile: name, bio, public social links, and their most recent articles.", + "operationId": "rappler-author", "parameters": [ { - "description": "Numeric subject id, from a psa-autographfacts-subjects result", + "description": "Author slug, e.g. delfin-dioquino", "in": "query", - "name": "subject_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "1" + "x-example": "delfin-dioquino" + }, + { + "description": "Canonical rappler.com/author// URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rappler.com/author/delfin-dioquino/" } ], "produces": [ @@ -349916,7 +385603,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.autographFactsSubjectResponseDoc" + "$ref": "#/definitions/publicnews.rapplerAuthorResponseDoc" } }, "400": { @@ -349931,12 +385618,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -349949,27 +385630,201 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA AutographFacts subject's profile and price guide", + "summary": "Get a Rappler author profile", "tags": [ - "PSA" + "Rappler" ] } }, - "/psa/autographfacts/subjects": { + "/rappler/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Every autograph subject PSA AutographFacts lists for one category, each with the numeric subject_id to pass to psa-autographfacts-subject for that subject's full profile and price guide.", - "operationId": "psa-autographfacts-subjects", + "description": "Returns fresh headlines from one public Rappler section feed.", + "operationId": "rappler-headlines", "parameters": [ { - "description": "Category id, from psa-autographfacts-categories", + "description": "Rappler section slug", + "enum": [ + "about", + "awards-recognition", + "news-updates", + "policies", + "special-projects", + "team", + "brandrap", + "announcements", + "beyond-the-buy", + "communicart", + "data-stories", + "detours", + "finance-and-industries", + "first-look", + "food-drinks-dining", + "get-ready-with-me", + "goodrap", + "health-beauty-and-wellness", + "home-and-parenting", + "lifestyle-and-entertainment", + "profiles-and-advocacies", + "reading-book-recommendations", + "tech-and-innovation", + "travel-and-food", + "bulletin-board", + "advisories", + "campus", + "contests-awards", + "corrections", + "events", + "examination-results", + "philippine-government-job-openings", + "scholarships", + "trainings-workshops", + "business", + "consumer-issues", + "corporate", + "economy", + "industries", + "infrastructure", + "personal-finance", + "stocks-banking", + "culture-desk", + "astrology", + "careers", + "food-drinks", + "health-and-wellness", + "literature", + "noteworthy", + "relationships", + "style", + "travel", + "editors-pick", + "elections-philippines-stories", + "entertainment", + "celebrities", + "korean-popular-music", + "live-jam", + "movies", + "music", + "pageants", + "series", + "theater", + "environment", + "climate-change", + "disasters", + "nature", + "pollution", + "faith-religion", + "hustle", + "adulting", + "food", + "play", + "purpose", + "work", + "moveph", + "advocacies", + "agos", + "partners", + "social-good-summit", + "nation", + "newsbreak", + "data-documents", + "explainers", + "fact-check", + "in-depth", + "inside-track", + "investigative", + "iq", + "podcasts-videos", + "people", + "actors", + "artists", + "athletes", + "crimes", + "human-interest", + "neighbors", + "newsmakers", + "obituary", + "profiles", + "philippines", + "elections", + "government", + "luzon", + "metro-manila", + "mindanao", + "national-news", + "overseas-filipinos", + "rappler-talk", + "special-coverage", + "visayas", + "weather", + "plus-membership-program", + "exclusive-content", + "exclusive-events", + "science", + "discoveries-inventions", + "earth-space", + "life-health", + "society-culture", + "social-issues", + "sports", + "boxing", + "fiba", + "football", + "gilas-pilipinas", + "nba", + "ncaa", + "palarong-pambansa", + "pba", + "southeast-asian-games", + "uaap", + "volleyball", + "technology", + "apps", + "features", + "gadgets", + "gaming", + "innovations", + "internet-culture", + "reviews", + "social-media", + "the-wrap", + "top-stories", + "video", + "act-one", + "basagan-ng-trip", + "daily-wrap", + "documentaries", + "editorial", + "hold-the-line-maria-ressa-interview", + "rappler-live-jam", + "rappler-talk-video", + "reporters-vlogs", + "top-5-news-this-week", + "video-explainers", + "watch-now-live", + "voices", + "editorials", + "imho", + "ispeak", + "new-school", + "newsletters", + "rappler-blogs", + "thought-leaders", + "world", + "africa", + "asia-pacific", + "europe", + "global-affairs", + "indonesia", + "latin-america", + "middle-east", + "south-central-asia", + "us-canada" + ], "in": "query", - "name": "category_id", + "name": "section", "required": true, - "type": "integer", - "x-example": 4 + "type": "string", + "x-example": "about" } ], "produces": [ @@ -349979,7 +385834,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.autographFactsSubjectsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -349988,12 +385843,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -350006,19 +385855,16 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA AutographFacts subjects in a category", + "summary": "Get Rappler section headlines", "tags": [ - "PSA" + "Rappler" ] } }, - "/psa/cardfacts/categories": { + "/rappler/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "PSA CardFacts' full category list -- the discovery endpoint for the category_id parameter used to browse sets. Nine categories: Baseball, Basketball, Boxing, Football, Golf, Hockey, Misc Sports, Multi-Sport, and Non-Sports/TCG.", - "operationId": "psa-cardfacts-categories", + "description": "Returns fresh Rappler stories from the public site-wide RSS feed.", + "operationId": "rappler-news", "produces": [ "application/json" ], @@ -350026,11 +385872,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.cardFactsCategoriesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -350041,27 +385887,50 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA CardFacts categories", + "summary": "Get Rappler top stories", "tags": [ - "PSA" + "Rappler" ] } }, - "/psa/cardfacts/checklist": { + "/rappler/sections": { "get": { - "consumes": [ + "description": "Returns the public Rappler editorial section inventory: every category the site publishes with a live feed.", + "operationId": "rappler-sections", + "produces": [ "application/json" ], - "description": "One set's full card checklist: every card's name and printed number (number is empty for sets PSA lists without one, e.g. many autograph/player-only card sets). set_id is the numeric id from a psa-cardfacts-sets result.", - "operationId": "psa-cardfacts-checklist", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Rappler sections", + "tags": [ + "Rappler" + ] + } + }, + "/rawstory/article": { + "get": { + "description": "Returns public Raw Story article metadata and body paragraphs from a canonical article URL.", + "operationId": "rawstory-article", "parameters": [ { - "description": "Numeric set id, from a psa-cardfacts-sets result", + "description": "Canonical Raw Story article URL", "in": "query", - "name": "set_id", + "name": "url", "required": true, "type": "string", - "x-example": "34071" + "x-example": "https://www.rawstory.com/trump-media-ban-2677933730/" } ], "produces": [ @@ -350071,7 +385940,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.cardFactsChecklistResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -350080,8 +385949,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -350098,27 +385967,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA CardFacts set's card checklist", + "summary": "Get Raw Story article content", "tags": [ - "PSA" + "Raw Story" ] } }, - "/psa/cardfacts/sets": { + "/rawstory/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Every card set PSA CardFacts lists for one category, each with the numeric set_id to pass to psa-cardfacts-checklist for that set's full card checklist.", - "operationId": "psa-cardfacts-sets", + "description": "Returns one Raw Story author's public profile: name, bio, avatar, public social links, and their 15 most recent stories.", + "operationId": "rawstory-author", "parameters": [ { - "description": "Category id, from psa-cardfacts-categories", + "description": "Author slug, e.g. bennitokelty", "in": "query", - "name": "category_id", - "required": true, - "type": "integer", - "x-example": 13 + "name": "slug", + "type": "string", + "x-example": "bennitokelty" + }, + { + "description": "Canonical rawstory.com/u/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rawstory.com/u/bennitokelty" } ], "produces": [ @@ -350128,7 +386000,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.cardFactsSetsResponseDoc" + "$ref": "#/definitions/publicnews.rawstoryAuthorResponseDoc" } }, "400": { @@ -350137,8 +386009,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -350155,27 +386027,41 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA CardFacts sets in a category", + "summary": "Get a Raw Story author profile", "tags": [ - "PSA" + "Raw Story" ] } }, - "/psa/cert-lookup": { + "/rawstory/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Looks up PSA's own public Cert Verification record for one PSA-graded card by its certification number: item title, grade, label type, reverse cert/barcode flag, year, brand/title, subject, card number, category, PSA's own price estimate, and this-cert's-own population figures (population for this exact card+grade, and pop-higher). Scoped to PSA's trading-card department; a cert number issued under a different PSA division (autographs, tickets) returns a not-found error. PSA's full Population Report and Auction Prices Realized both require a PSA/Collectors account login and are not available through this endpoint.", - "operationId": "psa-cert-lookup", + "description": "Returns fresh headlines from one public Raw Story section feed.", + "operationId": "rawstory-headlines", "parameters": [ { - "description": "PSA certification number, numeric, e.g. \\", + "description": "Raw Story section slug", + "enum": [ + "us-news", + "trump-news", + "world", + "enviro-science", + "all-video", + "raw-investigates", + "also-read", + "commentary", + "blogs-media", + "2026-midterm-elections-section", + "presidential-campaign-issues", + "smartnews", + "super-head", + "jd-vance", + "supreme-court" + ], "in": "query", - "name": "cert_number", + "name": "section", "required": true, "type": "string", - "x-example": "125866845" + "x-example": "us-news" } ], "produces": [ @@ -350185,7 +386071,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.certLookupResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -350194,16 +386080,36 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal Server Error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Raw Story section headlines", + "tags": [ + "Raw Story" + ] + } + }, + "/rawstory/news": { + "get": { + "description": "Returns fresh Raw Story stories from the public site-wide RSS feed.", + "operationId": "rawstory-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -350218,19 +386124,16 @@ "ApiKeyAuth": [] } ], - "summary": "Verify a PSA certification number", + "summary": "Get Raw Story top stories", "tags": [ - "PSA" + "Raw Story" ] } }, - "/psa/price-guide/categories": { + "/rawstory/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "PSA Price Guide's full category list -- the discovery endpoint for the category_path parameter used to browse or fetch a set's price table. Every category is a distinct collectible type (Baseball Cards, Basketball Cards, Boxing Cards, Football Cards, Golf Cards, Hockey Cards, Soccer Cards, Non-Sports/TCG Cards, Racing Cards, Sports Tickets, Tennis, Unopened Packs, Presidential Autographs, Sports Autographs, Professional Model/Game-Used Bats, Graded Baseballs).", - "operationId": "psa-price-guide-categories", + "description": "Returns the public Raw Story section and topic hub inventory: every hub the site publishes with a live feed.", + "operationId": "rawstory-sections", "produces": [ "application/json" ], @@ -350238,13 +386141,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.priceGuideCategoriesResponseDoc" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -350253,39 +386150,57 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA Price Guide categories", + "summary": "Get Raw Story sections", "tags": [ - "PSA" + "Raw Story" ] } }, - "/psa/price-guide/search": { + "/ready": { "get": { "consumes": [ "application/json" ], - "description": "Searches PSA Price Guide by free text (a player/subject name or set name), matching PSA's own site search box. Each result is a matching set with the query's matching cards/items inside it; use a result's category_path, set_path and set_id as the input to psa-price-guide-set to fetch that set's full price table.", - "operationId": "psa-price-guide-search", + "description": "Returns process readiness and lightweight dependency health. Dependency failures remain visible in the response but do not remove a serving pod from rotation. Root `/ready` returns the same payload as a compatibility alias, while `/ping` remains the lightweight liveness endpoint.", + "operationId": "ready", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/api.readinessResponseDoc" + } + } + }, + "summary": "Return API readiness", + "tags": [ + "Meta" + ] + } + }, + "/rebag/collections": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized collections from Rebag (https://shop.rebag.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "rebag-collections", "parameters": [ { - "description": "Free-text search term, e.g. a player/subject name or set name", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "griffey" - }, - { - "description": "One-based result page, default 1", + "description": "1-based page, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Results per page, default 50, max 100", + "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": [ @@ -350295,7 +386210,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.priceGuideSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -350304,8 +386219,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350322,43 +386237,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search PSA Price Guide", + "summary": "List Rebag collections", "tags": [ - "PSA" + "Rebag" ] } }, - "/psa/price-guide/set": { + "/rebag/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Fetches one PSA Price Guide set's full grade-by-grade price table: every card in the set with PSA's own formatted price per grade column (the set's own grade columns vary -- a vintage set may carry more/lower grade tiers than a modern one). category_path, set_path and set_id together identify the set; use the matching fields from a psa-price-guide-search result, or category_path from psa-price-guide-categories combined with a set_path/set_id found by browsing PSA's own category page.", - "operationId": "psa-price-guide-set", + "description": "Returns normalized products from one Rebag (https://shop.rebag.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "rebag-collection-products", "parameters": [ { - "description": "Category URL path segment, from psa-price-guide-categories or a psa-price-guide-search result", - "in": "query", - "name": "category_path", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "baseball-card-values" + "x-example": "collection-handle" }, { - "description": "Set URL path segment, from a psa-price-guide-search result", + "description": "1-based page, defaults to 1", "in": "query", - "name": "set_path", - "required": true, - "type": "string", - "x-example": "1974-topps" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "PSA's own numeric set id, from a psa-price-guide-search result", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "set_id", - "required": true, - "type": "string", - "x-example": "1239" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -350368,7 +386281,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.priceGuideSetResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -350383,8 +386296,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350401,62 +386314,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA Price Guide set's price table", - "tags": [ - "PSA" - ] - } - }, - "/psa/probatfacts/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "PSA ProBatFacts' full player-category list -- the discovery endpoint for the category_id parameter used to browse players. Baseball-bat authentication only, split by Hall of Fame status: Hall of Fame Players, Star Players.", - "operationId": "psa-probatfacts-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/psa.probatFactsCategoriesResponseDoc" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List PSA ProBatFacts categories", + "summary": "List Rebag collection products", "tags": [ - "PSA" + "Rebag" ] } }, - "/psa/probatfacts/gallery": { + "/rebag/pages": { "get": { "consumes": [ "application/json" ], - "description": "One player's full exemplar image gallery: real, captioned examples of authenticated bats PSA keeps on file for this player, used as authentication reference material. subject_id is the numeric id from a psa-probatfacts-subjects result.", - "operationId": "psa-probatfacts-gallery", + "description": "Returns normalized static pages from Rebag (https://shop.rebag.com). The storefront URL is fixed server-side.", + "operationId": "rebag-pages", "parameters": [ { - "description": "Numeric subject id, from a psa-probatfacts-subjects result", + "description": "1-based page, defaults to 1", "in": "query", - "name": "subject_id", - "required": true, - "type": "string", - "x-example": "1490" + "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": [ @@ -350466,7 +386350,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.probatFactsGalleryResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -350475,14 +386359,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" } @@ -350499,27 +386377,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA ProBatFacts player's exemplar image gallery", + "summary": "List Rebag static pages", "tags": [ - "PSA" + "Rebag" ] } }, - "/psa/probatfacts/subject": { + "/rebag/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "One player's full public reference page: PSA's own bat-authentication notes (professional models used, signature placement) and a general player biography. Unlike psa-autographfacts-subject, this carries no price guide. subject_id is the numeric id from a psa-probatfacts-subjects result.", - "operationId": "psa-probatfacts-subject", + "description": "Returns normalized static page detail for one Rebag (https://shop.rebag.com) page handle. The storefront URL is fixed server-side.", + "operationId": "rebag-page", "parameters": [ { - "description": "Numeric subject id, from a psa-probatfacts-subjects result", - "in": "query", - "name": "subject_id", + "description": "Page handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "1490" + "x-example": "page-handle" } ], "produces": [ @@ -350529,7 +386407,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.probatFactsSubjectResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -350544,8 +386422,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350562,27 +386440,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA ProBatFacts player's bat-authentication reference page", + "summary": "Get a Rebag static page", "tags": [ - "PSA" + "Rebag" ] } }, - "/psa/probatfacts/subjects": { + "/rebag/products": { "get": { "consumes": [ "application/json" ], - "description": "Every player PSA ProBatFacts lists for one category, each with the numeric subject_id to pass to psa-probatfacts-subject for that player's full bat-authentication reference page.", - "operationId": "psa-probatfacts-subjects", + "description": "Returns normalized products from Rebag's (https://shop.rebag.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "rebag-products", "parameters": [ { - "description": "Category id, from psa-probatfacts-categories", + "description": "1-based page, defaults to 1", "in": "query", - "name": "category_id", - "required": true, + "name": "page", "type": "integer", - "x-example": 29 + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -350592,7 +386476,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.probatFactsSubjectsResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -350601,8 +386485,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350619,62 +386503,27 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA ProBatFacts subjects in a category", - "tags": [ - "PSA" - ] - } - }, - "/psa/ticketfacts/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "PSA TicketFacts' full event-category list -- the discovery endpoint for the category_id parameter used to browse events. Spans NFL, MLB and NBA historic events: Super Bowl, World Series, MLB All Star Game, Historic Baseball Events, and Historic Basketball Events.", - "operationId": "psa-ticketfacts-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/psa.ticketFactsCategoriesResponseDoc" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List PSA TicketFacts categories", + "summary": "List Rebag products", "tags": [ - "PSA" + "Rebag" ] } }, - "/psa/ticketfacts/gallery": { + "/rebag/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "One event's full exemplar image gallery: real, captioned examples of authenticated tickets from this event PSA keeps on file, used as authentication reference material. subject_id is the numeric id from a psa-ticketfacts-subjects result.", - "operationId": "psa-ticketfacts-gallery", + "description": "Returns normalized product detail for one Rebag (https://shop.rebag.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "rebag-product", "parameters": [ { - "description": "Numeric subject id, from a psa-ticketfacts-subjects result", - "in": "query", - "name": "subject_id", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "1147" + "x-example": "product-handle" } ], "produces": [ @@ -350684,7 +386533,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.ticketFactsGalleryResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -350699,8 +386548,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350717,27 +386566,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA TicketFacts event's exemplar image gallery", + "summary": "Get a Rebag product", "tags": [ - "PSA" + "Rebag" ] } }, - "/psa/ticketfacts/subject": { + "/rebag/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "One event's full public ticket reference page: PSA's own historical writeup of the event and the ticket(s) involved. Unlike psa-autographfacts-subject, this carries no price guide. subject_id is the numeric id from a psa-ticketfacts-subjects result.", - "operationId": "psa-ticketfacts-subject", + "description": "Returns normalized recommended products for one Rebag (https://shop.rebag.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "rebag-product-recommendations", "parameters": [ { - "description": "Numeric subject id, from a psa-ticketfacts-subjects result", - "in": "query", - "name": "subject_id", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "1147" + "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": [ @@ -350747,7 +386614,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.ticketFactsSubjectResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -350762,8 +386629,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350780,27 +386647,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA TicketFacts event's ticket reference page", + "summary": "List Rebag product recommendations", "tags": [ - "PSA" + "Rebag" ] } }, - "/psa/ticketfacts/subjects": { + "/rebag/search": { "get": { "consumes": [ "application/json" ], - "description": "Every event PSA TicketFacts lists for one category, each with the numeric subject_id to pass to psa-ticketfacts-subject for that event's full ticket reference page.", - "operationId": "psa-ticketfacts-subjects", + "description": "Returns normalized, ranked products from Rebag's (https://shop.rebag.com) own full-text product search (Shopify's Storefront API), including a best-effort condition grade and colour derived from the product's own catalog tags -- attributes not available from the classic catalog JSON endpoints in this family. The storefront URL is fixed server-side.", + "operationId": "rebag-search", "parameters": [ { - "description": "Category id, from psa-ticketfacts-categories", + "description": "Search query text", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "chanel" + }, + { + "description": "Sort order. Allowed values: relevance, price_asc, price_desc", + "enum": [ + "relevance", + "price_asc", + "price_desc" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "relevance" + }, + { + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 20 and supports up to 50", "in": "query", - "name": "category_id", - "required": true, + "name": "limit", "type": "integer", - "x-example": 21 + "x-example": 20 } ], "produces": [ @@ -350810,7 +386703,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/psa.ticketFactsSubjectsResponseDoc" + "$ref": "#/definitions/shopifybrands.searchResponseDoc" } }, "400": { @@ -350819,8 +386712,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350837,33 +386730,41 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA TicketFacts subjects in a category", + "summary": "Search Rebag products", "tags": [ - "PSA" + "Rebag" ] } }, - "/psastore/collections": { + "/rebag/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized collections from the PSA Team Store (https://store.psacard.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "psastore-collections", + "description": "Returns products, collections, and query suggestions from Rebag's (https://shop.rebag.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "rebag-search-suggest", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Search query", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "q", + "required": true, + "type": "string", + "x-example": "wool" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "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": 50 + "x-example": 10 } ], "produces": [ @@ -350873,7 +386774,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -350900,37 +386801,38 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA Store collections", + "summary": "Get Rebag search suggestions", "tags": [ - "PSAStore" + "Rebag" ] } }, - "/psastore/collections/{handle}/products": { + "/rebag/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from one PSA Team Store (https://store.psacard.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "psastore-collection-products", + "description": "Returns capped URL entries from Rebag's (https://shop.rebag.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "rebag-sitemap-urls", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "collection-handle" - }, - { - "description": "1-based page, defaults to 1", + "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": "page", - "type": "integer", - "x-example": 1 + "name": "type", + "type": "string", + "x-example": "products" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", @@ -350944,7 +386846,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -350953,12 +386855,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -350977,35 +386873,19 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA Store collection products", + "summary": "List Rebag sitemap URLs", "tags": [ - "PSAStore" + "Rebag" ] } }, - "/psastore/pages": { + "/rebag/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from the PSA Team Store (https://store.psacard.com). The storefront URL is fixed server-side.", - "operationId": "psastore-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": "Returns child sitemap URLs from Rebag's (https://shop.rebag.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "rebag-sitemaps", "produces": [ "application/json" ], @@ -351013,7 +386893,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -351040,29 +386920,19 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA Store static pages", + "summary": "List Rebag sitemaps", "tags": [ - "PSAStore" + "Rebag" ] } }, - "/psastore/pages/{handle}": { + "/rebag/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one PSA Team Store (https://store.psacard.com) page handle. The storefront URL is fixed server-side.", - "operationId": "psastore-page", - "parameters": [ - { - "description": "Page handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "page-handle" - } - ], + "description": "Returns normalized storefront metadata for Rebag (https://shop.rebag.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "rebag-store", "produces": [ "application/json" ], @@ -351070,7 +386940,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -351079,12 +386949,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -351103,33 +386967,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA Store static page", + "summary": "Get Rebag store metadata", "tags": [ - "PSAStore" + "Rebag" ] } }, - "/psastore/products": { + "/reddit/comments/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from the PSA Team Store's (https://store.psacard.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "psastore-products", + "description": "Returns a Reddit post with its public comments. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return the server-rendered comments with public net score and award count plus post engagement metrics for 3 credits. Large threads may expose only an initial comment subset in anonymous HTML. Reddit does not expose per-comment upvote ratios or exact upvote/downvote totals anonymously. A post that exists but has no comments yet returns a 200 response with an empty comments list; a post that does not exist returns 404, and a temporary block or upstream failure returns 503 (retryable) rather than 404. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-comments", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Reddit post id or t3_ id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1tka90t" + }, + { + "default": "confidence", + "description": "Comment order: confidence, top, new, controversial, old, or qa. Applied to the anonymous HTML request when metrics are enabled.", + "enum": [ + "confidence", + "top", + "new", + "controversial", + "old", + "qa" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "sort", + "type": "string" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Maximum comments returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" + }, + { + "default": 3, + "description": "Maximum flat comment depth returned in metrics mode.", + "in": "query", + "name": "depth", + "type": "integer" + }, + { + "default": false, + "description": "Include public post and per-comment engagement metrics; costs 3 credits instead of 1", + "in": "query", + "name": "include_metrics", + "type": "boolean" } ], "produces": [ @@ -351139,7 +387032,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/reddit.commentsResponseDoc" } }, "400": { @@ -351148,6 +387041,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -351166,27 +387065,66 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA Store products", + "summary": "Get Reddit post comments", "tags": [ - "PSAStore" + "Reddit" ] } }, - "/psastore/products/{handle}": { + "/reddit/domain/{domain}/posts": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized product detail for one PSA Team Store (https://store.psacard.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "psastore-product", + "description": "Returns normalized public posts submitted from a linked domain. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-domain-posts", "parameters": [ { - "description": "Product handle", + "description": "Domain hostname, without scheme or path", "in": "path", - "name": "handle", + "name": "domain", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "openai.com" + }, + { + "default": "hot", + "description": "Sort: hot, new, top, or rising", + "enum": [ + "hot", + "new", + "top", + "rising" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Time window for top sort: hour, day, week, month, year, or all", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "all" + ], + "in": "query", + "name": "time", + "type": "string" + }, + { + "description": "Maximum posts, defaults to 25 and clamps to 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Reddit pagination token", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -351196,7 +387134,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/reddit.domainPostsResponseDoc" } }, "400": { @@ -351229,45 +387167,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PSA Store product", + "summary": "List Reddit domain posts", "tags": [ - "PSAStore" + "Reddit" ] } }, - "/psastore/products/{handle}/recommendations": { + "/reddit/leads": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized recommended products for one PSA Team Store (https://store.psacard.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "psastore-product-recommendations", + "description": "Scans a Reddit search page for people actively asking for a product or service, scores each post 0-10 for buying intent, and returns them ranked highest-first with the signals that fired. Self-promotion, hiring posts, freelancer service adverts, revenue-milestone posts, duplicate reposts, and Title Case article headlines are filtered out before scoring. A deterministic prefilter always runs; when `classifier` resolves to `llm` the surviving candidates are additionally refined in one batched model call. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native Reddit search failures can use the internal Redlib provider while the existing lead-response fields and credit weights are preserved.", + "operationId": "reddit-leads", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "What you offer, in plain language", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "crm for small teams" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Restrict the search to a subreddit name, without r/", + "in": "query", + "name": "subreddit", + "type": "string" + }, + { + "default": "relevance", + "description": "Sort: relevance, hot, new, top, or comments", + "enum": [ + "relevance", + "hot", + "new", + "top", + "comments" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "month", + "description": "Time window: hour, day, week, month, year, or all", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "all" + ], + "in": "query", + "name": "time", + "type": "string" + }, + { + "description": "Maximum leads returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 10 + "type": "integer" }, { - "description": "Recommendation intent. Allowed values: related, complementary", + "description": "Minimum buying-intent score to return, 0-10, defaults to 4", + "in": "query", + "name": "min_score", + "type": "integer" + }, + { + "default": "auto", + "description": "Classifier: auto uses the model when configured, heuristic skips it, llm requires it", "enum": [ - "related", - "complementary" + "auto", + "heuristic", + "llm" ], "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "name": "classifier", + "type": "string" } ], "produces": [ @@ -351277,7 +387256,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/reddit.leadsResponseDoc" } }, "400": { @@ -351310,41 +387289,34 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA Store product recommendations", + "summary": "Find Reddit buying-intent leads", "tags": [ - "PSAStore" + "Reddit" ] } }, - "/psastore/search/suggest": { + "/reddit/post/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from the PSA Team Store's (https://store.psacard.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "psastore-search-suggest", + "description": "Returns a normalized public Reddit post. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return public net score, upvote ratio, comment count, award count, and estimated upvote/downvote totals for 3 credits. Reddit fuzzes voting data, so estimates are approximate; share, repost/crosspost, and view counts are not exposed anonymously. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-post", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", + "description": "Reddit post id or t3_ id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "case" - }, - { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", - "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "x-example": "1v8hy3q" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "default": false, + "description": "Include public engagement metrics; costs 3 credits instead of 1", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "include_metrics", + "type": "boolean" } ], "produces": [ @@ -351354,7 +387326,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/reddit.postResponseDoc" } }, "400": { @@ -351363,6 +387335,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -351381,42 +387359,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get PSA Store search suggestions", + "summary": "Get Reddit post", "tags": [ - "PSAStore" + "Reddit" ] } }, - "/psastore/sitemap/urls": { + "/reddit/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns capped URL entries from the PSA Team Store's (https://store.psacard.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "psastore-sitemap-urls", + "description": "Searches public Reddit content and returns normalized public post entries. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-search", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "description": "Search keywords", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "gpt" + }, + { + "description": "Restrict search to a subreddit name, without r/", + "in": "query", + "name": "subreddit", + "type": "string" + }, + { + "default": "relevance", + "description": "Sort: relevance, hot, new, top, or comments", "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" + "relevance", + "hot", + "new", + "top", + "comments" ], "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": "Time window for top/comments sorts: hour, day, week, month, year, or all", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "all" + ], + "in": "query", + "name": "time", + "type": "string" + }, + { + "description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" + }, + { + "description": "Reddit pagination token", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -351426,7 +387435,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/reddit.searchResponseDoc" } }, "400": { @@ -351435,6 +387444,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -351453,19 +387468,35 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA Store sitemap URLs", + "summary": "Search Reddit posts", "tags": [ - "PSAStore" + "Reddit" ] } }, - "/psastore/sitemaps": { + "/reddit/subreddit/{subreddit}/about": { "get": { "consumes": [ "application/json" ], - "description": "Returns child sitemap URLs from the PSA Team Store's (https://store.psacard.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "psastore-sitemaps", + "description": "Returns public metadata and sample posts for a subreddit. Subscriber counts, icons, and banners are omitted because they are not available on anonymous Reddit pages. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-subreddit-about", + "parameters": [ + { + "description": "Subreddit name, without r/", + "in": "path", + "name": "subreddit", + "required": true, + "type": "string", + "x-example": "OpenAI" + }, + { + "description": "Maximum sample posts inspected, defaults to 25 and clamps to 100", + "in": "query", + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -351473,7 +387504,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/reddit.subredditAboutResponseDoc" } }, "400": { @@ -351482,6 +387513,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -351500,19 +387537,41 @@ "ApiKeyAuth": [] } ], - "summary": "List PSA Store sitemaps", + "summary": "Get Reddit subreddit metadata", "tags": [ - "PSAStore" + "Reddit" ] } }, - "/psastore/store": { + "/reddit/subreddit/{subreddit}/comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized storefront metadata for the PSA Team Store (https://store.psacard.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "psastore-store", + "description": "Returns flat public comment entries from a subreddit latest-comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-subreddit-comments", + "parameters": [ + { + "description": "Subreddit name, without r/", + "in": "path", + "name": "subreddit", + "required": true, + "type": "string", + "x-example": "OpenAI" + }, + { + "description": "Maximum comments, defaults to 25 and clamps to 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Reddit pagination token", + "in": "query", + "name": "after", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -351520,7 +387579,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/reddit.subredditCommentsResponseDoc" } }, "400": { @@ -351529,6 +387588,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -351547,24 +387612,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get PSA Store store metadata", + "summary": "List Reddit subreddit comments", "tags": [ - "PSAStore" + "Reddit" ] } }, - "/punch/article": { + "/reddit/subreddit/{subreddit}/posts": { "get": { - "description": "Returns public Punch article metadata and body paragraphs from a canonical article URL.", - "operationId": "punch-article", + "consumes": [ + "application/json" + ], + "description": "Returns normalized public posts from a subreddit. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-subreddit-posts", "parameters": [ { - "description": "Canonical Punch article URL", - "in": "query", - "name": "url", + "description": "Subreddit name, without r/", + "in": "path", + "name": "subreddit", "required": true, "type": "string", - "x-example": "https://punchng.com/example-article-slug/" + "x-example": "OpenAI" + }, + { + "default": "hot", + "description": "Sort: hot, new, top, or rising", + "enum": [ + "hot", + "new", + "top", + "rising" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Time window for top sort: hour, day, week, month, year, or all", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "all" + ], + "in": "query", + "name": "time", + "type": "string" + }, + { + "description": "Maximum posts, defaults to 25 and clamps to 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Reddit pagination token", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -351574,7 +387681,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/reddit.subredditPostsResponseDoc" } }, "400": { @@ -351589,6 +387696,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -351601,24 +387714,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get Punch article content", + "summary": "List Reddit subreddit posts", "tags": [ - "Punch" + "Reddit" ] } }, - "/punch/author": { + "/reddit/subreddits/posts": { "get": { - "description": "Returns a Punch author's byline name and recent articles from a canonical author URL.", - "operationId": "punch-author", + "consumes": [ + "application/json" + ], + "description": "Returns normalized public posts from a combined multi-subreddit feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-subreddits-posts", "parameters": [ { - "description": "Canonical Punch author URL", + "description": "Comma-separated subreddit names, without r/, maximum 10", "in": "query", - "name": "url", + "name": "subreddits", "required": true, "type": "string", - "x-example": "https://punchng.com/author/example-author/" + "x-example": "OpenAI,MachineLearning" + }, + { + "default": "hot", + "description": "Sort: hot, new, top, or rising", + "enum": [ + "hot", + "new", + "top", + "rising" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Time window for top sort: hour, day, week, month, year, or all", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "all" + ], + "in": "query", + "name": "time", + "type": "string" + }, + { + "description": "Maximum posts, defaults to 25 and clamps to 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Reddit pagination token", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -351628,7 +387783,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.punchAuthorResponseDoc" + "$ref": "#/definitions/reddit.multiSubredditPostsResponseDoc" } }, "400": { @@ -351643,6 +387798,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -351655,60 +387816,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Punch author archive", + "summary": "List Reddit multi-subreddit posts", "tags": [ - "Punch" + "Reddit" ] } }, - "/punch/headlines": { + "/reddit/trends": { "get": { - "description": "Returns fresh headlines from one Punch topic page.", - "operationId": "punch-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized public posts from broad Reddit hot, new, rising, or top feeds. For subreddit-specific trends, use `/reddit/subreddit/{subreddit}/posts` with `sort=hot`, `sort=new`, `sort=rising`, or `sort=top`. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-trends", "parameters": [ { - "description": "Punch topic slug", + "default": "hot", + "description": "Sort: hot, new, rising, or top", "enum": [ - "business", - "columns", - "continuation-from-print", - "diaspora", - "editorial", - "education", - "entertainment", - "feature", - "featured", - "foreign-news", - "health", - "healthwise", - "information-technology", - "interactive", - "interview", - "latest-news", - "law-digest-2", - "letters", - "metro-plus", - "news", - "opinion", - "osun-decides", - "panorama", - "politics", - "punch-lite", - "sex-relationship", - "smart-tips", - "society", - "special-features", - "spice", - "sponsored", - "sports", - "technology", - "top-stories", - "video", - "weekend-starter" + "hot", + "new", + "rising", + "top" ], "in": "query", - "name": "section", - "required": true, + "name": "sort", + "type": "string" + }, + { + "description": "Time window for top sort: hour, day, week, month, year, or all", + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "all" + ], + "in": "query", + "name": "time", + "type": "string" + }, + { + "description": "Maximum posts, defaults to 25 and clamps to 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Reddit pagination token", + "in": "query", + "name": "after", "type": "string" } ], @@ -351719,7 +387877,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/reddit.trendsResponseDoc" } }, "400": { @@ -351728,37 +387886,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Punch section headlines", - "tags": [ - "Punch" - ] - } - }, - "/punch/news": { - "get": { - "description": "Returns fresh Punch top stories from its public RSS feed.", - "operationId": "punch-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -351778,45 +387910,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Punch top stories", + "summary": "List Reddit trends", "tags": [ - "Punch" + "Reddit" ] } }, - "/punch/sections": { + "/reddit/user/{username}/comments": { "get": { - "description": "Returns the live-verified Punch topic (section) inventory used by the headlines endpoint.", - "operationId": "punch-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Returns flat public comment entries from a public Reddit user's comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-user-comments", + "parameters": [ { - "ApiKeyAuth": [] + "description": "Public Reddit username, without u/", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "reddit" + }, + { + "description": "Maximum comments, defaults to 25 and clamps to 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Reddit pagination token", + "in": "query", + "name": "after", + "type": "string" } ], - "summary": "Get Punch sections", - "tags": [ - "Punch" - ] - } - }, - "/quince/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Quince's full product facet taxonomy sourced from the same Algolia index quince-search uses: every business department (Women, Men, Kids & Baby, Home, CPG, Emerging), department, category, material, primary color, and size value Quince currently has products for, each with its own live product count. The returned business_departments[].value/categories[].value/materials[].value/colors[].value/sizes[].value values are exactly what quince-search accepts as its own department/category/material/color/size parameters. sizes spans every product type Quince sells (apparel letter sizes, shoe sizes, rug/furniture dimensions, bedding sizes, and more) since it is one index-wide facet.", - "operationId": "quince-categories", "produces": [ "application/json" ], @@ -351824,7 +387952,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/quince.categoriesResponseDoc" + "$ref": "#/definitions/reddit.userCommentsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -351845,19 +387985,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Quince's product facet taxonomy", + "summary": "List Reddit user comments", "tags": [ - "Quince" + "Reddit" ] } }, - "/quince/navigation": { + "/reddit/user/{username}/posts": { "get": { "consumes": [ "application/json" ], - "description": "Returns Quince's full header navigation mega-menu: top-level tabs (Women, Men, Home, Baby & Kids, Travel, Bags & Accessories, Jewelry, Beauty & Wellness, Gifts, plus promotional tabs like New Arrivals/Best Sellers/$50 Cashmere), each broken into the same named subcategory groups (for example Apparel, Jewelry, Shoes) shown in Quince's own nav dropdown, with a directly browsable slug on every category and link. This is a distinct taxonomy from quince-categories' Algolia facets: navigation is Quince's own curated site structure, while quince-categories reports live per-value product counts for quince-search's own filter parameters.", - "operationId": "quince-navigation", + "description": "Returns normalized public posts from a public Reddit user's submitted feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.", + "operationId": "reddit-user-posts", + "parameters": [ + { + "description": "Public Reddit username, without u/", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "reddit" + }, + { + "description": "Maximum posts, defaults to 25 and clamps to 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Reddit pagination token", + "in": "query", + "name": "after", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -351865,7 +388027,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/quince.navigationResponseDoc" + "$ref": "#/definitions/reddit.userPostsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -351886,27 +388060,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Quince's header navigation menu", + "summary": "List Reddit user posts", "tags": [ - "Quince" + "Reddit" ] } }, - "/quince/product": { + "/redfin/estimate": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized product-detail data for one Quince product: title, description, review summary, every selectable option (color swatches with hex codes, sizes), and every color/size variant with its own price, original (\"traditional retail\") price, stock status, and SKU. handle is the product's URL path on quince.com (for example women/cashmere/cashmere-crewneck-sweater), returned by quince-search's own products[].handle field.", - "operationId": "quince-product", + "description": "Returns the Redfin Estimate for a property, including the current estimate, property facts, and the monthly estimate history with city/county/postal comparatives. Faithful pass-through of Redfin's public avm + avmHistoricalData resources.", + "operationId": "redfin-estimate", "parameters": [ { - "description": "Product URL handle, from a search result's products[].handle field", + "description": "Redfin property id", "in": "query", - "name": "handle", + "name": "property_id", "required": true, "type": "string", - "x-example": "women/cashmere/cashmere-crewneck-sweater" + "x-example": "1715020" } ], "produces": [ @@ -351916,7 +388090,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/quince.productResponseDoc" + "$ref": "#/definitions/redfin.EstimateResponse" } }, "400": { @@ -351925,12 +388099,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -351949,27 +388117,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Quince product", + "summary": "Get Redfin Estimate", "tags": [ - "Quince" + "Redfin" ] } }, - "/quince/product/faq": { + "/redfin/property": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Quince product's own question/answer content (e.g. sizing, care, fit), from the same structured product data quince-product-reviews uses. handle is the same value quince-product accepts. Not every product carries FAQ content -- a product with none returns a well-formed empty result.", - "operationId": "quince-product-faq", + "description": "Returns normalized Redfin public property details. Provide a listing url, or a property_id (optionally with listing_id) to use Redfin's public stingray detail API.", + "operationId": "redfin-property", "parameters": [ { - "description": "Product URL handle, from a search result's products[].handle field", + "description": "Redfin listing URL (primary key)", "in": "query", - "name": "handle", - "required": true, - "type": "string", - "x-example": "women/cashmere/cashmere-crewneck-sweater" + "name": "url", + "type": "string" + }, + { + "description": "Redfin property id, used when url is not provided", + "in": "query", + "name": "property_id", + "type": "string" + }, + { + "description": "Redfin listing id, improves completeness with property_id", + "in": "query", + "name": "listing_id", + "type": "string" } ], "produces": [ @@ -351979,7 +388157,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/quince.productFAQResponseDoc" + "$ref": "#/definitions/redfin.PropertyResponse" } }, "400": { @@ -352012,27 +388190,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Quince product's FAQ content", + "summary": "Get Redfin property", "tags": [ - "Quince" + "Redfin" ] } }, - "/quince/product/reviews": { + "/redfin/region-trends": { "get": { "consumes": [ "application/json" ], - "description": "Returns a sample of a Quince product's normalized customer reviews (author, date, rating, review body), plus the product's overall aggregate rating and review count. handle is the same value quince-product accepts. The reviews returned are the sample Quince's own page carries in its structured product data (confirmed live: 25 reviews on every product sampled during research), not a paginated feed of the full review history. A product with no reviews yet returns a well-formed empty result.", - "operationId": "quince-product-reviews", + "description": "Returns Redfin's aggregate market trends for a region (median list/sale price, sale-to-list, offers, days on market, inventory, year-over-year). Faithful pass-through of Redfin's public aggregate-trends resource.", + "operationId": "redfin-region-trends", "parameters": [ { - "description": "Product URL handle, from a search result's products[].handle field", + "description": "Redfin region id for a neighborhood, ZIP code, county, or city", "in": "query", - "name": "handle", + "name": "region_id", "required": true, - "type": "string", - "x-example": "women/cashmere/cashmere-crewneck-sweater" + "type": "integer", + "x-example": 17151 + }, + { + "description": "Redfin region type (defaults to 6, city)", + "enum": [ + 1, + 2, + 5, + 6 + ], + "in": "query", + "name": "region_type", + "type": "integer" } ], "produces": [ @@ -352042,7 +388232,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/quince.productReviewsResponseDoc" + "$ref": "#/definitions/redfin.RegionTrendsResponse" } }, "400": { @@ -352051,12 +388241,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -352075,89 +388259,83 @@ "ApiKeyAuth": [] } ], - "summary": "Get Quince product reviews", + "summary": "Get Redfin region market trends", "tags": [ - "Quince" + "Redfin" ] } }, - "/quince/search": { + "/redfin/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches or browses Quince's (quince.com) product catalog through its own public Algolia search index. q, department, category, material, color, size, min_price, and max_price are all optional and combine as an AND -- unlike some other families' search/category-browse split, 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 catalog by Quince's own relevance/popularity ranking. department accepts one of the values quince-categories' own business_departments[].value field returns (for example Women, Men, Kids & Baby, Home, CPG, Emerging); category, material, color, and size similarly accept values from quince-categories' own categories[].value/materials[].value/colors[].value/sizes[].value fields (or quince-navigation's own browsable category/subcategory slugs for a curated, hierarchical alternative to the flat category facet). Keyword search is Algolia's own typo-tolerant relevance ranking, not a guaranteed exact match. A query with genuinely zero matches (for example a nonsense string) returns a well-formed empty result rather than an error.", - "operationId": "quince-search", + "description": "Returns normalized Redfin public listing search results from Redfin's credential-free region CSV endpoint. Pass region_id/region_type from autocomplete to skip location resolution.", + "operationId": "redfin-search", "parameters": [ { - "description": "Free-text search query", - "in": "query", - "name": "q", - "type": "string", - "x-example": "cashmere sweater" - }, - { - "description": "Business department facet filter, from quince-categories' own business_departments[].value field", + "description": "Display location; resolved via autocomplete when region_id is omitted", "in": "query", - "name": "department", - "type": "string", - "x-example": "Women" + "name": "location", + "type": "string" }, { - "description": "Category facet filter, from quince-categories' own categories[].value field", + "description": "1-based page", "in": "query", - "name": "category", - "type": "string", - "x-example": "Apparel" + "name": "page", + "type": "integer" }, { - "description": "Material facet filter, from quince-categories' own materials[].value field", + "description": "Redfin region id; skips location resolution when provided", "in": "query", - "name": "material", - "type": "string", - "x-example": "Cashmere" + "name": "region_id", + "type": "integer" }, { - "description": "Primary color facet filter, from quince-categories' own colors[].value field", + "description": "Redfin region type, used with region_id (defaults to 6, city)", + "enum": [ + 1, + 2, + 5, + 6 + ], "in": "query", - "name": "color", - "type": "string", - "x-example": "Grey" + "name": "region_type", + "type": "integer" }, { - "description": "Size facet filter, from quince-categories' own sizes[].value field", + "description": "Listing status: for_sale or sold", + "enum": [ + "for_sale", + "sold" + ], "in": "query", - "name": "size", - "type": "string", - "x-example": "M" + "name": "status", + "type": "string" }, { - "description": "Minimum price (inclusive), in USD", + "description": "Minimum price filter", "in": "query", "name": "min_price", - "type": "number", - "x-example": 25 + "type": "integer" }, { - "description": "Maximum price (inclusive), in USD", + "description": "Maximum price filter", "in": "query", "name": "max_price", - "type": "number", - "x-example": 100 + "type": "integer" }, { - "description": "One-based page number, defaults to 1", + "description": "Minimum bedrooms filter", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "min_beds", + "type": "integer" }, { - "description": "Results per page, defaults to 24, maximum 100", + "description": "Minimum bathrooms filter", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "name": "min_baths", + "type": "number" } ], "produces": [ @@ -352167,7 +388345,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/quince.searchResponseDoc" + "$ref": "#/definitions/redfin.SearchResponse" } }, "400": { @@ -352194,40 +388372,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search or browse Quince products", + "summary": "Search Redfin listings", "tags": [ - "Quince" + "Redfin" ] } }, - "/quince/sitemap/urls": { + "/redfin/similar": { "get": { "consumes": [ "application/json" ], - "description": "Returns capped URL entries from Quince's own sitemaps matching the requested type. Each entry's handle is populated from the URL's own path (tracking/variant query parameters stripped) -- for type products, this is directly the value quince-product's own handle parameter expects.", - "operationId": "quince-sitemap-urls", + "description": "Returns Redfin's comparable (\"similar\") listings for a property as normalized listing rows. Faithful pass-through of Redfin's public similars resource.", + "operationId": "redfin-similar", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, subcollections, pages", - "enum": [ - "all", - "products", - "collections", - "subcollections", - "pages" - ], + "description": "Redfin property id", "in": "query", - "name": "type", + "name": "property_id", + "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": "1715020" } ], "produces": [ @@ -352237,7 +388402,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/quince.sitemapURLsResponseDoc" + "$ref": "#/definitions/redfin.SimilarResponse" } }, "400": { @@ -352264,37 +388429,84 @@ "ApiKeyAuth": [] } ], - "summary": "List Quince sitemap URLs", + "summary": "Get Redfin comparable listings", "tags": [ - "Quince" + "Redfin" ] } }, - "/quince/sitemaps": { + "/referrals/click": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Records sanitized referral click metadata for attribution analytics.", + "operationId": "referrals-click", + "parameters": [ + { + "description": "Referral click metadata", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/referrals.referralClickRequestDoc" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Referral click id", + "schema": { + "$ref": "#/definitions/referrals.referralClickResponseDoc" + } + }, + "400": { + "description": "Invalid request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "summary": "Capture a referral click", + "tags": [ + "Referrals" + ] + } + }, + "/referrals/me": { "get": { "consumes": [ "application/json" ], - "description": "Returns Quince's US-region child sitemaps (products, collections, subcollections, and static pages) with an inferred type, from quince.com's own public sitemap index.", - "operationId": "quince-sitemaps", + "description": "Returns the authenticated user's referral code, share path, reward settings, aggregate stats, and recent referral records.", + "operationId": "referrals-me", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Referral summary", "schema": { - "$ref": "#/definitions/quince.sitemapsResponseDoc" + "$ref": "#/definitions/referrals.referralsMeResponseDoc" } }, - "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" } @@ -352302,30 +388514,28 @@ }, "security": [ { - "ApiKeyAuth": [] + "JWTAuth": [] } ], - "summary": "List Quince sitemaps", + "summary": "Get current user's referral program summary", "tags": [ - "Quince" + "Referrals" ] } }, - "/quince/suggest": { + "/referrals/me/events": { "get": { "consumes": [ "application/json" ], - "description": "Returns Quince's own search-box typeahead suggestions for a partial query: a flat list of suggested search phrases, no product data. Pass a suggestion straight through to quince-search's own q parameter for product results. A query with no genuine matches returns a well-formed empty result rather than an error.", - "operationId": "quince-suggest", + "description": "Returns recent referral attribution records where the authenticated user is either the referrer or referred account.", + "operationId": "referrals-me-events", "parameters": [ { - "description": "Search query prefix", + "description": "Maximum records to return, capped at 100", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "cash" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -352333,25 +388543,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/quince.suggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Referral events", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/referrals.referralsEventsResponseDoc" } }, - "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" } @@ -352359,29 +388563,45 @@ }, "security": [ { - "ApiKeyAuth": [] + "JWTAuth": [] } ], - "summary": "Get Quince search suggestions", + "summary": "List current user's referral events", "tags": [ - "Quince" + "Referrals" ] } }, - "/raisingcanes/directory": { + "/resy/availability": { "get": { "consumes": [ "application/json" ], - "description": "Returns one level of Raising Cane's store directory tree. Omit path for the root, which lists the US states Raising Cane's operates in; pass a child's path to descend (state to cities, city to 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 record rather than another directory level -- pass its path to GET /raisingcanes/store. This is a directory browse, not a proximity search: use GET /raisingcanes/nearby for a radius lookup.", - "operationId": "raisingcanes-directory", + "description": "Returns the bookable reservation timeslots Resy currently shows for a restaurant, date, and party size -- the same read-only availability an anonymous visitor sees before signing in. This is discovery only; it does not create, hold, modify, or cancel a reservation.", + "operationId": "resy-availability", "parameters": [ { - "description": "Directory path from a previous response's children[].path, e.g. la. Omit for the root state index.", + "description": "Resy restaurant id", "in": "query", - "name": "path", + "name": "restaurant_id", + "required": true, "type": "string", - "x-example": "la" + "x-example": "6194" + }, + { + "description": "Reservation date, YYYY-MM-DD", + "in": "query", + "name": "date", + "required": true, + "type": "string", + "x-example": "2026-09-20" + }, + { + "description": "Party size, default 2", + "in": "query", + "name": "party_size", + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -352391,7 +388611,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/raisingcanes.directoryResponseDoc" + "$ref": "#/definitions/resy.availabilityResponseDoc" } }, "400": { @@ -352406,8 +388626,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -352424,19 +388644,29 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Raising Cane's store directory", + "summary": "Get a Resy restaurant's bookable reservation timeslots", "tags": [ - "Raising Cane's" + "Resy" ] } }, - "/raisingcanes/menu": { + "/resy/cuisines": { "get": { "consumes": [ "application/json" ], - "description": "Returns Raising Cane's full published menu: every section (Combos, Tailgates, Extras, Drinks) and every item, each with its name, Raising Cane's own item description (commonly ending in a calorie count or range), and image. This is a single fixed national menu page, not a per-store or per-region menu -- it takes no parameters. Raising Cane's does not publish price on this page; pricing lives behind the separate order.raisingcanes.com ordering flow, which needs a selected store and is out of scope here.", - "operationId": "raisingcanes-menu", + "description": "Returns the cuisines present among restaurants in a Resy location. Location is a short city code or numeric location id -- both already returned inline as location_code on resy-search and resy-restaurant results; there is no separate closed list of every valid location on Resy's own API, so this value always comes from a prior search/restaurant response rather than a guessed input.", + "operationId": "resy-cuisines", + "parameters": [ + { + "description": "Resy location code or numeric id (from a prior resy-search/resy-restaurant response's location_code field)", + "in": "query", + "name": "location", + "required": true, + "type": "string", + "x-example": "ny" + } + ], "produces": [ "application/json" ], @@ -352444,17 +388674,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/raisingcanes.menuResponseDoc" + "$ref": "#/definitions/resy.cuisinesResponseDoc" } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -352471,56 +388701,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Raising Cane's full published menu", + "summary": "Get the cuisines present in a Resy location", "tags": [ - "Raising Cane's" + "Resy" ] } }, - "/raisingcanes/nearby": { + "/resy/event": { "get": { "consumes": [ "application/json" ], - "description": "Returns Raising Cane's restaurants within a radius of a latitude/longitude, ordered nearest first, each with its distance in miles and kilometres, address, coordinates, timezone, price tier and which pickup/delivery services it offers. This proximity result carries less detail than GET /raisingcanes/store (Raising Cane's own nearby-search key is not configured with hours or phone) -- each result's `path` chains straight into GET /raisingcanes/store for the full record. `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 Raising Cane's nearby returns an empty list rather than an error.", - "operationId": "raisingcanes-nearby", + "description": "Returns a ticketed dining event's full description, event-day instructions, and per-ticket-tier package breakdown (price, what's included, live ticket availability). All three identifiers come from a prior resy-events result: event_url_slug is that result's url_slug, restaurant_url_slug is its restaurant_url_slug, and location is the same city identifier resy-events was called with. Credential-free, read-only discovery -- does not purchase a ticket.", + "operationId": "resy-event-detail", "parameters": [ { - "description": "Search center latitude", + "description": "Event url_slug, from a prior resy-events result", "in": "query", - "name": "latitude", + "name": "event_url_slug", "required": true, - "type": "number", - "x-example": 40.7128 + "type": "string", + "x-example": "the-bonnie-brunch-citi-field-trip-2026-09-20-6" }, { - "description": "Search center longitude", + "description": "Restaurant url_slug, from that same resy-events result's restaurant_url_slug", "in": "query", - "name": "longitude", + "name": "restaurant_url_slug", "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 + "type": "string", + "x-example": "the-bonnie" }, { - "description": "Maximum stores to return, 1-50 (default 10)", + "description": "Resy location code or numeric id, same value resy-events was called with", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "location", + "required": true, + "type": "string", + "x-example": "ny" }, { - "description": "Result offset for paging through total_in_radius (default 0)", + "description": "Party size, default 2", "in": "query", - "name": "offset", + "name": "party_size", "type": "integer", - "x-example": 0 + "x-example": 2 } ], "produces": [ @@ -352530,7 +388754,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/raisingcanes.nearbyResponseDoc" + "$ref": "#/definitions/resy.eventDetailResponseDoc" } }, "400": { @@ -352545,8 +388769,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -352563,27 +388787,48 @@ "ApiKeyAuth": [] } ], - "summary": "Find Raising Cane's stores near a coordinate, nearest first", + "summary": "Get a Resy ticketed dining event's full description and ticket packages", "tags": [ - "Raising Cane's" + "Resy" ] } }, - "/raisingcanes/promotion": { + "/resy/events": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Raising Cane's promotion's published official terms: title and official-rules text (eligibility, prize details, effective date), exactly as the promotion's own page publishes them, as separate paragraphs in publication order. Promotion paths come from GET /raisingcanes/promotions entries. A path with no promotion at it (expired, mistyped, or the empty path some index entries carry) returns a 404.", - "operationId": "raisingcanes-promotion", + "description": "Returns ticketed dining events (fixed-price, fixed-capacity experiences a restaurant hosts and sells tickets for, distinct from a regular reservation) in a Resy location. Credential-free, read-only discovery -- does not create, hold, or purchase a ticket.", + "operationId": "resy-events", "parameters": [ { - "description": "Promotion page slug from a /raisingcanes/promotions entry's path", + "description": "Resy location code or numeric id (from a prior resy-search/resy-restaurant response's location_code field)", "in": "query", - "name": "path", + "name": "location", "required": true, "type": "string", - "x-example": "first-50-promotion" + "x-example": "ny" + }, + { + "description": "Only return events starting on or after this date, YYYY-MM-DD; defaults to the next calendar day", + "in": "query", + "name": "date", + "type": "string", + "x-example": "2026-09-21" + }, + { + "description": "Max events returned, default 10", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Page past the first `limit` events, default 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -352593,7 +388838,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/raisingcanes.promotionResponseDoc" + "$ref": "#/definitions/resy.eventsResponseDoc" } }, "400": { @@ -352602,14 +388847,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" } @@ -352626,19 +388865,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Raising Cane's promotion's terms", + "summary": "Get ticketed dining events in a Resy location", "tags": [ - "Raising Cane's" + "Resy" ] } }, - "/raisingcanes/promotions": { + "/resy/locations": { "get": { "consumes": [ "application/json" ], - "description": "Returns Raising Cane's full promotions index: every current and past sweepstakes, giveaway, and other promotion the site links to, grouped under Raising Cane's own category headings (e.g. \"Sweepstakes & Giveaways\", \"Lucky Promotions\", \"First Promotions\"). Each entry's path chains into GET /raisingcanes/promotion for that promotion's full official-rules text. Some entries carry an empty path -- Raising Cane's own index links a since-expired promotion back to the homepage rather than removing the entry; treat an empty path as no longer resolvable rather than a bug.", - "operationId": "raisingcanes-promotions", + "description": "Returns Resy's full list of operating locations (cities), optionally filtered by a free-text substring and/or country. This is the discovery source for the location value used throughout the rest of this family (resy-search's/resy-restaurant's location_code, resy-cuisines'/resy-events'/resy-event-detail's location). Credential-free.", + "operationId": "resy-locations", + "parameters": [ + { + "description": "Case-insensitive substring match against a location's name, code, or url_slug", + "in": "query", + "name": "q", + "type": "string", + "x-example": "new york" + }, + { + "description": "Case-insensitive exact match against a location's country name", + "in": "query", + "name": "country", + "type": "string", + "x-example": "United States" + } + ], "produces": [ "application/json" ], @@ -352646,17 +388901,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/raisingcanes.promotionsResponseDoc" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/resy.locationsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -352673,27 +388922,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Raising Cane's promotions index", + "summary": "List Resy's operating locations (cities)", "tags": [ - "Raising Cane's" + "Resy" ] } }, - "/raisingcanes/store": { + "/resy/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Raising Cane's store: name, full postal address, phone, coordinates, its general weekly hours plus separately published dine-in and drive-thru hours, Raising Cane's own per-store amenity labels (e.g. DRIVE_THRU, CURBSIDE_PICKUP), which pickup/delivery services it offers, and its Google Place id. Store paths come from GET /raisingcanes/directory entries whose is_store is true. Passing a directory path here returns a 404 rather than a hollow record.", - "operationId": "raisingcanes-store", + "description": "Returns a restaurant's profile: name, cuisine, price tier, rating/review count, address/neighborhood, contact info, and description text. Credential-free.", + "operationId": "resy-restaurant", "parameters": [ { - "description": "Store path from a /raisingcanes/directory child with is_store true", + "description": "Resy restaurant id", "in": "query", - "name": "path", + "name": "restaurant_id", "required": true, "type": "string", - "x-example": "la/gonzales/625-airline-hwy" + "x-example": "6194" } ], "produces": [ @@ -352703,7 +388952,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/raisingcanes.storeResponseDoc" + "$ref": "#/definitions/resy.restaurantResponseDoc" } }, "400": { @@ -352718,8 +388967,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -352736,24 +388985,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Raising Cane's store's detail", + "summary": "Get a Resy restaurant's profile", "tags": [ - "Raising Cane's" + "Resy" ] } }, - "/rappler/article": { + "/resy/search": { "get": { - "description": "Returns public Rappler article metadata and body paragraphs from a canonical article URL. Rappler+ member-tier stories are flagged with paywalled.", - "operationId": "rappler-article", + "consumes": [ + "application/json" + ], + "description": "Searches restaurants by free-text term (name, cuisine, or neighborhood) near a latitude/longitude, optionally including live bookable-timeslot availability for a given date and party size. Credential-free.", + "operationId": "resy-search", "parameters": [ { - "description": "Canonical Rappler article URL", + "description": "Free-text search term (name, cuisine, or neighborhood)", "in": "query", - "name": "url", + "name": "term", + "type": "string", + "x-example": "carbone" + }, + { + "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": "Reservation date, YYYY-MM-DD; when set, results include live timeslots", + "in": "query", + "name": "date", "type": "string", - "x-example": "https://www.rappler.com/sports/tennis-alex-eala-tatiana-prozorova-singapore-open-september-24-2026/" + "x-example": "2026-09-20" + }, + { + "description": "Party size, default 2", + "in": "query", + "name": "party_size", + "type": "integer", + "x-example": 2 + }, + { + "description": "Max results, default 10", + "in": "query", + "name": "size", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -352763,7 +389051,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/resy.searchResponseDoc" } }, "400": { @@ -352772,8 +389060,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -352790,30 +389078,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rappler article content", + "summary": "Search Resy restaurants near a location", "tags": [ - "Rappler" + "Resy" ] } }, - "/rappler/author": { + "/retailmenot/autocomplete": { "get": { - "description": "Returns one Rappler author's public profile: name, bio, public social links, and their most recent articles.", - "operationId": "rappler-author", + "consumes": [ + "application/json" + ], + "description": "Returns RetailMeNot's search-box suggestions for a free-text term: matching stores (with domains usable with /retailmenot/store) and cash-back offers. Group names are returned as data.", + "operationId": "retailmenot-autocomplete", "parameters": [ { - "description": "Author slug, e.g. delfin-dioquino", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "delfin-dioquino" - }, - { - "description": "Canonical rappler.com/author// URL; alternative to slug", + "description": "Store or brand search term", "in": "query", - "name": "url", + "name": "term", + "required": true, "type": "string", - "x-example": "https://www.rappler.com/author/delfin-dioquino/" + "x-example": "nike" } ], "produces": [ @@ -352823,7 +389108,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.rapplerAuthorResponseDoc" + "$ref": "#/definitions/retailmenot.autocompleteResponseDoc" } }, "400": { @@ -352832,8 +389117,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -352850,202 +389135,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Rappler author profile", + "summary": "Get RetailMeNot search suggestions", "tags": [ - "Rappler" + "RetailMeNot" ] } }, - "/rappler/headlines": { + "/retailmenot/blog-categories": { "get": { - "description": "Returns fresh headlines from one public Rappler section feed.", - "operationId": "rappler-headlines", - "parameters": [ - { - "description": "Rappler section slug", - "enum": [ - "about", - "awards-recognition", - "news-updates", - "policies", - "special-projects", - "team", - "brandrap", - "announcements", - "beyond-the-buy", - "communicart", - "data-stories", - "detours", - "finance-and-industries", - "first-look", - "food-drinks-dining", - "get-ready-with-me", - "goodrap", - "health-beauty-and-wellness", - "home-and-parenting", - "lifestyle-and-entertainment", - "profiles-and-advocacies", - "reading-book-recommendations", - "tech-and-innovation", - "travel-and-food", - "bulletin-board", - "advisories", - "campus", - "contests-awards", - "corrections", - "events", - "examination-results", - "philippine-government-job-openings", - "scholarships", - "trainings-workshops", - "business", - "consumer-issues", - "corporate", - "economy", - "industries", - "infrastructure", - "personal-finance", - "stocks-banking", - "culture-desk", - "astrology", - "careers", - "food-drinks", - "health-and-wellness", - "literature", - "noteworthy", - "relationships", - "style", - "travel", - "editors-pick", - "elections-philippines-stories", - "entertainment", - "celebrities", - "korean-popular-music", - "live-jam", - "movies", - "music", - "pageants", - "series", - "theater", - "environment", - "climate-change", - "disasters", - "nature", - "pollution", - "faith-religion", - "hustle", - "adulting", - "food", - "play", - "purpose", - "work", - "moveph", - "advocacies", - "agos", - "partners", - "social-good-summit", - "nation", - "newsbreak", - "data-documents", - "explainers", - "fact-check", - "in-depth", - "inside-track", - "investigative", - "iq", - "podcasts-videos", - "people", - "actors", - "artists", - "athletes", - "crimes", - "human-interest", - "neighbors", - "newsmakers", - "obituary", - "profiles", - "philippines", - "elections", - "government", - "luzon", - "metro-manila", - "mindanao", - "national-news", - "overseas-filipinos", - "rappler-talk", - "special-coverage", - "visayas", - "weather", - "plus-membership-program", - "exclusive-content", - "exclusive-events", - "science", - "discoveries-inventions", - "earth-space", - "life-health", - "society-culture", - "social-issues", - "sports", - "boxing", - "fiba", - "football", - "gilas-pilipinas", - "nba", - "ncaa", - "palarong-pambansa", - "pba", - "southeast-asian-games", - "uaap", - "volleyball", - "technology", - "apps", - "features", - "gadgets", - "gaming", - "innovations", - "internet-culture", - "reviews", - "social-media", - "the-wrap", - "top-stories", - "video", - "act-one", - "basagan-ng-trip", - "daily-wrap", - "documentaries", - "editorial", - "hold-the-line-maria-ressa-interview", - "rappler-live-jam", - "rappler-talk-video", - "reporters-vlogs", - "top-5-news-this-week", - "video-explainers", - "watch-now-live", - "voices", - "editorials", - "imho", - "ispeak", - "new-school", - "newsletters", - "rappler-blogs", - "thought-leaders", - "world", - "africa", - "asia-pacific", - "europe", - "global-affairs", - "indonesia", - "latin-america", - "middle-east", - "south-central-asia", - "us-canada" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string" - } + "consumes": [ + "application/json" ], + "description": "Returns every category of RetailMeNot's shopping and savings blog with its slug, post count, description, and URL. Use a slug as the category filter of /retailmenot/blog-posts.", + "operationId": "retailmenot-blog-categories", "produces": [ "application/json" ], @@ -353053,46 +389155,14 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/retailmenot.blogCategoriesResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Rappler section headlines", - "tags": [ - "Rappler" - ] - } - }, - "/rappler/news": { - "get": { - "description": "Returns fresh Rappler stories from the public site-wide RSS feed.", - "operationId": "rappler-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -353106,50 +389176,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rappler top stories", + "summary": "List RetailMeNot blog categories", "tags": [ - "Rappler" + "RetailMeNot" ] } }, - "/rappler/sections": { + "/retailmenot/blog-post": { "get": { - "description": "Returns the public Rappler editorial section inventory: every category the site publishes with a live feed.", - "operationId": "rappler-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Rappler sections", - "tags": [ - "Rappler" - ] - } - }, - "/rawstory/article": { - "get": { - "description": "Returns public Raw Story article metadata and body paragraphs from a canonical article URL.", - "operationId": "rawstory-article", + "description": "Returns one RetailMeNot blog post: metadata (title, author, dates, description, image, categories, tags), the article text as headed sections of paragraphs and lists, and the RetailMeNot stores and coupon categories the article links to (usable with /retailmenot/store and /retailmenot/category).", + "operationId": "retailmenot-blog-post", "parameters": [ { - "description": "Canonical Raw Story article URL", + "description": "Post slug from /retailmenot/blog-posts (a trailing .html is accepted)", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.rawstory.com/trump-media-ban-2677933730/" + "x-example": "black-friday-cyber-monday-restaurant-deals" } ], "produces": [ @@ -353159,7 +389206,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/retailmenot.blogPostResponseDoc" } }, "400": { @@ -353174,6 +389221,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353186,30 +389239,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get Raw Story article content", + "summary": "Get a RetailMeNot blog post", "tags": [ - "Raw Story" + "RetailMeNot" ] } }, - "/rawstory/author": { + "/retailmenot/blog-posts": { "get": { - "description": "Returns one Raw Story author's public profile: name, bio, avatar, public social links, and their 15 most recent stories.", - "operationId": "rawstory-author", + "consumes": [ + "application/json" + ], + "description": "Returns one page of RetailMeNot blog posts (title, slug, URL, excerpt, description, author, published and modified dates, image, categories, and tags) with total and total pages, newest first by default. Filter by category slug, tag slug, and/or a search query; order by date, modified, title, or relevance (relevance requires query). A page past the end returns an empty list.", + "operationId": "retailmenot-blog-posts", "parameters": [ { - "description": "Author slug, e.g. bennitokelty", + "description": "Search post text", "in": "query", - "name": "slug", + "name": "query", "type": "string", - "x-example": "bennitokelty" + "x-example": "black friday" }, { - "description": "Canonical rawstory.com/u/ URL; alternative to slug", + "description": "Category slug from /retailmenot/blog-categories", "in": "query", - "name": "url", + "name": "category", "type": "string", - "x-example": "https://www.rawstory.com/u/bennitokelty" + "x-example": "food" + }, + { + "description": "Tag slug from /retailmenot/blog-tags", + "in": "query", + "name": "tag", + "type": "string", + "x-example": "black-friday" + }, + { + "default": "date", + "description": "Sort field", + "enum": [ + "date", + "modified", + "title", + "relevance" + ], + "in": "query", + "name": "order_by", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "desc", + "asc" + ], + "in": "query", + "name": "order", + "type": "string" + }, + { + "default": 1, + "description": "Page number, starting at 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Posts per page (1-100)", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -353219,7 +389320,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.rawstoryAuthorResponseDoc" + "$ref": "#/definitions/retailmenot.blogPostsResponseDoc" } }, "400": { @@ -353234,6 +389335,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353246,40 +389353,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Raw Story author profile", + "summary": "List RetailMeNot blog posts", "tags": [ - "Raw Story" + "RetailMeNot" ] } }, - "/rawstory/headlines": { + "/retailmenot/blog-tags": { "get": { - "description": "Returns fresh headlines from one public Raw Story section feed.", - "operationId": "rawstory-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of RetailMeNot blog tags ordered by post count, with slug, name, post count, and URL, plus total and total pages; optionally only tags matching a query. Use a slug as the tag filter of /retailmenot/blog-posts.", + "operationId": "retailmenot-blog-tags", "parameters": [ { - "description": "Raw Story section slug", - "enum": [ - "us-news", - "trump-news", - "world", - "enviro-science", - "all-video", - "raw-investigates", - "also-read", - "commentary", - "blogs-media", - "2026-midterm-elections-section", - "presidential-campaign-issues", - "smartnews", - "super-head", - "jd-vance", - "supreme-court" - ], + "description": "Match tag names", "in": "query", - "name": "section", - "required": true, - "type": "string" + "name": "query", + "type": "string", + "x-example": "black friday" + }, + { + "default": 1, + "description": "Page number, starting at 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Tags per page (1-100)", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -353289,7 +389396,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/retailmenot.blogTagsResponseDoc" } }, "400": { @@ -353298,6 +389405,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353310,16 +389423,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Raw Story section headlines", + "summary": "List RetailMeNot blog tags", "tags": [ - "Raw Story" + "RetailMeNot" ] } }, - "/rawstory/news": { + "/retailmenot/cashback": { "get": { - "description": "Returns fresh Raw Story stories from the public site-wide RSS feed.", - "operationId": "rawstory-news", + "consumes": [ + "application/json" + ], + "description": "Returns the cash-back offers on RetailMeNot's cash-back hub (featured, top, and all cash-back offers) with each store's cash-back rate.", + "operationId": "retailmenot-cashback", "produces": [ "application/json" ], @@ -353327,7 +389443,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/retailmenot.cashBackResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -353342,16 +389464,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Raw Story top stories", + "summary": "List RetailMeNot cash-back offers", "tags": [ - "Raw Story" + "RetailMeNot" ] } }, - "/rawstory/sections": { + "/retailmenot/categories": { "get": { - "description": "Returns the public Raw Story section and topic hub inventory: every hub the site publishes with a live feed.", - "operationId": "rawstory-sections", + "consumes": [ + "application/json" + ], + "description": "Returns RetailMeNot's full three-level coupon category tree (parent, child, and grandchild categories) with slugs for /retailmenot/category.", + "operationId": "retailmenot-categories", "produces": [ "application/json" ], @@ -353359,7 +389484,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/retailmenot.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -353368,19 +389505,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Raw Story sections", + "summary": "List RetailMeNot coupon categories", "tags": [ - "Raw Story" + "RetailMeNot" ] } }, - "/ready": { + "/retailmenot/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns process readiness and lightweight dependency health. Dependency failures remain visible in the response but do not remove a serving pod from rotation. Root `/ready` returns the same payload as a compatibility alias, while `/ping` remains the lightweight liveness endpoint.", - "operationId": "ready", + "description": "Returns one page of a RetailMeNot category landing page: the featured offers across stores (24 per page, with page and total_pages), offer counts, and similar stores. Use a slug from /retailmenot/categories; a page past the end returns an empty offer list.", + "operationId": "retailmenot-category", + "parameters": [ + { + "description": "Category slug from /retailmenot/categories", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "clothing" + }, + { + "default": 1, + "description": "Offer page (24 offers per page; see total_pages)", + "in": "query", + "name": "page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -353388,37 +389542,60 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/api.readinessResponseDoc" + "$ref": "#/definitions/retailmenot.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" } } }, - "summary": "Return API readiness", + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a RetailMeNot category's offers", "tags": [ - "Meta" + "RetailMeNot" ] } }, - "/rebag/collections": { + "/retailmenot/deal-event": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized collections from Rebag (https://shop.rebag.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "rebag-collections", + "description": "Returns one seasonal deal event page's offers grouped into the page's sections (top deals and per-category sections). Use a slug from /retailmenot/deal-events.", + "operationId": "retailmenot-deal-event", "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": "Event slug from /retailmenot/deal-events", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "slug", + "required": true, + "type": "string", + "x-example": "black-friday" } ], "produces": [ @@ -353428,7 +389605,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/retailmenot.dealEventResponseDoc" } }, "400": { @@ -353437,6 +389614,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -353455,43 +389638,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Rebag collections", + "summary": "Get a RetailMeNot deal event's offers", "tags": [ - "Rebag" + "RetailMeNot" ] } - }, - "/rebag/collections/{handle}/products": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized products from one Rebag (https://shop.rebag.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "rebag-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 - } + }, + "/retailmenot/deal-events": { + "get": { + "consumes": [ + "application/json" ], + "description": "Returns RetailMeNot's seasonal and holiday deal events (for example Black Friday, Cyber Monday, Back-to-School) with slugs for /retailmenot/deal-event.", + "operationId": "retailmenot-deal-events", "produces": [ "application/json" ], @@ -353499,19 +389658,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/retailmenot.dealEventsResponseDoc" } }, "429": { @@ -353532,35 +389679,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Rebag collection products", + "summary": "List RetailMeNot seasonal deal events", "tags": [ - "Rebag" + "RetailMeNot" ] } }, - "/rebag/pages": { + "/retailmenot/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Rebag (https://shop.rebag.com). The storefront URL is fixed server-side.", - "operationId": "rebag-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": "Returns RetailMeNot's homepage: featured offer sections (cash-back stores with rates, seasonal savings deals with store, offer type, discount, and title), today's top product deals (title, discount, image, and retailer product URL), and the help FAQ.", + "operationId": "retailmenot-home", "produces": [ "application/json" ], @@ -353568,13 +389699,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/retailmenot.homeResponseDoc" } }, "429": { @@ -353595,27 +389720,38 @@ "ApiKeyAuth": [] } ], - "summary": "List Rebag static pages", + "summary": "Get RetailMeNot's homepage offers", "tags": [ - "Rebag" + "RetailMeNot" ] } }, - "/rebag/pages/{handle}": { + "/retailmenot/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one Rebag (https://shop.rebag.com) page handle. The storefront URL is fixed server-side.", - "operationId": "rebag-page", + "description": "Returns a store's RetailMeNot page: store details, shopper rating, category, offer counts, every listed coupon, sale, cash-back, and in-store offer (including the offers behind the page's \"show more\" button), similar stores, and FAQs. Coupon codes are only revealed on RetailMeNot after a click and are not returned. Set market=ca for a RetailMeNot Canada store page.", + "operationId": "retailmenot-store", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Store domain or RetailMeNot store URL", + "in": "query", + "name": "domain", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "target.com" + }, + { + "default": "us", + "description": "us for RetailMeNot, ca for RetailMeNot Canada (stores from /retailmenot/stores with market=ca)", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "market", + "type": "string" } ], "produces": [ @@ -353625,7 +389761,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/retailmenot.storeResponseDoc" } }, "400": { @@ -353658,33 +389794,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Rebag static page", + "summary": "Get a RetailMeNot store's coupons and offers", "tags": [ - "Rebag" + "RetailMeNot" ] } }, - "/rebag/products": { + "/retailmenot/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from Rebag's (https://shop.rebag.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "rebag-products", + "description": "Returns every store in one letter of RetailMeNot's A-Z store directory, or of RetailMeNot Canada's store list with market=ca, with the domain to pass to /retailmenot/store (with the same market).", + "operationId": "retailmenot-stores", "parameters": [ { - "description": "1-based page, defaults to 1", + "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", + "0-9" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "letter", + "required": true, + "type": "string", + "x-example": "a" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "default": "us", + "description": "us for RetailMeNot, ca for RetailMeNot Canada", + "enum": [ + "us", + "ca" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "market", + "type": "string" } ], "produces": [ @@ -353694,7 +389864,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/retailmenot.storesResponseDoc" } }, "400": { @@ -353721,27 +389891,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Rebag products", + "summary": "List RetailMeNot stores by letter", "tags": [ - "Rebag" + "RetailMeNot" ] } }, - "/rebag/products/{handle}": { + "/reuters/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized product detail for one Rebag (https://shop.rebag.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "rebag-product", + "description": "Returns one normal Reuters article's public metadata and body paragraphs from a canonical article URL. Live blogs, video and podcast pages, and subscriber-only or bot-challenged responses are not supported.", + "operationId": "reuters-article", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Canonical Reuters article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "https://www.reuters.com/world/china/us-denmark-close-greenland-deal-sources-say-2026-09-18/" } ], "produces": [ @@ -353751,7 +389918,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/reuters.articleResponseDoc" } }, "400": { @@ -353784,45 +389951,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Rebag product", + "summary": "Get a Reuters article's content", "tags": [ - "Rebag" + "Reuters" ] } }, - "/rebag/products/{handle}/recommendations": { + "/reuters/articles": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized recommended products for one Rebag (https://shop.rebag.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "rebag-product-recommendations", + "description": "Returns a page of recent Reuters articles: title, canonical URL, update time, and the lead image URL when available. The index covers the most recent 10,000 articles.", + "operationId": "reuters-articles", "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": "Results page, 100 items per page", "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -353832,7 +389978,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/reuters.articlesResponseDoc" } }, "400": { @@ -353865,53 +390011,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Rebag product recommendations", + "summary": "Get recent Reuters articles", "tags": [ - "Rebag" + "Reuters" ] } }, - "/rebag/search": { + "/reuters/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized, ranked products from Rebag's (https://shop.rebag.com) own full-text product search (Shopify's Storefront API), including a best-effort condition grade and colour derived from the product's own catalog tags -- attributes not available from the classic catalog JSON endpoints in this family. The storefront URL is fixed server-side.", - "operationId": "rebag-search", + "description": "Returns a Reuters author's byline metadata, contact/social links, and recent articles from a canonical author URL.", + "operationId": "reuters-author", "parameters": [ { - "description": "Search query text", + "description": "Canonical Reuters author URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "chanel" - }, - { - "description": "Sort order. Allowed values: relevance, price_asc, price_desc", - "enum": [ - "relevance", - "price_asc", - "price_desc" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "relevance" - }, - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum products, defaults to 20 and supports up to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "https://www.reuters.com/authors/aditya-kalra/" } ], "produces": [ @@ -353921,7 +390038,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchResponseDoc" + "$ref": "#/definitions/reuters.authorResponseDoc" } }, "400": { @@ -353930,8 +390047,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -353948,41 +390065,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Rebag products", + "summary": "Get a Reuters author profile", "tags": [ - "Rebag" + "Reuters" ] } }, - "/rebag/search/suggest": { + "/reuters/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from Rebag's (https://shop.rebag.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "rebag-search-suggest", + "description": "Returns fresh Reuters headlines with title, canonical URL, publication and update times, and the lead image when Reuters publishes one. Covers the most recent stories from Reuters' public news feed.", + "operationId": "reuters-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": "Results page, 50 items per page", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "maximum": 60, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -353992,7 +390092,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/reuters.newsResponseDoc" } }, "400": { @@ -354001,6 +390101,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -354019,42 +390125,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rebag search suggestions", + "summary": "Get fresh Reuters headlines", "tags": [ - "Rebag" + "Reuters" ] } }, - "/rebag/sitemap/urls": { + "/reuters/section": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns capped URL entries from Rebag's (https://shop.rebag.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "rebag-sitemap-urls", + "description": "Returns a page of one top-level Reuters section's recent articles: canonical URL, update time, lead image URL, and image caption. This feed does not publish titles; use /reuters/articles for a title-bearing index.", + "operationId": "reuters-section", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "description": "Top-level Reuters section", "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" + "world", + "business", + "markets", + "technology", + "sports", + "legal", + "sustainability", + "commentary", + "lifestyle", + "science", + "live", + "podcasts", + "media-center", + "investigations", + "fact-check", + "wider-image", + "city-memo", + "data", + "video" ], "in": "query", - "name": "type", + "name": "section", + "required": true, "type": "string", - "x-example": "products" + "x-example": "world" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "description": "Results page, 100 items per page", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "maximum": 50, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -354064,7 +390181,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/reuters.sectionResponseDoc" } }, "400": { @@ -354073,6 +390190,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -354091,19 +390214,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Rebag sitemap URLs", + "summary": "Get recent articles in a Reuters section", "tags": [ - "Rebag" + "Reuters" ] } }, - "/rebag/sitemaps": { + "/reuters/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns child sitemap URLs from Rebag's (https://shop.rebag.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "rebag-sitemaps", + "description": "Lists every top-level Reuters section accepted by /reuters/section, with its slug, display name, and landing-page URL.", + "operationId": "reuters-sections", "produces": [ "application/json" ], @@ -354111,7 +390231,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/reuters.sectionsResponseDoc" } }, "400": { @@ -354138,43 +390258,71 @@ "ApiKeyAuth": [] } ], - "summary": "List Rebag sitemaps", + "summary": "List Reuters sections", "tags": [ - "Rebag" + "Reuters" ] } }, - "/rebag/store": { + "/rightmove/agents": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized storefront metadata for Rebag (https://shop.rebag.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "rebag-store", + "description": "Lists estate-agent branches from Rightmove's estate-agents directory for a location, with branch display name, brand, address, telephones, sales/lettings flags, logo, and a link to the branch profile. Pagination follows Rightmove's current directory pages, whose result counts can vary.", + "operationId": "rightmove-agents", + "parameters": [ + { + "description": "Rightmove location identifier from autocomplete (numeric location id required)", + "in": "query", + "name": "location", + "required": true, + "type": "string", + "x-example": "REGION^87490" + }, + { + "description": "Result page (default 1)", + "in": "query", + "name": "page", + "type": "integer" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Estate agent directory", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/rightmove.AgentsResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Bad Request", + "description": "Invalid query parameter", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -354185,61 +390333,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rebag store metadata", + "summary": "List Rightmove estate agents for a location", "tags": [ - "Rebag" + "Rightmove" ] } }, - "/reddit/comments/{id}": { + "/rightmove/agents/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Reddit post with its public comments. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return the server-rendered comments with public net score and award count plus post engagement metrics for 3 credits. Large threads may expose only an initial comment subset in anonymous HTML. Reddit does not expose per-comment upvote ratios or exact upvote/downvote totals anonymously. A post that exists but has no comments yet returns a 200 response with an empty comments list; a post that does not exist returns 404, and a temporary block or upstream failure returns 503 (retryable) rather than 404.", - "operationId": "reddit-comments", + "description": "Returns one estate-agent branch profile from Rightmove, including address, telephones, service flags, industry affiliations, and the branch's own sales and lettings listing previews. The slug segments in Rightmove agent URLs are cosmetic; the branch resolves by numeric id alone.", + "operationId": "rightmove-agent-branch", "parameters": [ { - "description": "Reddit post id or t3_ id", + "description": "Rightmove agent branch id", "in": "path", "name": "id", "required": true, - "type": "string" - }, - { - "default": "confidence", - "description": "Comment order: confidence, top, new, controversial, old, or qa. Applied to the anonymous HTML request when metrics are enabled.", - "enum": [ - "confidence", - "top", - "new", - "controversial", - "old", - "qa" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Maximum comments returned, defaults to 25 and clamps to 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "default": 3, - "description": "Maximum flat comment depth returned in metrics mode.", - "in": "query", - "name": "depth", - "type": "integer" - }, - { - "default": false, - "description": "Include public post and per-comment engagement metrics; costs 3 credits instead of 1", - "in": "query", - "name": "include_metrics", - "type": "boolean" + "type": "string", + "x-example": "12070" } ], "produces": [ @@ -354247,31 +390361,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Agent branch details", "schema": { - "$ref": "#/definitions/reddit.commentsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/rightmove.AgentBranchResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid branch id", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -354282,65 +390402,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Reddit post comments", + "summary": "Get Rightmove estate agent branch details", "tags": [ - "Reddit" + "Rightmove" ] } }, - "/reddit/domain/{domain}/posts": { + "/rightmove/autocomplete": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public posts submitted from a linked domain. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-domain-posts", + "description": "Returns location suggestions from Rightmove's autocomplete API for a given query", + "operationId": "rightmove-autocomplete", "parameters": [ { - "description": "Domain hostname, without scheme or path", - "in": "path", - "name": "domain", - "required": true, - "type": "string" - }, - { - "default": "hot", - "description": "Sort: hot, new, top, or rising", - "enum": [ - "hot", - "new", - "top", - "rising" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Time window for top sort: hour, day, week, month, year, or all", - "enum": [ - "hour", - "day", - "week", - "month", - "year", - "all" - ], + "description": "Location query", "in": "query", - "name": "time", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "London" }, { - "description": "Maximum posts, defaults to 25 and clamps to 100", + "description": "Maximum suggestions to return (default 10, max 20)", "in": "query", "name": "limit", "type": "integer" - }, - { - "description": "Reddit pagination token", - "in": "query", - "name": "after", - "type": "string" } ], "produces": [ @@ -354348,31 +390436,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Autocomplete suggestions", "schema": { - "$ref": "#/definitions/reddit.domainPostsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/rightmove.AutocompleteResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid query parameter", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -354383,84 +390477,118 @@ "ApiKeyAuth": [] } ], - "summary": "List Reddit domain posts", + "summary": "Get Rightmove location autocomplete suggestions", "tags": [ - "Reddit" + "Rightmove" ] } }, - "/reddit/leads": { + "/rightmove/commercial/search": { "get": { "consumes": [ "application/json" ], - "description": "Scans a Reddit search page for people actively asking for a product or service, scores each post 0-10 for buying intent, and returns them ranked highest-first with the signals that fired. Self-promotion, hiring posts, freelancer service adverts, revenue-milestone posts, duplicate reposts, and Title Case article headlines are filtered out before scoring. A deterministic prefilter always runs; when `classifier` resolves to `llm` the surviving candidates are additionally refined in one batched model call. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-leads", + "description": "Search Rightmove's commercial property listings for sale or to let, with price, floor-area (sq ft), and commercial-property-type filters. For to-let listings the price amount follows the listing's own frequency (monthly or yearly).", + "operationId": "rightmove-commercial-search", "parameters": [ { - "description": "What you offer, in plain language", + "description": "Rightmove location identifier from autocomplete", "in": "query", - "name": "q", + "name": "location", "required": true, - "type": "string" + "type": "string", + "x-example": "REGION^87490" }, { - "description": "Restrict the search to a subreddit name, without r/", + "description": "Result page (default 1)", "in": "query", - "name": "subreddit", - "type": "string" + "name": "page", + "type": "integer" }, { - "default": "relevance", - "description": "Sort: relevance, hot, new, top, or comments", + "description": "Listing status (default buy)", "enum": [ - "relevance", - "hot", - "new", - "top", - "comments" + "buy", + "let" ], "in": "query", - "name": "sort", + "name": "status", "type": "string" }, { - "default": "month", - "description": "Time window: hour, day, week, month, year, or all", - "enum": [ - "hour", - "day", - "week", - "month", - "year", - "all" - ], + "description": "Minimum price in whole GBP units, not pence", "in": "query", - "name": "time", - "type": "string" + "name": "min_price", + "type": "integer" }, { - "description": "Maximum leads returned, defaults to 25 and clamps to 100", + "description": "Maximum price in whole GBP units, not pence", "in": "query", - "name": "limit", + "name": "max_price", "type": "integer" }, { - "description": "Minimum buying-intent score to return, 0-10, defaults to 4", + "description": "Minimum floor area in square feet", "in": "query", - "name": "min_score", + "name": "min_size", "type": "integer" }, { - "default": "auto", - "description": "Classifier: auto uses the model when configured, heuristic skips it, llm requires it", + "description": "Maximum floor area in square feet", + "in": "query", + "name": "max_size", + "type": "integer" + }, + { + "description": "Commercial property type filter. Accepts one or more comma-separated values.", "enum": [ - "auto", - "heuristic", - "llm" + "business-park", + "office", + "serviced-office", + "convenience-store", + "hairdresser-barber-shop", + "post-office", + "retail_property_high_street_", + "retail_property_out_of_town_", + "retail_property_pop_up_", + "retail_property_retail_park_", + "retail_property_shopping_centre_", + "shop", + "showroom", + "trade-counter", + "bar-nightclub", + "cafe", + "leisure-facility", + "guest-house", + "hotel", + "hospitality", + "pub", + "restaurant", + "takeaway", + "other", + "distribution-warehouse", + "factory", + "heavy-industrial", + "industrial-park", + "light-industrial", + "storage", + "warehouse", + "workshop", + "industrial-development", + "land", + "farm", + "residential-development", + "healthcare-facility", + "childcare-facility", + "commercial-property", + "garage", + "mixed-use", + "commercial-development", + "petrol_station", + "place_of_worship" ], "in": "query", - "name": "classifier", + "name": "property_type", "type": "string" } ], @@ -354469,31 +390597,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Commercial property search results", "schema": { - "$ref": "#/definitions/reddit.leadsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/rightmove.SearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid query parameter", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -354504,140 +390638,83 @@ "ApiKeyAuth": [] } ], - "summary": "Find Reddit buying-intent leads", + "summary": "Search Rightmove commercial property", "tags": [ - "Reddit" + "Rightmove" ] } }, - "/reddit/post/{id}": { + "/rightmove/new-homes/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a normalized public Reddit post. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return public net score, upvote ratio, comment count, award count, and estimated upvote/downvote totals for 3 credits. Reddit fuzzes voting data, so estimates are approximate; share, repost/crosspost, and view counts are not exposed anonymously.", - "operationId": "reddit-post", + "description": "Search Rightmove's new-homes-for-sale listings for a location, with price, bedroom, bathroom, and property-type filters. Results are individual new-build homes and plots (with development flags), not development-level cards.", + "operationId": "rightmove-new-homes-search", "parameters": [ { - "description": "Reddit post id or t3_ id", - "in": "path", - "name": "id", + "description": "Rightmove location identifier from autocomplete", + "in": "query", + "name": "location", "required": true, - "type": "string" + "type": "string", + "x-example": "REGION^87490" }, { - "default": false, - "description": "Include public engagement metrics; costs 3 credits instead of 1", + "description": "Result page (default 1)", "in": "query", - "name": "include_metrics", - "type": "boolean" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/reddit.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" - } + "name": "page", + "type": "integer" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Reddit post", - "tags": [ - "Reddit" - ] - } - }, - "/reddit/search": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Searches public Reddit content and returns normalized public post entries. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-search", - "parameters": [ + "description": "Minimum price in whole GBP units, not pence", + "in": "query", + "name": "min_price", + "type": "integer" + }, { - "description": "Search keywords", + "description": "Maximum price in whole GBP units, not pence", "in": "query", - "name": "q", - "required": true, - "type": "string" + "name": "max_price", + "type": "integer" }, { - "description": "Restrict search to a subreddit name, without r/", + "description": "Minimum bedrooms", "in": "query", - "name": "subreddit", - "type": "string" + "name": "min_bedrooms", + "type": "integer" }, { - "default": "relevance", - "description": "Sort: relevance, hot, new, top, or comments", - "enum": [ - "relevance", - "hot", - "new", - "top", - "comments" - ], + "description": "Maximum bedrooms", "in": "query", - "name": "sort", - "type": "string" + "name": "max_bedrooms", + "type": "integer" }, { - "description": "Time window for top/comments sorts: hour, day, week, month, year, or all", - "enum": [ - "hour", - "day", - "week", - "month", - "year", - "all" - ], + "description": "Minimum bathrooms", "in": "query", - "name": "time", - "type": "string" + "name": "min_bathrooms", + "type": "number" }, { - "description": "Maximum posts, defaults to 25 and clamps to 100", + "description": "Maximum bathrooms", "in": "query", - "name": "limit", - "type": "integer" + "name": "max_bathrooms", + "type": "number" }, { - "description": "Reddit pagination token", + "description": "Property type filter. Accepts one or more comma-separated values.", + "enum": [ + "detached", + "semi-detached", + "terraced", + "flat", + "bungalow", + "land", + "park-home" + ], "in": "query", - "name": "after", + "name": "property_type", "type": "string" } ], @@ -354646,31 +390723,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "New homes search results", "schema": { - "$ref": "#/definitions/reddit.searchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/rightmove.SearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid query parameter", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -354681,32 +390764,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Reddit posts", + "summary": "Search Rightmove new homes for sale", "tags": [ - "Reddit" + "Rightmove" ] } }, - "/reddit/subreddit/{subreddit}/about": { + "/rightmove/properties/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public metadata and sample posts for a subreddit. Subscriber counts, icons, and banners are omitted because they are not available on anonymous Reddit pages. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-subreddit-about", + "description": "Returns detailed information for a specific Rightmove property by ID", + "operationId": "rightmove-property", "parameters": [ { - "description": "Subreddit name, without r/", + "description": "Rightmove property ID", "in": "path", - "name": "subreddit", + "name": "id", "required": true, - "type": "string" - }, - { - "description": "Maximum sample posts inspected, defaults to 25 and clamps to 100", - "in": "query", - "name": "limit", - "type": "integer" + "type": "string", + "x-example": "92527095" } ], "produces": [ @@ -354714,31 +390792,43 @@ ], "responses": { "200": { - "description": "OK", + "description": "Property details", "schema": { - "$ref": "#/definitions/reddit.subredditAboutResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/rightmove.PropertyResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Bad Request", + "description": "Invalid property ID", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Property not found", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -354749,37 +390839,163 @@ "ApiKeyAuth": [] } ], - "summary": "Get Reddit subreddit metadata", + "summary": "Get Rightmove property details", "tags": [ - "Reddit" + "Rightmove" ] } }, - "/reddit/subreddit/{subreddit}/comments": { + "/rightmove/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns flat public comment entries from a subreddit latest-comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-subreddit-comments", + "description": "Search for properties on Rightmove with filters for location, price, bedrooms, etc.", + "operationId": "rightmove-search", "parameters": [ { - "description": "Subreddit name, without r/", - "in": "path", - "name": "subreddit", + "description": "Rightmove location identifier from autocomplete", + "in": "query", + "name": "location", "required": true, + "type": "string", + "x-example": "REGION^87490" + }, + { + "description": "Result page (default 1)", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Listing status (default for_sale)", + "enum": [ + "for_sale", + "to_let" + ], + "in": "query", + "name": "status", + "type": "string", + "x-example": "for_sale" + }, + { + "description": "Minimum price in whole GBP units, not pence", + "in": "query", + "name": "min_price", + "type": "integer" + }, + { + "description": "Maximum price in whole GBP units, not pence", + "in": "query", + "name": "max_price", + "type": "integer" + }, + { + "description": "Minimum bedrooms", + "in": "query", + "name": "min_bedrooms", + "type": "integer" + }, + { + "description": "Maximum bedrooms", + "in": "query", + "name": "max_bedrooms", + "type": "integer" + }, + { + "description": "Minimum bathrooms", + "in": "query", + "name": "min_bathrooms", + "type": "number" + }, + { + "description": "Maximum bathrooms", + "in": "query", + "name": "max_bathrooms", + "type": "number" + }, + { + "description": "Property type filter. Accepts one or more comma-separated values. private-halls (Student Halls) mainly returns results for status=to_let.", + "enum": [ + "detached", + "semi-detached", + "terraced", + "flat", + "bungalow", + "land", + "park-home", + "private-halls" + ], + "in": "query", + "name": "property_type", "type": "string" }, { - "description": "Maximum comments, defaults to 25 and clamps to 100", + "description": "Search radius in miles around location, default 0 (this area only)", + "enum": [ + 0, + 0.25, + 0.5, + 1, + 3, + 5, + 10, + 15, + 20, + 30, + 40 + ], + "in": "query", + "name": "radius", + "type": "number" + }, + { + "description": "Require listings to have these attributes. Accepts one or more comma-separated values.", + "enum": [ + "garden", + "parking", + "retirement", + "newHome", + "sharedOwnership", + "auction" + ], + "in": "query", + "name": "must_have", + "type": "string" + }, + { + "description": "Exclude listings with these attributes. Accepts one or more comma-separated values.", + "enum": [ + "newHome", + "retirement", + "sharedOwnership", + "auction" + ], + "in": "query", + "name": "dont_show", + "type": "string" + }, + { + "description": "Tenure filter. Accepts one or more comma-separated values.", + "enum": [ + "FREEHOLD", + "LEASEHOLD", + "SHARE_OF_FREEHOLD" + ], "in": "query", - "name": "limit", - "type": "integer" + "name": "tenure_types", + "type": "string" }, { - "description": "Reddit pagination token", + "description": "Result sort order, default newest_listed", + "enum": [ + "lowest_price", + "highest_price", + "newest_listed", + "oldest_listed" + ], "in": "query", - "name": "after", + "name": "sort", "type": "string" } ], @@ -354788,31 +391004,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Property search results", "schema": { - "$ref": "#/definitions/reddit.subredditCommentsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/rightmove.SearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid query parameter", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -354823,64 +391045,67 @@ "ApiKeyAuth": [] } ], - "summary": "List Reddit subreddit comments", + "summary": "Search Rightmove properties", "tags": [ - "Reddit" + "Rightmove" ] } }, - "/reddit/subreddit/{subreddit}/posts": { + "/rightmove/student/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public posts from a subreddit. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-subreddit-posts", + "description": "Search Rightmove's student-accommodation listings for a location, with monthly-rent, bedroom, and furnishing filters. Prices are monthly rents in whole GBP units.", + "operationId": "rightmove-student-search", "parameters": [ { - "description": "Subreddit name, without r/", - "in": "path", - "name": "subreddit", + "description": "Rightmove location identifier from autocomplete", + "in": "query", + "name": "location", "required": true, - "type": "string" + "type": "string", + "x-example": "REGION^87490" }, { - "default": "hot", - "description": "Sort: hot, new, top, or rising", - "enum": [ - "hot", - "new", - "top", - "rising" - ], + "description": "Result page (default 1)", "in": "query", - "name": "sort", - "type": "string" + "name": "page", + "type": "integer" }, { - "description": "Time window for top sort: hour, day, week, month, year, or all", - "enum": [ - "hour", - "day", - "week", - "month", - "year", - "all" - ], + "description": "Minimum monthly rent in whole GBP units, not pence", "in": "query", - "name": "time", - "type": "string" + "name": "min_price", + "type": "integer" }, { - "description": "Maximum posts, defaults to 25 and clamps to 100", + "description": "Maximum monthly rent in whole GBP units, not pence", "in": "query", - "name": "limit", + "name": "max_price", "type": "integer" }, { - "description": "Reddit pagination token", + "description": "Minimum bedrooms", "in": "query", - "name": "after", + "name": "min_bedrooms", + "type": "integer" + }, + { + "description": "Maximum bedrooms", + "in": "query", + "name": "max_bedrooms", + "type": "integer" + }, + { + "description": "Furnishing filter", + "enum": [ + "furnished", + "unfurnished", + "part_furnished" + ], + "in": "query", + "name": "furnish_type", "type": "string" } ], @@ -354889,31 +391114,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Student accommodation search results", "schema": { - "$ref": "#/definitions/reddit.subredditPostsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/rightmove.SearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid query parameter", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -354924,65 +391155,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Reddit subreddit posts", + "summary": "Search Rightmove student accommodation", "tags": [ - "Reddit" + "Rightmove" ] } }, - "/reddit/subreddits/posts": { + "/rnz/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized public posts from a combined multi-subreddit feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-subreddits-posts", + "description": "Returns public RNZ news article metadata and body paragraphs from a canonical rnz.co.nz/news/
// article URL. RNZ has no paywall, so the full body is returned.", + "operationId": "rnz-article", "parameters": [ { - "description": "Comma-separated subreddit names, without r/, maximum 10", + "description": "Canonical RNZ news article URL", "in": "query", - "name": "subreddits", + "name": "url", "required": true, - "type": "string" - }, - { - "default": "hot", - "description": "Sort: hot, new, top, or rising", - "enum": [ - "hot", - "new", - "top", - "rising" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Time window for top sort: hour, day, week, month, year, or all", - "enum": [ - "hour", - "day", - "week", - "month", - "year", - "all" - ], - "in": "query", - "name": "time", - "type": "string" - }, - { - "description": "Maximum posts, defaults to 25 and clamps to 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Reddit pagination token", - "in": "query", - "name": "after", - "type": "string" + "type": "string", + "x-example": "https://www.rnz.co.nz/news/regions_auckland/1569602/auckland-man-used-missing-20-point-1-million-lotto-ticket-as-bookmark-for-almost-two-months" } ], "produces": [ @@ -354992,7 +391182,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reddit.multiSubredditPostsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -355007,12 +391197,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -355025,58 +391209,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Reddit multi-subreddit posts", + "summary": "Get RNZ article content", "tags": [ - "Reddit" + "RNZ" ] } }, - "/reddit/trends": { + "/rnz/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized public posts from broad Reddit hot, new, rising, or top feeds. For subreddit-specific trends, use `/reddit/subreddit/{subreddit}/posts` with `sort=hot`, `sort=new`, `sort=rising`, or `sort=top`. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-trends", + "description": "Returns one RNZ reporter's public profile: name, role, bio, email, X/Twitter handle, photo, total story count, and the first page of their news stories.", + "operationId": "rnz-author", "parameters": [ { - "default": "hot", - "description": "Sort: hot, new, rising, or top", - "enum": [ - "hot", - "new", - "rising", - "top" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Time window for top sort: hour, day, week, month, year, or all", - "enum": [ - "hour", - "day", - "week", - "month", - "year", - "all" - ], - "in": "query", - "name": "time", - "type": "string" - }, - { - "description": "Maximum posts, defaults to 25 and clamps to 100", + "description": "Author slug, e.g. ellen-o-dwyer", "in": "query", - "name": "limit", - "type": "integer" + "name": "slug", + "type": "string", + "x-example": "ellen-o-dwyer" }, { - "description": "Reddit pagination token", + "description": "Canonical rnz.co.nz/authors/ URL; alternative to slug", "in": "query", - "name": "after", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.rnz.co.nz/authors/ellen-o-dwyer" } ], "produces": [ @@ -355086,7 +391242,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reddit.trendsResponseDoc" + "$ref": "#/definitions/publicnews.rnzAuthorResponseDoc" } }, "400": { @@ -355101,12 +391257,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -355119,38 +391269,45 @@ "ApiKeyAuth": [] } ], - "summary": "List Reddit trends", + "summary": "Get an RNZ author profile", "tags": [ - "Reddit" + "RNZ" ] } }, - "/reddit/user/{username}/comments": { + "/rnz/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns flat public comment entries from a public Reddit user's comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-user-comments", + "description": "Returns fresh headlines from one public RNZ section feed.", + "operationId": "rnz-headlines", "parameters": [ { - "description": "Public Reddit username, without u/", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Maximum comments, defaults to 25 and clamps to 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Reddit pagination token", + "description": "RNZ section slug", + "enum": [ + "news", + "national", + "world", + "political", + "business", + "pacific", + "sport", + "health", + "education", + "community", + "country", + "regional", + "te-manu-korihi", + "on-the-inside", + "in-depth", + "indonz", + "ldr", + "chinese", + "weather" + ], "in": "query", - "name": "after", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" } ], "produces": [ @@ -355160,7 +391317,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reddit.userCommentsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -355169,18 +391326,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": { @@ -355193,40 +391338,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Reddit user comments", + "summary": "Get RNZ section headlines", "tags": [ - "Reddit" + "RNZ" ] } }, - "/reddit/user/{username}/posts": { + "/rnz/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized public posts from a public Reddit user's submitted feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry.", - "operationId": "reddit-user-posts", - "parameters": [ - { - "description": "Public Reddit username, without u/", - "in": "path", - "name": "username", - "required": true, - "type": "string" - }, - { - "description": "Maximum posts, defaults to 25 and clamps to 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Reddit pagination token", - "in": "query", - "name": "after", - "type": "string" - } - ], + "description": "Returns fresh RNZ (Radio New Zealand) top stories from the public all-news RSS feed.", + "operationId": "rnz-news", "produces": [ "application/json" ], @@ -355234,25 +391355,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reddit.userPostsResponseDoc" - } - }, - "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/publicnews.newsResponseDoc" } }, "503": { @@ -355267,28 +391370,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Reddit user posts", + "summary": "Get RNZ top stories", "tags": [ - "Reddit" + "RNZ" ] } }, - "/redfin/estimate": { + "/rnz/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the Redfin Estimate for a property, including the current estimate, property facts, and the monthly estimate history with city/county/postal comparatives. Faithful pass-through of Redfin's public avm + avmHistoricalData resources.", - "operationId": "redfin-estimate", - "parameters": [ - { - "description": "Redfin property id", - "in": "query", - "name": "property_id", - "required": true, - "type": "string" - } - ], + "description": "Returns the public RNZ news section inventory (one RSS feed each) accepted by rnz-headlines.", + "operationId": "rnz-sections", "produces": [ "application/json" ], @@ -355296,25 +391387,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/redfin.EstimateResponse" - } - }, - "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" } } }, @@ -355323,36 +391396,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Redfin Estimate", + "summary": "Get RNZ sections", "tags": [ - "Redfin" + "RNZ" ] } }, - "/redfin/property": { + "/roblox/badges": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Redfin public property details. Provide a listing url, or a property_id (optionally with listing_id) to use Redfin's public stingray detail API.", - "operationId": "redfin-property", + "description": "Returns one cursor-paginated page of public badge metadata for a Roblox experience. Pass next_cursor back unchanged as cursor. No user-awarded badge data is returned.", + "operationId": "roblox-badges", "parameters": [ { - "description": "Redfin listing URL (primary key)", - "in": "query", - "name": "url", - "type": "string" - }, - { - "description": "Redfin property id, used when url is not provided", + "description": "Positive Roblox universe id", "in": "query", - "name": "property_id", - "type": "string" + "minimum": 1, + "name": "universe_id", + "required": true, + "type": "integer", + "x-example": 383310974 }, { - "description": "Redfin listing id, improves completeness with property_id", + "description": "Opaque cursor returned by a previous response", "in": "query", - "name": "listing_id", + "name": "cursor", "type": "string" } ], @@ -355363,7 +391430,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/redfin.PropertyResponse" + "$ref": "#/definitions/roblox.badgesResponseDoc" } }, "400": { @@ -355372,12 +391439,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -355396,38 +391457,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get Redfin property", + "summary": "List Roblox experience badges", "tags": [ - "Redfin" + "Roblox" ] } }, - "/redfin/region-trends": { + "/roblox/game": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Redfin's aggregate market trends for a region (median list/sale price, sale-to-list, offers, days on market, inventory, year-over-year). Faithful pass-through of Redfin's public aggregate-trends resource.", - "operationId": "redfin-region-trends", + "description": "Returns public catalog detail for one Roblox experience, including aggregate votes and its public icon. This endpoint does not return player, account, purchase, or server data.", + "operationId": "roblox-game", "parameters": [ { - "description": "Redfin region id for a neighborhood, ZIP code, county, or city", + "description": "Positive Roblox universe id", "in": "query", - "name": "region_id", + "minimum": 1, + "name": "universe_id", "required": true, - "type": "integer" - }, - { - "description": "Redfin region type (defaults to 6, city)", - "enum": [ - 1, - 2, - 5, - 6 - ], - "in": "query", - "name": "region_type", - "type": "integer" + "type": "integer", + "x-example": 383310974 } ], "produces": [ @@ -355437,7 +391485,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/redfin.RegionTrendsResponse" + "$ref": "#/definitions/roblox.gameResponseDoc" } }, "400": { @@ -355446,6 +391494,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -355464,83 +391518,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Redfin region market trends", + "summary": "Get a Roblox experience", "tags": [ - "Redfin" + "Roblox" ] } }, - "/redfin/search": { + "/roblox/rankings": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Redfin public listing search results from Redfin's credential-free region CSV endpoint. Pass region_id/region_type from autocomplete to skip location resolution.", - "operationId": "redfin-search", + "description": "Returns a public Roblox game shelf. Allowed sort_id values: top-trending, up-and-coming, top-playing-now, fun-with-friends, top-revisited.", + "operationId": "roblox-rankings", "parameters": [ { - "description": "Display location; resolved via autocomplete when region_id is omitted", - "in": "query", - "name": "location", - "type": "string" - }, - { - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Redfin region id; skips location resolution when provided", - "in": "query", - "name": "region_id", - "type": "integer" - }, - { - "description": "Redfin region type, used with region_id (defaults to 6, city)", - "enum": [ - 1, - 2, - 5, - 6 - ], - "in": "query", - "name": "region_type", - "type": "integer" - }, - { - "description": "Listing status: for_sale or sold", + "default": "top-trending", + "description": "Ranking shelf: top-trending, up-and-coming, top-playing-now, fun-with-friends, top-revisited", "enum": [ - "for_sale", - "sold" + "top-trending", + "up-and-coming", + "top-playing-now", + "fun-with-friends", + "top-revisited" ], "in": "query", - "name": "status", + "name": "sort_id", "type": "string" - }, - { - "description": "Minimum price filter", - "in": "query", - "name": "min_price", - "type": "integer" - }, - { - "description": "Maximum price filter", - "in": "query", - "name": "max_price", - "type": "integer" - }, - { - "description": "Minimum bedrooms filter", - "in": "query", - "name": "min_beds", - "type": "integer" - }, - { - "description": "Minimum bathrooms filter", - "in": "query", - "name": "min_baths", - "type": "number" } ], "produces": [ @@ -355550,7 +391551,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/redfin.SearchResponse" + "$ref": "#/definitions/roblox.rankingsResponseDoc" } }, "400": { @@ -355577,25 +391578,29 @@ "ApiKeyAuth": [] } ], - "summary": "Search Redfin listings", + "summary": "List Roblox game rankings", "tags": [ - "Redfin" + "Roblox" ] } }, - "/redfin/similar": { + "/roblox/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Redfin's comparable (\"similar\") listings for a property as normalized listing rows. Faithful pass-through of Redfin's public similars resource.", - "operationId": "redfin-similar", + "description": "Searches anonymous public Roblox game experiences. The opaque page_token continues the same search.", + "operationId": "roblox-search", "parameters": [ { - "description": "Redfin property id", + "description": "Experience search query", "in": "query", - "name": "property_id", + "name": "q", "required": true, + "type": "string", + "x-example": "Adopt Me" + }, + { + "description": "Opaque page token returned by a previous search", + "in": "query", + "name": "page_token", "type": "string" } ], @@ -355606,7 +391611,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/redfin.SimilarResponse" + "$ref": "#/definitions/roblox.searchResponseDoc" } }, "400": { @@ -355633,28 +391638,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Redfin comparable listings", + "summary": "Search Roblox experiences", "tags": [ - "Redfin" + "Roblox" ] } }, - "/referrals/click": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Records sanitized referral click metadata for attribution analytics.", - "operationId": "referrals-click", + "/rollingstone/article": { + "get": { + "description": "Returns public Rolling Stone article metadata and body paragraphs from a canonical article URL.", + "operationId": "rollingstone-article", "parameters": [ { - "description": "Referral click metadata", - "in": "body", - "name": "request", + "description": "Canonical Rolling Stone article URL", + "in": "query", + "name": "url", "required": true, - "schema": { - "$ref": "#/definitions/referrals.referralClickRequestDoc" - } + "type": "string", + "x-example": "https://www.rollingstone.com/music/music-news/taylor-swift-the-life-of-a-showgirl-deluxe-album-1235630197/" } ], "produces": [ @@ -355662,104 +391663,25 @@ ], "responses": { "200": { - "description": "Referral click id", + "description": "OK", "schema": { - "$ref": "#/definitions/referrals.referralClickResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Invalid request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "summary": "Capture a referral click", - "tags": [ - "Referrals" - ] - } - }, - "/referrals/me": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the authenticated user's referral code, share path, reward settings, aggregate stats, and recent referral records.", - "operationId": "referrals-me", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Referral summary", - "schema": { - "$ref": "#/definitions/referrals.referralsMeResponseDoc" - } - }, - "401": { - "description": "Authentication required", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "JWTAuth": [] - } - ], - "summary": "Get current user's referral program summary", - "tags": [ - "Referrals" - ] - } - }, - "/referrals/me/events": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns recent referral attribution records where the authenticated user is either the referrer or referred account.", - "operationId": "referrals-me-events", - "parameters": [ - { - "description": "Maximum records to return, capped at 100", - "in": "query", - "name": "limit", - "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Referral events", - "schema": { - "$ref": "#/definitions/referrals.referralsEventsResponseDoc" - } }, - "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" } @@ -355767,45 +391689,27 @@ }, "security": [ { - "JWTAuth": [] + "ApiKeyAuth": [] } ], - "summary": "List current user's referral events", + "summary": "Get Rolling Stone article content", "tags": [ - "Referrals" + "Rolling Stone" ] } }, - "/resy/availability": { + "/rollingstone/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the bookable reservation timeslots Resy currently shows for a restaurant, date, and party size -- the same read-only availability an anonymous visitor sees before signing in. This is discovery only; it does not create, hold, modify, or cancel a reservation.", - "operationId": "resy-availability", + "description": "Returns a Rolling Stone author's byline metadata, biography, and recent articles (sourced from the author's own public RSS feed) from a canonical author URL.", + "operationId": "rollingstone-author", "parameters": [ { - "description": "Resy restaurant id", - "in": "query", - "name": "restaurant_id", - "required": true, - "type": "string", - "x-example": "6194" - }, - { - "description": "Reservation date, YYYY-MM-DD", + "description": "Canonical Rolling Stone author URL", "in": "query", - "name": "date", + "name": "url", "required": true, "type": "string", - "x-example": "2026-09-20" - }, - { - "description": "Party size, default 2", - "in": "query", - "name": "party_size", - "type": "integer", - "x-example": 2 + "x-example": "https://www.rollingstone.com/author/cheyenne-roundtree/" } ], "produces": [ @@ -355815,7 +391719,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/resy.availabilityResponseDoc" + "$ref": "#/definitions/publicnews.rollingStoneAuthorResponseDoc" } }, "400": { @@ -355830,12 +391734,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -355848,27 +391746,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Resy restaurant's bookable reservation timeslots", + "summary": "Get a Rolling Stone author profile", "tags": [ - "Resy" + "Rolling Stone" ] } }, - "/resy/cuisines": { + "/rollingstone/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the cuisines present among restaurants in a Resy location. Location is a short city code or numeric location id -- both already returned inline as location_code on resy-search and resy-restaurant results; there is no separate closed list of every valid location on Resy's own API, so this value always comes from a prior search/restaurant response rather than a guessed input.", - "operationId": "resy-cuisines", + "description": "Returns fresh headlines from one public Rolling Stone section.", + "operationId": "rollingstone-headlines", "parameters": [ { - "description": "Resy location code or numeric id (from a prior resy-search/resy-restaurant response's location_code field)", + "description": "Rolling Stone section slug", + "enum": [ + "music", + "music-news", + "music-features", + "music-lists", + "music-album-reviews", + "music-live-reviews", + "music-country", + "music-latin", + "music-pictures", + "politics", + "politics-news", + "politics-features", + "politics-lists", + "tv-movies", + "tv-movie-news", + "tv-movie-features", + "tv-movie-lists", + "tv-movie-recaps", + "tv-movie-reviews", + "culture", + "culture-news", + "culture-features", + "culture-lists", + "rs-gaming", + "product-recommendations", + "pro", + "artist-you-need-to-know", + "song-to-know", + "photo-gallery", + "creators", + "rs-recommends", + "rs-essentials", + "audio-awards", + "gift-guide" + ], "in": "query", - "name": "location", + "name": "section", "required": true, "type": "string", - "x-example": "ny" + "x-example": "music" } ], "produces": [ @@ -355878,7 +391809,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/resy.cuisinesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -355887,12 +391818,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -355905,52 +391830,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the cuisines present in a Resy location", + "summary": "Get Rolling Stone section headlines", "tags": [ - "Resy" + "Rolling Stone" ] } }, - "/resy/event": { + "/rollingstone/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a ticketed dining event's full description, event-day instructions, and per-ticket-tier package breakdown (price, what's included, live ticket availability). All three identifiers come from a prior resy-events result: event_url_slug is that result's url_slug, restaurant_url_slug is its restaurant_url_slug, and location is the same city identifier resy-events was called with. Credential-free, read-only discovery -- does not purchase a ticket.", - "operationId": "resy-event-detail", - "parameters": [ - { - "description": "Event url_slug, from a prior resy-events result", - "in": "query", - "name": "event_url_slug", - "required": true, - "type": "string", - "x-example": "the-bonnie-brunch-citi-field-trip-2026-09-20-6" - }, - { - "description": "Restaurant url_slug, from that same resy-events result's restaurant_url_slug", - "in": "query", - "name": "restaurant_url_slug", - "required": true, - "type": "string", - "x-example": "the-bonnie" - }, - { - "description": "Resy location code or numeric id, same value resy-events was called with", - "in": "query", - "name": "location", - "required": true, - "type": "string", - "x-example": "ny" - }, - { - "description": "Party size, default 2", - "in": "query", - "name": "party_size", - "type": "integer", - "x-example": 2 - } - ], + "description": "Returns fresh Rolling Stone top stories from its public RSS feed.", + "operationId": "rollingstone-news", "produces": [ "application/json" ], @@ -355958,23 +391847,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/resy.eventDetailResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -355991,50 +391868,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Resy ticketed dining event's full description and ticket packages", + "summary": "Get Rolling Stone top stories", "tags": [ - "Resy" + "Rolling Stone" ] } }, - "/resy/events": { + "/rollingstone/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns ticketed dining events (fixed-price, fixed-capacity experiences a restaurant hosts and sells tickets for, distinct from a regular reservation) in a Resy location. Credential-free, read-only discovery -- does not create, hold, or purchase a ticket.", - "operationId": "resy-events", - "parameters": [ - { - "description": "Resy location code or numeric id (from a prior resy-search/resy-restaurant response's location_code field)", - "in": "query", - "name": "location", - "required": true, - "type": "string", - "x-example": "ny" - }, - { - "description": "Only return events starting on or after this date, YYYY-MM-DD; defaults to the next calendar day", - "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-09-21" - }, - { - "description": "Max events returned, default 10", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Page past the first `limit` events, default 0", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - } - ], + "description": "Returns the public Rolling Stone section inventory: every music, politics, TV & movies, and culture subsection plus the site's standalone verticals (Rolling Stone Pro, product recommendations) and tag hubs, each linking to its public RSS feed.", + "operationId": "rollingstone-sections", "produces": [ "application/json" ], @@ -356042,25 +391885,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/resy.eventsResponseDoc" - } - }, - "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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -356069,33 +391894,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get ticketed dining events in a Resy location", + "summary": "Get Rolling Stone sections", "tags": [ - "Resy" + "Rolling Stone" ] } }, - "/resy/locations": { + "/rothys/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns Resy's full list of operating locations (cities), optionally filtered by a free-text substring and/or country. This is the discovery source for the location value used throughout the rest of this family (resy-search's/resy-restaurant's location_code, resy-cuisines'/resy-events'/resy-event-detail's location). Credential-free.", - "operationId": "resy-locations", + "description": "Returns normalized collections from Rothy's (https://www.rothys.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "rothys-collections", "parameters": [ { - "description": "Case-insensitive substring match against a location's name, code, or url_slug", + "description": "1-based page, defaults to 1", "in": "query", - "name": "q", - "type": "string", - "x-example": "new york" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Case-insensitive exact match against a location's country name", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "country", - "type": "string", - "x-example": "United States" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -356105,11 +391930,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/resy.locationsResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -356126,27 +391957,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Resy's operating locations (cities)", + "summary": "List Rothy's collections", "tags": [ - "Resy" + "Rothy's" ] } }, - "/resy/restaurant": { + "/rothys/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns a restaurant's profile: name, cuisine, price tier, rating/review count, address/neighborhood, contact info, and description text. Credential-free.", - "operationId": "resy-restaurant", + "description": "Returns normalized products from one Rothy's (https://www.rothys.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "rothys-collection-products", "parameters": [ { - "description": "Resy restaurant id", - "in": "query", - "name": "restaurant_id", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "6194" + "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": [ @@ -356156,7 +392001,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/resy.restaurantResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -356171,8 +392016,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -356189,63 +392034,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Resy restaurant's profile", + "summary": "List Rothy's collection products", "tags": [ - "Resy" + "Rothy's" ] } }, - "/resy/search": { + "/rothys/pages": { "get": { "consumes": [ "application/json" ], - "description": "Searches restaurants by free-text term (name, cuisine, or neighborhood) near a latitude/longitude, optionally including live bookable-timeslot availability for a given date and party size. Credential-free.", - "operationId": "resy-search", + "description": "Returns normalized static pages from Rothy's (https://www.rothys.com). The storefront URL is fixed server-side.", + "operationId": "rothys-pages", "parameters": [ { - "description": "Free-text search term (name, cuisine, or neighborhood)", - "in": "query", - "name": "term", - "type": "string", - "x-example": "carbone" - }, - { - "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": "Reservation date, YYYY-MM-DD; when set, results include live timeslots", - "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-09-20" - }, - { - "description": "Party size, default 2", + "description": "1-based page, defaults to 1", "in": "query", - "name": "party_size", + "name": "page", "type": "integer", - "x-example": 2 + "x-example": 1 }, { - "description": "Max results, default 10", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "size", + "name": "limit", "type": "integer", - "x-example": 10 + "x-example": 50 } ], "produces": [ @@ -356255,7 +392070,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/resy.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -356264,8 +392079,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -356282,24 +392097,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Resy restaurants near a location", + "summary": "List Rothy's static pages", "tags": [ - "Resy" + "Rothy's" ] } }, - "/reuters/article": { + "/rothys/pages/{handle}": { "get": { - "description": "Returns one normal Reuters article's public metadata and body paragraphs from a canonical article URL. Live blogs, video and podcast pages, and subscriber-only or bot-challenged responses are not supported.", - "operationId": "reuters-article", + "consumes": [ + "application/json" + ], + "description": "Returns normalized static page detail for one Rothy's (https://www.rothys.com) page handle. The storefront URL is fixed server-side.", + "operationId": "rothys-page", "parameters": [ { - "description": "Canonical Reuters article URL", - "in": "query", - "name": "url", + "description": "Page handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://www.reuters.com/world/china/us-denmark-close-greenland-deal-sources-say-2026-09-18/" + "x-example": "page-handle" } ], "produces": [ @@ -356309,7 +392127,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reuters.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -356342,24 +392160,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Reuters article's content", + "summary": "Get a Rothy's static page", "tags": [ - "Reuters" + "Rothy's" ] } }, - "/reuters/articles": { + "/rothys/products": { "get": { - "description": "Returns a page of recent Reuters articles: title, canonical URL, update time, and the lead image URL when available. The index covers the most recent 10,000 articles.", - "operationId": "reuters-articles", + "consumes": [ + "application/json" + ], + "description": "Returns normalized products from Rothy's's (https://www.rothys.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "rothys-products", "parameters": [ { - "description": "Results page, 100 items per page", + "description": "1-based page, defaults to 1", "in": "query", - "maximum": 100, - "minimum": 1, "name": "page", - "type": "integer" + "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": [ @@ -356369,7 +392196,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reuters.articlesResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -356378,12 +392205,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -356402,24 +392223,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get recent Reuters articles", + "summary": "List Rothy's products", "tags": [ - "Reuters" + "Rothy's" ] } }, - "/reuters/author": { + "/rothys/products/{handle}": { "get": { - "description": "Returns a Reuters author's byline metadata, contact/social links, and recent articles from a canonical author URL.", - "operationId": "reuters-author", + "consumes": [ + "application/json" + ], + "description": "Returns normalized product detail for one Rothy's (https://www.rothys.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "rothys-product", "parameters": [ { - "description": "Canonical Reuters author URL", - "in": "query", - "name": "url", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://www.reuters.com/authors/aditya-kalra/" + "x-example": "product-handle" } ], "produces": [ @@ -356429,7 +392253,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reuters.authorResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -356444,6 +392268,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -356456,24 +392286,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Reuters author profile", + "summary": "Get a Rothy's product", "tags": [ - "Reuters" + "Rothy's" ] } }, - "/reuters/news": { + "/rothys/products/{handle}/recommendations": { "get": { - "description": "Returns fresh Reuters headlines with title, canonical URL, publication and update times, and the lead image when Reuters publishes one. Covers the most recent stories from Reuters' public news feed.", - "operationId": "reuters-news", + "consumes": [ + "application/json" + ], + "description": "Returns normalized recommended products for one Rothy's (https://www.rothys.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "rothys-product-recommendations", "parameters": [ { - "description": "Results page, 50 items per page", + "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", - "maximum": 60, - "minimum": 1, - "name": "page", - "type": "integer" + "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": [ @@ -356483,7 +392334,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reuters.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -356516,52 +392367,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get fresh Reuters headlines", + "summary": "List Rothy's product recommendations", "tags": [ - "Reuters" + "Rothy's" ] } }, - "/reuters/section": { + "/rothys/search/suggest": { "get": { - "description": "Returns a page of one top-level Reuters section's recent articles: canonical URL, update time, lead image URL, and image caption. This feed does not publish titles; use /reuters/articles for a title-bearing index.", - "operationId": "reuters-section", + "consumes": [ + "application/json" + ], + "description": "Returns products, collections, and query suggestions from Rothy's's (https://www.rothys.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "rothys-search-suggest", "parameters": [ { - "description": "Top-level Reuters section", - "enum": [ - "world", - "business", - "markets", - "technology", - "sports", - "legal", - "sustainability", - "commentary", - "lifestyle", - "science", - "live", - "podcasts", - "media-center", - "investigations", - "fact-check", - "wider-image", - "city-memo", - "data", - "video" - ], + "description": "Search query", "in": "query", - "name": "section", + "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "wool" }, { - "description": "Results page, 100 items per page", + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page", - "type": "integer" + "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": [ @@ -356571,7 +392411,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reuters.sectionResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -356580,12 +392420,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -356604,16 +392438,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get recent articles in a Reuters section", + "summary": "Get Rothy's search suggestions", "tags": [ - "Reuters" + "Rothy's" ] } }, - "/reuters/sections": { + "/rothys/sitemap/urls": { "get": { - "description": "Lists every top-level Reuters section accepted by /reuters/section, with its slug, display name, and landing-page URL.", - "operationId": "reuters-sections", + "consumes": [ + "application/json" + ], + "description": "Returns capped URL entries from Rothy's's (https://www.rothys.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "rothys-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" ], @@ -356621,7 +392483,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/reuters.sectionsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -356648,58 +392510,43 @@ "ApiKeyAuth": [] } ], - "summary": "List Reuters sections", + "summary": "List Rothy's sitemap URLs", "tags": [ - "Reuters" + "Rothy's" ] } }, - "/rightmove/agents": { + "/rothys/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Lists estate-agent branches from Rightmove's estate-agents directory for a location, with branch display name, brand, address, telephones, sales/lettings flags, logo, and a link to the branch profile. Pagination follows Rightmove's current directory pages, whose result counts can vary.", - "operationId": "rightmove-agents", - "parameters": [ - { - "description": "Rightmove location identifier from autocomplete (numeric location id required)", - "in": "query", - "name": "location", - "required": true, - "type": "string" - }, - { - "description": "Result page (default 1)", - "in": "query", - "name": "page", - "type": "integer" - } - ], + "description": "Returns child sitemap URLs from Rothy's's (https://www.rothys.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "rothys-sitemaps", "produces": [ "application/json" ], "responses": { "200": { - "description": "Estate agent directory", + "description": "OK", "schema": { - "$ref": "#/definitions/rightmove.AgentsResponse" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { - "description": "Invalid query parameter", + "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": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -356710,52 +392557,43 @@ "ApiKeyAuth": [] } ], - "summary": "List Rightmove estate agents for a location", + "summary": "List Rothy's sitemaps", "tags": [ - "Rightmove" + "Rothy's" ] } }, - "/rightmove/agents/{id}": { + "/rothys/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns one estate-agent branch profile from Rightmove, including address, telephones, service flags, industry affiliations, and the branch's own sales and lettings listing previews. The slug segments in Rightmove agent URLs are cosmetic; the branch resolves by numeric id alone.", - "operationId": "rightmove-agent-branch", - "parameters": [ - { - "description": "Rightmove agent branch id", - "in": "path", - "name": "id", - "required": true, - "type": "string" - } - ], + "description": "Returns normalized storefront metadata for Rothy's (https://www.rothys.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "rothys-store", "produces": [ "application/json" ], "responses": { "200": { - "description": "Agent branch details", + "description": "OK", "schema": { - "$ref": "#/definitions/rightmove.AgentBranchResponse" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { - "description": "Invalid branch id", + "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": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -356766,32 +392604,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rightmove estate agent branch details", + "summary": "Get Rothy's store metadata", "tags": [ - "Rightmove" + "Rothy's" ] } }, - "/rightmove/autocomplete": { + "/rottentomatoes/browse/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns location suggestions from Rightmove's autocomplete API for a given query", - "operationId": "rightmove-autocomplete", + "description": "Returns every filter and accepted value exposed by the selected live Rotten Tomatoes browse page. Call this before building filtered movie or TV browse requests; values differ by list and update with the site's menus.", + "operationId": "rottentomatoes-browse-filters", "parameters": [ { - "description": "Location query", - "in": "query", - "name": "query", - "required": true, - "type": "string" - }, - { - "description": "Maximum suggestions to return (default 10, max 20)", + "description": "Browse list: movies_in_theaters, movies_at_home, movies_coming_soon, tv_series_browse", + "enum": [ + "movies_in_theaters", + "movies_at_home", + "movies_coming_soon", + "tv_series_browse" + ], "in": "query", - "name": "limit", - "type": "integer" + "name": "list", + "type": "string", + "x-example": "movies_in_theaters" } ], "produces": [ @@ -356799,25 +392637,37 @@ ], "responses": { "200": { - "description": "Autocomplete suggestions", + "description": "OK", "schema": { - "$ref": "#/definitions/rightmove.AutocompleteResponse" + "$ref": "#/definitions/rottentomatoes.browseFiltersResponseDoc" } }, "400": { - "description": "Invalid query parameter", + "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": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -356828,118 +392678,171 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rightmove location autocomplete suggestions", + "summary": "Rotten Tomatoes browse filter discovery", "tags": [ - "Rightmove" + "Rotten Tomatoes" ] } }, - "/rightmove/commercial/search": { + "/rottentomatoes/browse/movies": { "get": { "consumes": [ "application/json" ], - "description": "Search Rightmove's commercial property listings for sale or to let, with price, floor-area (sq ft), and commercial-property-type filters. For to-let listings the price amount follows the listing's own frequency (monthly or yearly).", - "operationId": "rightmove-commercial-search", + "description": "Returns normalized movie rows from Rotten Tomatoes' public browse JSON route. Use `/rottentomatoes/browse/filters` to discover current values for each list. Filters accept comma-separated values; pagination uses the opaque `after` cursor from the previous response.", + "operationId": "rottentomatoes-browse-movies", "parameters": [ { - "description": "Rightmove location identifier from autocomplete", + "description": "Movie browse list: movies_in_theaters, movies_at_home, movies_coming_soon", + "enum": [ + "movies_in_theaters", + "movies_at_home", + "movies_coming_soon" + ], "in": "query", - "name": "location", - "required": true, - "type": "string" + "name": "list", + "type": "string", + "x-example": "movies_in_theaters" }, { - "description": "Result page (default 1)", + "description": "Sort value from the selected list's browse/filters response", + "enum": [ + "popular", + "newest", + "top_box_office", + "a_z", + "critic_highest", + "critic_lowest", + "audience_highest", + "audience_lowest" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "sort", + "type": "string", + "x-example": "popular" }, { - "description": "Listing status (default buy)", + "description": "Comma-separated genre values from browse/filters", "enum": [ - "buy", - "let" + "action", + "adventure", + "animation", + "anime", + "biography", + "comedy", + "crime", + "documentary", + "drama", + "entertainment", + "faith_and_spirituality", + "fantasy", + "game_show", + "lgbtq", + "health_and_wellness", + "history", + "holiday", + "horror", + "house_and_garden", + "kids_and_family", + "music", + "musical", + "mystery_and_thriller", + "nature", + "news", + "reality", + "romance", + "sci_fi", + "short", + "soap", + "special_interest", + "sports", + "stand_up", + "talk_show", + "travel", + "variety", + "war", + "western" ], "in": "query", - "name": "status", - "type": "string" + "name": "genres", + "type": "string", + "x-example": "action,drama" }, { - "description": "Minimum price in whole GBP units, not pence", + "description": "Comma-separated content ratings from browse/filters", + "enum": [ + "g", + "pg", + "pg_13", + "r", + "nc_17", + "nr", + "ur" + ], "in": "query", - "name": "min_price", - "type": "integer" + "name": "ratings", + "type": "string", + "x-example": "pg_13" }, { - "description": "Maximum price in whole GBP units, not pence", + "description": "Comma-separated Popcornmeter values from browse/filters", + "enum": [ + "verified_hot", + "upright", + "spilled" + ], "in": "query", - "name": "max_price", - "type": "integer" + "name": "audience", + "type": "string", + "x-example": "upright" }, { - "description": "Minimum floor area in square feet", + "description": "Comma-separated Tomatometer values from browse/filters", + "enum": [ + "certified_fresh", + "fresh", + "rotten" + ], "in": "query", - "name": "min_size", - "type": "integer" + "name": "critics", + "type": "string", + "x-example": "certified_fresh" }, { - "description": "Maximum floor area in square feet", + "description": "Comma-separated streaming/service values from browse/filters", + "enum": [ + "theaters", + "fandango", + "apple-tv-plus", + "netflix", + "prime-video", + "disney-plus", + "max", + "peacock", + "hulu", + "paramount-plus", + "amc-plus", + "acorn-tv", + "apple-tv" + ], "in": "query", - "name": "max_size", - "type": "integer" + "name": "affiliates", + "type": "string", + "x-example": "netflix" }, { - "description": "Commercial property type filter. Accepts one or more comma-separated values.", - "enum": [ - "business-park", - "office", - "serviced-office", - "convenience-store", - "hairdresser-barber-shop", - "post-office", - "retail_property_high_street_", - "retail_property_out_of_town_", - "retail_property_pop_up_", - "retail_property_retail_park_", - "retail_property_shopping_centre_", - "shop", - "showroom", - "trade-counter", - "bar-nightclub", - "cafe", - "leisure-facility", - "guest-house", - "hotel", - "hospitality", - "pub", - "restaurant", - "takeaway", - "other", - "distribution-warehouse", - "factory", - "heavy-industrial", - "industrial-park", - "light-industrial", - "storage", - "warehouse", - "workshop", - "industrial-development", - "land", - "farm", - "residential-development", - "healthcare-facility", - "childcare-facility", - "commercial-property", - "garage", - "mixed-use", - "commercial-development", - "petrol_station", - "place_of_worship" - ], + "description": "Opaque next-page cursor returned in data.page_info.end_cursor", "in": "query", - "name": "property_type", - "type": "string" + "name": "after", + "type": "string", + "x-example": "Mjk=" + }, + { + "description": "Rows to return, default 10, max 30", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -356947,25 +392850,37 @@ ], "responses": { "200": { - "description": "Commercial property search results", + "description": "OK", "schema": { - "$ref": "#/definitions/rightmove.SearchResponse" + "$ref": "#/definitions/rottentomatoes.browseResponseDoc" } }, "400": { - "description": "Invalid query parameter", + "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": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -356976,83 +392891,165 @@ "ApiKeyAuth": [] } ], - "summary": "Search Rightmove commercial property", + "summary": "Rotten Tomatoes movie discovery rows", "tags": [ - "Rightmove" + "Rotten Tomatoes" ] } }, - "/rightmove/new-homes/search": { + "/rottentomatoes/browse/tv": { "get": { "consumes": [ "application/json" ], - "description": "Search Rightmove's new-homes-for-sale listings for a location, with price, bedroom, bathroom, and property-type filters. Results are individual new-build homes and plots (with development flags), not development-level cards.", - "operationId": "rightmove-new-homes-search", + "description": "Returns normalized TV series rows from Rotten Tomatoes' public browse JSON route. Use `/rottentomatoes/browse/filters?list=tv_series_browse` to discover current filters; pagination uses the opaque `after` cursor from the previous response.", + "operationId": "rottentomatoes-browse-tv", "parameters": [ { - "description": "Rightmove location identifier from autocomplete", + "description": "TV browse list: tv_series_browse", + "enum": [ + "tv_series_browse" + ], "in": "query", - "name": "location", - "required": true, - "type": "string" + "name": "list", + "type": "string", + "x-example": "tv_series_browse" }, { - "description": "Result page (default 1)", + "description": "Sort value from browse/filters", + "enum": [ + "popular", + "newest", + "a_z", + "critic_highest", + "critic_lowest", + "audience_highest", + "audience_lowest" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "sort", + "type": "string", + "x-example": "popular" }, { - "description": "Minimum price in whole GBP units, not pence", + "description": "Comma-separated genre values from browse/filters", + "enum": [ + "action", + "adventure", + "animation", + "anime", + "biography", + "comedy", + "crime", + "documentary", + "drama", + "entertainment", + "faith_and_spirituality", + "fantasy", + "game_show", + "lgbtq", + "health_and_wellness", + "history", + "holiday", + "horror", + "house_and_garden", + "kids_and_family", + "music", + "musical", + "mystery_and_thriller", + "nature", + "news", + "reality", + "romance", + "sci_fi", + "short", + "soap", + "special_interest", + "sports", + "stand_up", + "talk_show", + "travel", + "variety", + "war", + "western" + ], "in": "query", - "name": "min_price", - "type": "integer" + "name": "genres", + "type": "string", + "x-example": "action,drama" }, { - "description": "Maximum price in whole GBP units, not pence", + "description": "Comma-separated content ratings from browse/filters", + "enum": [ + "tvy", + "tvy7", + "tvg", + "tvpg", + "tv14", + "tvma" + ], "in": "query", - "name": "max_price", - "type": "integer" + "name": "ratings", + "type": "string", + "x-example": "tv14" }, { - "description": "Minimum bedrooms", + "description": "Comma-separated Popcornmeter values from browse/filters", + "enum": [ + "upright", + "spilled" + ], "in": "query", - "name": "min_bedrooms", - "type": "integer" + "name": "audience", + "type": "string", + "x-example": "upright" }, { - "description": "Maximum bedrooms", + "description": "Comma-separated Tomatometer values from browse/filters", + "enum": [ + "fresh", + "rotten" + ], "in": "query", - "name": "max_bedrooms", - "type": "integer" + "name": "critics", + "type": "string", + "x-example": "fresh" }, { - "description": "Minimum bathrooms", + "description": "Comma-separated streaming/service values from browse/filters", + "enum": [ + "theaters", + "fandango", + "apple-tv-plus", + "netflix", + "prime-video", + "disney-plus", + "max", + "peacock", + "hulu", + "paramount-plus", + "amc-plus", + "acorn-tv", + "apple-tv" + ], "in": "query", - "name": "min_bathrooms", - "type": "number" + "name": "affiliates", + "type": "string", + "x-example": "netflix" }, { - "description": "Maximum bathrooms", + "description": "Opaque next-page cursor returned in data.page_info.end_cursor", "in": "query", - "name": "max_bathrooms", - "type": "number" + "name": "after", + "type": "string", + "x-example": "Mjk=" }, { - "description": "Property type filter. Accepts one or more comma-separated values.", - "enum": [ - "detached", - "semi-detached", - "terraced", - "flat", - "bungalow", - "land", - "park-home" - ], + "description": "Rows to return, default 10, max 30", "in": "query", - "name": "property_type", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -357060,87 +393057,37 @@ ], "responses": { "200": { - "description": "New homes search results", + "description": "OK", "schema": { - "$ref": "#/definitions/rightmove.SearchResponse" + "$ref": "#/definitions/rottentomatoes.browseResponseDoc" } }, "400": { - "description": "Invalid query parameter", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Upstream error", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Search Rightmove new homes for sale", - "tags": [ - "Rightmove" - ] - } - }, - "/rightmove/properties/{id}": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detailed information for a specific Rightmove property by ID", - "operationId": "rightmove-property", - "parameters": [ - { - "description": "Rightmove property ID", - "in": "path", - "name": "id", - "required": true, - "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Property details", - "schema": { - "$ref": "#/definitions/rightmove.PropertyResponse" - } }, - "400": { - "description": "Invalid property ID", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Property not found", + "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": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -357151,163 +393098,90 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rightmove property details", + "summary": "Rotten Tomatoes TV discovery rows", "tags": [ - "Rightmove" + "Rotten Tomatoes" ] } }, - "/rightmove/search": { + "/rottentomatoes/critics/authors": { "get": { "consumes": [ "application/json" ], - "description": "Search for properties on Rightmove with filters for location, price, bedrooms, etc.", - "operationId": "rightmove-search", + "description": "Returns current or inactive critics from Rotten Tomatoes' public author directory. Browse one letter or search by name; use `next_cursor` as `after` or `previous_cursor` as `before`, as indicated by the corresponding page flag. The letter values come from the live directory controls.", + "operationId": "rottentomatoes-critics-authors", "parameters": [ { - "description": "Rightmove location identifier from autocomplete", - "in": "query", - "name": "location", - "required": true, - "type": "string" - }, - { - "description": "Result page (default 1)", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Listing status (default for_sale)", + "description": "Directory letter. Omit when using search; default a.", "enum": [ - "for_sale", - "to_let" + "#", + "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": "status", + "name": "letter", "type": "string", - "x-example": "for_sale" - }, - { - "description": "Minimum price in whole GBP units, not pence", - "in": "query", - "name": "min_price", - "type": "integer" - }, - { - "description": "Maximum price in whole GBP units, not pence", - "in": "query", - "name": "max_price", - "type": "integer" - }, - { - "description": "Minimum bedrooms", - "in": "query", - "name": "min_bedrooms", - "type": "integer" - }, - { - "description": "Maximum bedrooms", - "in": "query", - "name": "max_bedrooms", - "type": "integer" - }, - { - "description": "Minimum bathrooms", - "in": "query", - "name": "min_bathrooms", - "type": "number" - }, - { - "description": "Maximum bathrooms", - "in": "query", - "name": "max_bathrooms", - "type": "number" - }, - { - "description": "Property type filter. Accepts one or more comma-separated values. private-halls (Student Halls) mainly returns results for status=to_let.", - "enum": [ - "detached", - "semi-detached", - "terraced", - "flat", - "bungalow", - "land", - "park-home", - "private-halls" - ], - "in": "query", - "name": "property_type", - "type": "string" + "x-example": "a" }, { - "description": "Search radius in miles around location, default 0 (this area only)", - "enum": [ - 0, - 0.25, - 0.5, - 1, - 3, - 5, - 10, - 15, - 20, - 30, - 40 - ], + "description": "Search critics by name; cannot be combined with letter", "in": "query", - "name": "radius", - "type": "number" + "name": "search", + "type": "string", + "x-example": "Mae Abdulbaki" }, - { - "description": "Require listings to have these attributes. Accepts one or more comma-separated values.", - "enum": [ - "garden", - "parking", - "retirement", - "newHome", - "sharedOwnership", - "auction" - ], + { + "description": "Include the site's inactive critics list", "in": "query", - "name": "must_have", - "type": "string" + "name": "inactive", + "type": "boolean", + "x-example": false }, { - "description": "Exclude listings with these attributes. Accepts one or more comma-separated values.", - "enum": [ - "newHome", - "retirement", - "sharedOwnership", - "auction" - ], + "description": "Opaque cursor from data.next_cursor", "in": "query", - "name": "dont_show", - "type": "string" + "name": "after", + "type": "string", + "x-example": "MQ==" }, { - "description": "Tenure filter. Accepts one or more comma-separated values.", - "enum": [ - "FREEHOLD", - "LEASEHOLD", - "SHARE_OF_FREEHOLD" - ], + "description": "Opaque cursor from data.previous_cursor; cannot be combined with after", "in": "query", - "name": "tenure_types", - "type": "string" + "name": "before", + "type": "string", + "x-example": "MA==" }, { - "description": "Result sort order, default newest_listed", - "enum": [ - "lowest_price", - "highest_price", - "newest_listed", - "oldest_listed" - ], + "description": "Rows per page, default 100, range 1 to 100", "in": "query", - "name": "sort", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -357315,25 +393189,37 @@ ], "responses": { "200": { - "description": "Property search results", + "description": "OK", "schema": { - "$ref": "#/definitions/rightmove.SearchResponse" + "$ref": "#/definitions/rottentomatoes.criticsAuthorsResponseDoc" } }, "400": { - "description": "Invalid query parameter", + "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": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -357344,67 +393230,105 @@ "ApiKeyAuth": [] } ], - "summary": "Search Rightmove properties", + "summary": "Rotten Tomatoes critic directory", "tags": [ - "Rightmove" + "Rotten Tomatoes" ] } }, - "/rightmove/student/search": { + "/rottentomatoes/editorial/content": { "get": { "consumes": [ "application/json" ], - "description": "Search Rightmove's student-accommodation listings for a location, with monthly-rent, bedroom, and furnishing filters. Prices are monthly rents in whole GBP units.", - "operationId": "rightmove-student-search", + "description": "Lists paginated editorial records from the selected public content type. The pages collection lists public editorial section and campaign indexes. Use the editorial types endpoint to discover accepted type values.", + "operationId": "rottentomatoes-editorial-content", "parameters": [ { - "description": "Rightmove location identifier from autocomplete", + "description": "Editorial content type", + "enum": [ + "article", + "guide", + "gallery", + "hub-subpage", + "non-rt-publication", + "rt-hub", + "how-to", + "otg-article", + "prev", + "rt_poll", + "pages" + ], "in": "query", - "name": "location", + "name": "type", "required": true, - "type": "string" + "type": "string", + "x-example": "guide" }, { - "description": "Result page (default 1)", + "description": "Optional text filter; maximum 200 bytes", "in": "query", - "name": "page", - "type": "integer" + "name": "query", + "type": "string", + "x-example": "horror" }, { - "description": "Minimum monthly rent in whole GBP units, not pence", + "description": "One-based result page from 1 to 10000; default 1", "in": "query", - "name": "min_price", - "type": "integer" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Maximum monthly rent in whole GBP units, not pence", + "description": "Rows per page, default 20, range 1 to 100", "in": "query", - "name": "max_price", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Minimum bedrooms", + "description": "Optional editorial taxonomy; discover type support from /rottentomatoes/editorial/taxonomies", + "enum": [ + "categories", + "tags", + "related-movie-id", + "related-tv-season-id", + "related-tv-series-id", + "related-tv-episode-id", + "related-celebrity-id", + "publication", + "franchise", + "coauthors" + ], "in": "query", - "name": "min_bedrooms", - "type": "integer" + "name": "taxonomy", + "type": "string", + "x-example": "related-movie-id" }, { - "description": "Maximum bedrooms", + "description": "Comma-separated positive term IDs; required with taxonomy", "in": "query", - "name": "max_bedrooms", - "type": "integer" + "name": "term_ids", + "type": "string", + "x-example": "121877,121876" }, { - "description": "Furnishing filter", + "description": "Whether any or all selected terms must match; default OR", "enum": [ - "furnished", - "unfurnished", - "part_furnished" + "AND", + "OR" ], "in": "query", - "name": "furnish_type", - "type": "string" + "name": "operator", + "type": "string", + "x-example": "OR" + }, + { + "description": "For categories only, include child categories; default false", + "in": "query", + "name": "include_children", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -357412,25 +393336,37 @@ ], "responses": { "200": { - "description": "Student accommodation search results", + "description": "OK", "schema": { - "$ref": "#/definitions/rightmove.SearchResponse" + "$ref": "#/definitions/rottentomatoes.editorialContentResponseDoc" } }, "400": { - "description": "Invalid query parameter", + "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": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -357441,24 +393377,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Rightmove student accommodation", + "summary": "Rotten Tomatoes editorial content listing", "tags": [ - "Rightmove" + "Rotten Tomatoes" ] } }, - "/rnz/article": { + "/rottentomatoes/editorial/detail": { "get": { - "description": "Returns public RNZ news article metadata and body paragraphs from a canonical rnz.co.nz/news/
// article URL. RNZ has no paywall, so the full body is returned.", - "operationId": "rnz-article", + "consumes": [ + "application/json" + ], + "description": "Returns the public body, paragraphs, headings, links, images, and video embeds from an Editorial article, gallery, guide, on-the-go article, or preview. Discover paths from editorial content collections. The response body_html preserves public Gutenberg/ranked-list markup.", + "operationId": "rottentomatoes-editorial-detail", "parameters": [ { - "description": "Canonical RNZ news article URL", + "description": "Discovered Editorial content path", "in": "query", - "name": "url", + "name": "path", "required": true, "type": "string", - "x-example": "https://www.rnz.co.nz/news/regions_auckland/1569602/auckland-man-used-missing-20-point-1-million-lotto-ticket-as-bookmark-for-almost-two-months" + "x-example": "/guide/all-brad-pitt-movies-ranked-by-tomatometer/" } ], "produces": [ @@ -357468,7 +393407,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/rottentomatoes.editorialDetailResponseDoc" } }, "400": { @@ -357483,6 +393422,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": { @@ -357495,30 +393446,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get RNZ article content", + "summary": "Rotten Tomatoes editorial article detail", "tags": [ - "RNZ" + "Rotten Tomatoes" ] } }, - "/rnz/author": { + "/rottentomatoes/editorial/search": { "get": { - "description": "Returns one RNZ reporter's public profile: name, role, bio, email, X/Twitter handle, photo, total story count, and the first page of their news stories.", - "operationId": "rnz-author", + "consumes": [ + "application/json" + ], + "description": "Searches public Rotten Tomatoes editorial content, including articles and guides. Results come from its anonymous WordPress REST search endpoint and include content subtype plus total-page metadata.", + "operationId": "rottentomatoes-editorial-search", "parameters": [ { - "description": "Author slug, e.g. ellen-o-dwyer", + "description": "Editorial search text; maximum 200 bytes", "in": "query", - "name": "slug", + "name": "query", + "required": true, "type": "string", - "x-example": "ellen-o-dwyer" + "x-example": "horror" }, { - "description": "Canonical rnz.co.nz/authors/ URL; alternative to slug", + "description": "One-based result page from 1 to 10000; default 1", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.rnz.co.nz/authors/ellen-o-dwyer" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Rows per page, default 10, range 1 to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -357528,7 +393490,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.rnzAuthorResponseDoc" + "$ref": "#/definitions/rottentomatoes.editorialSearchResponseDoc" } }, "400": { @@ -357543,6 +393505,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": { @@ -357555,44 +393529,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get an RNZ author profile", + "summary": "Rotten Tomatoes editorial search", "tags": [ - "RNZ" + "Rotten Tomatoes" ] } }, - "/rnz/headlines": { + "/rottentomatoes/editorial/section": { "get": { - "description": "Returns fresh headlines from one public RNZ section feed.", - "operationId": "rnz-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the rendered article cards for a discovered editorial page, RT hub, or hub subpage. Discover paths through editorial content types `pages`, `rt-hub`, and `hub-subpage`. Static pages use `articles_page` pagination upstream; hubs use `/page/{n}/`.", + "operationId": "rottentomatoes-editorial-section", "parameters": [ { - "description": "RNZ section slug", - "enum": [ - "news", - "national", - "world", - "political", - "business", - "pacific", - "sport", - "health", - "education", - "community", - "country", - "regional", - "te-manu-korihi", - "on-the-inside", - "in-depth", - "indonz", - "ldr", - "chinese", - "weather" - ], + "description": "Discovered editorial section path", "in": "query", - "name": "section", + "name": "path", "required": true, - "type": "string" + "type": "string", + "x-example": "/countdown/" + }, + { + "description": "One-based page, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -357602,7 +393566,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/rottentomatoes.editorialSectionResponseDoc" } }, "400": { @@ -357611,36 +393575,22 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get RNZ section headlines", - "tags": [ - "RNZ" - ] - } - }, - "/rnz/news": { - "get": { - "description": "Returns fresh RNZ (Radio New Zealand) top stories from the public all-news RSS feed.", - "operationId": "rnz-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": { @@ -357655,59 +393605,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get RNZ top stories", + "summary": "Rotten Tomatoes editorial section archive", "tags": [ - "RNZ" + "Rotten Tomatoes" ] } }, - "/rnz/sections": { + "/rottentomatoes/editorial/taxonomies": { "get": { - "description": "Returns the public RNZ news section inventory (one RSS feed each) accepted by rnz-headlines.", - "operationId": "rnz-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get RNZ sections", - "tags": [ - "RNZ" - ] - } - }, - "/roblox/badges": { - "get": { - "description": "Returns one cursor-paginated page of public badge metadata for a Roblox experience. Pass next_cursor back unchanged as cursor. No user-awarded badge data is returned.", - "operationId": "roblox-badges", - "parameters": [ - { - "description": "Positive Roblox universe id", - "in": "query", - "minimum": 1, - "name": "universe_id", - "required": true, - "type": "integer", - "x-example": 383310974 - }, - { - "description": "Opaque cursor returned by a previous response", - "in": "query", - "name": "cursor", - "type": "string" - } - ], + "description": "Returns the complete set of public editorial term vocabularies accepted by the term discovery endpoint, with the content types each taxonomy filters.", + "operationId": "rottentomatoes-editorial-taxonomies", "produces": [ "application/json" ], @@ -357715,17 +393625,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/roblox.badgesResponseDoc" + "$ref": "#/definitions/rottentomatoes.editorialTaxonomiesResponseDoc" } }, - "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" } @@ -357742,25 +393652,137 @@ "ApiKeyAuth": [] } ], - "summary": "List Roblox experience badges", + "summary": "Rotten Tomatoes editorial taxonomy discovery", "tags": [ - "Roblox" + "Rotten Tomatoes" ] } }, - "/roblox/game": { + "/rottentomatoes/editorial/terms": { "get": { - "description": "Returns public catalog detail for one Roblox experience, including aggregate votes and its public icon. This endpoint does not return player, account, purchase, or server data.", - "operationId": "roblox-game", + "consumes": [ + "application/json" + ], + "description": "Pages public terms from one discovered editorial taxonomy. All taxonomy values are listed by `/rottentomatoes/editorial/taxonomies`; `parent` is accepted only for `categories`, while `offset` is supported by all other taxonomies.", + "operationId": "rottentomatoes-editorial-terms", "parameters": [ { - "description": "Positive Roblox universe id", + "description": "Editorial taxonomy 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" + ], "in": "query", - "minimum": 1, - "name": "universe_id", + "name": "taxonomy", "required": true, + "type": "string", + "x-example": "coauthors" + }, + { + "description": "Optional term search; maximum 200 bytes", + "in": "query", + "name": "search", + "type": "string", + "x-example": "RT Staff" + }, + { + "description": "One-based page, default 1", + "in": "query", + "name": "page", "type": "integer", - "x-example": 383310974 + "x-example": 1 + }, + { + "description": "Terms per page, default 20, range 1 to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "When true, omit terms with no assigned content", + "in": "query", + "name": "hide_empty", + "type": "boolean", + "x-example": true + }, + { + "description": "Term sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "order", + "type": "string", + "x-example": "desc" + }, + { + "description": "Term sort key", + "enum": [ + "id", + "include", + "name", + "slug", + "include_slugs", + "term_group", + "description", + "count" + ], + "in": "query", + "name": "orderby", + "type": "string", + "x-example": "count" + }, + { + "description": "Comma-separated positive term IDs to include", + "in": "query", + "name": "include", + "type": "string", + "x-example": "10732,10733" + }, + { + "description": "Comma-separated positive term IDs to exclude", + "in": "query", + "name": "exclude", + "type": "string", + "x-example": "10733" + }, + { + "description": "Optional term slug or comma-separated slugs", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "cap-rt-staff" + }, + { + "description": "Filter to terms assigned to this content record", + "in": "query", + "name": "post", + "type": "integer", + "x-example": 297765 + }, + { + "description": "Zero-based offset; accepted except for categories", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 100 + }, + { + "description": "Category parent ID; accepted only for categories", + "in": "query", + "name": "parent", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -357770,7 +393792,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/roblox.gameResponseDoc" + "$ref": "#/definitions/rottentomatoes.editorialTermsResponseDoc" } }, "400": { @@ -357791,6 +393813,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -357803,32 +393831,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Roblox experience", + "summary": "Rotten Tomatoes editorial taxonomy terms", "tags": [ - "Roblox" + "Rotten Tomatoes" ] } }, - "/roblox/rankings": { + "/rottentomatoes/editorial/types": { "get": { - "description": "Returns a public Roblox game shelf. Allowed sort_id values: top-trending, up-and-coming, top-playing-now, fun-with-friends, top-revisited.", - "operationId": "roblox-rankings", - "parameters": [ - { - "default": "top-trending", - "description": "Ranking shelf: top-trending, up-and-coming, top-playing-now, fun-with-friends, top-revisited", - "enum": [ - "top-trending", - "up-and-coming", - "top-playing-now", - "fun-with-friends", - "top-revisited" - ], - "in": "query", - "name": "sort_id", - "type": "string" - } + "consumes": [ + "application/json" ], + "description": "Returns the complete live-verified set of editorial type values accepted by the editorial content endpoint.", + "operationId": "rottentomatoes-editorial-types", "produces": [ "application/json" ], @@ -357836,17 +393851,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/roblox.rankingsResponseDoc" + "$ref": "#/definitions/rottentomatoes.editorialContentTypesResponseDoc" } }, - "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" } @@ -357863,30 +393878,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Roblox game rankings", + "summary": "Rotten Tomatoes editorial content types", "tags": [ - "Roblox" + "Rotten Tomatoes" ] } }, - "/roblox/search": { + "/rottentomatoes/episode": { "get": { - "description": "Searches anonymous public Roblox game experiences. The opaque page_token continues the same search.", - "operationId": "roblox-search", + "consumes": [ + "application/json" + ], + "description": "Returns normalized Rotten Tomatoes TV episode metadata, scorecard data, parent series/season metadata, and public video metadata from a credential-free public episode page. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-episode", "parameters": [ { - "description": "Experience search query", + "description": "Rotten Tomatoes episode path", "in": "query", - "name": "q", - "required": true, + "name": "path", "type": "string", - "x-example": "Adopt Me" + "x-example": "/tv/breaking_bad/s01/e01" }, { - "description": "Opaque page token returned by a previous search", + "description": "Absolute https://www.rottentomatoes.com episode URL", "in": "query", - "name": "page_token", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01" } ], "produces": [ @@ -357896,7 +393914,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/roblox.searchResponseDoc" + "$ref": "#/definitions/rottentomatoes.episodeResponseDoc" } }, "400": { @@ -357905,12 +393923,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": { @@ -357923,24 +393953,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Roblox experiences", + "summary": "Rotten Tomatoes episode detail", "tags": [ - "Roblox" + "Rotten Tomatoes" ] } }, - "/rollingstone/article": { + "/rottentomatoes/movie": { "get": { - "description": "Returns public Rolling Stone article metadata and body paragraphs from a canonical article URL.", - "operationId": "rollingstone-article", + "consumes": [ + "application/json" + ], + "description": "Returns normalized Rotten Tomatoes movie metadata, scorecard data, and representative embedded audience reviews. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-movie", "parameters": [ { - "description": "Canonical Rolling Stone article URL", + "description": "Rotten Tomatoes movie path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/m/inception" + }, + { + "description": "Absolute https://www.rottentomatoes.com movie URL", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.rollingstone.com/music/music-news/taylor-swift-the-life-of-a-showgirl-deluxe-album-1235630197/" + "x-example": "https://www.rottentomatoes.com/m/inception" } ], "produces": [ @@ -357950,7 +393989,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/rottentomatoes.movieResponseDoc" } }, "400": { @@ -357965,56 +394004,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Rolling Stone article content", - "tags": [ - "Rolling Stone" - ] - } - }, - "/rollingstone/author": { - "get": { - "description": "Returns a Rolling Stone author's byline metadata, biography, and recent articles (sourced from the author's own public RSS feed) from a canonical author URL.", - "operationId": "rollingstone-author", - "parameters": [ - { - "description": "Canonical Rolling Stone author URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.rollingstone.com/author/cheyenne-roundtree/" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.rollingStoneAuthorResponseDoc" - } - }, - "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" } @@ -358031,58 +394028,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Rolling Stone author profile", + "summary": "Rotten Tomatoes movie detail", "tags": [ - "Rolling Stone" + "Rotten Tomatoes" ] } }, - "/rollingstone/headlines": { + "/rottentomatoes/movie/reviews": { "get": { - "description": "Returns fresh headlines from one public Rolling Stone section.", - "operationId": "rollingstone-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns normalized critic or audience reviews from Rotten Tomatoes public review JSON hydrated by the movie review page, including pagination metadata. Pass exactly one of `path` or `url`. Supported `type` values are `critics`, `top-critics`, `audience`, and `verified-audience`.", + "operationId": "rottentomatoes-movie-reviews", "parameters": [ { - "description": "Rolling Stone section slug", + "description": "Rotten Tomatoes movie path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/m/inception" + }, + { + "description": "Absolute https://www.rottentomatoes.com movie URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/m/inception" + }, + { + "description": "Review type: critics, top-critics, audience, verified-audience", "enum": [ - "music", - "music-news", - "music-features", - "music-lists", - "music-album-reviews", - "music-live-reviews", - "music-country", - "music-latin", - "music-pictures", - "politics", - "politics-news", - "politics-features", - "politics-lists", - "tv-movies", - "tv-movie-news", - "tv-movie-features", - "tv-movie-lists", - "tv-movie-recaps", - "tv-movie-reviews", - "culture", - "culture-news", - "culture-features", - "culture-lists", - "rs-gaming", - "product-recommendations", - "pro", - "artist-you-need-to-know", - "song-to-know", - "photo-gallery", - "creators", - "rs-recommends", - "rs-essentials", - "audio-awards", - "gift-guide" + "critics", + "top-critics", + "audience", + "verified-audience" ], "in": "query", - "name": "section", - "required": true, + "name": "type", + "type": "string", + "x-example": "critics" + }, + { + "description": "Reviews to return, default 10, max 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Pagination cursor from data.page_info.end_cursor", + "in": "query", + "name": "after", "type": "string" } ], @@ -358093,7 +394090,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/rottentomatoes.reviewsResponseDoc" } }, "400": { @@ -358102,37 +394099,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Rolling Stone section headlines", - "tags": [ - "Rolling Stone" - ] - } - }, - "/rollingstone/news": { - "get": { - "description": "Returns fresh Rolling Stone top stories from its public RSS feed.", - "operationId": "rollingstone-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -358140,36 +394111,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Rolling Stone top stories", - "tags": [ - "Rolling Stone" - ] - } - }, - "/rollingstone/sections": { - "get": { - "description": "Returns the public Rolling Stone section inventory: every music, politics, TV & movies, and culture subsection plus the site's standalone verticals (Rolling Stone Pro, product recommendations) and tag hubs, each linking to its public RSS feed.", - "operationId": "rollingstone-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "503": { + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/app.Response" } } }, @@ -358178,33 +394129,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rolling Stone sections", + "summary": "Rotten Tomatoes movie reviews", "tags": [ - "Rolling Stone" + "Rotten Tomatoes" ] } }, - "/rothys/collections": { + "/rottentomatoes/person": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized collections from Rothy's (https://www.rothys.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "rothys-collections", + "description": "Returns normalized Rotten Tomatoes celebrity/person metadata and filmography rows from public Person JSON-LD and the credential-free filmography module. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-person", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Rotten Tomatoes person path", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "path", + "type": "string", + "x-example": "/celebrity/christopher_nolan" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Absolute https://www.rottentomatoes.com person URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/celebrity/christopher_nolan" } ], "produces": [ @@ -358214,7 +394165,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/rottentomatoes.personResponseDoc" } }, "400": { @@ -358223,12 +394174,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": { @@ -358241,41 +394204,34 @@ "ApiKeyAuth": [] } ], - "summary": "List Rothy's collections", + "summary": "Rotten Tomatoes person detail and filmography", "tags": [ - "Rothy's" + "Rotten Tomatoes" ] } }, - "/rothys/collections/{handle}/products": { + "/rottentomatoes/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from one Rothy's (https://www.rothys.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "rothys-collection-products", + "description": "Returns normalized Rotten Tomatoes movie search rows from credential-free server-rendered search HTML.", + "operationId": "rottentomatoes-search", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", + "description": "Search query", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "collection-handle" - }, - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "inception" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Rows to return, default 10, max 20", "in": "query", "name": "limit", "type": "integer", - "x-example": 50 + "x-example": 10 } ], "produces": [ @@ -358285,7 +394241,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/rottentomatoes.searchResponseDoc" } }, "400": { @@ -358306,6 +394262,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -358318,33 +394280,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Rothy's collection products", + "summary": "Rotten Tomatoes movie search", "tags": [ - "Rothy's" + "Rotten Tomatoes" ] } }, - "/rothys/pages": { + "/rottentomatoes/season": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from Rothy's (https://www.rothys.com). The storefront URL is fixed server-side.", - "operationId": "rothys-pages", + "description": "Returns normalized Rotten Tomatoes TV season metadata, scorecard data, parent series metadata, and episode rows from a credential-free public season page. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-season", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Rotten Tomatoes season path", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "path", + "type": "string", + "x-example": "/tv/breaking_bad/s01" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Absolute https://www.rottentomatoes.com season URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/tv/breaking_bad/s01" } ], "produces": [ @@ -358354,7 +394316,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/rottentomatoes.seasonResponseDoc" } }, "400": { @@ -358363,12 +394325,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": { @@ -358381,27 +394355,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Rothy's static pages", + "summary": "Rotten Tomatoes season detail", "tags": [ - "Rothy's" + "Rotten Tomatoes" ] } }, - "/rothys/pages/{handle}": { + "/rottentomatoes/series": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one Rothy's (https://www.rothys.com) page handle. The storefront URL is fixed server-side.", - "operationId": "rothys-page", + "description": "Returns normalized Rotten Tomatoes TV series metadata and scorecard data from a credential-free public series page. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-series", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", - "required": true, + "description": "Rotten Tomatoes series path", + "in": "query", + "name": "path", "type": "string", - "x-example": "page-handle" + "x-example": "/tv/breaking_bad" + }, + { + "description": "Absolute https://www.rottentomatoes.com series URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/tv/breaking_bad" } ], "produces": [ @@ -358411,7 +394391,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/rottentomatoes.seriesResponseDoc" } }, "400": { @@ -358432,6 +394412,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -358444,33 +394430,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Rothy's static page", + "summary": "Rotten Tomatoes series detail", "tags": [ - "Rothy's" + "Rotten Tomatoes" ] } }, - "/rothys/products": { + "/rottentomatoes/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from Rothy's's (https://www.rothys.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "rothys-products", + "description": "Returns a page of URLs from one child sitemap. Discover valid `name` values with `rottentomatoes-sitemaps`; use offset/limit to page through the complete sitemap.", + "operationId": "rottentomatoes-sitemap-urls", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Sitemap name returned by /rottentomatoes/sitemaps", + "in": "query", + "name": "name", + "required": true, + "type": "string", + "x-example": "movie_0" + }, + { + "description": "Zero-based offset, default 0", "in": "query", - "name": "page", + "name": "offset", "type": "integer", - "x-example": 1 + "x-example": 0 }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "URLs to return, default 100, max 500", "in": "query", "name": "limit", "type": "integer", - "x-example": 50 + "x-example": 100 } ], "produces": [ @@ -358480,7 +394474,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/rottentomatoes.sitemapURLResponseDoc" } }, "400": { @@ -358489,12 +394483,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": { @@ -358507,29 +394513,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Rothy's products", + "summary": "Rotten Tomatoes sitemap URL page", "tags": [ - "Rothy's" + "Rotten Tomatoes" ] } }, - "/rothys/products/{handle}": { + "/rottentomatoes/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized product detail for one Rothy's (https://www.rothys.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "rothys-product", - "parameters": [ - { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "product-handle" - } - ], + "description": "Returns the live sitemap index and every named child sitemap, including movie, TV series, season, episode, person, critic, publication, browse-list, and static route inventories.", + "operationId": "rottentomatoes-sitemaps", "produces": [ "application/json" ], @@ -358537,23 +394533,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/rottentomatoes.sitemapIndexResponseDoc" } }, - "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" } @@ -358570,45 +394560,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Rothy's product", + "summary": "Rotten Tomatoes sitemap discovery", "tags": [ - "Rothy's" + "Rotten Tomatoes" ] } }, - "/rothys/products/{handle}/recommendations": { + "/rover/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized recommended products for one Rothy's (https://www.rothys.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "rothys-product-recommendations", + "description": "Searches Rover's public sitter/walker listings by location and service type, returning normalized sitter summaries (name, profile image, rating, review count, repeat-client count, years of experience, neighborhood/city/state, starting price, Star Sitter status, and a short bio). Public data sourced from Rover's own server-rendered search pages.", + "operationId": "rover-sitter-search", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Free-text address, city, or zip code, e.g. \\", + "in": "query", + "name": "location", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "Seattle, WA" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Service category to search. One of: `overnight-boarding`, `overnight-traveling`, `drop-in`, `doggy-day-care`, `dog-walking`.", "in": "query", - "name": "limit", + "name": "service_type", + "required": true, + "type": "string", + "x-example": "overnight-boarding" + }, + { + "description": "1-based result page. Defaults to 1.", + "in": "query", + "name": "page", "type": "integer", - "x-example": 10 + "x-example": 1 }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Filter by pet species. One of: `dog`, `cat`.", "in": "query", - "name": "intent", + "name": "pet_type", "type": "string", - "x-example": "related" + "x-example": "dog" + }, + { + "description": "Minimum starting rate in whole dollars.", + "in": "query", + "name": "min_price", + "type": "integer", + "x-example": 20 + }, + { + "description": "Maximum starting rate in whole dollars.", + "in": "query", + "name": "max_price", + "type": "integer", + "x-example": 100 + }, + { + "description": "Restrict results to Rover's \\", + "in": "query", + "name": "star_sitter_only", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -358618,7 +394633,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/rover.searchResponseDoc" } }, "400": { @@ -358633,8 +394648,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -358651,41 +394666,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Rothy's product recommendations", + "summary": "Search Rover sitters and walkers", "tags": [ - "Rothy's" + "Rover" ] } }, - "/rothys/search/suggest": { + "/rover/sitter/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Rothy's's (https://www.rothys.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "rothys-search-suggest", + "description": "Returns a normalized Rover sitter/walker profile: name, photo, bio, star rating, review count, repeat-client count, years of experience, neighborhood/city/state, starting price, Star Sitter status, the services offered with per-service pricing, and public review excerpts from the sitter's own profile page. Public data sourced from Rover's own server-rendered profile pages.", + "operationId": "rover-sitter-profile", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", + "description": "Rover sitter profile slug, the trailing path segment of a search result's profile_url field", + "in": "path", + "name": "slug", "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 + "x-example": "tianci-d-staycation-for-your-dog" } ], "produces": [ @@ -358695,7 +394696,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/rover.profileResponseDoc" } }, "400": { @@ -358704,8 +394705,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" } @@ -358722,42 +394729,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rothy's search suggestions", + "summary": "Get Rover sitter profile", "tags": [ - "Rothy's" + "Rover" ] } }, - "/rothys/sitemap/urls": { + "/rover/trainer-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns capped URL entries from Rothy's's (https://www.rothys.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "rothys-sitemap-urls", + "description": "Searches Rover's public dog trainer listings by location, returning normalized trainer summaries (name, profile image, headline, experience details, rating, review count, repeat-client count, years of experience, city/state/zip, starting price, training methodology, and skill/behavior tags). Public data sourced from Rover's own server-rendered training search pages.", + "operationId": "rover-trainer-search", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "Free-text address, city, or zip code, e.g. \\", "in": "query", - "name": "type", + "name": "location", + "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": "Seattle, WA" } ], "produces": [ @@ -358767,7 +394759,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/rover.trainerSearchResponseDoc" } }, "400": { @@ -358776,8 +394768,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" } @@ -358794,19 +394792,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Rothy's sitemap URLs", + "summary": "Search Rover dog trainers", "tags": [ - "Rothy's" + "Rover" ] } }, - "/rothys/sitemaps": { + "/rover/trainer/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns child sitemap URLs from Rothy's's (https://www.rothys.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "rothys-sitemaps", + "description": "Returns a normalized Rover dog trainer profile: name, photo, headline, experience and availability details, training methodology, rating, review count, repeat-client count, years of training, skill/behavior tags, and education credentials. Public data sourced from Rover's own server-rendered training profile pages.", + "operationId": "rover-trainer-profile", + "parameters": [ + { + "description": "Rover trainer profile slug, the trailing path segment of a trainer search result's profile_url field", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "madison-h-over-6-years-of-pet-care-experience" + } + ], "produces": [ "application/json" ], @@ -358814,7 +394822,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/rover.trainerProfileResponseDoc" } }, "400": { @@ -358823,8 +394831,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" } @@ -358841,19 +394855,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Rothy's sitemaps", + "summary": "Get Rover dog trainer profile", "tags": [ - "Rothy's" + "Rover" ] } }, - "/rothys/store": { + "/rte/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public RTÉ News article metadata and body paragraphs from a canonical rte.ie/news article URL. RTÉ News articles are free to read; paywalled is omitted.", + "operationId": "rte-article", + "parameters": [ + { + "description": "Canonical RTÉ News article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.rte.ie/news/politics/2026/0924/1592808-budget-fuel-excise/" + } ], - "description": "Returns normalized storefront metadata for Rothy's (https://www.rothys.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "rothys-store", "produces": [ "application/json" ], @@ -358861,7 +394882,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -358870,8 +394891,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -358888,32 +394909,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rothy's store metadata", + "summary": "Get RTÉ News article content", "tags": [ - "Rothy's" + "RTÉ News" ] } }, - "/rottentomatoes/browse/filters": { + "/rte/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every filter and accepted value exposed by the selected live Rotten Tomatoes browse page. Call this before building filtered movie or TV browse requests; values differ by list and update with the site's menus.", - "operationId": "rottentomatoes-browse-filters", + "description": "Returns an RTÉ News author's byline name, role, headshot and recent articles from a canonical author URL.", + "operationId": "rte-author", "parameters": [ { - "description": "Browse list: movies_in_theaters, movies_at_home, movies_coming_soon, tv_series_browse", - "enum": [ - "movies_in_theaters", - "movies_at_home", - "movies_coming_soon", - "tv_series_browse" - ], + "description": "Canonical RTÉ author URL", "in": "query", - "name": "list", + "name": "url", + "required": true, "type": "string", - "x-example": "movies_in_theaters" + "x-example": "https://www.rte.ie/author/1110632-barry-lenihan/" } ], "produces": [ @@ -358923,7 +394936,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.browseFiltersResponseDoc" + "$ref": "#/definitions/publicnews.rteAuthorResponseDoc" } }, "400": { @@ -358938,18 +394951,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": { @@ -358962,171 +394963,55 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes browse filter discovery", + "summary": "Get an RTÉ News author profile", "tags": [ - "Rotten Tomatoes" + "RTÉ News" ] } }, - "/rottentomatoes/browse/movies": { + "/rte/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized movie rows from Rotten Tomatoes' public browse JSON route. Use `/rottentomatoes/browse/filters` to discover current values for each list. Filters accept comma-separated values; pagination uses the opaque `after` cursor from the previous response.", - "operationId": "rottentomatoes-browse-movies", + "description": "Returns fresh headlines from one public RTÉ News section.", + "operationId": "rte-headlines", "parameters": [ { - "description": "Movie browse list: movies_in_theaters, movies_at_home, movies_coming_soon", - "enum": [ - "movies_in_theaters", - "movies_at_home", - "movies_coming_soon" - ], - "in": "query", - "name": "list", - "type": "string", - "x-example": "movies_in_theaters" - }, - { - "description": "Sort value from the selected list's browse/filters response", - "enum": [ - "popular", - "newest", - "top_box_office", - "a_z", - "critic_highest", - "critic_lowest", - "audience_highest", - "audience_lowest" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "popular" - }, - { - "description": "Comma-separated genre values from browse/filters", + "description": "RTÉ News section slug", "enum": [ - "action", - "adventure", - "animation", - "anime", - "biography", - "comedy", + "ireland", + "world", + "politics", + "business", + "regional", + "connacht", + "dublin", + "leinster", + "munster", + "ulster", + "middle-east", + "europe", + "uk", + "us", + "ukraine", + "a-european-perspective", + "nuacht", + "newslens", + "analysis-and-comment", + "investigations-unit", "crime", - "documentary", - "drama", - "entertainment", - "faith_and_spirituality", - "fantasy", - "game_show", - "lgbtq", - "health_and_wellness", - "history", - "holiday", - "horror", - "house_and_garden", - "kids_and_family", - "music", - "musical", - "mystery_and_thriller", - "nature", - "news", - "reality", - "romance", - "sci_fi", - "short", - "soap", - "special_interest", - "sports", - "stand_up", - "talk_show", - "travel", - "variety", - "war", - "western" - ], - "in": "query", - "name": "genres", - "type": "string", - "x-example": "action,drama" - }, - { - "description": "Comma-separated content ratings from browse/filters", - "enum": [ - "g", - "pg", - "pg_13", - "r", - "nc_17", - "nr", - "ur" - ], - "in": "query", - "name": "ratings", - "type": "string", - "x-example": "pg_13" - }, - { - "description": "Comma-separated Popcornmeter values from browse/filters", - "enum": [ - "verified_hot", - "upright", - "spilled" - ], - "in": "query", - "name": "audience", - "type": "string", - "x-example": "upright" - }, - { - "description": "Comma-separated Tomatometer values from browse/filters", - "enum": [ - "certified_fresh", - "fresh", - "rotten" - ], - "in": "query", - "name": "critics", - "type": "string", - "x-example": "certified_fresh" - }, - { - "description": "Comma-separated streaming/service values from browse/filters", - "enum": [ - "theaters", - "fandango", - "apple-tv-plus", - "netflix", - "prime-video", - "disney-plus", - "max", - "peacock", - "hulu", - "paramount-plus", - "amc-plus", - "acorn-tv", - "apple-tv" + "courts", + "education", + "health", + "environment", + "science", + "technology", + "weather", + "your-money" ], "in": "query", - "name": "affiliates", - "type": "string", - "x-example": "netflix" - }, - { - "description": "Opaque next-page cursor returned in data.page_info.end_cursor", - "in": "query", - "name": "after", + "name": "section", + "required": true, "type": "string", - "x-example": "Mjk=" - }, - { - "description": "Rows to return, default 10, max 30", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "ireland" } ], "produces": [ @@ -359136,7 +395021,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.browseResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -359145,24 +395030,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": { @@ -359175,167 +395042,16 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes movie discovery rows", + "summary": "Get RTÉ News section headlines", "tags": [ - "Rotten Tomatoes" + "RTÉ News" ] } }, - "/rottentomatoes/browse/tv": { + "/rte/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized TV series rows from Rotten Tomatoes' public browse JSON route. Use `/rottentomatoes/browse/filters?list=tv_series_browse` to discover current filters; pagination uses the opaque `after` cursor from the previous response.", - "operationId": "rottentomatoes-browse-tv", - "parameters": [ - { - "description": "TV browse list: tv_series_browse", - "enum": [ - "tv_series_browse" - ], - "in": "query", - "name": "list", - "type": "string", - "x-example": "tv_series_browse" - }, - { - "description": "Sort value from browse/filters", - "enum": [ - "popular", - "newest", - "a_z", - "critic_highest", - "critic_lowest", - "audience_highest", - "audience_lowest" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "popular" - }, - { - "description": "Comma-separated genre values from browse/filters", - "enum": [ - "action", - "adventure", - "animation", - "anime", - "biography", - "comedy", - "crime", - "documentary", - "drama", - "entertainment", - "faith_and_spirituality", - "fantasy", - "game_show", - "lgbtq", - "health_and_wellness", - "history", - "holiday", - "horror", - "house_and_garden", - "kids_and_family", - "music", - "musical", - "mystery_and_thriller", - "nature", - "news", - "reality", - "romance", - "sci_fi", - "short", - "soap", - "special_interest", - "sports", - "stand_up", - "talk_show", - "travel", - "variety", - "war", - "western" - ], - "in": "query", - "name": "genres", - "type": "string", - "x-example": "action,drama" - }, - { - "description": "Comma-separated content ratings from browse/filters", - "enum": [ - "tvy", - "tvy7", - "tvg", - "tvpg", - "tv14", - "tvma" - ], - "in": "query", - "name": "ratings", - "type": "string", - "x-example": "tv14" - }, - { - "description": "Comma-separated Popcornmeter values from browse/filters", - "enum": [ - "upright", - "spilled" - ], - "in": "query", - "name": "audience", - "type": "string", - "x-example": "upright" - }, - { - "description": "Comma-separated Tomatometer values from browse/filters", - "enum": [ - "fresh", - "rotten" - ], - "in": "query", - "name": "critics", - "type": "string", - "x-example": "fresh" - }, - { - "description": "Comma-separated streaming/service values from browse/filters", - "enum": [ - "theaters", - "fandango", - "apple-tv-plus", - "netflix", - "prime-video", - "disney-plus", - "max", - "peacock", - "hulu", - "paramount-plus", - "amc-plus", - "acorn-tv", - "apple-tv" - ], - "in": "query", - "name": "affiliates", - "type": "string", - "x-example": "netflix" - }, - { - "description": "Opaque next-page cursor returned in data.page_info.end_cursor", - "in": "query", - "name": "after", - "type": "string", - "x-example": "Mjk=" - }, - { - "description": "Rows to return, default 10, max 30", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - } - ], + "description": "Returns fresh RTÉ News top stories from its public news feed. Scope is RTÉ News (rte.ie/news) only, not the RTÉ Player, radio, sport or entertainment sections.", + "operationId": "rte-news", "produces": [ "application/json" ], @@ -359343,19 +395059,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.browseResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -359364,12 +395068,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -359382,90 +395080,50 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes TV discovery rows", + "summary": "Get RTÉ News top stories", "tags": [ - "Rotten Tomatoes" + "RTÉ News" ] } }, - "/rottentomatoes/critics/authors": { + "/rte/sections": { "get": { - "consumes": [ + "description": "Returns the public RTÉ News section inventory used by the headlines endpoint.", + "operationId": "rte-sections", + "produces": [ "application/json" ], - "description": "Returns current or inactive critics from Rotten Tomatoes' public author directory. Browse one letter or search by name; use `next_cursor` as `after` or `previous_cursor` as `before`, as indicated by the corresponding page flag. The letter values come from the live directory controls.", - "operationId": "rottentomatoes-critics-authors", - "parameters": [ - { - "description": "Directory letter. Omit when using search; default a.", - "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": "letter", - "type": "string", - "x-example": "a" - }, - { - "description": "Search critics by name; cannot be combined with letter", - "in": "query", - "name": "search", - "type": "string", - "x-example": "Mae Abdulbaki" - }, - { - "description": "Include the site's inactive critics list", - "in": "query", - "name": "inactive", - "type": "boolean", - "x-example": false - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Opaque cursor from data.next_cursor", - "in": "query", - "name": "after", - "type": "string", - "x-example": "MQ==" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get RTÉ News sections", + "tags": [ + "RTÉ News" + ] + } + }, + "/salon/article": { + "get": { + "description": "Returns public Salon article metadata and body paragraphs from a canonical article URL.", + "operationId": "salon-article", + "parameters": [ { - "description": "Opaque cursor from data.previous_cursor; cannot be combined with after", + "description": "Canonical Salon article URL", "in": "query", - "name": "before", + "name": "url", + "required": true, "type": "string", - "x-example": "MA==" - }, - { - "description": "Rows per page, default 100, range 1 to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 100 + "x-example": "https://www.salon.com/2026/09/23/trump-admin-spars-with-iran-at-un-meeting/" } ], "produces": [ @@ -359475,7 +395133,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.criticsAuthorsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -359490,18 +395148,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": { @@ -359514,105 +395160,24 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes critic directory", + "summary": "Get Salon article content", "tags": [ - "Rotten Tomatoes" + "Salon" ] } }, - "/rottentomatoes/editorial/content": { + "/salon/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists paginated editorial records from the selected public content type. The pages collection lists public editorial section and campaign indexes. Use the editorial types endpoint to discover accepted type values.", - "operationId": "rottentomatoes-editorial-content", + "description": "Returns a Salon writer's byline metadata, biography, and recent articles from a canonical writer URL.", + "operationId": "salon-author", "parameters": [ { - "description": "Editorial content type", - "enum": [ - "article", - "guide", - "gallery", - "hub-subpage", - "non-rt-publication", - "rt-hub", - "how-to", - "otg-article", - "prev", - "rt_poll", - "pages" - ], + "description": "Canonical Salon writer URL", "in": "query", - "name": "type", + "name": "url", "required": true, "type": "string", - "x-example": "guide" - }, - { - "description": "Optional text filter; maximum 200 bytes", - "in": "query", - "name": "query", - "type": "string", - "x-example": "horror" - }, - { - "description": "One-based result page from 1 to 10000; default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Rows per page, default 20, range 1 to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "Optional editorial taxonomy; discover type support from /rottentomatoes/editorial/taxonomies", - "enum": [ - "categories", - "tags", - "related-movie-id", - "related-tv-season-id", - "related-tv-series-id", - "related-tv-episode-id", - "related-celebrity-id", - "publication", - "franchise", - "coauthors" - ], - "in": "query", - "name": "taxonomy", - "type": "string", - "x-example": "related-movie-id" - }, - { - "description": "Comma-separated positive term IDs; required with taxonomy", - "in": "query", - "name": "term_ids", - "type": "string", - "x-example": "121877,121876" - }, - { - "description": "Whether any or all selected terms must match; default OR", - "enum": [ - "AND", - "OR" - ], - "in": "query", - "name": "operator", - "type": "string", - "x-example": "OR" - }, - { - "description": "For categories only, include child categories; default false", - "in": "query", - "name": "include_children", - "type": "boolean", - "x-example": false + "x-example": "https://www.salon.com/writer/troy_farah" } ], "produces": [ @@ -359622,7 +395187,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.editorialContentResponseDoc" + "$ref": "#/definitions/publicnews.salonAuthorResponseDoc" } }, "400": { @@ -359637,18 +395202,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": { @@ -359661,27 +395214,58 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes editorial content listing", + "summary": "Get a Salon writer profile", "tags": [ - "Rotten Tomatoes" + "Salon" ] } }, - "/rottentomatoes/editorial/detail": { + "/salon/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public body, paragraphs, headings, links, images, and video embeds from an Editorial article, gallery, guide, on-the-go article, or preview. Discover paths from editorial content collections. The response body_html preserves public Gutenberg/ranked-list markup.", - "operationId": "rottentomatoes-editorial-detail", + "description": "Returns fresh headlines from one public Salon RSS section.", + "operationId": "salon-headlines", "parameters": [ { - "description": "Discovered Editorial content path", + "description": "Salon RSS section slug", + "enum": [ + "home", + "audio", + "blog", + "business", + "culture", + "economy", + "economy-and-innovation", + "elections", + "entertainment", + "food", + "guides", + "innovation", + "life", + "life-stories", + "media", + "money", + "news", + "news-and-politics", + "opinion", + "oscars_2012", + "politics", + "satire", + "science-and-health", + "sex-and-love", + "social", + "sustainability", + "sxsw_2013", + "technology", + "the_brief", + "video", + "vpn", + "working_ahead" + ], "in": "query", - "name": "path", + "name": "section", "required": true, "type": "string", - "x-example": "/guide/all-brad-pitt-movies-ranked-by-tomatometer/" + "x-example": "home" } ], "produces": [ @@ -359691,7 +395275,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.editorialDetailResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -359700,20 +395284,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 Salon section headlines", + "tags": [ + "Salon" + ] + } + }, + "/salon/news": { + "get": { + "description": "Returns fresh Salon top stories from its public RSS feed.", + "operationId": "salon-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" } @@ -359730,41 +395334,60 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes editorial article detail", + "summary": "Get Salon top stories", "tags": [ - "Rotten Tomatoes" + "Salon" ] } }, - "/rottentomatoes/editorial/search": { + "/salon/sections": { + "get": { + "description": "Returns the public Salon RSS section inventory used by the headlines endpoint.", + "operationId": "salon-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Salon RSS sections", + "tags": [ + "Salon" + ] + } + }, + "/samsclub/category": { "get": { "consumes": [ "application/json" ], - "description": "Searches public Rotten Tomatoes editorial content, including articles and guides. Results come from its anonymous WordPress REST search endpoint and include content subtype plus total-page metadata.", - "operationId": "rottentomatoes-editorial-search", + "description": "Returns a Sam's Club category or collection page's product grid, with real page-based pagination. id accepts a bare numeric category id (from a nav link's /browse/{id} URL) or a full /browse/{slug}/{id} URL copied from samsclub.com -- only the trailing id is used. Returns normalized products with name, brand, pricing, availability, rating, and image. An id samsclub.com does not recognize returns a genuine zero-result response rather than an error, matching upstream's own behavior.", + "operationId": "samsclub-category", "parameters": [ { - "description": "Editorial search text; maximum 200 bytes", + "description": "Sam's Club category id, or a /browse/{slug}/{id} URL", "in": "query", - "name": "query", + "name": "id", "required": true, "type": "string", - "x-example": "horror" + "x-example": "15660127" }, { - "description": "One-based result page from 1 to 10000; default 1", + "description": "Result page, 1-based, defaults to 1", "in": "query", "name": "page", "type": "integer", "x-example": 1 - }, - { - "description": "Rows per page, default 10, range 1 to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 } ], "produces": [ @@ -359774,7 +395397,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.editorialSearchResponseDoc" + "$ref": "#/definitions/samsclub.categoryResponseDoc" } }, "400": { @@ -359783,24 +395406,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": { @@ -359813,34 +395424,27 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes editorial search", + "summary": "Browse a Sam's Club category or collection", "tags": [ - "Rotten Tomatoes" + "Sam's Club" ] } }, - "/rottentomatoes/editorial/section": { + "/samsclub/content/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the rendered article cards for a discovered editorial page, RT hub, or hub subpage. Discover paths through editorial content types `pages`, `rt-hub`, and `hub-subpage`. Static pages use `articles_page` pagination upstream; hubs use `/page/{n}/`.", - "operationId": "rottentomatoes-editorial-section", + "description": "Returns one Sam's Club curated content/landing page (e.g. a seasonal savings hub or a \"New Arrivals\" page) -- distinct data from GET /samsclub/category's flat, paginated product grid. id accepts a bare numeric content page id (from a nav link's /cp/{id} URL) or a full /cp/{slug}/{id} URL copied from samsclub.com -- only the trailing id is used. Returns a title, breadcrumb, named curated product shelves, and a category-navigation tile grid. There is no pagination -- a content page's shelves are a fixed, hand-curated set. An id samsclub.com does not recognize returns a 404, unlike GET /samsclub/category's zero-result response for the same situation.", + "operationId": "samsclub-content", "parameters": [ { - "description": "Discovered editorial section path", - "in": "query", - "name": "path", + "description": "Numeric Sam's Club content page id, from a /cp/{slug}/{id} URL", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "/countdown/" - }, - { - "description": "One-based page, default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 2 + "x-example": "16050279" } ], "produces": [ @@ -359850,7 +395454,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.editorialSectionResponseDoc" + "$ref": "#/definitions/samsclub.contentResponseDoc" } }, "400": { @@ -359871,12 +395475,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -359889,19 +395487,19 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes editorial section archive", + "summary": "Get a Sam's Club curated content or landing page", "tags": [ - "Rotten Tomatoes" + "Sam's Club" ] } }, - "/rottentomatoes/editorial/taxonomies": { + "/samsclub/departments": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete set of public editorial term vocabularies accepted by the term discovery endpoint, with the content types each taxonomy filters.", - "operationId": "rottentomatoes-editorial-taxonomies", + "description": "Returns Sam's Club's full department/category taxonomy, as shown on its own \"All Departments\" page: every top-level department with its own subcategory list. Each link's type is \"browse\" (pairs directly with GET /samsclub/category), \"cp\" (a content/landing page that does not reliably carry a product grid), or empty (an unrecognized link shape).", + "operationId": "samsclub-departments", "produces": [ "application/json" ], @@ -359909,7 +395507,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.editorialTaxonomiesResponseDoc" + "$ref": "#/definitions/samsclub.departmentsResponseDoc" } }, "429": { @@ -359918,12 +395516,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -359936,137 +395528,27 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes editorial taxonomy discovery", + "summary": "List Sam's Club departments and categories", "tags": [ - "Rotten Tomatoes" + "Sam's Club" ] } }, - "/rottentomatoes/editorial/terms": { + "/samsclub/product/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Pages public terms from one discovered editorial taxonomy. All taxonomy values are listed by `/rottentomatoes/editorial/taxonomies`; `parent` is accepted only for `categories`, while `offset` is supported by all other taxonomies.", - "operationId": "rottentomatoes-editorial-terms", + "description": "Returns one Sam's Club product's full detail: name, brand, description, category breadcrumb, pricing, availability, images, aggregate rating and review count, and the club's own item number. id is the numeric product id from a Sam's Club product page's /ip/ URL.", + "operationId": "samsclub-product", "parameters": [ { - "description": "Editorial taxonomy 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" - ], - "in": "query", - "name": "taxonomy", + "description": "Numeric Sam's Club product id, from a product page's /ip/{slug}/{id} URL", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "coauthors" - }, - { - "description": "Optional term search; maximum 200 bytes", - "in": "query", - "name": "search", - "type": "string", - "x-example": "RT Staff" - }, - { - "description": "One-based page, default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Terms per page, default 20, range 1 to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "When true, omit terms with no assigned content", - "in": "query", - "name": "hide_empty", - "type": "boolean", - "x-example": true - }, - { - "description": "Term sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "order", - "type": "string", - "x-example": "desc" - }, - { - "description": "Term sort key", - "enum": [ - "id", - "include", - "name", - "slug", - "include_slugs", - "term_group", - "description", - "count" - ], - "in": "query", - "name": "orderby", - "type": "string", - "x-example": "count" - }, - { - "description": "Comma-separated positive term IDs to include", - "in": "query", - "name": "include", - "type": "string", - "x-example": "10732,10733" - }, - { - "description": "Comma-separated positive term IDs to exclude", - "in": "query", - "name": "exclude", - "type": "string", - "x-example": "10733" - }, - { - "description": "Optional term slug or comma-separated slugs", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "cap-rt-staff" - }, - { - "description": "Filter to terms assigned to this content record", - "in": "query", - "name": "post", - "type": "integer", - "x-example": 297765 - }, - { - "description": "Zero-based offset; accepted except for categories", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 100 - }, - { - "description": "Category parent ID; accepted only for categories", - "in": "query", - "name": "parent", - "type": "integer", - "x-example": 0 + "x-example": "13610014888" } ], "produces": [ @@ -360076,7 +395558,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.editorialTermsResponseDoc" + "$ref": "#/definitions/samsclub.productResponseDoc" } }, "400": { @@ -360097,12 +395579,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -360115,19 +395591,29 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes editorial taxonomy terms", + "summary": "Get a Sam's Club product's full detail", "tags": [ - "Rotten Tomatoes" + "Sam's Club" ] } }, - "/rottentomatoes/editorial/types": { + "/samsclub/product/{id}/related": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete live-verified set of editorial type values accepted by the editorial content endpoint.", - "operationId": "rottentomatoes-editorial-types", + "description": "Returns the related-item carousels shown on a Sam's Club product page, each a named shelf (e.g. \"Members also considered\", \"Items you may like\") of normalized products with pricing, rating, and image. id is the numeric product id from a Sam's Club product page's /ip/ URL. This upstream source does not distinguish an unrecognized id from a known one -- an unrecognized id still returns generic fallback shelves rather than an error.", + "operationId": "samsclub-product-related", + "parameters": [ + { + "description": "Numeric Sam's Club product id, from a product page's /ip/{slug}/{id} URL", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "13610014888" + } + ], "produces": [ "application/json" ], @@ -360135,17 +395621,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.editorialContentTypesResponseDoc" + "$ref": "#/definitions/samsclub.relatedItemsResponseDoc" } }, - "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" } @@ -360162,33 +395648,24 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes editorial content types", + "summary": "Get a Sam's Club product's related items", "tags": [ - "Rotten Tomatoes" + "Sam's Club" ] } }, - "/rottentomatoes/episode": { + "/sbsnews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Rotten Tomatoes TV episode metadata, scorecard data, parent series/season metadata, and public video metadata from a credential-free public episode page. Pass exactly one of `path` or `url`.", - "operationId": "rottentomatoes-episode", + "description": "Returns public SBS News article metadata and body paragraphs from a canonical article URL, including standard, Insight, and Dateline stories.", + "operationId": "sbsnews-article", "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", + "description": "Canonical SBS News article URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01" + "x-example": "https://www.sbs.com.au/news/article/example-story/abc123xyz" } ], "produces": [ @@ -360198,7 +395675,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.episodeResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -360213,18 +395690,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": { @@ -360237,33 +395702,31 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes episode detail", + "summary": "Get SBS News article content", "tags": [ - "Rotten Tomatoes" + "SBS News" ] } }, - "/rottentomatoes/movie": { + "/sbsnews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Rotten Tomatoes movie metadata, scorecard data, and representative embedded audience reviews. Pass exactly one of `path` or `url`.", - "operationId": "rottentomatoes-movie", + "description": "Returns a public SBS News byline collection with author name, profile image, biography, pagination state, and recent articles.", + "operationId": "sbsnews-author", "parameters": [ { - "description": "Rotten Tomatoes movie path", + "description": "Canonical SBS News author collection URL", "in": "query", - "name": "path", + "name": "url", + "required": true, "type": "string", - "x-example": "/m/inception" + "x-example": "https://www.sbs.com.au/news/collection/jennifer-scherer" }, { - "description": "Absolute https://www.rottentomatoes.com movie URL", + "default": 1, + "description": "1-based author archive page number", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.rottentomatoes.com/m/inception" + "name": "page", + "type": "integer" } ], "produces": [ @@ -360273,7 +395736,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.movieResponseDoc" + "$ref": "#/definitions/publicnews.sbsnewsAuthorResponseDoc" } }, "400": { @@ -360288,18 +395751,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": { @@ -360312,59 +395763,41 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes movie detail", + "summary": "Get an SBS News author profile", "tags": [ - "Rotten Tomatoes" + "SBS News" ] } }, - "/rottentomatoes/movie/reviews": { + "/sbsnews/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized critic or audience reviews from Rotten Tomatoes public review JSON hydrated by the movie review page, including pagination metadata. Pass exactly one of `path` or `url`. Supported `type` values are `critics`, `top-critics`, `audience`, and `verified-audience`.", - "operationId": "rottentomatoes-movie-reviews", + "description": "Returns current SBS News headlines for a supported navigation or featured topic section.", + "operationId": "sbsnews-headlines", "parameters": [ { - "description": "Rotten Tomatoes movie path", - "in": "query", - "name": "path", - "type": "string", - "x-example": "/m/inception" - }, - { - "description": "Absolute https://www.rottentomatoes.com movie URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.rottentomatoes.com/m/inception" - }, - { - "description": "Review type: critics, top-critics, audience, verified-audience", + "description": "Section slug from sbsnews-sections", "enum": [ - "critics", - "top-critics", - "audience", - "verified-audience" + "top", + "latest", + "australia", + "world", + "politics", + "indigenous", + "environment", + "life", + "cost-of-living", + "immigration", + "health-and-wellbeing", + "sport", + "education", + "technology-and-social-media", + "arts-and-entertainment" ], "in": "query", - "name": "type", + "name": "section", + "required": true, "type": "string", - "x-example": "critics" - }, - { - "description": "Reviews to return, default 10, max 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Pagination cursor from data.page_info.end_cursor", - "in": "query", - "name": "after", - "type": "string" + "x-example": "top" } ], "produces": [ @@ -360374,7 +395807,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.reviewsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -360383,24 +395816,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": { @@ -360413,35 +395828,16 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes movie reviews", + "summary": "Get SBS News section headlines", "tags": [ - "Rotten Tomatoes" + "SBS News" ] } }, - "/rottentomatoes/person": { + "/sbsnews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Rotten Tomatoes celebrity/person metadata and filmography rows from public Person JSON-LD and the credential-free filmography module. 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": "Returns current SBS News Top Stories from its public RSS feed.", + "operationId": "sbsnews-news", "produces": [ "application/json" ], @@ -360449,31 +395845,7 @@ "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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -360488,36 +395860,16 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes person detail and filmography", + "summary": "Get SBS News top stories", "tags": [ - "Rotten Tomatoes" + "SBS News" ] } }, - "/rottentomatoes/search": { + "/sbsnews/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Rotten Tomatoes movie search rows from credential-free server-rendered search HTML.", - "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 - } - ], + "description": "Returns the SBS News navigation and featured public topic/collection pages accepted by sbsnews-headlines.", + "operationId": "sbsnews-sections", "produces": [ "application/json" ], @@ -360525,37 +395877,7 @@ "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" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -360564,33 +395886,24 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes movie search", + "summary": "Get SBS News sections", "tags": [ - "Rotten Tomatoes" + "SBS News" ] } }, - "/rottentomatoes/season": { + "/sciencealert/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Rotten Tomatoes TV season metadata, scorecard data, parent series metadata, and episode rows from a credential-free public season page. Pass exactly one of `path` or `url`.", - "operationId": "rottentomatoes-season", + "description": "Returns public article metadata and body paragraphs from a canonical ScienceAlert article URL.", + "operationId": "sciencealert-article", "parameters": [ { - "description": "Rotten Tomatoes season path", - "in": "query", - "name": "path", - "type": "string", - "x-example": "/tv/breaking_bad/s01" - }, - { - "description": "Absolute https://www.rottentomatoes.com season URL", + "description": "Canonical ScienceAlert article URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.rottentomatoes.com/tv/breaking_bad/s01" + "x-example": "https://www.sciencealert.com/the-sun-and-moon-can-trigger-earthquakes-and-scientists-may-finally-know-how" } ], "produces": [ @@ -360600,7 +395913,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.seasonResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -360615,18 +395928,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": { @@ -360639,33 +395940,24 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes season detail", + "summary": "Get ScienceAlert article content", "tags": [ - "Rotten Tomatoes" + "ScienceAlert" ] } }, - "/rottentomatoes/series": { + "/sciencealert/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized Rotten Tomatoes TV series metadata and scorecard data from a credential-free public series page. Pass exactly one of `path` or `url`.", - "operationId": "rottentomatoes-series", + "description": "Returns a journalist's public profile, biography, social links, and one page of recent articles.", + "operationId": "sciencealert-author", "parameters": [ { - "description": "Rotten Tomatoes series path", - "in": "query", - "name": "path", - "type": "string", - "x-example": "/tv/breaking_bad" - }, - { - "description": "Absolute https://www.rottentomatoes.com series URL", + "description": "Canonical ScienceAlert author listing URL, e.g. /michelle-starr/page/0", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.rottentomatoes.com/tv/breaking_bad" + "x-example": "https://www.sciencealert.com/michelle-starr/page/0" } ], "produces": [ @@ -360675,7 +395967,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.seriesResponseDoc" + "$ref": "#/definitions/publicnews.scienceAlertAuthorResponseDoc" } }, "400": { @@ -360690,18 +395982,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": { @@ -360714,41 +395994,34 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes series detail", + "summary": "Get a ScienceAlert author profile", "tags": [ - "Rotten Tomatoes" + "ScienceAlert" ] } }, - "/rottentomatoes/sitemap/urls": { + "/sciencealert/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of URLs from one child sitemap. Discover valid `name` values with `rottentomatoes-sitemaps`; use offset/limit to page through the complete sitemap.", - "operationId": "rottentomatoes-sitemap-urls", + "description": "Returns headlines from one public ScienceAlert section.", + "operationId": "sciencealert-headlines", "parameters": [ { - "description": "Sitemap name returned by /rottentomatoes/sitemaps", + "description": "Section slug", + "enum": [ + "space", + "health", + "environment", + "humans", + "tech", + "nature", + "physics", + "this-week-in-science" + ], "in": "query", - "name": "name", + "name": "section", "required": true, "type": "string", - "x-example": "movie_0" - }, - { - "description": "Zero-based offset, default 0", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "URLs to return, default 100, max 500", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 100 + "x-example": "space" } ], "produces": [ @@ -360758,7 +396031,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.sitemapURLResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -360767,24 +396040,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": { @@ -360797,19 +396052,16 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes sitemap URL page", + "summary": "Get ScienceAlert section headlines", "tags": [ - "Rotten Tomatoes" + "ScienceAlert" ] } }, - "/rottentomatoes/sitemaps": { + "/sciencealert/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the live sitemap index and every named child sitemap, including movie, TV series, season, episode, person, critic, publication, browse-list, and static route inventories.", - "operationId": "rottentomatoes-sitemaps", + "description": "Returns fresh ScienceAlert top stories from its public RSS feed.", + "operationId": "sciencealert-news", "produces": [ "application/json" ], @@ -360817,7 +396069,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.sitemapIndexResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -360826,12 +396078,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -360844,70 +396090,50 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes sitemap discovery", + "summary": "Get ScienceAlert top stories", "tags": [ - "Rotten Tomatoes" + "ScienceAlert" ] } }, - "/rover/search": { + "/sciencealert/sections": { "get": { - "consumes": [ + "description": "Returns the complete public top-level ScienceAlert taxonomy used by headlines.", + "operationId": "sciencealert-sections", + "produces": [ "application/json" ], - "description": "Searches Rover's public sitter/walker listings by location and service type, returning normalized sitter summaries (name, profile image, rating, review count, repeat-client count, years of experience, neighborhood/city/state, starting price, Star Sitter status, and a short bio). Public data sourced from Rover's own server-rendered search pages.", - "operationId": "rover-sitter-search", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Free-text address, city, or zip code, e.g. \\", - "in": "query", - "name": "location", - "required": true, - "type": "string", - "x-example": "Seattle, WA" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get ScienceAlert sections", + "tags": [ + "ScienceAlert" + ] + } + }, + "/scmp/article": { + "get": { + "description": "Returns one public South China Morning Post article's metadata and body paragraphs from a canonical article URL. `content_locked` and `paywall_types` are the upstream's own restricted-access signals for that article, reported exactly as the site returns them; the body returned here is the same one the site's own page serves to an anonymous visitor. An article whose page genuinely withholds its body is reported as a restricted-access error instead of a hollow or truncated response.", + "operationId": "scmp-article", + "parameters": [ { - "description": "Service category to search. One of: `overnight-boarding`, `overnight-traveling`, `drop-in`, `doggy-day-care`, `dog-walking`.", + "description": "Canonical SCMP article URL", "in": "query", - "name": "service_type", + "name": "url", "required": true, "type": "string", - "x-example": "overnight-boarding" - }, - { - "description": "1-based result page. Defaults to 1.", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Filter by pet species. One of: `dog`, `cat`.", - "in": "query", - "name": "pet_type", - "type": "string", - "x-example": "dog" - }, - { - "description": "Minimum starting rate in whole dollars.", - "in": "query", - "name": "min_price", - "type": "integer", - "x-example": 20 - }, - { - "description": "Maximum starting rate in whole dollars.", - "in": "query", - "name": "max_price", - "type": "integer", - "x-example": 100 - }, - { - "description": "Restrict results to Rover's \\", - "in": "query", - "name": "star_sitter_only", - "type": "boolean", - "x-example": false + "x-example": "https://www.scmp.com/news/hong-kong/society/article/3368530/example-slug" } ], "produces": [ @@ -360917,7 +396143,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rover.searchResponseDoc" + "$ref": "#/definitions/scmp.articleResponseDoc" } }, "400": { @@ -360926,14 +396152,20 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "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" } @@ -360950,27 +396182,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Rover sitters and walkers", + "summary": "Get an SCMP article's content", "tags": [ - "Rover" + "SCMP" ] } }, - "/rover/sitter/{slug}": { + "/scmp/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a normalized Rover sitter/walker profile: name, photo, bio, star rating, review count, repeat-client count, years of experience, neighborhood/city/state, starting price, Star Sitter status, the services offered with per-service pricing, and public review excerpts from the sitter's own profile page. Public data sourced from Rover's own server-rendered profile pages.", - "operationId": "rover-sitter-profile", + "description": "Returns one South China Morning Post author/reporter's public profile -- name, role, biography, areas of expertise, languages, location, headshot, and contact/social links -- plus their recent articles, from a canonical author URL.", + "operationId": "scmp-author", "parameters": [ { - "description": "Rover sitter profile slug, the trailing path segment of a search result's profile_url field", - "in": "path", - "name": "slug", + "description": "Canonical scmp.com/author/ URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "tianci-d-staycation-for-your-dog" + "x-example": "https://www.scmp.com/author/matthew-cheng" } ], "produces": [ @@ -360980,7 +396209,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rover.profileResponseDoc" + "$ref": "#/definitions/scmp.authorResponseDoc" } }, "400": { @@ -360995,8 +396224,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -361013,27 +396242,114 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rover sitter profile", + "summary": "Get an SCMP author/reporter profile", "tags": [ - "Rover" + "SCMP" ] } }, - "/rover/trainer-search": { + "/scmp/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Rover's public dog trainer listings by location, returning normalized trainer summaries (name, profile image, headline, experience details, rating, review count, repeat-client count, years of experience, city/state/zip, starting price, training methodology, and skill/behavior tags). Public data sourced from Rover's own server-rendered training search pages.", - "operationId": "rover-trainer-search", + "description": "Returns the current article listing for one South China Morning Post section: each story's title, canonical URL, summary, byline, publication time, and lead image. Section must be a slug returned by /scmp/sections.", + "operationId": "scmp-headlines", "parameters": [ { - "description": "Free-text address, city, or zip code, e.g. \\", + "description": "Section slug from /scmp/sections", + "enum": [ + "news", + "business", + "property", + "tech", + "lifestyle", + "culture", + "sport", + "postmag", + "style", + "this-week-in-asia", + "cooking", + "hong-kong", + "china", + "asia", + "world", + "people-culture", + "china-politics", + "china-diplomacy", + "china-economy", + "hong-kong-politics", + "hong-kong-economy", + "hong-kong-health-environment", + "hong-kong-education", + "world-us-canada", + "world-europe", + "world-middle-east", + "world-americas", + "world-africa", + "world-russia-central-asia", + "asia-australasia", + "asia-diplomacy", + "asia-east-asia", + "asia-southeast-asia", + "asia-south-asia", + "business-companies", + "business-investor-relations", + "business-global-economy", + "business-money-wealth", + "opinion-comment", + "opinion-harrys-view", + "opinion-blogs", + "opinion-polls", + "opinion-letters", + "property-hong-kong-china", + "property-international", + "tech-big-tech", + "tech-enterprises", + "tech-innovation", + "tech-leaders-founders", + "tech-science-research", + "lifestyle-fashion-beauty", + "lifestyle-travel-leisure", + "lifestyle-motoring", + "lifestyle-food-drink", + "lifestyle-health-wellness", + "lifestyle-watches", + "culture-books", + "culture-music", + "culture-film-tv", + "culture-arts", + "sport-hong-kong", + "sport-china", + "sport-golf", + "sport-racing", + "sport-rugby", + "sport-football", + "sport-tennis", + "sport-other", + "sport-boxing", + "sport-hong-kong-sevens", + "postmag-culture", + "postmag-travel", + "postmag-food-drink", + "postmag-passions", + "postmag-wellness", + "postmag-design-interiors", + "style-luxury", + "style-fashion", + "style-beauty", + "style-people", + "style-lifestyle", + "this-week-in-asia-politics", + "this-week-in-asia-geopolitics", + "this-week-in-asia-economics", + "this-week-in-asia-society", + "this-week-in-asia-opinion", + "this-week-in-asia-asia-buzz", + "this-week-in-asia-people" + ], "in": "query", - "name": "location", + "name": "section", "required": true, "type": "string", - "x-example": "Seattle, WA" + "x-example": "hong-kong" } ], "produces": [ @@ -361043,7 +396359,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rover.trainerSearchResponseDoc" + "$ref": "#/definitions/scmp.headlinesResponseDoc" } }, "400": { @@ -361058,8 +396374,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -361076,29 +396392,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Rover dog trainers", + "summary": "Get the latest stories in an SCMP section", "tags": [ - "Rover" + "SCMP" ] } }, - "/rover/trainer/{slug}": { + "/scmp/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a normalized Rover dog trainer profile: name, photo, headline, experience and availability details, training methodology, rating, review count, repeat-client count, years of training, skill/behavior tags, and education credentials. Public data sourced from Rover's own server-rendered training profile pages.", - "operationId": "rover-trainer-profile", - "parameters": [ - { - "description": "Rover trainer profile slug, the trailing path segment of a trainer search result's profile_url field", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "madison-h-over-6-years-of-pet-care-experience" - } - ], + "description": "Lists every South China Morning Post section accepted by /scmp/headlines, with its slug, display name, feed URL, and (for a subsection) its parent section's slug and name. Values: `news`, `business`, `property`, `tech`, `lifestyle`, `culture`, `sport`, `postmag`, `style`, `this-week-in-asia`, `cooking`, `hong-kong`, `china`, `asia`, `world`, `people-culture`, `china-politics`, `china-diplomacy`, `china-economy`, `hong-kong-politics`, `hong-kong-economy`, `hong-kong-health-environment`, `hong-kong-education`, `world-us-canada`, `world-europe`, `world-middle-east`, `world-americas`, `world-africa`, `world-russia-central-asia`, `asia-australasia`, `asia-diplomacy`, `asia-east-asia`, `asia-southeast-asia`, `asia-south-asia`, `business-companies`, `business-investor-relations`, `business-global-economy`, `business-money-wealth`, `opinion-comment`, `opinion-harrys-view`, `opinion-blogs`, `opinion-polls`, `opinion-letters`, `property-hong-kong-china`, `property-international`, `tech-big-tech`, `tech-enterprises`, `tech-innovation`, `tech-leaders-founders`, `tech-science-research`, `lifestyle-fashion-beauty`, `lifestyle-travel-leisure`, `lifestyle-motoring`, `lifestyle-food-drink`, `lifestyle-health-wellness`, `lifestyle-watches`, `culture-books`, `culture-music`, `culture-film-tv`, `culture-arts`, `sport-hong-kong`, `sport-china`, `sport-golf`, `sport-racing`, `sport-rugby`, `sport-football`, `sport-tennis`, `sport-other`, `sport-boxing`, `sport-hong-kong-sevens`, `postmag-culture`, `postmag-travel`, `postmag-food-drink`, `postmag-passions`, `postmag-wellness`, `postmag-design-interiors`, `style-luxury`, `style-fashion`, `style-beauty`, `style-people`, `style-lifestyle`, `this-week-in-asia-politics`, `this-week-in-asia-geopolitics`, `this-week-in-asia-economics`, `this-week-in-asia-society`, `this-week-in-asia-opinion`, `this-week-in-asia-asia-buzz`, `this-week-in-asia-people`.", + "operationId": "scmp-sections", "produces": [ "application/json" ], @@ -361106,23 +396409,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rover.trainerProfileResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/scmp.sectionsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -361139,24 +396430,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Rover dog trainer profile", + "summary": "List SCMP sections", "tags": [ - "Rover" + "SCMP" ] } }, - "/rte/article": { + "/screenrant/article": { "get": { - "description": "Returns public RTÉ News article metadata and body paragraphs from a canonical rte.ie/news article URL. RTÉ News articles are free to read; paywalled is omitted.", - "operationId": "rte-article", + "description": "Returns public ScreenRant article metadata and body paragraphs from a canonical article URL.", + "operationId": "screenrant-article", "parameters": [ { - "description": "Canonical RTÉ News article URL", + "description": "Canonical ScreenRant article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.rte.ie/news/politics/2026/0924/1592808-budget-fuel-excise/" + "x-example": "https://screenrant.com/charlie-harper-movie-review/" } ], "produces": [ @@ -361193,24 +396484,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get RTÉ News article content", + "summary": "Get ScreenRant article content", "tags": [ - "RTÉ News" + "ScreenRant" ] } }, - "/rte/author": { + "/screenrant/author": { "get": { - "description": "Returns an RTÉ News author's byline name, role, headshot and recent articles from a canonical author URL.", - "operationId": "rte-author", + "description": "Returns a ScreenRant author's byline metadata, biography, social links, and recent articles from a canonical author URL.", + "operationId": "screenrant-author", "parameters": [ { - "description": "Canonical RTÉ author URL", + "description": "Canonical ScreenRant author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.rte.ie/author/1110632-barry-lenihan/" + "x-example": "https://screenrant.com/author/liam-crowley/" } ], "produces": [ @@ -361220,7 +396511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.rteAuthorResponseDoc" + "$ref": "#/definitions/publicnews.screenrantAuthorResponseDoc" } }, "400": { @@ -361247,54 +396538,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get an RTÉ News author profile", + "summary": "Get a ScreenRant author profile", "tags": [ - "RTÉ News" + "ScreenRant" ] } }, - "/rte/headlines": { + "/screenrant/headlines": { "get": { - "description": "Returns fresh headlines from one public RTÉ News section.", - "operationId": "rte-headlines", + "description": "Returns fresh headlines from one public ScreenRant RSS section.", + "operationId": "screenrant-headlines", "parameters": [ { - "description": "RTÉ News section slug", + "description": "ScreenRant RSS section slug", "enum": [ - "ireland", - "world", - "politics", - "business", - "regional", - "connacht", - "dublin", - "leinster", - "munster", - "ulster", - "middle-east", - "europe", - "uk", - "us", - "ukraine", - "a-european-perspective", - "nuacht", - "newslens", - "analysis-and-comment", - "investigations-unit", - "crime", - "courts", - "education", - "health", - "environment", - "science", - "technology", - "weather", - "your-money" + "movies", + "movie-news", + "movie-features", + "movie-reviews", + "movie-lists", + "movie-trailers", + "tv", + "tv-news", + "tv-features", + "tv-reviews", + "tv-lists", + "network-tv", + "reality-tv", + "reality-tv-news", + "reality-tv-features", + "reality-tv-lists", + "comics", + "comics-news", + "comics-features", + "comics-reviews", + "comics-lists", + "gaming", + "game-news", + "game-features", + "game-lists", + "game-reviews", + "anime", + "books", + "interviews", + "lists", + "videos", + "podcasts", + "exclusives", + "streaming-movies-and-tv-guide" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "movies" } ], "produces": [ @@ -361313,6 +396610,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -361325,16 +396628,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get RTÉ News section headlines", + "summary": "Get ScreenRant section headlines", "tags": [ - "RTÉ News" + "ScreenRant" ] } }, - "/rte/news": { + "/screenrant/news": { "get": { - "description": "Returns fresh RTÉ News top stories from its public news feed. Scope is RTÉ News (rte.ie/news) only, not the RTÉ Player, radio, sport or entertainment sections.", - "operationId": "rte-news", + "description": "Returns fresh ScreenRant top stories from its public RSS feed.", + "operationId": "screenrant-news", "produces": [ "application/json" ], @@ -361363,16 +396666,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get RTÉ News top stories", + "summary": "Get ScreenRant top stories", "tags": [ - "RTÉ News" + "ScreenRant" ] } }, - "/rte/sections": { + "/screenrant/sections": { "get": { - "description": "Returns the public RTÉ News section inventory used by the headlines endpoint.", - "operationId": "rte-sections", + "description": "Returns the public ScreenRant RSS section inventory used by the headlines endpoint.", + "operationId": "screenrant-sections", "produces": [ "application/json" ], @@ -361382,6 +396685,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": [ @@ -361389,26 +396704,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get RTÉ News sections", + "summary": "Get ScreenRant RSS sections", "tags": [ - "RTÉ News" + "ScreenRant" ] } }, - "/salon/article": { + "/seatgeek/categories": { "get": { - "description": "Returns public Salon article metadata and body paragraphs from a canonical article URL.", - "operationId": "salon-article", - "parameters": [ - { - "description": "Canonical Salon article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.salon.com/2026/09/23/trump-admin-spars-with-iran-at-un-meeting/" - } + "consumes": [ + "application/json" ], + "description": "Returns SeatGeek's full event-category tree (e.g. Sports > Baseball > MLB, Concerts, Theater), root and leaf nodes together. Each category's id is the value seatgeek-events-by-category's taxonomy_id parameter accepts.", + "operationId": "seatgeek-categories", "produces": [ "application/json" ], @@ -361416,17 +396724,52 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/seatgeek.categoriesResponseDoc" } }, - "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 SeatGeek's event categories", + "tags": [ + "SeatGeek" + ] + } + }, + "/seatgeek/cities": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns SeatGeek's own curated \"browse by city\" directory (87 metro areas as of 2026-09-15): id, name, state, country, coordinates, and which verticals (concerts/sports/theater) it supports. Each city's lat/lon pairs directly with GET /seatgeek/events-near.", + "operationId": "seatgeek-cities", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/seatgeek.citiesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -361443,24 +396786,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Salon article content", + "summary": "List SeatGeek's curated metro areas", "tags": [ - "Salon" + "SeatGeek" ] } }, - "/salon/author": { + "/seatgeek/event": { "get": { - "description": "Returns a Salon writer's byline metadata, biography, and recent articles from a canonical writer URL.", - "operationId": "salon-author", + "consumes": [ + "application/json" + ], + "description": "Returns one SeatGeek event's full detail: title, timing, venue, performers, category taxonomy, and SeatGeek's own live secondary-market pricing snapshot (listing/ticket counts, average/median/lowest/highest price). id is SeatGeek's own numeric event id, obtained from a search or performer-events result. Pricing is an aggregate snapshot only -- no per-seat listing rows and no checkout/purchase flow.", + "operationId": "seatgeek-event", "parameters": [ { - "description": "Canonical Salon writer URL", + "description": "SeatGeek's own numeric event id", "in": "query", - "name": "url", + "name": "id", "required": true, - "type": "string", - "x-example": "https://www.salon.com/writer/troy_farah" + "type": "integer", + "x-example": 17695775 } ], "produces": [ @@ -361470,7 +396816,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.salonAuthorResponseDoc" + "$ref": "#/definitions/seatgeek.eventResponseDoc" } }, "400": { @@ -361485,6 +396831,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -361497,57 +396849,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Salon writer profile", + "summary": "Get a SeatGeek event's detail", "tags": [ - "Salon" + "SeatGeek" ] } }, - "/salon/headlines": { + "/seatgeek/events-by-category": { "get": { - "description": "Returns fresh headlines from one public Salon RSS section.", - "operationId": "salon-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of SeatGeek events under a category/taxonomy, soonest first. taxonomy_id is a SeatGeek category id from GET /seatgeek/categories, e.g. 1010100 for MLB.", + "operationId": "seatgeek-events-by-category", "parameters": [ { - "description": "Salon RSS section slug", - "enum": [ - "home", - "audio", - "blog", - "business", - "culture", - "economy", - "economy-and-innovation", - "elections", - "entertainment", - "food", - "guides", - "innovation", - "life", - "life-stories", - "media", - "money", - "news", - "news-and-politics", - "opinion", - "oscars_2012", - "politics", - "satire", - "science-and-health", - "sex-and-love", - "social", - "sustainability", - "sxsw_2013", - "technology", - "the_brief", - "video", - "vpn", - "working_ahead" - ], + "description": "A SeatGeek taxonomy id from GET /seatgeek/categories", "in": "query", - "name": "section", + "name": "taxonomy_id", "required": true, - "type": "string" + "type": "integer", + "x-example": 1010100 + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 25, + "description": "Results per page, 1-50", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -361557,7 +396893,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/seatgeek.eventsByCategoryResponseDoc" } }, "400": { @@ -361566,6 +396902,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -361578,16 +396920,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Salon section headlines", + "summary": "Browse SeatGeek events by category", "tags": [ - "Salon" + "SeatGeek" ] } }, - "/salon/news": { + "/seatgeek/events-near": { "get": { - "description": "Returns fresh Salon top stories from its public RSS feed.", - "operationId": "salon-news", + "consumes": [ + "application/json" + ], + "description": "Returns one page of SeatGeek events near a coordinate, soonest first -- the same call its city pages and homepage location-based sections make. Pair with GET /seatgeek/cities for a curated list of coordinates, or pass any coordinate directly.", + "operationId": "seatgeek-events-near", + "parameters": [ + { + "description": "Latitude", + "in": "query", + "name": "lat", + "required": true, + "type": "number", + "x-example": 35.08794 + }, + { + "description": "Longitude", + "in": "query", + "name": "lon", + "required": true, + "type": "number", + "x-example": -106.6357 + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 25, + "description": "Results per page, 1-50", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -361595,7 +396972,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/seatgeek.eventsNearResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -361616,16 +396999,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Salon top stories", + "summary": "Browse SeatGeek events near a coordinate", "tags": [ - "Salon" + "SeatGeek" ] } }, - "/salon/sections": { + "/seatgeek/performer": { "get": { - "description": "Returns the public Salon RSS section inventory used by the headlines endpoint.", - "operationId": "salon-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one SeatGeek performer's (sports team, artist, or show) full detail by direct id lookup: name, type, image, popularity, home venue id, upcoming-event counts, and category taxonomy. id is SeatGeek's own numeric performer id, obtained from a search result. Use this when you already have a bare performer id and want to skip a search round-trip; seatgeek-search returns the same fields for a query.", + "operationId": "seatgeek-performer", + "parameters": [ + { + "description": "SeatGeek's own numeric performer id", + "in": "query", + "name": "id", + "required": true, + "type": "integer", + "x-example": 1 + } + ], "produces": [ "application/json" ], @@ -361633,7 +397029,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/seatgeek.performerResponseDoc" + } + }, + "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" } } }, @@ -361642,34 +397062,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Salon RSS sections", + "summary": "Get a SeatGeek performer's detail", "tags": [ - "Salon" + "SeatGeek" ] } }, - "/samsclub/category": { + "/seatgeek/performer-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Sam's Club category or collection page's product grid, with real page-based pagination. id accepts a bare numeric category id (from a nav link's /browse/{id} URL) or a full /browse/{slug}/{id} URL copied from samsclub.com -- only the trailing id is used. Returns normalized products with name, brand, pricing, availability, rating, and image. An id samsclub.com does not recognize returns a genuine zero-result response rather than an error, matching upstream's own behavior.", - "operationId": "samsclub-category", + "description": "Returns one page of a SeatGeek performer's (sports team, artist, or show) upcoming event schedule, soonest first. performer_id is SeatGeek's own numeric performer id, obtained from a search result (e.g. 1 for the Los Angeles Dodgers).", + "operationId": "seatgeek-performer-events", "parameters": [ { - "description": "Sam's Club category id, or a /browse/{slug}/{id} URL", + "description": "SeatGeek's own numeric performer id", "in": "query", - "name": "id", + "name": "performer_id", "required": true, - "type": "string", - "x-example": "15660127" + "type": "integer", + "x-example": 1 }, { - "description": "Result page, 1-based, defaults to 1", + "default": 1, + "description": "1-based page number", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" + }, + { + "default": 25, + "description": "Results per page, 1-50", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -361679,7 +397106,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/samsclub.categoryResponseDoc" + "$ref": "#/definitions/seatgeek.performerEventsResponseDoc" } }, "400": { @@ -361706,27 +397133,34 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Sam's Club category or collection", + "summary": "Get a SeatGeek performer's event schedule", "tags": [ - "Sam's Club" + "SeatGeek" ] } }, - "/samsclub/content/{id}": { + "/seatgeek/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Sam's Club curated content/landing page (e.g. a seasonal savings hub or a \"New Arrivals\" page) -- distinct data from GET /samsclub/category's flat, paginated product grid. id accepts a bare numeric content page id (from a nav link's /cp/{id} URL) or a full /cp/{slug}/{id} URL copied from samsclub.com -- only the trailing id is used. Returns a title, breadcrumb, named curated product shelves, and a category-navigation tile grid. There is no pagination -- a content page's shelves are a fixed, hand-curated set. An id samsclub.com does not recognize returns a 404, unlike GET /samsclub/category's zero-result response for the same situation.", - "operationId": "samsclub-content", + "description": "Free-text search across SeatGeek's own catalog of events, performers (sports teams, artists, and shows), and venues -- the same call the site's own search box and search-results page use. Any of the three result lists may come back empty for a query with no matches in that type.", + "operationId": "seatgeek-search", "parameters": [ { - "description": "Numeric Sam's Club content page id, from a /cp/{slug}/{id} URL", - "in": "path", - "name": "id", + "description": "Free-text search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "16050279" + "x-example": "dodgers" + }, + { + "default": 10, + "description": "Maximum results per result type (events/performers/venues), 1-50", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -361736,7 +397170,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/samsclub.contentResponseDoc" + "$ref": "#/definitions/seatgeek.searchResponseDoc" } }, "400": { @@ -361745,12 +397179,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -361769,19 +397197,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sam's Club curated content or landing page", + "summary": "Search SeatGeek events, performers, and venues", "tags": [ - "Sam's Club" + "SeatGeek" ] } }, - "/samsclub/departments": { + "/seatgeek/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns Sam's Club's full department/category taxonomy, as shown on its own \"All Departments\" page: every top-level department with its own subcategory list. Each link's type is \"browse\" (pairs directly with GET /samsclub/category), \"cp\" (a content/landing page that does not reliably carry a product grid), or empty (an unrecognized link shape).", - "operationId": "samsclub-departments", + "description": "Returns SeatGeek's own geo-personalized \"trending near you\" event feed for a coordinate -- the same list its homepage renders.", + "operationId": "seatgeek-trending", + "parameters": [ + { + "description": "Latitude", + "in": "query", + "name": "lat", + "required": true, + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Longitude", + "in": "query", + "name": "lon", + "required": true, + "type": "number", + "x-example": -74.006 + } + ], "produces": [ "application/json" ], @@ -361789,7 +397235,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/samsclub.departmentsResponseDoc" + "$ref": "#/definitions/seatgeek.trendingResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -361810,27 +397262,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Sam's Club departments and categories", + "summary": "Get SeatGeek's trending-near-you events", "tags": [ - "Sam's Club" + "SeatGeek" ] } }, - "/samsclub/product/{id}": { + "/seatgeek/venue": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Sam's Club product's full detail: name, brand, description, category breadcrumb, pricing, availability, images, aggregate rating and review count, and the club's own item number. id is the numeric product id from a Sam's Club product page's /ip/ URL.", - "operationId": "samsclub-product", + "description": "Returns one SeatGeek venue's full detail: address, city/state/country, timezone, capacity, coordinates, and upcoming-event counts. id is SeatGeek's own numeric venue id, obtained from a search or event result.", + "operationId": "seatgeek-venue", "parameters": [ { - "description": "Numeric Sam's Club product id, from a product page's /ip/{slug}/{id} URL", - "in": "path", + "description": "SeatGeek's own numeric venue id", + "in": "query", "name": "id", "required": true, - "type": "string", - "x-example": "13610014888" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -361840,7 +397292,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/samsclub.productResponseDoc" + "$ref": "#/definitions/seatgeek.venueResponseDoc" } }, "400": { @@ -361873,27 +397325,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sam's Club product's full detail", + "summary": "Get a SeatGeek venue's detail", "tags": [ - "Sam's Club" + "SeatGeek" ] } }, - "/samsclub/product/{id}/related": { + "/seatgeek/venue-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns the related-item carousels shown on a Sam's Club product page, each a named shelf (e.g. \"Members also considered\", \"Items you may like\") of normalized products with pricing, rating, and image. id is the numeric product id from a Sam's Club product page's /ip/ URL. This upstream source does not distinguish an unrecognized id from a known one -- an unrecognized id still returns generic fallback shelves rather than an error.", - "operationId": "samsclub-product-related", + "description": "Returns one page of a SeatGeek venue's upcoming event schedule, soonest first. venue_id is SeatGeek's own numeric venue id, obtained from a search or event result (e.g. 1 for UNIQLO Field at Dodger Stadium).", + "operationId": "seatgeek-venue-events", "parameters": [ { - "description": "Numeric Sam's Club product id, from a product page's /ip/{slug}/{id} URL", - "in": "path", - "name": "id", + "description": "SeatGeek's own numeric venue id", + "in": "query", + "name": "venue_id", "required": true, - "type": "string", - "x-example": "13610014888" + "type": "integer", + "x-example": 1 + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 25, + "description": "Results per page, 1-50", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -361903,7 +397369,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/samsclub.relatedItemsResponseDoc" + "$ref": "#/definitions/seatgeek.venueEventsResponseDoc" } }, "400": { @@ -361930,24 +397396,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sam's Club product's related items", + "summary": "Get a SeatGeek venue's event schedule", "tags": [ - "Sam's Club" + "SeatGeek" ] } }, - "/sbsnews/article": { + "/seattletimes/article": { "get": { - "description": "Returns public SBS News article metadata and body paragraphs from a canonical article URL, including standard, Insight, and Dateline stories.", - "operationId": "sbsnews-article", + "description": "Returns public Seattle Times story metadata and body paragraphs from a canonical story URL. The site's metered paywall is a client-side overlay: anonymous requests receive the full body, which is returned as-is.", + "operationId": "seattletimes-article", "parameters": [ { - "description": "Canonical SBS News article URL", + "description": "Canonical Seattle Times story URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.sbs.com.au/news/article/example-story/abc123xyz" + "x-example": "https://www.seattletimes.com/seattle-news/transportation/sound-transit-ceo-claims-his-30k-bonus-and-wins-a-pay-raise/" } ], "produces": [ @@ -361984,31 +397450,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get SBS News article content", + "summary": "Get Seattle Times article content", "tags": [ - "SBS News" + "Seattle Times" ] } }, - "/sbsnews/author": { + "/seattletimes/author": { "get": { - "description": "Returns a public SBS News byline collection with author name, profile image, biography, pagination state, and recent articles.", - "operationId": "sbsnews-author", + "description": "Returns one Seattle Times author's public profile: name, bio, newsroom-published email and X/Twitter link when listed, and their most recent stories.", + "operationId": "seattletimes-author", "parameters": [ { - "description": "Canonical SBS News author collection URL", + "description": "Author slug, e.g. mike-lindblom", "in": "query", - "name": "url", - "required": true, + "name": "slug", "type": "string", - "x-example": "https://www.sbs.com.au/news/collection/jennifer-scherer" + "x-example": "mike-lindblom" }, { - "default": 1, - "description": "1-based author archive page number", + "description": "Canonical seattletimes.com/author// URL; alternative to slug", "in": "query", - "name": "page", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.seattletimes.com/author/mike-lindblom/" } ], "produces": [ @@ -362018,7 +397483,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sbsnewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.seattleTimesAuthorResponseDoc" } }, "400": { @@ -362045,40 +397510,124 @@ "ApiKeyAuth": [] } ], - "summary": "Get an SBS News author profile", + "summary": "Get a Seattle Times author profile", "tags": [ - "SBS News" + "Seattle Times" ] } }, - "/sbsnews/headlines": { + "/seattletimes/headlines": { "get": { - "description": "Returns current SBS News headlines for a supported navigation or featured topic section.", - "operationId": "sbsnews-headlines", + "description": "Returns fresh headlines from one public Seattle Times section feed.", + "operationId": "seattletimes-headlines", "parameters": [ { - "description": "Section slug from sbsnews-sections", + "description": "Seattle Times section slug", "enum": [ - "top", - "latest", - "australia", - "world", + "seattle-news", + "law-justice", "politics", - "indigenous", + "transportation", + "climate-lab", "environment", - "life", - "cost-of-living", - "immigration", - "health-and-wellbeing", - "sport", + "weather", + "health", + "data", + "homeless", + "education-lab", "education", - "technology-and-social-media", - "arts-and-entertainment" + "times-watchdog", + "mental-health", + "eastside", + "puget-sound", + "business", + "boeing-aerospace", + "real-estate", + "amazon", + "technology", + "microsoft", + "alaska-airlines", + "costco", + "economy", + "starbucks", + "retail", + "nation-world", + "nation", + "world", + "nation-politics", + "oddities", + "sports", + "seahawks", + "mariners", + "uw-huskies", + "wsu-cougars", + "storm", + "kraken", + "sounders", + "reign", + "torrent", + "high-school", + "entertainment", + "music", + "movies", + "books", + "tv", + "theater", + "visual-arts", + "classical-music", + "local-media", + "events", + "life", + "food-drink", + "travel", + "outdoors", + "wellness", + "lifestyle", + "fashion", + "rant-and-rave", + "op-eds", + "opinion", + "editorials", + "letters-to-the-editor", + "pacific-nw-magazine", + "photo-video", + "video", + "photography", + "at-home", + "marijuana", + "northwest", + "obituaries", + "science", + "special-reports", + "agriculture", + "local-business", + "markets", + "auto-racing", + "college", + "wsu-cougar-basketball", + "wsu-cougar-football", + "golf", + "gonzaga-bulldogs", + "hockey", + "horse-racing", + "uw-husky-basketball", + "nba", + "ncaa-tournament", + "pac-12", + "seattle-university", + "snow-sports", + "world-cup", + "dance", + "video-games", + "fitness", + "garden", + "home-decor" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "seattle-news" } ], "produces": [ @@ -362109,16 +397658,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get SBS News section headlines", + "summary": "Get Seattle Times section headlines", "tags": [ - "SBS News" + "Seattle Times" ] } }, - "/sbsnews/news": { + "/seattletimes/news": { "get": { - "description": "Returns current SBS News Top Stories from its public RSS feed.", - "operationId": "sbsnews-news", + "description": "Returns fresh Seattle Times stories from the public site-wide RSS feed.", + "operationId": "seattletimes-news", "produces": [ "application/json" ], @@ -362141,16 +397690,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get SBS News top stories", + "summary": "Get Seattle Times top stories", "tags": [ - "SBS News" + "Seattle Times" ] } }, - "/sbsnews/sections": { + "/seattletimes/sections": { "get": { - "description": "Returns the SBS News navigation and featured public topic/collection pages accepted by sbsnews-headlines.", - "operationId": "sbsnews-sections", + "description": "Returns the public Seattle Times section inventory: every category in the site's navigation and RSS feed list that publishes a live feed.", + "operationId": "seattletimes-sections", "produces": [ "application/json" ], @@ -362167,24 +397716,81 @@ "ApiKeyAuth": [] } ], - "summary": "Get SBS News sections", + "summary": "Get Seattle Times sections", "tags": [ - "SBS News" + "Seattle Times" ] } }, - "/sciencealert/article": { + "/sec/company/intelligence": { "get": { - "description": "Returns public article metadata and body paragraphs from a canonical ScienceAlert article URL.", - "operationId": "sciencealert-article", + "consumes": [ + "application/json" + ], + "description": "Aggregates a company's profile, a latest-annual financial snapshot, the latest 10-K/10-Q/8-K, and recent material events into one call. Provide cik or ticker. Optionally fuse live cross-source data with enrich (a comma list of market, news, hiring): market and news are keyed on the ticker; hiring needs ats plus that ATS's careers slug (or tenant/datacenter/site for Workday). Enrichment is best-effort — requested-but-unavailable sources are listed under degraded and never fail the SEC-native response. Credential-free public data.", + "operationId": "sec-company-intelligence", "parameters": [ { - "description": "Canonical ScienceAlert article URL", + "description": "SEC CIK (numeric or zero-padded)", "in": "query", - "name": "url", - "required": true, + "name": "cik", "type": "string", - "x-example": "https://www.sciencealert.com/the-sun-and-moon-can-trigger-earthquakes-and-scientists-may-finally-know-how" + "x-example": "320193" + }, + { + "description": "Ticker symbol (alternative to cik)", + "in": "query", + "name": "ticker", + "type": "string", + "x-example": "AAPL" + }, + { + "description": "Comma list of cross-source enrichments", + "enum": [ + "market", + "news", + "hiring" + ], + "in": "query", + "name": "enrich", + "type": "string" + }, + { + "description": "ATS provider for hiring enrichment", + "enum": [ + "greenhouse", + "lever", + "ashby", + "workday", + "smartrecruiters" + ], + "in": "query", + "name": "ats", + "type": "string" + }, + { + "description": "Careers board slug for hiring (greenhouse/lever/ashby/smartrecruiters)", + "in": "query", + "name": "careers_slug", + "type": "string" + }, + { + "description": "Workday tenant (hiring, when ats=workday)", + "in": "query", + "name": "tenant", + "type": "string" + }, + { + "description": "Workday datacenter shard (hiring, when ats=workday)", + "in": "query", + "name": "datacenter", + "type": "string" + }, + { + "description": "Workday career site (hiring, when ats=workday)", + "in": "query", + "name": "site", + "type": "string" } ], "produces": [ @@ -362194,7 +397800,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/sec.intelligenceResponseDoc" } }, "400": { @@ -362209,6 +397815,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -362221,24 +397833,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get ScienceAlert article content", + "summary": "Company 360 overview from SEC data", "tags": [ - "ScienceAlert" + "SEC EDGAR" ] } }, - "/sciencealert/author": { + "/sec/company/search": { "get": { - "description": "Returns a journalist's public profile, biography, social links, and one page of recent articles.", - "operationId": "sciencealert-author", + "consumes": [ + "application/json" + ], + "description": "Resolves a ticker symbol or company-name query to SEC EDGAR companies (CIK, ticker, name) using the official company_tickers map. Credential-free public SEC data.", + "operationId": "sec-company-search", "parameters": [ { - "description": "Canonical ScienceAlert author listing URL, e.g. /michelle-starr/page/0", + "description": "Ticker symbol or company name", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.sciencealert.com/michelle-starr/page/0" + "x-example": "apple" + }, + { + "description": "Max matches, default 10, max 100", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -362248,7 +397869,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.scienceAlertAuthorResponseDoc" + "$ref": "#/definitions/sec.companySearchResponseDoc" } }, "400": { @@ -362257,8 +397878,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -362275,33 +397896,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get a ScienceAlert author profile", + "summary": "Resolve a ticker or company name to EDGAR companies", "tags": [ - "ScienceAlert" + "SEC EDGAR" ] } }, - "/sciencealert/headlines": { + "/sec/company/submissions": { "get": { - "description": "Returns headlines from one public ScienceAlert section.", - "operationId": "sciencealert-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a company's recent SEC filings (form, dates, primary document URL) filtered by form type and date range, plus company profile fields as reported by EDGAR: entity_type, former_names, exchanges, category, fiscal_year_end, state_of_incorporation. Provide cik or ticker. Credential-free public SEC data.", + "operationId": "sec-company-submissions", "parameters": [ { - "description": "Section slug", - "enum": [ - "space", - "health", - "environment", - "humans", - "tech", - "nature", - "physics", - "this-week-in-science" - ], + "description": "SEC CIK (numeric or zero-padded)", "in": "query", - "name": "section", - "required": true, + "name": "cik", + "type": "string", + "x-example": "320193" + }, + { + "description": "Ticker symbol (alternative to cik)", + "in": "query", + "name": "ticker", + "type": "string", + "x-example": "AAPL" + }, + { + "description": "Filter by form type, e.g. 10-K, 10-Q, 8-K", + "in": "query", + "name": "form", + "type": "string", + "x-example": "10-K" + }, + { + "description": "Earliest filing date (YYYY-MM-DD)", + "in": "query", + "name": "from", + "type": "string" + }, + { + "description": "Latest filing date (YYYY-MM-DD)", + "in": "query", + "name": "to", "type": "string" + }, + { + "description": "Max filings, default 50, max 500", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -362311,7 +397957,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/sec.submissionsResponseDoc" } }, "400": { @@ -362320,6 +397966,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": { @@ -362332,16 +397990,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get ScienceAlert section headlines", + "summary": "List a company's EDGAR filings", "tags": [ - "ScienceAlert" + "SEC EDGAR" ] } }, - "/sciencealert/news": { + "/sec/filing": { "get": { - "description": "Returns fresh ScienceAlert top stories from its public RSS feed.", - "operationId": "sciencealert-news", + "consumes": [ + "application/json" + ], + "description": "Returns a single SEC filing's metadata and primary document URL. Provide accession plus cik or ticker. Credential-free public SEC data.", + "operationId": "sec-filing", + "parameters": [ + { + "description": "SEC CIK (numeric or zero-padded)", + "in": "query", + "name": "cik", + "type": "string", + "x-example": "320193" + }, + { + "description": "Ticker symbol (alternative to cik)", + "in": "query", + "name": "ticker", + "type": "string", + "x-example": "AAPL" + }, + { + "description": "Accession number", + "in": "query", + "name": "accession", + "required": true, + "type": "string", + "x-example": "0000320193-25-000079" + } + ], "produces": [ "application/json" ], @@ -362349,11 +398034,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/sec.filingResponseDoc" } }, - "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" } @@ -362370,50 +398067,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get ScienceAlert top stories", + "summary": "Get a single filing by accession number", "tags": [ - "ScienceAlert" + "SEC EDGAR" ] } }, - "/sciencealert/sections": { + "/sec/filing/sections": { "get": { - "description": "Returns the complete public top-level ScienceAlert taxonomy used by headlines.", - "operationId": "sciencealert-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get ScienceAlert sections", - "tags": [ - "ScienceAlert" - ] - } - }, - "/scmp/article": { - "get": { - "description": "Returns one public South China Morning Post article's metadata and body paragraphs from a canonical article URL. `content_locked` and `paywall_types` are the upstream's own restricted-access signals for that article, reported exactly as the site returns them; the body returned here is the same one the site's own page serves to an anonymous visitor. An article whose page genuinely withholds its body is reported as a restricted-access error instead of a hollow or truncated response.", - "operationId": "scmp-article", + "description": "Extracts item sections (e.g. 1A Risk Factors, 7 MD&A) from a 10-K/10-Q/8-K primary document as clean text. Provide accession plus cik or ticker. Credential-free public SEC data.", + "operationId": "sec-filing-sections", "parameters": [ { - "description": "Canonical SCMP article URL", + "description": "SEC CIK (numeric or zero-padded)", "in": "query", - "name": "url", + "name": "cik", + "type": "string", + "x-example": "320193" + }, + { + "description": "Ticker symbol (alternative to cik)", + "in": "query", + "name": "ticker", + "type": "string", + "x-example": "AAPL" + }, + { + "description": "Accession number", + "in": "query", + "name": "accession", "required": true, "type": "string", - "x-example": "https://www.scmp.com/news/hong-kong/society/article/3368530/example-slug" + "x-example": "0000320193-25-000079" + }, + { + "description": "Comma-separated item numbers to return, e.g. 1A,7", + "in": "query", + "name": "items", + "type": "string", + "x-example": "1A,7" + }, + { + "description": "Max characters per section, default 20000, max 200000", + "in": "query", + "name": "max_chars", + "type": "integer" } ], "produces": [ @@ -362423,7 +398124,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/scmp.articleResponseDoc" + "$ref": "#/definitions/sec.filingSectionsResponseDoc" } }, "400": { @@ -362432,20 +398133,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" } @@ -362462,24 +398157,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get an SCMP article's content", + "summary": "Extract 10-K/10-Q/8-K item sections", "tags": [ - "SCMP" + "SEC EDGAR" ] } }, - "/scmp/author": { + "/sec/financials": { "get": { - "description": "Returns one South China Morning Post author/reporter's public profile -- name, role, biography, areas of expertise, languages, location, headshot, and contact/social links -- plus their recent articles, from a canonical author URL.", - "operationId": "scmp-author", + "consumes": [ + "application/json" + ], + "description": "Returns a company's normalized financial statements across recent periods, resolving EDGAR's inconsistent XBRL tags to a stable schema. Provide cik or ticker. Credential-free public SEC data.", + "operationId": "sec-financials", "parameters": [ { - "description": "Canonical scmp.com/author/ URL", + "description": "SEC CIK (numeric or zero-padded)", "in": "query", - "name": "url", - "required": true, + "name": "cik", "type": "string", - "x-example": "https://www.scmp.com/author/matthew-cheng" + "x-example": "320193" + }, + { + "description": "Ticker symbol (alternative to cik)", + "in": "query", + "name": "ticker", + "type": "string", + "x-example": "AAPL" + }, + { + "description": "Statement, default income", + "enum": [ + "income", + "balance", + "cash_flow" + ], + "in": "query", + "name": "statement", + "type": "string" + }, + { + "description": "Period basis, default annual", + "enum": [ + "annual", + "quarterly" + ], + "in": "query", + "name": "period", + "type": "string" + }, + { + "description": "Number of periods, default 5, max 20", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -362489,7 +398220,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/scmp.authorResponseDoc" + "$ref": "#/definitions/sec.financialsResponseDoc" } }, "400": { @@ -362504,8 +398235,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -362522,114 +398253,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get an SCMP author/reporter profile", + "summary": "Normalized income statement, balance sheet, or cash flow", "tags": [ - "SCMP" + "SEC EDGAR" ] } }, - "/scmp/headlines": { + "/sec/frames": { "get": { - "description": "Returns the current article listing for one South China Morning Post section: each story's title, canonical URL, summary, byline, publication time, and lead image. Section must be a slug returned by /scmp/sections.", - "operationId": "scmp-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns every filer's reported value for one XBRL concept in one reporting period (an EDGAR \"frame\"). Credential-free public SEC data.", + "operationId": "sec-frames", "parameters": [ { - "description": "Section slug from /scmp/sections", - "enum": [ - "news", - "business", - "property", - "tech", - "lifestyle", - "culture", - "sport", - "postmag", - "style", - "this-week-in-asia", - "cooking", - "hong-kong", - "china", - "asia", - "world", - "people-culture", - "china-politics", - "china-diplomacy", - "china-economy", - "hong-kong-politics", - "hong-kong-economy", - "hong-kong-health-environment", - "hong-kong-education", - "world-us-canada", - "world-europe", - "world-middle-east", - "world-americas", - "world-africa", - "world-russia-central-asia", - "asia-australasia", - "asia-diplomacy", - "asia-east-asia", - "asia-southeast-asia", - "asia-south-asia", - "business-companies", - "business-investor-relations", - "business-global-economy", - "business-money-wealth", - "opinion-comment", - "opinion-harrys-view", - "opinion-blogs", - "opinion-polls", - "opinion-letters", - "property-hong-kong-china", - "property-international", - "tech-big-tech", - "tech-enterprises", - "tech-innovation", - "tech-leaders-founders", - "tech-science-research", - "lifestyle-fashion-beauty", - "lifestyle-travel-leisure", - "lifestyle-motoring", - "lifestyle-food-drink", - "lifestyle-health-wellness", - "lifestyle-watches", - "culture-books", - "culture-music", - "culture-film-tv", - "culture-arts", - "sport-hong-kong", - "sport-china", - "sport-golf", - "sport-racing", - "sport-rugby", - "sport-football", - "sport-tennis", - "sport-other", - "sport-boxing", - "sport-hong-kong-sevens", - "postmag-culture", - "postmag-travel", - "postmag-food-drink", - "postmag-passions", - "postmag-wellness", - "postmag-design-interiors", - "style-luxury", - "style-fashion", - "style-beauty", - "style-people", - "style-lifestyle", - "this-week-in-asia-politics", - "this-week-in-asia-geopolitics", - "this-week-in-asia-economics", - "this-week-in-asia-society", - "this-week-in-asia-opinion", - "this-week-in-asia-asia-buzz", - "this-week-in-asia-people" - ], + "description": "XBRL concept tag, e.g. Assets, Revenues", "in": "query", - "name": "section", + "name": "concept", "required": true, "type": "string", - "x-example": "hong-kong" + "x-example": "Assets" + }, + { + "description": "Reporting frame, e.g. CY2024, CY2024Q1, CY2024Q4I", + "in": "query", + "name": "period", + "required": true, + "type": "string", + "x-example": "CY2024Q4I" + }, + { + "description": "Unit of measure, default USD", + "in": "query", + "name": "unit", + "type": "string", + "x-example": "USD" + }, + { + "description": "XBRL taxonomy, default us-gaap", + "enum": [ + "dei", + "ifrs-full", + "srt", + "us-gaap" + ], + "in": "query", + "name": "taxonomy", + "type": "string" + }, + { + "description": "Max companies, default 200, max 2000", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -362639,7 +398316,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/scmp.headlinesResponseDoc" + "$ref": "#/definitions/sec.framesResponseDoc" } }, "400": { @@ -362654,8 +398331,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -362672,16 +398349,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in an SCMP section", + "summary": "Cross-company values for one XBRL concept and period", "tags": [ - "SCMP" + "SEC EDGAR" ] } }, - "/scmp/sections": { + "/sec/full-text-search": { "get": { - "description": "Lists every South China Morning Post section accepted by /scmp/headlines, with its slug, display name, feed URL, and (for a subsection) its parent section's slug and name. Values: `news`, `business`, `property`, `tech`, `lifestyle`, `culture`, `sport`, `postmag`, `style`, `this-week-in-asia`, `cooking`, `hong-kong`, `china`, `asia`, `world`, `people-culture`, `china-politics`, `china-diplomacy`, `china-economy`, `hong-kong-politics`, `hong-kong-economy`, `hong-kong-health-environment`, `hong-kong-education`, `world-us-canada`, `world-europe`, `world-middle-east`, `world-americas`, `world-africa`, `world-russia-central-asia`, `asia-australasia`, `asia-diplomacy`, `asia-east-asia`, `asia-southeast-asia`, `asia-south-asia`, `business-companies`, `business-investor-relations`, `business-global-economy`, `business-money-wealth`, `opinion-comment`, `opinion-harrys-view`, `opinion-blogs`, `opinion-polls`, `opinion-letters`, `property-hong-kong-china`, `property-international`, `tech-big-tech`, `tech-enterprises`, `tech-innovation`, `tech-leaders-founders`, `tech-science-research`, `lifestyle-fashion-beauty`, `lifestyle-travel-leisure`, `lifestyle-motoring`, `lifestyle-food-drink`, `lifestyle-health-wellness`, `lifestyle-watches`, `culture-books`, `culture-music`, `culture-film-tv`, `culture-arts`, `sport-hong-kong`, `sport-china`, `sport-golf`, `sport-racing`, `sport-rugby`, `sport-football`, `sport-tennis`, `sport-other`, `sport-boxing`, `sport-hong-kong-sevens`, `postmag-culture`, `postmag-travel`, `postmag-food-drink`, `postmag-passions`, `postmag-wellness`, `postmag-design-interiors`, `style-luxury`, `style-fashion`, `style-beauty`, `style-people`, `style-lifestyle`, `this-week-in-asia-politics`, `this-week-in-asia-geopolitics`, `this-week-in-asia-economics`, `this-week-in-asia-society`, `this-week-in-asia-opinion`, `this-week-in-asia-asia-buzz`, `this-week-in-asia-people`.", - "operationId": "scmp-sections", + "consumes": [ + "application/json" + ], + "description": "Searches the full text of SEC EDGAR filings (efts), filtered by form and date, with pagination. Credential-free public SEC data; free where incumbents gate full-text search behind paid tiers.", + "operationId": "sec-full-text-search", + "parameters": [ + { + "description": "Search query (supports quoted phrases)", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "artificial intelligence" + }, + { + "description": "Filter by form types, comma-separated", + "in": "query", + "name": "forms", + "type": "string", + "x-example": "10-K" + }, + { + "description": "Earliest filing date (YYYY-MM-DD)", + "in": "query", + "name": "from", + "type": "string" + }, + { + "description": "Latest filing date (YYYY-MM-DD)", + "in": "query", + "name": "to", + "type": "string" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -362689,11 +398404,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/scmp.sectionsResponseDoc" + "$ref": "#/definitions/sec.fullTextResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -362710,24 +398431,39 @@ "ApiKeyAuth": [] } ], - "summary": "List SCMP sections", + "summary": "Full-text search across EDGAR filings", "tags": [ - "SCMP" + "SEC EDGAR" ] } }, - "/screenrant/article": { + "/sec/insider": { "get": { - "description": "Returns public ScreenRant article metadata and body paragraphs from a canonical article URL.", - "operationId": "screenrant-article", + "consumes": [ + "application/json" + ], + "description": "Returns a company's recent insider transactions parsed from Form 3/4/5 ownership filings (owner, role, security, shares, price). Provide cik or ticker. Credential-free public SEC data.", + "operationId": "sec-insider", "parameters": [ { - "description": "Canonical ScreenRant article URL", + "description": "SEC CIK (numeric or zero-padded)", "in": "query", - "name": "url", - "required": true, + "name": "cik", "type": "string", - "x-example": "https://screenrant.com/charlie-harper-movie-review/" + "x-example": "320193" + }, + { + "description": "Ticker symbol (alternative to cik)", + "in": "query", + "name": "ticker", + "type": "string", + "x-example": "AAPL" + }, + { + "description": "Max transactions, default 10, max 30", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -362737,7 +398473,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/sec.insiderResponseDoc" } }, "400": { @@ -362752,6 +398488,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -362764,24 +398506,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get ScreenRant article content", + "summary": "Insider transactions (Forms 3/4/5)", "tags": [ - "ScreenRant" + "SEC EDGAR" ] } }, - "/screenrant/author": { + "/sec/institutional-holdings": { "get": { - "description": "Returns a ScreenRant author's byline metadata, biography, social links, and recent articles from a canonical author URL.", - "operationId": "screenrant-author", + "consumes": [ + "application/json" + ], + "description": "Returns the latest 13F-HR holdings for an institutional manager (by CIK): issuer, value, shares, sorted by value. Credential-free public SEC data.", + "operationId": "sec-institutional-holdings", "parameters": [ { - "description": "Canonical ScreenRant author URL", + "description": "Institutional manager CIK", "in": "query", - "name": "url", + "name": "cik", "required": true, "type": "string", - "x-example": "https://screenrant.com/author/liam-crowley/" + "x-example": "1067983" + }, + { + "description": "Max holdings, default 50, max 1000", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -362791,7 +398542,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.screenrantAuthorResponseDoc" + "$ref": "#/definitions/sec.holdingsResponseDoc" } }, "400": { @@ -362806,6 +398557,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -362818,61 +398575,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a ScreenRant author profile", + "summary": "Institutional holdings (13F-HR)", "tags": [ - "ScreenRant" + "SEC EDGAR" ] } }, - "/screenrant/headlines": { + "/sephora/brands": { "get": { - "description": "Returns fresh headlines from one public ScreenRant RSS section.", - "operationId": "screenrant-headlines", - "parameters": [ - { - "description": "ScreenRant RSS section slug", - "enum": [ - "movies", - "movie-news", - "movie-features", - "movie-reviews", - "movie-lists", - "movie-trailers", - "tv", - "tv-news", - "tv-features", - "tv-reviews", - "tv-lists", - "network-tv", - "reality-tv", - "reality-tv-news", - "reality-tv-features", - "reality-tv-lists", - "comics", - "comics-news", - "comics-features", - "comics-reviews", - "comics-lists", - "gaming", - "game-news", - "game-features", - "game-lists", - "game-reviews", - "anime", - "books", - "interviews", - "lists", - "videos", - "podcasts", - "exclusives", - "streaming-movies-and-tv-guide" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string" - } + "consumes": [ + "application/json" ], + "description": "Returns Sephora's full brand directory (373 brands at time of writing), sourced from the site's own A-Z brand list page. Each brand's `name` is the exact string GET /sephora/search and GET /sephora/category's repeatable `brand` filter parameter expect.", + "operationId": "sephora-brands", "produces": [ "application/json" ], @@ -362880,13 +398595,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sephora.brandsResponseDoc" } }, "429": { @@ -362907,16 +398616,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get ScreenRant section headlines", + "summary": "Sephora brand directory", "tags": [ - "ScreenRant" + "Sephora" ] } }, - "/screenrant/news": { + "/sephora/categories": { "get": { - "description": "Returns fresh ScreenRant top stories from its public RSS feed.", - "operationId": "screenrant-news", + "consumes": [ + "application/json" + ], + "description": "Returns Sephora's own live storefront category navigation (department, group, name, and slug for each), sourced from the site's own \"Shop\" mega-nav. Each entry's slug is directly usable as GET /sephora/category's own `slug` query parameter.", + "operationId": "sephora-categories", + "parameters": [ + { + "description": "Filter to one storefront department", + "enum": [ + "new", + "makeup", + "skincare", + "fragrance", + "hair", + "bath-body", + "mini-size", + "brands", + "gifts-value-sets", + "sale-offers" + ], + "in": "query", + "name": "department", + "type": "string", + "x-example": "makeup" + } + ], "produces": [ "application/json" ], @@ -362924,7 +398657,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/sephora.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -362945,16 +398684,101 @@ "ApiKeyAuth": [] } ], - "summary": "Get ScreenRant top stories", + "summary": "Sephora storefront categories", "tags": [ - "ScreenRant" + "Sephora" ] } }, - "/screenrant/sections": { + "/sephora/category": { "get": { - "description": "Returns the public ScreenRant RSS section inventory used by the headlines endpoint.", - "operationId": "screenrant-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a Sephora category/browse listing (e.g. Makeup, Skincare), with the same sort and facet filters as /sephora/search. slug is the path segment after sephora.com/shop/, e.g. makeup-cosmetics. The response uses Sephora's public catalog search to keep browse listings available when the category page's legacy embedded data is absent.", + "operationId": "sephora-category", + "parameters": [ + { + "description": "Category-page slug", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "makeup-cosmetics" + }, + { + "description": "Result page, 1-based, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Sort order, defaults to featured", + "enum": [ + "featured", + "top_rated", + "new", + "best_selling", + "price_low_to_high", + "price_high_to_low" + ], + "in": "query", + "name": "sort_by", + "type": "string", + "x-example": "featured" + }, + { + "description": "Minimum price in whole dollars; must be set together with price_max", + "in": "query", + "name": "price_min", + "type": "integer", + "x-example": 15 + }, + { + "description": "Maximum price in whole dollars; must be set together with price_min", + "in": "query", + "name": "price_max", + "type": "integer", + "x-example": 30 + }, + { + "collectionFormat": "csv", + "description": "One or more exact brand names to filter to (OR'd together); repeat the param for multiple values", + "in": "query", + "items": { + "type": "string" + }, + "name": "brand", + "type": "array", + "x-example": "Lancôme" + }, + { + "description": "Minimum star rating, 1 to 4", + "in": "query", + "name": "rating_min", + "type": "integer", + "x-example": 4 + }, + { + "description": "When true, filters to products flagged New", + "in": "query", + "name": "is_new", + "type": "boolean", + "x-example": false + }, + { + "collectionFormat": "csv", + "description": "Additional facet:value filters, repeat the param for multiple; facet must be one of: benefits, ingredientpreferences, colorfamily, formulation, size, shoppingpreferences, agerange, skintype, finish, skinconcerns, coverage, hairtype, hairconcerns, hairtexture", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "formulation:serum" + } + ], "produces": [ "application/json" ], @@ -362962,7 +398786,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/sephora.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -362983,19 +398819,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get ScreenRant RSS sections", + "summary": "Sephora category browse", "tags": [ - "ScreenRant" + "Sephora" ] } }, - "/seatgeek/categories": { + "/sephora/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns SeatGeek's full event-category tree (e.g. Sports > Baseball > MLB, Concerts, Theater), root and leaf nodes together. Each category's id is the value seatgeek-events-by-category's taxonomy_id parameter accepts.", - "operationId": "seatgeek-categories", + "description": "Returns one Sephora product's full detail (every color/shade variant with its own price and availability, rating, review count, and a sample of recent reviews), from Sephora's credential-free public JSON-LD. `product_id` is the full product-page slug, e.g. `lip-sleeping-mask-P420652` -- copy it from the path segment after sephora.com/product/ on any product page; unlike some other retailers, an arbitrary or partial slug does not resolve.", + "operationId": "sephora-product", + "parameters": [ + { + "description": "Full Sephora product-page slug", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "lip-sleeping-mask-P420652" + } + ], "produces": [ "application/json" ], @@ -363003,7 +398849,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.categoriesResponseDoc" + "$ref": "#/definitions/sephora.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -363024,19 +398882,36 @@ "ApiKeyAuth": [] } ], - "summary": "List SeatGeek's event categories", + "summary": "Sephora product detail", "tags": [ - "SeatGeek" + "Sephora" ] } }, - "/seatgeek/cities": { + "/sephora/product/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns SeatGeek's own curated \"browse by city\" directory (87 metro areas as of 2026-09-15): id, name, state, country, coordinates, and which verticals (concerts/sports/theater) it supports. Each city's lat/lon pairs directly with GET /seatgeek/events-near.", - "operationId": "seatgeek-cities", + "description": "Returns one page of a Sephora product's customer Q&A: each question plus every answer it received (text, author, whether it's a brand answer, helpful votes). product_id is the Sephora productGroupID, e.g. P420652 -- the same value /sephora/product returns as product_group_id.", + "operationId": "sephora-product-questions", + "parameters": [ + { + "description": "Sephora productGroupID", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "P420652" + }, + { + "description": "Result page, 1-based, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], "produces": [ "application/json" ], @@ -363044,7 +398919,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.citiesResponseDoc" + "$ref": "#/definitions/sephora.productQuestionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -363065,27 +398946,34 @@ "ApiKeyAuth": [] } ], - "summary": "List SeatGeek's curated metro areas", + "summary": "Sephora product questions and answers", "tags": [ - "SeatGeek" + "Sephora" ] } }, - "/seatgeek/event": { + "/sephora/product/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one SeatGeek event's full detail: title, timing, venue, performers, category taxonomy, and SeatGeek's own live secondary-market pricing snapshot (listing/ticket counts, average/median/lowest/highest price). id is SeatGeek's own numeric event id, obtained from a search or performer-events result. Pricing is an aggregate snapshot only -- no per-seat listing rows and no checkout/purchase flow.", - "operationId": "seatgeek-event", + "description": "Returns one page of a Sephora product's full customer reviews (title, body, rating, author, helpful votes, secondary ratings, photos), plus the product's site-wide rating rollup (average rating, recommended ratio, star-count histogram). product_id is the Sephora productGroupID, e.g. P420652 -- the same value /sephora/product returns as product_group_id.", + "operationId": "sephora-product-reviews", "parameters": [ { - "description": "SeatGeek's own numeric event id", + "description": "Sephora productGroupID", "in": "query", - "name": "id", + "name": "product_id", "required": true, + "type": "string", + "x-example": "P420652" + }, + { + "description": "Result page, 1-based, defaults to 1", + "in": "query", + "name": "page", "type": "integer", - "x-example": 17695775 + "x-example": 1 } ], "produces": [ @@ -363095,7 +398983,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.eventResponseDoc" + "$ref": "#/definitions/sephora.productReviewsResponseDoc" } }, "400": { @@ -363104,12 +398992,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -363128,41 +399010,106 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SeatGeek event's detail", + "summary": "Sephora product reviews", "tags": [ - "SeatGeek" + "Sephora" ] } }, - "/seatgeek/events-by-category": { + "/sephora/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of SeatGeek events under a category/taxonomy, soonest first. taxonomy_id is a SeatGeek category id from GET /seatgeek/categories, e.g. 1010100 for MLB.", - "operationId": "seatgeek-events-by-category", + "description": "Searches Sephora's product catalog by keyword, with real page-based pagination. Returns normalized products with brand, pricing, rating, and review count. Sephora's own search never returns a genuine zero-result state for a nonempty keyword -- an unrecognized/nonsense keyword still returns a full, unrelated fallback result set rather than an empty one. price_min/price_max must be provided together (whole dollars) -- upstream silently ignores a one-sided price range rather than filtering or erroring, so this endpoint rejects a one-sided range as invalid instead of passing it through. brand and filter each accept multiple values (OR'd together within the same facet); brand/rating_min/is_new/filter/price_min/price_max can all be combined with each other (AND'd together across different facets).", + "operationId": "sephora-search", "parameters": [ { - "description": "A SeatGeek taxonomy id from GET /seatgeek/categories", + "description": "Search keyword", "in": "query", - "name": "taxonomy_id", + "name": "query", "required": true, - "type": "integer", - "x-example": 1010100 + "type": "string", + "x-example": "mascara" }, { - "default": 1, - "description": "1-based page number", + "description": "Result page, 1-based, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "default": 25, - "description": "Results per page, 1-50", + "description": "Results per page, 1 to 100, defaults to 60", "in": "query", - "name": "per_page", - "type": "integer" + "name": "page_size", + "type": "integer", + "x-example": 60 + }, + { + "description": "Sort order, defaults to featured", + "enum": [ + "featured", + "top_rated", + "new", + "best_selling", + "price_low_to_high", + "price_high_to_low" + ], + "in": "query", + "name": "sort_by", + "type": "string", + "x-example": "featured" + }, + { + "description": "Minimum price in whole dollars; must be set together with price_max", + "in": "query", + "name": "price_min", + "type": "integer", + "x-example": 15 + }, + { + "description": "Maximum price in whole dollars; must be set together with price_min", + "in": "query", + "name": "price_max", + "type": "integer", + "x-example": 30 + }, + { + "collectionFormat": "csv", + "description": "One or more exact brand names to filter to (OR'd together); repeat the param for multiple values", + "in": "query", + "items": { + "type": "string" + }, + "name": "brand", + "type": "array", + "x-example": "Lancôme" + }, + { + "description": "Minimum star rating, 1 to 4", + "in": "query", + "name": "rating_min", + "type": "integer", + "x-example": 4 + }, + { + "description": "When true, filters to products flagged New", + "in": "query", + "name": "is_new", + "type": "boolean", + "x-example": false + }, + { + "collectionFormat": "csv", + "description": "Additional facet:value filters, repeat the param for multiple; facet must be one of: benefits, ingredientpreferences, colorfamily, formulation, size, shoppingpreferences, agerange, skintype, finish, skinconcerns, coverage, hairtype, hairconcerns, hairtexture", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "formulation:serum" } ], "produces": [ @@ -363172,7 +399119,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.eventsByCategoryResponseDoc" + "$ref": "#/definitions/sephora.searchResponseDoc" } }, "400": { @@ -363199,49 +399146,49 @@ "ApiKeyAuth": [] } ], - "summary": "Browse SeatGeek events by category", + "summary": "Sephora product search", "tags": [ - "SeatGeek" + "Sephora" ] } }, - "/seatgeek/events-near": { + "/sephora/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of SeatGeek events near a coordinate, soonest first -- the same call its city pages and homepage location-based sections make. Pair with GET /seatgeek/cities for a curated list of coordinates, or pass any coordinate directly.", - "operationId": "seatgeek-events-near", + "description": "Returns Sephora physical store locations near a coordinate (address, hours, BOPIS/curbside/same-day flags). Renders through a JS-executing browser backend, unlike every other Sephora endpoint -- the store-locator data call itself is plain HTTP, but it requires a per-visit access token minted by an endpoint gated behind a bot-management JS challenge, so responses may take longer.", + "operationId": "sephora-stores", "parameters": [ { - "description": "Latitude", + "description": "Latitude, -90 to 90", "in": "query", - "name": "lat", + "name": "latitude", "required": true, "type": "number", - "x-example": 35.08794 + "x-example": 41.88325 }, { - "description": "Longitude", + "description": "Longitude, -180 to 180", "in": "query", - "name": "lon", + "name": "longitude", "required": true, "type": "number", - "x-example": -106.6357 + "x-example": -87.6323879 }, { - "default": 1, - "description": "1-based page number", + "description": "Search radius in miles, 1 to 500, defaults to 50", "in": "query", - "name": "page", - "type": "integer" + "name": "radius", + "type": "integer", + "x-example": 50 }, { - "default": 25, - "description": "Results per page, 1-50", + "description": "Max stores to return, 1 to 50, defaults to 10", "in": "query", - "name": "per_page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -363251,7 +399198,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.eventsNearResponseDoc" + "$ref": "#/definitions/sephora.storesResponseDoc" } }, "400": { @@ -363278,27 +399225,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse SeatGeek events near a coordinate", + "summary": "Sephora store locator", "tags": [ - "SeatGeek" + "Sephora" ] } }, - "/seatgeek/performer": { + "/sephora/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns one SeatGeek performer's (sports team, artist, or show) full detail by direct id lookup: name, type, image, popularity, home venue id, upcoming-event counts, and category taxonomy. id is SeatGeek's own numeric performer id, obtained from a search result. Use this when you already have a bare performer id and want to skip a search round-trip; seatgeek-search returns the same fields for a query.", - "operationId": "seatgeek-performer", + "description": "Returns Sephora's own search-box type-ahead suggestions for a partial keyword: keyword-completion terms, matching products, and trending/related categories. Sephora's own upstream never returns a genuine zero-result state for a nonempty query -- a deliberately nonsense query still returns unrelated product suggestions.", + "operationId": "sephora-suggest", "parameters": [ { - "description": "SeatGeek's own numeric performer id", + "description": "Partial search keywords", "in": "query", - "name": "id", + "name": "query", "required": true, - "type": "integer", - "x-example": 1 + "type": "string", + "x-example": "masc" } ], "produces": [ @@ -363308,7 +399255,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.performerResponseDoc" + "$ref": "#/definitions/sephora.suggestResponseDoc" } }, "400": { @@ -363317,12 +399264,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -363341,41 +399282,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SeatGeek performer's detail", + "summary": "Sephora search suggestions", "tags": [ - "SeatGeek" + "Sephora" ] } }, - "/seatgeek/performer-events": { + "/sevennewsau/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a SeatGeek performer's (sports team, artist, or show) upcoming event schedule, soonest first. performer_id is SeatGeek's own numeric performer id, obtained from a search result (e.g. 1 for the Los Angeles Dodgers).", - "operationId": "seatgeek-performer-events", + "description": "Returns public 7NEWS article metadata and body paragraphs from a canonical 7news.com.au article URL. 7NEWS articles are free to read; a non-free content tier, if one ever appears, is flagged as paywalled.", + "operationId": "sevennewsau-article", "parameters": [ { - "description": "SeatGeek's own numeric performer id", + "description": "Canonical 7NEWS article URL", "in": "query", - "name": "performer_id", + "name": "url", "required": true, - "type": "integer", - "x-example": 1 - }, - { - "default": 1, - "description": "1-based page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 25, - "description": "Results per page, 1-50", - "in": "query", - "name": "per_page", - "type": "integer" + "type": "string", + "x-example": "https://7news.com.au/news/world/susan-sarandon-and-hannah-einbinder-arrested-at-nyc-protests-against-benjamin-netanyahus-un-address-c-22923759" } ], "produces": [ @@ -363385,7 +399309,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.performerEventsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -363394,8 +399318,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -363412,34 +399336,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SeatGeek performer's event schedule", + "summary": "Get 7NEWS Australia article content", "tags": [ - "SeatGeek" + "7NEWS Australia" ] } }, - "/seatgeek/search": { + "/sevennewsau/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Free-text search across SeatGeek's own catalog of events, performers (sports teams, artists, and shows), and venues -- the same call the site's own search box and search-results page use. Any of the three result lists may come back empty for a query with no matches in that type.", - "operationId": "seatgeek-search", + "description": "Returns one 7NEWS journalist's public profile: name, job title, biography, portrait, public social links and the latest stories listed on the profile page.", + "operationId": "sevennewsau-author", "parameters": [ { - "description": "Free-text search query", + "description": "Author slug, e.g. aimee-edwards", "in": "query", - "name": "q", - "required": true, + "name": "slug", "type": "string", - "x-example": "dodgers" + "x-example": "aimee-edwards" }, { - "default": 10, - "description": "Maximum results per result type (events/performers/venues), 1-50", + "description": "Canonical 7news.com.au/profile/ URL; alternative to slug", "in": "query", - "name": "limit", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://7news.com.au/profile/aimee-edwards" } ], "produces": [ @@ -363449,7 +399369,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.searchResponseDoc" + "$ref": "#/definitions/publicnews.sevennewsauAuthorResponseDoc" } }, "400": { @@ -363458,8 +399378,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -363476,35 +399396,135 @@ "ApiKeyAuth": [] } ], - "summary": "Search SeatGeek events, performers, and venues", + "summary": "Get a 7NEWS Australia author profile", "tags": [ - "SeatGeek" + "7NEWS Australia" ] } }, - "/seatgeek/trending": { + "/sevennewsau/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns SeatGeek's own geo-personalized \"trending near you\" event feed for a coordinate -- the same list its homepage renders.", - "operationId": "seatgeek-trending", + "description": "Returns fresh 7NEWS headlines from one public topic feed (the 100 most recent stories tagged with that topic).", + "operationId": "sevennewsau-headlines", "parameters": [ { - "description": "Latitude", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.7128 - }, - { - "description": "Longitude", + "description": "7NEWS topic slug (the site path with slashes replaced by hyphens)", + "enum": [ + "7you", + "7you-beauty", + "7you-books", + "7you-fashion", + "7you-health-fitness", + "7you-home", + "7you-tech", + "7you-travel", + "business", + "business-economy", + "business-energy", + "business-property", + "business-retail", + "entertainment", + "entertainment-australian-idol", + "entertainment-celebrity", + "entertainment-farmer-wants-a-wife", + "entertainment-home-and-away", + "entertainment-movies", + "entertainment-music", + "entertainment-my-kitchen-rules", + "entertainment-the-voice-australia", + "entertainment-tv", + "lifestyle", + "lifestyle-fashion", + "lifestyle-food", + "lifestyle-health-wellbeing", + "lifestyle-parenting", + "lifestyle-personal-finance", + "lifestyle-pets", + "lifestyle-real-estate", + "lifestyle-recipes", + "lifestyle-relationships", + "lifestyle-shopping", + "lifestyle-sponsored", + "motoring", + "news", + "news-act", + "news-adelaide", + "news-asia", + "news-australia", + "news-brisbane", + "news-canberra", + "news-conflict", + "news-crime", + "news-darwin", + "news-disaster-and-emergency", + "news-education", + "news-europe", + "news-gold-coast", + "news-hobart", + "news-israel", + "news-melbourne", + "news-middle-east", + "news-missing-person", + "news-new-zealand", + "news-newcastle", + "news-nsw", + "news-nsw-police", + "news-nt", + "news-perth", + "news-protest", + "news-qld", + "news-russia", + "news-sa", + "news-sydney", + "news-ukraine", + "news-united-states", + "news-vic", + "news-wa", + "news-weather", + "news-world", + "opinion", + "politics", + "politics-federal-politics", + "politics-state-politics", + "sport", + "sport-afl", + "sport-aflw", + "sport-baseball", + "sport-basketball", + "sport-boxing", + "sport-cricket", + "sport-cycling", + "sport-f1", + "sport-golf", + "sport-horse-racing", + "sport-mixed-martial-arts", + "sport-motorsport", + "sport-netball", + "sport-nfl", + "sport-olympics", + "sport-rugby-league", + "sport-rugby-union", + "sport-soccer", + "sport-supercars", + "sport-tennis", + "sport-ufc", + "spotlight", + "sunrise", + "sunrise-cooking", + "sunrise-cooking-with-coles", + "sunrise-entertainment", + "technology", + "technology-gaming", + "the-morning-show", + "travel", + "travel-jetstar", + "travel-qantas" + ], "in": "query", - "name": "lon", + "name": "section", "required": true, - "type": "number", - "x-example": -74.006 + "type": "string", + "x-example": "7you" } ], "produces": [ @@ -363514,7 +399534,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.trendingResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -363523,12 +399543,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -363541,29 +399555,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get SeatGeek's trending-near-you events", + "summary": "Get 7NEWS Australia section headlines", "tags": [ - "SeatGeek" + "7NEWS Australia" ] } }, - "/seatgeek/venue": { + "/sevennewsau/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one SeatGeek venue's full detail: address, city/state/country, timezone, capacity, coordinates, and upcoming-event counts. id is SeatGeek's own numeric venue id, obtained from a search or event result.", - "operationId": "seatgeek-venue", - "parameters": [ - { - "description": "SeatGeek's own numeric venue id", - "in": "query", - "name": "id", - "required": true, - "type": "integer", - "x-example": 1 - } - ], + "description": "Returns fresh 7NEWS (7news.com.au) top stories from the public site-wide news feed.", + "operationId": "sevennewsau-news", "produces": [ "application/json" ], @@ -363571,19 +399572,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.venueResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -363604,43 +399593,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SeatGeek venue's detail", + "summary": "Get 7NEWS Australia top stories", "tags": [ - "SeatGeek" + "7NEWS Australia" ] } }, - "/seatgeek/venue-events": { + "/sevennewsau/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a SeatGeek venue's upcoming event schedule, soonest first. venue_id is SeatGeek's own numeric venue id, obtained from a search or event result (e.g. 1 for UNIQLO Field at Dodger Stadium).", - "operationId": "seatgeek-venue-events", - "parameters": [ - { - "description": "SeatGeek's own numeric venue id", - "in": "query", - "name": "venue_id", - "required": true, - "type": "integer", - "x-example": 1 - }, - { - "default": 1, - "description": "1-based page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 25, - "description": "Results per page, 1-50", - "in": "query", - "name": "per_page", - "type": "integer" - } - ], + "description": "Returns the public 7NEWS topic feed inventory accepted by the headlines endpoint: national and city news, sport, politics, business, entertainment, lifestyle and more.", + "operationId": "sevennewsau-sections", "produces": [ "application/json" ], @@ -363648,13 +399610,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/seatgeek.venueEventsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -363675,24 +399631,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SeatGeek venue's event schedule", + "summary": "Get 7NEWS Australia sections", "tags": [ - "SeatGeek" + "7NEWS Australia" ] } }, - "/seattletimes/article": { + "/sfgate/article": { "get": { - "description": "Returns public Seattle Times story metadata and body paragraphs from a canonical story URL. The site's metered paywall is a client-side overlay: anonymous requests receive the full body, which is returned as-is.", - "operationId": "seattletimes-article", + "description": "Returns public SFGATE article metadata and body paragraphs from a canonical article URL. Article pages are served through proxied browser renderers; the service does not bypass authentication or access controls, and marks paywalled=true when only a teaser is public.", + "operationId": "sfgate-article", "parameters": [ { - "description": "Canonical Seattle Times story URL", + "description": "Canonical SFGate article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.seattletimes.com/seattle-news/transportation/sound-transit-ceo-claims-his-30k-bonus-and-wins-a-pay-raise/" + "x-example": "https://www.sfgate.com/bayarea/article/example-story-22400001.php" } ], "produces": [ @@ -363729,30 +399685,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Seattle Times article content", + "summary": "Get SFGate article content", "tags": [ - "Seattle Times" + "SFGate" ] } }, - "/seattletimes/author": { + "/sfgate/author": { "get": { - "description": "Returns one Seattle Times author's public profile: name, bio, newsroom-published email and X/Twitter link when listed, and their most recent stories.", - "operationId": "seattletimes-author", + "description": "Returns an SFGATE author's name, job title, biography, headshot, public profile links, and recent articles from a canonical author URL. Author pages are served through proxied browser renderers; the service does not bypass authentication or access controls.", + "operationId": "sfgate-author", "parameters": [ { - "description": "Author slug, e.g. mike-lindblom", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "mike-lindblom" - }, - { - "description": "Canonical seattletimes.com/author// URL; alternative to slug", + "description": "Canonical SFGate author URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.seattletimes.com/author/mike-lindblom/" + "x-example": "https://www.sfgate.com/author/example-writer/" } ], "produces": [ @@ -363762,7 +399712,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.seattleTimesAuthorResponseDoc" + "$ref": "#/definitions/publicnews.sfgateAuthorResponseDoc" } }, "400": { @@ -363789,123 +399739,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Seattle Times author profile", + "summary": "Get an SFGate author profile", "tags": [ - "Seattle Times" + "SFGate" ] } }, - "/seattletimes/headlines": { + "/sfgate/headlines": { "get": { - "description": "Returns fresh headlines from one public Seattle Times section feed.", - "operationId": "seattletimes-headlines", + "description": "Returns fresh headlines from one SFGATE public RSS feed.", + "operationId": "sfgate-headlines", "parameters": [ { - "description": "Seattle Times section slug", + "description": "SFGate section slug", "enum": [ - "seattle-news", - "law-justice", - "politics", - "transportation", - "climate-lab", - "environment", - "weather", - "health", - "data", - "homeless", - "education-lab", - "education", - "times-watchdog", - "mental-health", - "eastside", - "puget-sound", - "business", - "boeing-aerospace", - "real-estate", - "amazon", - "technology", - "microsoft", - "alaska-airlines", - "costco", - "economy", - "starbucks", - "retail", - "nation-world", - "nation", - "world", - "nation-politics", - "oddities", - "sports", - "seahawks", - "mariners", - "uw-huskies", - "wsu-cougars", - "storm", - "kraken", - "sounders", - "reign", - "torrent", - "high-school", + "top-news", + "bay-area", + "business-technology", "entertainment", - "music", - "movies", - "books", - "tv", - "theater", - "visual-arts", - "classical-music", - "local-media", - "events", - "life", - "food-drink", + "celebrity", + "food-dining", "travel", - "outdoors", - "wellness", - "lifestyle", - "fashion", - "rant-and-rave", - "op-eds", - "opinion", - "editorials", - "letters-to-the-editor", - "pacific-nw-magazine", - "photo-video", - "video", - "photography", - "at-home", - "marijuana", - "northwest", - "obituaries", - "science", - "special-reports", - "agriculture", - "local-business", - "markets", - "auto-racing", - "college", - "wsu-cougar-basketball", - "wsu-cougar-football", - "golf", - "gonzaga-bulldogs", - "hockey", - "horse-racing", - "uw-husky-basketball", - "nba", - "ncaa-tournament", - "pac-12", - "seattle-university", - "snow-sports", - "world-cup", - "dance", - "video-games", - "fitness", - "garden", - "home-decor" + "routes", + "top-sports", + "giants", + "49ers", + "warriors" ], "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "top-news" } ], "produces": [ @@ -363936,16 +399801,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Seattle Times section headlines", + "summary": "Get SFGate section headlines", "tags": [ - "Seattle Times" + "SFGate" ] } }, - "/seattletimes/news": { + "/sfgate/news": { "get": { - "description": "Returns fresh Seattle Times stories from the public site-wide RSS feed.", - "operationId": "seattletimes-news", + "description": "Returns fresh SFGATE stories from its public \"Top News Stories\" RSS feed.", + "operationId": "sfgate-news", "produces": [ "application/json" ], @@ -363956,6 +399821,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363968,16 +399839,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Seattle Times top stories", + "summary": "Get SFGate top stories", "tags": [ - "Seattle Times" + "SFGate" ] } }, - "/seattletimes/sections": { + "/sfgate/sections": { "get": { - "description": "Returns the public Seattle Times section inventory: every category in the site's navigation and RSS feed list that publishes a live feed.", - "operationId": "seattletimes-sections", + "description": "Returns the SFGATE feed inventory (Top News, Bay Area, Business and Technology, Entertainment, Celebrity, Food and Dining, Travel, Routes, Top Sports, Giants, 49ers, Warriors), each linking to its public RSS feed.", + "operationId": "sfgate-sections", "produces": [ "application/json" ], @@ -363994,81 +399865,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Seattle Times sections", + "summary": "Get SFGate sections", "tags": [ - "Seattle Times" + "SFGate" ] } }, - "/sec/company/intelligence": { + "/shakeshack/locations": { "get": { "consumes": [ "application/json" ], - "description": "Aggregates a company's profile, a latest-annual financial snapshot, the latest 10-K/10-Q/8-K, and recent material events into one call. Provide cik or ticker. Optionally fuse live cross-source data with enrich (a comma list of market, news, hiring): market and news are keyed on the ticker; hiring needs ats plus that ATS's careers slug (or tenant/datacenter/site for Workday). Enrichment is best-effort — requested-but-unavailable sources are listed under degraded and never fail the SEC-native response. Credential-free public data.", - "operationId": "sec-company-intelligence", + "description": "Returns one page of Shake Shack's store index, parsed off the single, fully server-rendered /locations page. That page carries two independent sections: an interactive map (coordinates, no structured address) and an accessible \"Full List of Locations\" text index (structured address, no coordinates). Each entry's source field says which section it came from -- \"map\" or \"list\" -- not a business classification; both round-trip through GET /shakeshack/store by path, which always returns full structured address and coordinates regardless of source.", + "operationId": "shakeshack-locations", "parameters": [ { - "description": "SEC CIK (numeric or zero-padded)", - "in": "query", - "name": "cik", - "type": "string", - "x-example": "320193" - }, - { - "description": "Ticker symbol (alternative to cik)", - "in": "query", - "name": "ticker", - "type": "string", - "x-example": "AAPL" - }, - { - "description": "Comma list of cross-source enrichments", - "enum": [ - "market", - "news", - "hiring" - ], - "in": "query", - "name": "enrich", - "type": "string" - }, - { - "description": "ATS provider for hiring enrichment", - "enum": [ - "greenhouse", - "lever", - "ashby", - "workday", - "smartrecruiters" - ], - "in": "query", - "name": "ats", - "type": "string" - }, - { - "description": "Careers board slug for hiring (greenhouse/lever/ashby/smartrecruiters)", - "in": "query", - "name": "careers_slug", - "type": "string" - }, - { - "description": "Workday tenant (hiring, when ats=workday)", - "in": "query", - "name": "tenant", - "type": "string" - }, - { - "description": "Workday datacenter shard (hiring, when ats=workday)", + "description": "1-based page (default 1)", "in": "query", - "name": "datacenter", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Workday career site (hiring, when ats=workday)", + "description": "Entries per page, 1-500 (default 100)", "in": "query", - "name": "site", - "type": "string" + "name": "page_size", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -364078,7 +399901,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.intelligenceResponseDoc" + "$ref": "#/definitions/shakeshack.locationsResponseDoc" } }, "400": { @@ -364093,8 +399916,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -364111,33 +399934,27 @@ "ApiKeyAuth": [] } ], - "summary": "Company 360 overview from SEC data", + "summary": "Browse Shake Shack's store index", "tags": [ - "SEC EDGAR" + "Shake Shack" ] } }, - "/sec/company/search": { + "/shakeshack/menu": { "get": { "consumes": [ "application/json" ], - "description": "Resolves a ticker symbol or company-name query to SEC EDGAR companies (CIK, ticker, name) using the official company_tickers map. Credential-free public SEC data.", - "operationId": "sec-company-search", + "description": "Returns one Shake Shack location's full menu as a category tree: every category and its products, with name, description, base calories, allergens, a promotional/dietary badge when published (e.g. \"LIMITED TIME ONLY\", \"VEGETARIAN\"), image, and a full customization tree (size, additions, removals, allergen flags), each choice carrying its own price and calorie delta. location_id comes from GET /shakeshack/nearby. Many items, most notably burgers, price entirely through a required size selection rather than a base price, so price is commonly 0 for those items -- the real price lives on the size modifier's own choices.", + "operationId": "shakeshack-menu", "parameters": [ { - "description": "Ticker symbol or company name", + "description": "Location id from /shakeshack/nearby", "in": "query", - "name": "q", + "name": "location_id", "required": true, - "type": "string", - "x-example": "apple" - }, - { - "description": "Max matches, default 10, max 100", - "in": "query", - "name": "limit", - "type": "integer" + "type": "integer", + "x-example": 14992 } ], "produces": [ @@ -364147,7 +399964,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.companySearchResponseDoc" + "$ref": "#/definitions/shakeshack.menuResponseDoc" } }, "400": { @@ -364156,8 +399973,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" } @@ -364174,58 +399997,49 @@ "ApiKeyAuth": [] } ], - "summary": "Resolve a ticker or company name to EDGAR companies", + "summary": "Get one Shake Shack location's full menu", "tags": [ - "SEC EDGAR" + "Shake Shack" ] } }, - "/sec/company/submissions": { + "/shakeshack/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns a company's recent SEC filings (form, dates, primary document URL) filtered by form type and date range, plus company profile fields as reported by EDGAR: entity_type, former_names, exchanges, category, fiscal_year_end, state_of_incorporation. Provide cik or ticker. Credential-free public SEC data.", - "operationId": "sec-company-submissions", + "description": "Returns Shake Shack locations within a radius of a coordinate, nearest first, using Shake Shack's own Olo-backed ordering API (a separate source from GET /shakeshack/locations, which reads the main site's store directory instead). Each result carries location_id, real-time weekly hours, which fulfillment modes are currently enabled (dine-in, pickup, delivery, curbside, drive-thru, walk-up, drive-up), and Shake Shack's own delivery fee schedule. Pass location_id to GET /shakeshack/menu for that location's full menu.", + "operationId": "shakeshack-nearby", "parameters": [ { - "description": "SEC CIK (numeric or zero-padded)", - "in": "query", - "name": "cik", - "type": "string", - "x-example": "320193" - }, - { - "description": "Ticker symbol (alternative to cik)", - "in": "query", - "name": "ticker", - "type": "string", - "x-example": "AAPL" - }, - { - "description": "Filter by form type, e.g. 10-K, 10-Q, 8-K", + "description": "Search center latitude", "in": "query", - "name": "form", - "type": "string", - "x-example": "10-K" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.758 }, { - "description": "Earliest filing date (YYYY-MM-DD)", + "description": "Search center longitude", "in": "query", - "name": "from", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -73.9855 }, { - "description": "Latest filing date (YYYY-MM-DD)", + "description": "Search radius in miles, 1-50 (default 15)", "in": "query", - "name": "to", - "type": "string" + "name": "radius", + "type": "integer", + "x-example": 15 }, { - "description": "Max filings, default 50, max 500", + "description": "Maximum locations to return, 1-50 (default 10)", "in": "query", "name": "limit", - "type": "integer" + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -364235,7 +400049,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.submissionsResponseDoc" + "$ref": "#/definitions/shakeshack.nearbyResponseDoc" } }, "400": { @@ -364244,14 +400058,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" } @@ -364268,41 +400076,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's EDGAR filings", + "summary": "Find Shake Shack locations near a coordinate", "tags": [ - "SEC EDGAR" + "Shake Shack" ] } }, - "/sec/filing": { + "/shakeshack/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single SEC filing's metadata and primary document URL. Provide accession plus cik or ticker. Credential-free public SEC data.", - "operationId": "sec-filing", + "description": "Returns one Shake Shack store: postal address, coordinates, phone (when published), a Monday-first week of opening hours (omitted for a location that publishes no schedule, seen on venue/kiosk-shaped locations such as inside a stadium), and the order types Shake Shack publishes for it, e.g. \"Dine In\", \"Delivery\". Store paths come from GET /shakeshack/locations, either the aliased \"location/\" form or the legacy \"node/\" form -- both resolve to the same record, and the response's own path field always reports the canonical alias. A path with neither shape, or one that does not resolve to a real store page, returns a 404.", + "operationId": "shakeshack-store", "parameters": [ { - "description": "SEC CIK (numeric or zero-padded)", - "in": "query", - "name": "cik", - "type": "string", - "x-example": "320193" - }, - { - "description": "Ticker symbol (alternative to cik)", - "in": "query", - "name": "ticker", - "type": "string", - "x-example": "AAPL" - }, - { - "description": "Accession number", + "description": "Store path from a /shakeshack/locations entry", "in": "query", - "name": "accession", + "name": "path", "required": true, "type": "string", - "x-example": "0000320193-25-000079" + "x-example": "location/meyerland-tx" } ], "produces": [ @@ -364312,7 +400106,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.filingResponseDoc" + "$ref": "#/definitions/shakeshack.storeResponseDoc" } }, "400": { @@ -364327,8 +400121,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -364345,54 +400139,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single filing by accession number", + "summary": "Get one Shake Shack store's detail", "tags": [ - "SEC EDGAR" + "Shake Shack" ] } }, - "/sec/filing/sections": { + "/shein/category/filters": { "get": { "consumes": [ "application/json" ], - "description": "Extracts item sections (e.g. 1A Risk Factors, 7 MD&A) from a 10-K/10-Q/8-K primary document as clean text. Provide accession plus cik or ticker. Credential-free public SEC data.", - "operationId": "sec-filing-sections", + "description": "Returns the filter facets (sizes, colors, materials, …) and price range for a SHEIN category.", + "operationId": "shein-category-filters", "parameters": [ { - "description": "SEC CIK (numeric or zero-padded)", - "in": "query", - "name": "cik", - "type": "string", - "x-example": "320193" - }, - { - "description": "Ticker symbol (alternative to cik)", - "in": "query", - "name": "ticker", - "type": "string", - "x-example": "AAPL" - }, - { - "description": "Accession number", + "description": "Numeric SHEIN category id", "in": "query", - "name": "accession", + "name": "cat_id", "required": true, "type": "string", - "x-example": "0000320193-25-000079" - }, - { - "description": "Comma-separated item numbers to return, e.g. 1A,7", - "in": "query", - "name": "items", - "type": "string", - "x-example": "1A,7" - }, - { - "description": "Max characters per section, default 20000, max 200000", - "in": "query", - "name": "max_chars", - "type": "integer" + "x-example": "1766" } ], "produces": [ @@ -364402,7 +400169,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.filingSectionsResponseDoc" + "$ref": "#/definitions/shein.categoryFiltersResponseDoc" } }, "400": { @@ -364411,12 +400178,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -364435,60 +400196,48 @@ "ApiKeyAuth": [] } ], - "summary": "Extract 10-K/10-Q/8-K item sections", + "summary": "SHEIN category filter facets", "tags": [ - "SEC EDGAR" + "SHEIN" ] } }, - "/sec/financials": { + "/shein/category/goods": { "get": { "consumes": [ "application/json" ], - "description": "Returns a company's normalized financial statements across recent periods, resolving EDGAR's inconsistent XBRL tags to a stable schema. Provide cik or ticker. Credential-free public SEC data.", - "operationId": "sec-financials", + "description": "Returns SHEIN's product listing for a category, with the same normalized product-card fields as product search.", + "operationId": "shein-category-goods", "parameters": [ { - "description": "SEC CIK (numeric or zero-padded)", - "in": "query", - "name": "cik", - "type": "string", - "x-example": "320193" - }, - { - "description": "Ticker symbol (alternative to cik)", + "description": "Numeric SHEIN category id", "in": "query", - "name": "ticker", + "name": "cat_id", + "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "1727" }, { - "description": "Statement, default income", - "enum": [ - "income", - "balance", - "cash_flow" - ], + "description": "1-based page number", "in": "query", - "name": "statement", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Period basis, default annual", - "enum": [ - "annual", - "quarterly" - ], + "description": "Results per page", "in": "query", - "name": "period", - "type": "string" + "name": "page_size", + "type": "integer", + "x-example": 20 }, { - "description": "Number of periods, default 5, max 20", + "description": "SHEIN sort code: a non-negative integer. `0` is the default (recommended). Other codes are accepted and forwarded as-is; the full code-to-meaning mapping has not been live-verified yet (see the endpoint markdown), so callers relying on a specific ordering should confirm behavior empirically.", "in": "query", - "name": "limit", - "type": "integer" + "name": "sort", + "type": "string", + "x-example": "0" } ], "produces": [ @@ -364498,7 +400247,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.financialsResponseDoc" + "$ref": "#/definitions/shein.categoryGoodsResponseDoc" } }, "400": { @@ -364507,12 +400256,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -364531,60 +400274,91 @@ "ApiKeyAuth": [] } ], - "summary": "Normalized income statement, balance sheet, or cash flow", + "summary": "SHEIN category product listing", "tags": [ - "SEC EDGAR" + "SHEIN" ] } }, - "/sec/frames": { + "/shein/category/nav": { "get": { "consumes": [ "application/json" ], - "description": "Returns every filer's reported value for one XBRL concept in one reporting period (an EDGAR \"frame\"). Credential-free public SEC data.", - "operationId": "sec-frames", + "description": "Returns the subcategory navigation tabs for a SHEIN category, each with a representative product.", + "operationId": "shein-category-nav", "parameters": [ { - "description": "XBRL concept tag, e.g. Assets, Revenues", + "description": "Numeric SHEIN category id", "in": "query", - "name": "concept", + "name": "cat_id", "required": true, "type": "string", - "x-example": "Assets" + "x-example": "1766" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shein.categoryNavResponseDoc" + } }, + "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": [ { - "description": "Reporting frame, e.g. CY2024, CY2024Q1, CY2024Q4I", + "ApiKeyAuth": [] + } + ], + "summary": "SHEIN category nav tabs", + "tags": [ + "SHEIN" + ] + } + }, + "/shein/products/aggregation-filters": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Returns the selectable category/brand/size/color filter facets and price range for a SHEIN search query.", + "operationId": "shein-products-aggregation-filters", + "parameters": [ + { + "description": "Free-text search query", "in": "query", - "name": "period", + "name": "keyword", "required": true, "type": "string", - "x-example": "CY2024Q4I" + "x-example": "dress" }, { - "description": "Unit of measure, default USD", + "description": "Numeric SHEIN category id, narrows the facets", "in": "query", - "name": "unit", + "name": "cat_id", "type": "string", - "x-example": "USD" - }, - { - "description": "XBRL taxonomy, default us-gaap", - "enum": [ - "dei", - "ifrs-full", - "srt", - "us-gaap" - ], - "in": "query", - "name": "taxonomy", - "type": "string" - }, - { - "description": "Max companies, default 200, max 2000", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "12476" } ], "produces": [ @@ -364594,7 +400368,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.framesResponseDoc" + "$ref": "#/definitions/shein.aggregationFiltersResponseDoc" } }, "400": { @@ -364603,12 +400377,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -364627,52 +400395,34 @@ "ApiKeyAuth": [] } ], - "summary": "Cross-company values for one XBRL concept and period", + "summary": "SHEIN search aggregation filters", "tags": [ - "SEC EDGAR" + "SHEIN" ] } }, - "/sec/full-text-search": { + "/shein/products/detail": { "get": { "consumes": [ "application/json" ], - "description": "Searches the full text of SEC EDGAR filings (efts), filtered by form and date, with pagination. Credential-free public SEC data; free where incumbents gate full-text search behind paid tiers.", - "operationId": "sec-full-text-search", + "description": "Returns a SHEIN product's detail: identity, copy, price, images, sizes/stock, color variants, and category/brand.", + "operationId": "shein-products-detail", "parameters": [ { - "description": "Search query (supports quoted phrases)", + "description": "Numeric SHEIN goods id (from a search result's goods_id)", "in": "query", - "name": "q", + "name": "goods_id", "required": true, "type": "string", - "x-example": "artificial intelligence" + "x-example": "163003837" }, { - "description": "Filter by form types, comma-separated", + "description": "SHEIN goods serial number, narrows the lookup", "in": "query", - "name": "forms", + "name": "goods_sn", "type": "string", - "x-example": "10-K" - }, - { - "description": "Earliest filing date (YYYY-MM-DD)", - "in": "query", - "name": "from", - "type": "string" - }, - { - "description": "Latest filing date (YYYY-MM-DD)", - "in": "query", - "name": "to", - "type": "string" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "sz25081193234595996" } ], "produces": [ @@ -364682,7 +400432,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.fullTextResponseDoc" + "$ref": "#/definitions/shein.productDetailResponseDoc" } }, "400": { @@ -364709,39 +400459,48 @@ "ApiKeyAuth": [] } ], - "summary": "Full-text search across EDGAR filings", + "summary": "SHEIN product detail", "tags": [ - "SEC EDGAR" + "SHEIN" ] } }, - "/sec/insider": { - "get": { + "/shein/products/search": { + "post": { "consumes": [ "application/json" ], - "description": "Returns a company's recent insider transactions parsed from Form 3/4/5 ownership filings (owner, role, security, shares, price). Provide cik or ticker. Credential-free public SEC data.", - "operationId": "sec-insider", + "description": "Returns SHEIN's product search results for a free-text keyword, with normalized name/price/rating/image fields per card.", + "operationId": "shein-products-search", "parameters": [ { - "description": "SEC CIK (numeric or zero-padded)", + "description": "Free-text search query", "in": "query", - "name": "cik", + "name": "keyword", + "required": true, "type": "string", - "x-example": "320193" + "x-example": "dress" }, { - "description": "Ticker symbol (alternative to cik)", + "description": "1-based page number", "in": "query", - "name": "ticker", - "type": "string", - "x-example": "AAPL" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Max transactions, default 10, max 30", + "description": "Results per page", "in": "query", - "name": "limit", - "type": "integer" + "name": "page_size", + "type": "integer", + "x-example": 20 + }, + { + "description": "SHEIN sort code: a non-negative integer. `0` is the default (recommended). Other codes are accepted and forwarded as-is; the full code-to-meaning mapping has not been live-verified yet (see the endpoint markdown), so callers relying on a specific ordering should confirm behavior empirically.", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "0" } ], "produces": [ @@ -364751,7 +400510,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.insiderResponseDoc" + "$ref": "#/definitions/shein.productsSearchResponseDoc" } }, "400": { @@ -364760,12 +400519,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -364784,33 +400537,27 @@ "ApiKeyAuth": [] } ], - "summary": "Insider transactions (Forms 3/4/5)", + "summary": "SHEIN product search", "tags": [ - "SEC EDGAR" + "SHEIN" ] } }, - "/sec/institutional-holdings": { - "get": { + "/shein/search/autocomplete": { + "post": { "consumes": [ "application/json" ], - "description": "Returns the latest 13F-HR holdings for an institutional manager (by CIK): issuer, value, shares, sorted by value. Credential-free public SEC data.", - "operationId": "sec-institutional-holdings", + "description": "Returns SHEIN's search typeahead suggestions for a partial search query.", + "operationId": "shein-search-autocomplete", "parameters": [ { - "description": "Institutional manager CIK", + "description": "Partial search query", "in": "query", - "name": "cik", + "name": "word", "required": true, "type": "string", - "x-example": "1067983" - }, - { - "description": "Max holdings, default 50, max 1000", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "dres" } ], "produces": [ @@ -364820,7 +400567,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sec.holdingsResponseDoc" + "$ref": "#/definitions/shein.autocompleteResponseDoc" } }, "400": { @@ -364829,12 +400576,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -364853,19 +400594,35 @@ "ApiKeyAuth": [] } ], - "summary": "Institutional holdings (13F-HR)", + "summary": "SHEIN search autocomplete", "tags": [ - "SEC EDGAR" + "SHEIN" ] } }, - "/sephora/brands": { - "get": { + "/shein/search/keywords": { + "post": { "consumes": [ "application/json" ], - "description": "Returns Sephora's full brand directory (373 brands at time of writing), sourced from the site's own A-Z brand list page. Each brand's `name` is the exact string GET /sephora/search and GET /sephora/category's repeatable `brand` filter parameter expect.", - "operationId": "sephora-brands", + "description": "Returns the trending search keywords SHEIN's app surfaces in its search box.", + "operationId": "shein-search-keywords", + "parameters": [ + { + "description": "Keyword scene (trendStoreChannel)", + "in": "query", + "name": "scene", + "type": "string", + "x-example": "trendStoreChannel" + }, + { + "description": "Keyword type (1)", + "in": "query", + "name": "word_type", + "type": "string", + "x-example": "1" + } + ], "produces": [ "application/json" ], @@ -364873,11 +400630,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.brandsResponseDoc" + "$ref": "#/definitions/shein.searchKeywordsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -364894,40 +400657,107 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora brand directory", + "summary": "SHEIN trending search keywords", "tags": [ - "Sephora" + "SHEIN" ] } }, - "/sephora/categories": { + "/shop-app/analysis": { "get": { "consumes": [ "application/json" ], - "description": "Returns Sephora's own live storefront category navigation (department, group, name, and slug for each), sourced from the site's own \"Shop\" mega-nav. Each entry's slug is directly usable as GET /sephora/category's own `slug` query parameter.", - "operationId": "sephora-categories", + "description": "Returns a market snapshot derived from Shop.app search results, including price ranges, currencies, sale counts, discounts, and top shops. Limit defaults to 20 and accepts values up to 50.", + "operationId": "shop-app-analysis", "parameters": [ { - "description": "Filter to one storefront department", - "enum": [ - "new", - "makeup", - "skincare", - "fragrance", - "hair", - "bath-body", - "mini-size", - "brands", - "gifts-value-sets", - "sale-offers" - ], + "description": "Search query", "in": "query", - "name": "department", + "name": "query", + "required": true, "type": "string", - "x-example": "makeup" + "x-example": "sneakers" + }, + { + "description": "Maximum products to analyze, defaults to 20 and supports up to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "default": true, + "description": "Request in-stock products", + "in": "query", + "name": "in_stock", + "type": "boolean", + "x-example": true + }, + { + "default": false, + "description": "Request sale products", + "in": "query", + "name": "on_sale", + "type": "boolean", + "x-example": false + }, + { + "default": false, + "description": "Enable Shop.app deep search mode", + "in": "query", + "name": "deep_search", + "type": "boolean", + "x-example": false + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopapp.analysisResponseDoc" + } + }, + "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": "Analyze Shop.app query results", + "tags": [ + "Shop.app" + ] + } + }, + "/shop-app/categories": { + "get": { + "consumes": [ + "application/json" ], + "description": "Returns public Shop.app product categories.", + "operationId": "shop-app-categories", "produces": [ "application/json" ], @@ -364935,13 +400765,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.categoriesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopapp.categoriesResponseDoc" } }, "429": { @@ -364962,99 +400786,34 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora storefront categories", + "summary": "List Shop.app categories", "tags": [ - "Sephora" + "Shop.app" ] } }, - "/sephora/category": { + "/shop-app/products/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Sephora category/browse listing (e.g. Makeup, Skincare), with the same sort and facet filters as /sephora/search. slug is the path segment after sephora.com/shop/, e.g. makeup-cosmetics. The response uses Sephora's public catalog search to keep browse listings available when the category page's legacy embedded data is absent.", - "operationId": "sephora-category", + "description": "Returns normalized public product details from Shop.app.", + "operationId": "shop-app-product", "parameters": [ { - "description": "Category-page slug", - "in": "query", - "name": "slug", + "description": "Product id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "makeup-cosmetics" - }, - { - "description": "Result page, 1-based, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "4596217053229" }, { - "description": "Sort order, defaults to featured", - "enum": [ - "featured", - "top_rated", - "new", - "best_selling", - "price_low_to_high", - "price_high_to_low" - ], + "description": "Variant id", "in": "query", - "name": "sort_by", + "name": "variant_id", "type": "string", - "x-example": "featured" - }, - { - "description": "Minimum price in whole dollars; must be set together with price_max", - "in": "query", - "name": "price_min", - "type": "integer", - "x-example": 15 - }, - { - "description": "Maximum price in whole dollars; must be set together with price_min", - "in": "query", - "name": "price_max", - "type": "integer", - "x-example": 30 - }, - { - "collectionFormat": "csv", - "description": "One or more exact brand names to filter to (OR'd together); repeat the param for multiple values", - "in": "query", - "items": { - "type": "string" - }, - "name": "brand", - "type": "array", - "x-example": "Lancôme" - }, - { - "description": "Minimum star rating, 1 to 4", - "in": "query", - "name": "rating_min", - "type": "integer", - "x-example": 4 - }, - { - "description": "When true, filters to products flagged New", - "in": "query", - "name": "is_new", - "type": "boolean", - "x-example": false - }, - { - "collectionFormat": "csv", - "description": "Additional facet:value filters, repeat the param for multiple; facet must be one of: benefits, ingredientpreferences, colorfamily, formulation, size, shoppingpreferences, agerange, skintype, finish, skinconcerns, coverage, hairtype, hairconcerns, hairtexture", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "formulation:serum" + "x-example": "34761278160941" } ], "produces": [ @@ -365064,7 +400823,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.categoryResponseDoc" + "$ref": "#/definitions/shopapp.productResponseDoc" } }, "400": { @@ -365097,27 +400856,34 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora category browse", + "summary": "Get Shop.app product", "tags": [ - "Sephora" + "Shop.app" ] } }, - "/sephora/product": { + "/shop-app/products/{id}/related": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Sephora product's full detail (every color/shade variant with its own price and availability, rating, review count, and a sample of recent reviews), from Sephora's credential-free public JSON-LD. `product_id` is the full product-page slug, e.g. `lip-sleeping-mask-P420652` -- copy it from the path segment after sephora.com/product/ on any product page; unlike some other retailers, an arbitrary or partial slug does not resolve.", - "operationId": "sephora-product", + "description": "Returns related product cards from a public Shop.app product page.", + "operationId": "shop-app-product-related", "parameters": [ { - "description": "Full Sephora product-page slug", - "in": "query", - "name": "product_id", + "description": "Product id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "lip-sleeping-mask-P420652" + "x-example": "4596217053229" + }, + { + "description": "Maximum products, defaults to 20 and supports up to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -365127,7 +400893,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.productResponseDoc" + "$ref": "#/definitions/shopapp.relatedResponseDoc" } }, "400": { @@ -365136,12 +400902,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -365160,34 +400920,34 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora product detail", + "summary": "List Shop.app related products", "tags": [ - "Sephora" + "Shop.app" ] } }, - "/sephora/product/questions": { + "/shop-app/products/{id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Sephora product's customer Q&A: each question plus every answer it received (text, author, whether it's a brand answer, helpful votes). product_id is the Sephora productGroupID, e.g. P420652 -- the same value /sephora/product returns as product_group_id.", - "operationId": "sephora-product-questions", + "description": "Returns public product reviews from a Shop.app product page.", + "operationId": "shop-app-product-reviews", "parameters": [ { - "description": "Sephora productGroupID", - "in": "query", - "name": "product_id", + "description": "Product id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "P420652" + "x-example": "4596217053229" }, { - "description": "Result page, 1-based, defaults to 1", + "description": "Maximum reviews, defaults to 20 and supports up to 50", "in": "query", - "name": "page", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 20 } ], "produces": [ @@ -365197,7 +400957,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.productQuestionsResponseDoc" + "$ref": "#/definitions/shopapp.reviewsResponseDoc" } }, "400": { @@ -365224,34 +400984,27 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora product questions and answers", + "summary": "List Shop.app product reviews", "tags": [ - "Sephora" + "Shop.app" ] } }, - "/sephora/product/reviews": { + "/shop-app/products/{id}/shop": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Sephora product's full customer reviews (title, body, rating, author, helpful votes, secondary ratings, photos), plus the product's site-wide rating rollup (average rating, recommended ratio, star-count histogram). product_id is the Sephora productGroupID, e.g. P420652 -- the same value /sephora/product returns as product_group_id.", - "operationId": "sephora-product-reviews", + "description": "Resolves the public Shop.app merchant profile for a product id.", + "operationId": "shop-app-product-shop", "parameters": [ { - "description": "Sephora productGroupID", - "in": "query", - "name": "product_id", + "description": "Product id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "P420652" - }, - { - "description": "Result page, 1-based, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "4596217053229" } ], "produces": [ @@ -365261,7 +401014,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.productReviewsResponseDoc" + "$ref": "#/definitions/shopapp.productShopResponseDoc" } }, "400": { @@ -365270,6 +401023,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -365288,106 +401047,34 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora product reviews", + "summary": "Get the Shop.app shop for a product", "tags": [ - "Sephora" + "Shop.app" ] } }, - "/sephora/search": { + "/shop-app/products/{id}/variant": { "get": { "consumes": [ "application/json" ], - "description": "Searches Sephora's product catalog by keyword, with real page-based pagination. Returns normalized products with brand, pricing, rating, and review count. Sephora's own search never returns a genuine zero-result state for a nonempty keyword -- an unrecognized/nonsense keyword still returns a full, unrelated fallback result set rather than an empty one. price_min/price_max must be provided together (whole dollars) -- upstream silently ignores a one-sided price range rather than filtering or erroring, so this endpoint rejects a one-sided range as invalid instead of passing it through. brand and filter each accept multiple values (OR'd together within the same facet); brand/rating_min/is_new/filter/price_min/price_max can all be combined with each other (AND'd together across different facets).", - "operationId": "sephora-search", + "description": "Returns the exact public product variant matching selected options. selected_options must be a JSON object when provided. Repeated option filters may also be sent as option.Name=value or option[Name]=value.", + "operationId": "shop-app-product-variant", "parameters": [ { - "description": "Search keyword", - "in": "query", - "name": "query", + "description": "Product id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "mascara" - }, - { - "description": "Result page, 1-based, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, 1 to 100, defaults to 60", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 60 + "x-example": "4596217053229" }, { - "description": "Sort order, defaults to featured", - "enum": [ - "featured", - "top_rated", - "new", - "best_selling", - "price_low_to_high", - "price_high_to_low" - ], + "description": "Selected options JSON object", "in": "query", - "name": "sort_by", + "name": "selected_options", "type": "string", - "x-example": "featured" - }, - { - "description": "Minimum price in whole dollars; must be set together with price_max", - "in": "query", - "name": "price_min", - "type": "integer", - "x-example": 15 - }, - { - "description": "Maximum price in whole dollars; must be set together with price_min", - "in": "query", - "name": "price_max", - "type": "integer", - "x-example": 30 - }, - { - "collectionFormat": "csv", - "description": "One or more exact brand names to filter to (OR'd together); repeat the param for multiple values", - "in": "query", - "items": { - "type": "string" - }, - "name": "brand", - "type": "array", - "x-example": "Lancôme" - }, - { - "description": "Minimum star rating, 1 to 4", - "in": "query", - "name": "rating_min", - "type": "integer", - "x-example": 4 - }, - { - "description": "When true, filters to products flagged New", - "in": "query", - "name": "is_new", - "type": "boolean", - "x-example": false - }, - { - "collectionFormat": "csv", - "description": "Additional facet:value filters, repeat the param for multiple; facet must be one of: benefits, ingredientpreferences, colorfamily, formulation, size, shoppingpreferences, agerange, skintype, finish, skinconcerns, coverage, hairtype, hairconcerns, hairtexture", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "formulation:serum" + "x-example": "{\"Colour\":\"Black\",\"Size\":\"7\",\"Width\":\"6E\"}" } ], "produces": [ @@ -365397,7 +401084,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.searchResponseDoc" + "$ref": "#/definitions/shopapp.productVariantResponseDoc" } }, "400": { @@ -365406,6 +401093,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -365424,49 +401117,41 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora product search", + "summary": "Get a Shop.app product variant by selected options", "tags": [ - "Sephora" + "Shop.app" ] } }, - "/sephora/stores": { + "/shop-app/products/{id}/variants": { "get": { "consumes": [ "application/json" ], - "description": "Returns Sephora physical store locations near a coordinate (address, hours, BOPIS/curbside/same-day flags). Renders through a JS-executing browser backend, unlike every other Sephora endpoint -- the store-locator data call itself is plain HTTP, but it requires a per-visit access token minted by an endpoint gated behind a bot-management JS challenge, so responses may take longer.", - "operationId": "sephora-stores", + "description": "Returns adjacent variants for a Shop.app product. selected_options must be a JSON object when provided. Repeated option filters may also be sent as option.Name=value or option[Name]=value.", + "operationId": "shop-app-product-variants", "parameters": [ { - "description": "Latitude, -90 to 90", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 41.88325 - }, - { - "description": "Longitude, -180 to 180", - "in": "query", - "name": "longitude", + "description": "Product id", + "in": "path", + "name": "id", "required": true, - "type": "number", - "x-example": -87.6323879 + "type": "string", + "x-example": "4596217053229" }, { - "description": "Search radius in miles, 1 to 500, defaults to 50", + "description": "Selected options JSON object", "in": "query", - "name": "radius", - "type": "integer", - "x-example": 50 + "name": "selected_options", + "type": "string", + "x-example": "{\"Size\":\"7\"}" }, { - "description": "Max stores to return, 1 to 50, defaults to 10", + "description": "Maximum variants, defaults to 50 and supports up to 100", "in": "query", "name": "limit", "type": "integer", - "x-example": 10 + "x-example": 50 } ], "produces": [ @@ -365476,7 +401161,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.storesResponseDoc" + "$ref": "#/definitions/shopapp.variantsResponseDoc" } }, "400": { @@ -365503,27 +401188,58 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora store locator", + "summary": "List Shop.app product variants", "tags": [ - "Sephora" + "Shop.app" ] } }, - "/sephora/suggest": { + "/shop-app/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Sephora's own search-box type-ahead suggestions for a partial keyword: keyword-completion terms, matching products, and trending/related categories. Sephora's own upstream never returns a genuine zero-result state for a nonempty query -- a deliberately nonsense query still returns unrelated product suggestions.", - "operationId": "sephora-suggest", + "description": "Searches Shop.app product results using the credential-free public web search flow. Limit defaults to 20 and accepts values up to 50.", + "operationId": "shop-app-search", "parameters": [ { - "description": "Partial search keywords", + "description": "Search query", "in": "query", "name": "query", "required": true, "type": "string", - "x-example": "masc" + "x-example": "sneakers" + }, + { + "description": "Maximum products, defaults to 20 and supports up to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "default": true, + "description": "Request in-stock products", + "in": "query", + "name": "in_stock", + "type": "boolean", + "x-example": true + }, + { + "default": false, + "description": "Request sale products", + "in": "query", + "name": "on_sale", + "type": "boolean", + "x-example": false + }, + { + "default": false, + "description": "Enable Shop.app deep search mode", + "in": "query", + "name": "deep_search", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -365533,7 +401249,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sephora.suggestResponseDoc" + "$ref": "#/definitions/shopapp.searchResponseDoc" } }, "400": { @@ -365560,24 +401276,27 @@ "ApiKeyAuth": [] } ], - "summary": "Sephora search suggestions", + "summary": "Search Shop.app products", "tags": [ - "Sephora" + "Shop.app" ] } }, - "/sevennewsau/article": { + "/shop-app/shops/{handle}": { "get": { - "description": "Returns public 7NEWS article metadata and body paragraphs from a canonical 7news.com.au article URL. 7NEWS articles are free to read; a non-free content tier, if one ever appears, is flagged as paywalled.", - "operationId": "sevennewsau-article", + "consumes": [ + "application/json" + ], + "description": "Returns public Shop.app merchant profile details.", + "operationId": "shop-app-shop", "parameters": [ { - "description": "Canonical 7NEWS article URL", - "in": "query", - "name": "url", + "description": "Shop handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://7news.com.au/news/world/susan-sarandon-and-hannah-einbinder-arrested-at-nyc-protests-against-benjamin-netanyahus-un-address-c-22923759" + "x-example": "marcnolan" } ], "produces": [ @@ -365587,7 +401306,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopapp.shopResponseDoc" } }, "400": { @@ -365602,6 +401321,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -365614,30 +401339,64 @@ "ApiKeyAuth": [] } ], - "summary": "Get 7NEWS Australia article content", + "summary": "Get Shop.app shop", "tags": [ - "7NEWS Australia" + "Shop.app" ] } }, - "/sevennewsau/author": { + "/shop-app/shops/{handle}/collections/{collection_id}/products": { "get": { - "description": "Returns one 7NEWS journalist's public profile: name, job title, biography, portrait, public social links and the latest stories listed on the profile page.", - "operationId": "sevennewsau-author", + "consumes": [ + "application/json" + ], + "description": "Returns public product cards from a Shop.app merchant collection. sort_by allowed values: MOST_SALES, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW, RELEVANCE.", + "operationId": "shop-app-collection-products", "parameters": [ { - "description": "Author slug, e.g. aimee-edwards", - "in": "query", - "name": "slug", + "description": "Shop handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "aimee-edwards" + "x-example": "marcnolan" }, { - "description": "Canonical 7news.com.au/profile/ URL; alternative to slug", + "description": "Collection id", + "in": "path", + "name": "collection_id", + "required": true, + "type": "string", + "x-example": "292518002767" + }, + { + "description": "Maximum products, defaults to 30 and supports up to 60", "in": "query", - "name": "url", + "name": "limit", + "type": "integer", + "x-example": 30 + }, + { + "default": "MOST_SALES", + "description": "Sort mode", + "enum": [ + "MOST_SALES", + "PRICE_LOW_TO_HIGH", + "PRICE_HIGH_TO_LOW", + "RELEVANCE" + ], + "in": "query", + "name": "sort_by", "type": "string", - "x-example": "https://7news.com.au/profile/aimee-edwards" + "x-example": "MOST_SALES" + }, + { + "default": true, + "description": "Request in-stock products", + "in": "query", + "name": "in_stock", + "type": "boolean", + "x-example": true } ], "produces": [ @@ -365647,7 +401406,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sevennewsauAuthorResponseDoc" + "$ref": "#/definitions/shopapp.shopProductsResponseDoc" } }, "400": { @@ -365656,8 +401415,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -365674,134 +401433,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a 7NEWS Australia author profile", + "summary": "List Shop.app collection products", "tags": [ - "7NEWS Australia" + "Shop.app" ] } }, - "/sevennewsau/headlines": { + "/shop-app/shops/{handle}/locations": { "get": { - "description": "Returns fresh 7NEWS headlines from one public topic feed (the 100 most recent stories tagged with that topic).", - "operationId": "sevennewsau-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns public retail locations for a Shop.app merchant profile.", + "operationId": "shop-app-shop-locations", "parameters": [ { - "description": "7NEWS topic slug (the site path with slashes replaced by hyphens)", - "enum": [ - "7you", - "7you-beauty", - "7you-books", - "7you-fashion", - "7you-health-fitness", - "7you-home", - "7you-tech", - "7you-travel", - "business", - "business-economy", - "business-energy", - "business-property", - "business-retail", - "entertainment", - "entertainment-australian-idol", - "entertainment-celebrity", - "entertainment-farmer-wants-a-wife", - "entertainment-home-and-away", - "entertainment-movies", - "entertainment-music", - "entertainment-my-kitchen-rules", - "entertainment-the-voice-australia", - "entertainment-tv", - "lifestyle", - "lifestyle-fashion", - "lifestyle-food", - "lifestyle-health-wellbeing", - "lifestyle-parenting", - "lifestyle-personal-finance", - "lifestyle-pets", - "lifestyle-real-estate", - "lifestyle-recipes", - "lifestyle-relationships", - "lifestyle-shopping", - "lifestyle-sponsored", - "motoring", - "news", - "news-act", - "news-adelaide", - "news-asia", - "news-australia", - "news-brisbane", - "news-canberra", - "news-conflict", - "news-crime", - "news-darwin", - "news-disaster-and-emergency", - "news-education", - "news-europe", - "news-gold-coast", - "news-hobart", - "news-israel", - "news-melbourne", - "news-middle-east", - "news-missing-person", - "news-new-zealand", - "news-newcastle", - "news-nsw", - "news-nsw-police", - "news-nt", - "news-perth", - "news-protest", - "news-qld", - "news-russia", - "news-sa", - "news-sydney", - "news-ukraine", - "news-united-states", - "news-vic", - "news-wa", - "news-weather", - "news-world", - "opinion", - "politics", - "politics-federal-politics", - "politics-state-politics", - "sport", - "sport-afl", - "sport-aflw", - "sport-baseball", - "sport-basketball", - "sport-boxing", - "sport-cricket", - "sport-cycling", - "sport-f1", - "sport-golf", - "sport-horse-racing", - "sport-mixed-martial-arts", - "sport-motorsport", - "sport-netball", - "sport-nfl", - "sport-olympics", - "sport-rugby-league", - "sport-rugby-union", - "sport-soccer", - "sport-supercars", - "sport-tennis", - "sport-ufc", - "spotlight", - "sunrise", - "sunrise-cooking", - "sunrise-cooking-with-coles", - "sunrise-entertainment", - "technology", - "technology-gaming", - "the-morning-show", - "travel", - "travel-jetstar", - "travel-qantas" - ], - "in": "query", - "name": "section", + "description": "Shop handle", + "in": "path", + "name": "handle", "required": true, - "type": "string" + "type": "string", + "x-example": "marcnolan" + }, + { + "description": "Maximum locations, defaults to 10 and supports up to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -365811,7 +401470,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopapp.shopLocationsResponseDoc" } }, "400": { @@ -365820,37 +401479,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get 7NEWS Australia section headlines", - "tags": [ - "7NEWS Australia" - ] - } - }, - "/sevennewsau/news": { - "get": { - "description": "Returns fresh 7NEWS (7news.com.au) top stories from the public site-wide news feed.", - "operationId": "sevennewsau-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -365870,16 +401503,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get 7NEWS Australia top stories", + "summary": "List Shop.app shop locations", "tags": [ - "7NEWS Australia" + "Shop.app" ] } }, - "/sevennewsau/sections": { + "/shop-app/shops/{handle}/products": { "get": { - "description": "Returns the public 7NEWS topic feed inventory accepted by the headlines endpoint: national and city news, sport, politics, business, entertainment, lifestyle and more.", - "operationId": "sevennewsau-sections", + "consumes": [ + "application/json" + ], + "description": "Returns public product cards from a Shop.app merchant profile. sort_by allowed values: MOST_SALES, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW, RELEVANCE.", + "operationId": "shop-app-shop-products", + "parameters": [ + { + "description": "Shop handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "marcnolan" + }, + { + "description": "Maximum products, defaults to 30 and supports up to 60", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 30 + }, + { + "default": "MOST_SALES", + "description": "Sort mode", + "enum": [ + "MOST_SALES", + "PRICE_LOW_TO_HIGH", + "PRICE_HIGH_TO_LOW", + "RELEVANCE" + ], + "in": "query", + "name": "sort_by", + "type": "string", + "x-example": "MOST_SALES" + }, + { + "default": true, + "description": "Request in-stock products", + "in": "query", + "name": "in_stock", + "type": "boolean", + "x-example": true + } + ], "produces": [ "application/json" ], @@ -365887,7 +401562,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/shopapp.shopProductsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -365908,24 +401589,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get 7NEWS Australia sections", + "summary": "List Shop.app shop products", "tags": [ - "7NEWS Australia" + "Shop.app" ] } }, - "/sfgate/article": { + "/shop-app/shops/{handle}/reviews": { "get": { - "description": "Returns public SFGATE article metadata and body paragraphs from a canonical article URL. Article pages are served through proxied browser renderers; the service does not bypass authentication or access controls, and marks paywalled=true when only a teaser is public.", - "operationId": "sfgate-article", + "consumes": [ + "application/json" + ], + "description": "Returns public reviews for a Shop.app merchant profile.", + "operationId": "shop-app-shop-reviews", "parameters": [ { - "description": "Canonical SFGate article URL", - "in": "query", - "name": "url", + "description": "Shop handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://www.sfgate.com/bayarea/article/example-story-22400001.php" + "x-example": "marcnolan" + }, + { + "description": "Maximum reviews, defaults to 20 and supports up to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -365935,7 +401626,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopapp.shopReviewsResponseDoc" } }, "400": { @@ -365950,6 +401641,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -365962,24 +401659,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get SFGate article content", + "summary": "List Shop.app shop reviews", "tags": [ - "SFGate" + "Shop.app" ] } }, - "/sfgate/author": { + "/shop-app/shops/{handle}/typeahead": { "get": { - "description": "Returns an SFGATE author's name, job title, biography, headshot, public profile links, and recent articles from a canonical author URL. Author pages are served through proxied browser renderers; the service does not bypass authentication or access controls.", - "operationId": "sfgate-author", + "consumes": [ + "application/json" + ], + "description": "Returns public store typeahead suggestions for a Shop.app merchant profile.", + "operationId": "shop-app-shop-typeahead", "parameters": [ { - "description": "Canonical SFGate author URL", + "description": "Shop handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "marcnolan" + }, + { + "description": "Typeahead query", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://www.sfgate.com/author/example-writer/" + "x-example": "loafer" + }, + { + "description": "Maximum suggestions, defaults to 20 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -365989,7 +401704,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sfgateAuthorResponseDoc" + "$ref": "#/definitions/shopapp.shopTypeaheadResponseDoc" } }, "400": { @@ -366004,6 +401719,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -366016,37 +401737,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get an SFGate author profile", + "summary": "Suggest products and collections inside a Shop.app shop", "tags": [ - "SFGate" + "Shop.app" ] } }, - "/sfgate/headlines": { + "/shop-app/suggestions": { "get": { - "description": "Returns fresh headlines from one SFGATE public RSS feed.", - "operationId": "sfgate-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns Shop.app autocomplete suggestions. Limit defaults to 10 and supports up to 20.", + "operationId": "shop-app-suggestions", "parameters": [ { - "description": "SFGate section slug", - "enum": [ - "top-news", - "bay-area", - "business-technology", - "entertainment", - "celebrity", - "food-dining", - "travel", - "routes", - "top-sports", - "giants", - "49ers", - "warriors" - ], + "description": "Search query", "in": "query", - "name": "section", + "name": "query", "required": true, - "type": "string" + "type": "string", + "x-example": "sneakers" + }, + { + "description": "Maximum suggestions, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -366056,7 +401774,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopapp.suggestionsResponseDoc" } }, "400": { @@ -366065,6 +401783,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -366077,16 +401801,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get SFGate section headlines", + "summary": "Suggest Shop.app searches", "tags": [ - "SFGate" + "Shop.app" ] } }, - "/sfgate/news": { + "/shopify/collections": { "get": { - "description": "Returns fresh SFGATE stories from its public \"Top News Stories\" RSS feed.", - "operationId": "sfgate-news", + "consumes": [ + "application/json" + ], + "description": "Returns normalized collections from a public Shopify `/collections.json` endpoint. Valid empty result pages return `200` with an empty collections array.", + "operationId": "shopify-collections", + "parameters": [ + { + "description": "Shopify storefront URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.allbirds.com" + }, + { + "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" ], @@ -366094,7 +401845,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopify.collectionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -366115,122 +401872,113 @@ "ApiKeyAuth": [] } ], - "summary": "Get SFGate top stories", - "tags": [ - "SFGate" - ] - } - }, - "/sfgate/sections": { - "get": { - "description": "Returns the SFGATE feed inventory (Top News, Bay Area, Business and Technology, Entertainment, Celebrity, Food and Dining, Travel, Routes, Top Sports, Giants, 49ers, Warriors), each linking to its public RSS feed.", - "operationId": "sfgate-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get SFGate sections", + "summary": "List Shopify collections", "tags": [ - "SFGate" + "Shopify" ] } }, - "/shakeshack/locations": { + "/shopify/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Shake Shack's store index, parsed off the single, fully server-rendered /locations page. That page carries two independent sections: an interactive map (coordinates, no structured address) and an accessible \"Full List of Locations\" text index (structured address, no coordinates). Each entry's source field says which section it came from -- \"map\" or \"list\" -- not a business classification; both round-trip through GET /shakeshack/store by path, which always returns full structured address and coordinates regardless of source.", - "operationId": "shakeshack-locations", + "description": "Returns normalized products from a public Shopify collection `/products.json` endpoint. `sortBy` and dynamic facet-filter query params (e.g. `fit`, `canonicalColour`) only take effect for headless storefronts served via the embedded-SSR-JSON fallback transport (`transport_mode: \"ssr_embedded\"`) and return an invalid-param error if supplied against a classic-transport store, since Shopify's classic public catalog JSON has no server-side sort or filter support. `sort_by`, `min_price`, `max_price`, `product_type`, `in_stock_only`, and `option_`-prefixed params (e.g. `option_size=Small,Medium`) drive a separate, independent mechanism -- Shopify's own native Storefront Filtering collection-page feature (`transport_mode: \"storefront_filtered\"`) -- which works for both classic- and SSR-fallback-transport stores; supplying any of these takes precedence over sortBy/dynamic facet filters.", + "operationId": "shopify-collection-products", "parameters": [ { - "description": "1-based page (default 1)", + "description": "Collection handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "mens" + }, + { + "description": "Shopify storefront URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.allbirds.com" + }, + { + "description": "1-based page, defaults to 1", "in": "query", "name": "page", "type": "integer", "x-example": 1 }, { - "description": "Entries per page, 1-500 (default 100)", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "page_size", + "name": "limit", "type": "integer", - "x-example": 100 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shakeshack.locationsResponseDoc" - } + "x-example": 50 }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "SSR-fallback transport only (transport_mode ssr_embedded). Allowed values: sortLTH, sortHTL, newest. Omit for the storefront's default relevancy order. Rejected as an invalid param for classic-transport stores.", + "enum": [ + "sortLTH", + "sortHTL", + "newest" + ], + "in": "query", + "name": "sortBy", + "type": "string", + "x-example": "sortLTH" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Storefront-filtering transport. Allowed values: manual, best-selling, title-ascending, title-descending, price-ascending, price-descending, created-ascending, created-descending. Omit for the collection's own default order.", + "enum": [ + "manual", + "best-selling", + "title-ascending", + "title-descending", + "price-ascending", + "price-descending", + "created-ascending", + "created-descending" + ], + "in": "query", + "name": "sort_by", + "type": "string", + "x-example": "price-ascending" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Storefront-filtering transport. Minimum price (inclusive), in the storefront's display currency's major unit.", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 10 + }, + { + "description": "Storefront-filtering transport. Maximum price (inclusive), in the storefront's display currency's major unit.", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 100 + }, + { + "description": "Storefront-filtering transport, comma-separated. Exact product-type display strings from the storefront's own Product Type facet -- see facets.product_type in an unfiltered response for the live value set.", + "in": "query", + "name": "product_type", + "type": "string", + "x-example": "Hats,T-Shirts" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Browse Shake Shack's store index", - "tags": [ - "Shake Shack" - ] - } - }, - "/shakeshack/menu": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Shake Shack location's full menu as a category tree: every category and its products, with name, description, base calories, allergens, a promotional/dietary badge when published (e.g. \"LIMITED TIME ONLY\", \"VEGETARIAN\"), image, and a full customization tree (size, additions, removals, allergen flags), each choice carrying its own price and calorie delta. location_id comes from GET /shakeshack/nearby. Many items, most notably burgers, price entirely through a required size selection rather than a base price, so price is commonly 0 for those items -- the real price lives on the size modifier's own choices.", - "operationId": "shakeshack-menu", - "parameters": [ + "description": "Storefront-filtering transport. true restricts to currently in-stock items only.", + "in": "query", + "name": "in_stock_only", + "type": "boolean", + "x-example": true + }, { - "description": "Location id from /shakeshack/nearby", + "description": "Storefront-filtering transport. Example dynamic variant-option filter: comma-separated exact display values for the storefront's own size option (e.g. option_size=Small,Medium). Any variant option name is accepted the same way (option_color, ...) -- see facets in an unfiltered response for the live option names/values per store.", "in": "query", - "name": "location_id", - "required": true, - "type": "integer", - "x-example": 14992 + "name": "option_size", + "type": "string", + "x-example": "Small,Medium" } ], "produces": [ @@ -366240,7 +401988,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shakeshack.menuResponseDoc" + "$ref": "#/definitions/shopify.collectionProductsResponseDoc" } }, "400": { @@ -366273,49 +402021,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Shake Shack location's full menu", + "summary": "List Shopify collection products", "tags": [ - "Shake Shack" + "Shopify" ] } }, - "/shakeshack/nearby": { + "/shopify/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns Shake Shack locations within a radius of a coordinate, nearest first, using Shake Shack's own Olo-backed ordering API (a separate source from GET /shakeshack/locations, which reads the main site's store directory instead). Each result carries location_id, real-time weekly hours, which fulfillment modes are currently enabled (dine-in, pickup, delivery, curbside, drive-thru, walk-up, drive-up), and Shake Shack's own delivery fee schedule. Pass location_id to GET /shakeshack/menu for that location's full menu.", - "operationId": "shakeshack-nearby", + "description": "Returns normalized static pages from a public Shopify `/pages.json` endpoint. Page body HTML is returned as cleaned text only.", + "operationId": "shopify-pages", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.758 - }, - { - "description": "Search center longitude", + "description": "Shopify storefront URL", "in": "query", - "name": "longitude", + "name": "url", "required": true, - "type": "number", - "x-example": -73.9855 + "type": "string", + "x-example": "https://www.allbirds.com" }, { - "description": "Search radius in miles, 1-50 (default 15)", + "description": "1-based page, defaults to 1", "in": "query", - "name": "radius", + "name": "page", "type": "integer", - "x-example": 15 + "x-example": 1 }, { - "description": "Maximum locations to return, 1-50 (default 10)", + "description": "Maximum pages, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 10 + "x-example": 50 } ], "produces": [ @@ -366325,7 +402065,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shakeshack.nearbyResponseDoc" + "$ref": "#/definitions/shopify.pagesResponseDoc" } }, "400": { @@ -366352,27 +402092,35 @@ "ApiKeyAuth": [] } ], - "summary": "Find Shake Shack locations near a coordinate", + "summary": "List Shopify pages", "tags": [ - "Shake Shack" + "Shopify" ] } }, - "/shakeshack/store": { + "/shopify/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Shake Shack store: postal address, coordinates, phone (when published), a Monday-first week of opening hours (omitted for a location that publishes no schedule, seen on venue/kiosk-shaped locations such as inside a stadium), and the order types Shake Shack publishes for it, e.g. \"Dine In\", \"Delivery\". Store paths come from GET /shakeshack/locations, either the aliased \"location/\" form or the legacy \"node/\" form -- both resolve to the same record, and the response's own path field always reports the canonical alias. A path with neither shape, or one that does not resolve to a real store page, returns a 404.", - "operationId": "shakeshack-store", + "description": "Returns normalized page detail from Shopify's credential-free `/pages/{handle}.json` endpoint. Page body HTML is returned as cleaned text only.", + "operationId": "shopify-page", "parameters": [ { - "description": "Store path from a /shakeshack/locations entry", + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "accessibility" + }, + { + "description": "Shopify storefront URL", "in": "query", - "name": "path", + "name": "url", "required": true, "type": "string", - "x-example": "location/meyerland-tx" + "x-example": "https://www.allbirds.com" } ], "produces": [ @@ -366382,7 +402130,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shakeshack.storeResponseDoc" + "$ref": "#/definitions/shopify.pageResponseDoc" } }, "400": { @@ -366415,105 +402163,105 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Shake Shack store's detail", + "summary": "Get Shopify page", "tags": [ - "Shake Shack" + "Shopify" ] } }, - "/shein/category/filters": { + "/shopify/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns the filter facets (sizes, colors, materials, …) and price range for a SHEIN category.", - "operationId": "shein-category-filters", + "description": "Returns normalized products from a public Shopify `/products.json` endpoint. Valid empty result pages return `200` with an empty products array. `sortBy` and dynamic facet-filter query params (e.g. `fit`, `canonicalColour`) only take effect for headless storefronts served via the embedded-SSR-JSON fallback transport (`transport_mode: \"ssr_embedded\"`) and return an invalid-param error if supplied against a classic-transport store, since Shopify's classic public catalog JSON has no server-side sort or filter support. `sort_by`, `min_price`, `max_price`, `product_type`, `in_stock_only`, and `option_`-prefixed params (e.g. `option_size=Small,Medium`) drive a separate, independent mechanism -- Shopify's own native Storefront Filtering collection-page feature (`transport_mode: \"storefront_filtered\"`) -- which works for both classic- and SSR-fallback-transport stores; supplying any of these takes precedence over sortBy/dynamic facet filters.", + "operationId": "shopify-products", "parameters": [ { - "description": "Numeric SHEIN category id", + "description": "Shopify storefront URL", "in": "query", - "name": "cat_id", + "name": "url", "required": true, "type": "string", - "x-example": "1766" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shein.categoryFiltersResponseDoc" - } + "x-example": "https://www.allbirds.com" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "SHEIN category filter facets", - "tags": [ - "SHEIN" - ] - } - }, - "/shein/category/goods": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns SHEIN's product listing for a category, with the same normalized product-card fields as product search.", - "operationId": "shein-category-goods", - "parameters": [ + "description": "SSR-fallback transport only (transport_mode ssr_embedded). Allowed values: sortLTH, sortHTL, newest. Omit for the storefront's default relevancy order. Rejected as an invalid param for classic-transport stores.", + "enum": [ + "sortLTH", + "sortHTL", + "newest" + ], + "in": "query", + "name": "sortBy", + "type": "string", + "x-example": "sortLTH" + }, { - "description": "Numeric SHEIN category id", + "description": "Storefront-filtering transport. Allowed values: manual, best-selling, title-ascending, title-descending, price-ascending, price-descending, created-ascending, created-descending. Omit for the collection's own default order.", + "enum": [ + "manual", + "best-selling", + "title-ascending", + "title-descending", + "price-ascending", + "price-descending", + "created-ascending", + "created-descending" + ], "in": "query", - "name": "cat_id", - "required": true, + "name": "sort_by", "type": "string", - "x-example": "1727" + "x-example": "price-ascending" }, { - "description": "1-based page number", + "description": "Storefront-filtering transport. Minimum price (inclusive), in the storefront's display currency's major unit.", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "min_price", + "type": "number", + "x-example": 10 }, { - "description": "Results per page", + "description": "Storefront-filtering transport. Maximum price (inclusive), in the storefront's display currency's major unit.", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 20 + "name": "max_price", + "type": "number", + "x-example": 100 }, { - "description": "SHEIN sort code: a non-negative integer. `0` is the default (recommended). Other codes are accepted and forwarded as-is; the full code-to-meaning mapping has not been live-verified yet (see the endpoint markdown), so callers relying on a specific ordering should confirm behavior empirically.", + "description": "Storefront-filtering transport, comma-separated. Exact product-type display strings from the storefront's own Product Type facet -- see facets.product_type in an unfiltered response for the live value set.", "in": "query", - "name": "sort", + "name": "product_type", "type": "string", - "x-example": "0" + "x-example": "Hats,T-Shirts" + }, + { + "description": "Storefront-filtering transport. true restricts to currently in-stock items only.", + "in": "query", + "name": "in_stock_only", + "type": "boolean", + "x-example": true + }, + { + "description": "Storefront-filtering transport. Example dynamic variant-option filter: comma-separated exact display values for the storefront's own size option (e.g. option_size=Small,Medium). Any variant option name is accepted the same way (option_color, ...) -- see facets in an unfiltered response for the live option names/values per store.", + "in": "query", + "name": "option_size", + "type": "string", + "x-example": "Small,Medium" } ], "produces": [ @@ -366523,7 +402271,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shein.categoryGoodsResponseDoc" + "$ref": "#/definitions/shopify.productsResponseDoc" } }, "400": { @@ -366532,8 +402280,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -366550,27 +402298,35 @@ "ApiKeyAuth": [] } ], - "summary": "SHEIN category product listing", + "summary": "List Shopify products", "tags": [ - "SHEIN" + "Shopify" ] } }, - "/shein/category/nav": { + "/shopify/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the subcategory navigation tabs for a SHEIN category, each with a representative product.", - "operationId": "shein-category-nav", + "description": "Returns normalized product detail from Shopify's credential-free product handle `.js` endpoint.", + "operationId": "shopify-product", "parameters": [ { - "description": "Numeric SHEIN category id", + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "mens-wool-runners" + }, + { + "description": "Shopify storefront URL", "in": "query", - "name": "cat_id", + "name": "url", "required": true, "type": "string", - "x-example": "1766" + "x-example": "https://www.allbirds.com" } ], "produces": [ @@ -366580,7 +402336,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shein.categoryNavResponseDoc" + "$ref": "#/definitions/shopify.productResponseDoc" } }, "400": { @@ -366589,8 +402345,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" } @@ -366607,34 +402369,53 @@ "ApiKeyAuth": [] } ], - "summary": "SHEIN category nav tabs", + "summary": "Get Shopify product", "tags": [ - "SHEIN" + "Shopify" ] } }, - "/shein/products/aggregation-filters": { - "post": { + "/shopify/products/{handle}/recommendations": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the selectable category/brand/size/color filter facets and price range for a SHEIN search query.", - "operationId": "shein-products-aggregation-filters", + "description": "Returns normalized recommended products from Shopify's credential-free recommendations Ajax endpoint. The route handle is resolved to a Shopify product id before fetching recommendations.", + "operationId": "shopify-product-recommendations", "parameters": [ { - "description": "Free-text search query", + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "mens-wool-runners" + }, + { + "description": "Shopify storefront URL", "in": "query", - "name": "keyword", + "name": "url", "required": true, "type": "string", - "x-example": "dress" + "x-example": "https://www.allbirds.com" }, { - "description": "Numeric SHEIN category id, narrows the facets", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "cat_id", + "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": "12476" + "x-example": "related" } ], "produces": [ @@ -366644,7 +402425,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shein.aggregationFiltersResponseDoc" + "$ref": "#/definitions/shopify.productRecommendationsResponseDoc" } }, "400": { @@ -366653,8 +402434,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" } @@ -366671,34 +402458,49 @@ "ApiKeyAuth": [] } ], - "summary": "SHEIN search aggregation filters", + "summary": "List Shopify product recommendations", "tags": [ - "SHEIN" + "Shopify" ] } }, - "/shein/products/detail": { + "/shopify/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns a SHEIN product's detail: identity, copy, price, images, sizes/stock, color variants, and category/brand.", - "operationId": "shein-products-detail", + "description": "Returns products, collections, and query suggestions from Shopify's credential-free predictive search Ajax endpoint.", + "operationId": "shopify-search-suggest", "parameters": [ { - "description": "Numeric SHEIN goods id (from a search result's goods_id)", + "description": "Shopify storefront URL", "in": "query", - "name": "goods_id", + "name": "url", "required": true, "type": "string", - "x-example": "163003837" + "x-example": "https://www.allbirds.com" }, { - "description": "SHEIN goods serial number, narrows the lookup", + "description": "Search query", "in": "query", - "name": "goods_sn", + "name": "q", + "required": true, "type": "string", - "x-example": "sz25081193234595996" + "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": [ @@ -366708,7 +402510,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shein.productDetailResponseDoc" + "$ref": "#/definitions/shopify.searchSuggestResponseDoc" } }, "400": { @@ -366717,8 +402519,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -366735,48 +402537,50 @@ "ApiKeyAuth": [] } ], - "summary": "SHEIN product detail", + "summary": "Get Shopify search suggestions", "tags": [ - "SHEIN" + "Shopify" ] } }, - "/shein/products/search": { - "post": { + "/shopify/sitemap/urls": { + "get": { "consumes": [ "application/json" ], - "description": "Returns SHEIN's product search results for a free-text keyword, with normalized name/price/rating/image fields per card.", - "operationId": "shein-products-search", + "description": "Fetches capped URL entries from Shopify child sitemaps matching the requested type.", + "operationId": "shopify-sitemap-urls", "parameters": [ { - "description": "Free-text search query", + "description": "Shopify storefront URL", "in": "query", - "name": "keyword", + "name": "url", "required": true, "type": "string", - "x-example": "dress" + "x-example": "https://www.allbirds.com" }, { - "description": "1-based page number", + "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": "page", - "type": "integer", - "x-example": 1 + "name": "type", + "type": "string", + "x-example": "products" }, { - "description": "Results per page", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "page_size", + "name": "limit", "type": "integer", - "x-example": 20 - }, - { - "description": "SHEIN sort code: a non-negative integer. `0` is the default (recommended). Other codes are accepted and forwarded as-is; the full code-to-meaning mapping has not been live-verified yet (see the endpoint markdown), so callers relying on a specific ordering should confirm behavior empirically.", - "in": "query", - "name": "sort", - "type": "string", - "x-example": "0" + "x-example": 50 } ], "produces": [ @@ -366786,7 +402590,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shein.productsSearchResponseDoc" + "$ref": "#/definitions/shopify.sitemapURLsResponseDoc" } }, "400": { @@ -366795,8 +402599,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -366813,27 +402617,27 @@ "ApiKeyAuth": [] } ], - "summary": "SHEIN product search", + "summary": "List Shopify sitemap URLs", "tags": [ - "SHEIN" + "Shopify" ] } }, - "/shein/search/autocomplete": { - "post": { + "/shopify/sitemaps": { + "get": { "consumes": [ "application/json" ], - "description": "Returns SHEIN's search typeahead suggestions for a partial search query.", - "operationId": "shein-search-autocomplete", + "description": "Returns child sitemap URLs from a public Shopify `/sitemap.xml` index with inferred sitemap types.", + "operationId": "shopify-sitemaps", "parameters": [ { - "description": "Partial search query", + "description": "Shopify storefront URL", "in": "query", - "name": "word", + "name": "url", "required": true, "type": "string", - "x-example": "dres" + "x-example": "https://www.allbirds.com" } ], "produces": [ @@ -366843,7 +402647,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shein.autocompleteResponseDoc" + "$ref": "#/definitions/shopify.sitemapIndexResponseDoc" } }, "400": { @@ -366852,8 +402656,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -366870,33 +402674,27 @@ "ApiKeyAuth": [] } ], - "summary": "SHEIN search autocomplete", + "summary": "List Shopify sitemaps", "tags": [ - "SHEIN" + "Shopify" ] } }, - "/shein/search/keywords": { - "post": { + "/shopify/store": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the trending search keywords SHEIN's app surfaces in its search box.", - "operationId": "shein-search-keywords", + "description": "Resolves a public Shopify storefront and returns normalized metadata from credential-free storefront JSON. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page.", + "operationId": "shopify-store", "parameters": [ { - "description": "Keyword scene (trendStoreChannel)", - "in": "query", - "name": "scene", - "type": "string", - "x-example": "trendStoreChannel" - }, - { - "description": "Keyword type (1)", + "description": "Shopify storefront URL", "in": "query", - "name": "word_type", + "name": "url", + "required": true, "type": "string", - "x-example": "1" + "x-example": "https://www.allbirds.com" } ], "produces": [ @@ -366906,7 +402704,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shein.searchKeywordsResponseDoc" + "$ref": "#/definitions/shopify.storeResponseDoc" } }, "400": { @@ -366915,8 +402713,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -366933,58 +402731,27 @@ "ApiKeyAuth": [] } ], - "summary": "SHEIN trending search keywords", + "summary": "Get Shopify store metadata", "tags": [ - "SHEIN" + "Shopify" ] } }, - "/shop-app/analysis": { + "/similarweb/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a market snapshot derived from Shop.app search results, including price ranges, currencies, sale counts, discounts, and top shops. Limit defaults to 20 and accepts values up to 50.", - "operationId": "shop-app-analysis", + "description": "Returns SimilarWeb data for a given query (typically a domain).", + "operationId": "similarweb-search", "parameters": [ { - "description": "Search query", + "description": "Domain or keyword to search", "in": "query", - "name": "query", + "name": "q", "required": true, "type": "string", - "x-example": "sneakers" - }, - { - "description": "Maximum products to analyze, defaults to 20 and supports up to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "default": true, - "description": "Request in-stock products", - "in": "query", - "name": "in_stock", - "type": "boolean", - "x-example": true - }, - { - "default": false, - "description": "Request sale products", - "in": "query", - "name": "on_sale", - "type": "boolean", - "x-example": false - }, - { - "default": false, - "description": "Enable Shop.app deep search mode", - "in": "query", - "name": "deep_search", - "type": "boolean", - "x-example": false + "x-example": "google.com" } ], "produces": [ @@ -366994,23 +402761,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.analysisResponseDoc" + "$ref": "#/definitions/similarweb.searchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid query parameter", "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" } @@ -367021,19 +402788,29 @@ "ApiKeyAuth": [] } ], - "summary": "Analyze Shop.app query results", + "summary": "Search SimilarWeb Info", "tags": [ - "Shop.app" + "SimilarWeb" ] } }, - "/shop-app/categories": { + "/similarweb/web/{domain}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public Shop.app product categories.", - "operationId": "shop-app-categories", + "description": "Returns traffic and engagement data from SimilarWeb for a specific domain.", + "operationId": "similarweb-web", + "parameters": [ + { + "description": "Domain to fetch SimilarWeb data for", + "in": "path", + "name": "domain", + "required": true, + "type": "string", + "x-example": "google.com" + } + ], "produces": [ "application/json" ], @@ -367041,17 +402818,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.categoriesResponseDoc" + "$ref": "#/definitions/similarweb.webResponseDoc" + } + }, + "400": { + "description": "Invalid domain parameter", + "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" } @@ -367062,34 +402845,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Shop.app categories", + "summary": "Get SimilarWeb Web Info", "tags": [ - "Shop.app" + "SimilarWeb" ] } }, - "/shop-app/products/{id}": { + "/skims/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized public product details from Shop.app.", - "operationId": "shop-app-product", + "description": "Returns normalized collections from SKIMS (https://skims.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "skims-collections", "parameters": [ { - "description": "Product id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "4596217053229" + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Variant id", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "variant_id", - "type": "string", - "x-example": "34761278160941" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -367099,7 +402881,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.productResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -367108,12 +402890,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -367132,34 +402908,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Shop.app product", + "summary": "List SKIMS collections", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/products/{id}/related": { + "/skims/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns related product cards from a public Shop.app product page.", - "operationId": "shop-app-product-related", + "description": "Returns normalized products from one SKIMS (https://skims.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "skims-collection-products", "parameters": [ { - "description": "Product id", + "description": "Collection handle", "in": "path", - "name": "id", + "name": "handle", "required": true, "type": "string", - "x-example": "4596217053229" + "x-example": "collection-handle" }, { - "description": "Maximum products, defaults to 20 and supports up to 50", + "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": 20 + "x-example": 50 } ], "produces": [ @@ -367169,7 +402952,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.relatedResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -367178,6 +402961,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -367196,34 +402985,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Shop.app related products", + "summary": "List SKIMS collection products", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/products/{id}/reviews": { + "/skims/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns public product reviews from a Shop.app product page.", - "operationId": "shop-app-product-reviews", + "description": "Returns normalized static pages from SKIMS (https://skims.com). The storefront URL is fixed server-side.", + "operationId": "skims-pages", "parameters": [ { - "description": "Product id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "4596217053229" + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Maximum reviews, defaults to 20 and supports up to 50", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 20 + "x-example": 50 } ], "produces": [ @@ -367233,7 +403021,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.reviewsResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -367260,27 +403048,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Shop.app product reviews", + "summary": "List SKIMS static pages", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/products/{id}/shop": { + "/skims/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Resolves the public Shop.app merchant profile for a product id.", - "operationId": "shop-app-product-shop", + "description": "Returns normalized static page detail for one SKIMS (https://skims.com) page handle. The storefront URL is fixed server-side.", + "operationId": "skims-page", "parameters": [ { - "description": "Product id", + "description": "Page handle", "in": "path", - "name": "id", + "name": "handle", "required": true, "type": "string", - "x-example": "4596217053229" + "x-example": "page-handle" } ], "produces": [ @@ -367290,7 +403078,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.productShopResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -367323,34 +403111,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Shop.app shop for a product", + "summary": "Get a SKIMS static page", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/products/{id}/variant": { + "/skims/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns the exact public product variant matching selected options. selected_options must be a JSON object when provided. Repeated option filters may also be sent as option.Name=value or option[Name]=value.", - "operationId": "shop-app-product-variant", + "description": "Returns normalized products from SKIMS's (https://skims.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "skims-products", "parameters": [ { - "description": "Product id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "4596217053229" + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Selected options JSON object", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "selected_options", - "type": "string", - "x-example": "{\"Colour\":\"Black\",\"Size\":\"7\",\"Width\":\"6E\"}" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -367360,7 +403147,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.productVariantResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -367369,12 +403156,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -367393,41 +403174,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Shop.app product variant by selected options", + "summary": "List SKIMS products", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/products/{id}/variants": { + "/skims/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns adjacent variants for a Shop.app product. selected_options must be a JSON object when provided. Repeated option filters may also be sent as option.Name=value or option[Name]=value.", - "operationId": "shop-app-product-variants", + "description": "Returns normalized product detail for one SKIMS (https://skims.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "skims-product", "parameters": [ { - "description": "Product id", + "description": "Product handle", "in": "path", - "name": "id", + "name": "handle", "required": true, "type": "string", - "x-example": "4596217053229" - }, - { - "description": "Selected options JSON object", - "in": "query", - "name": "selected_options", - "type": "string", - "x-example": "{\"Size\":\"7\"}" - }, - { - "description": "Maximum variants, defaults to 50 and supports up to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "product-handle" } ], "produces": [ @@ -367437,7 +403204,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.variantsResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -367446,6 +403213,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -367464,58 +403237,45 @@ "ApiKeyAuth": [] } ], - "summary": "List Shop.app product variants", + "summary": "Get a SKIMS product", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/search": { + "/skims/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Searches Shop.app product results using the credential-free public web search flow. Limit defaults to 20 and accepts values up to 50.", - "operationId": "shop-app-search", + "description": "Returns normalized recommended products for one SKIMS (https://skims.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", + "operationId": "skims-product-recommendations", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "query", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "sneakers" + "x-example": "product-handle" }, { - "description": "Maximum products, defaults to 20 and supports up to 50", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", "name": "limit", "type": "integer", - "x-example": 20 - }, - { - "default": true, - "description": "Request in-stock products", - "in": "query", - "name": "in_stock", - "type": "boolean", - "x-example": true - }, - { - "default": false, - "description": "Request sale products", - "in": "query", - "name": "on_sale", - "type": "boolean", - "x-example": false + "x-example": 10 }, { - "default": false, - "description": "Enable Shop.app deep search mode", + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], "in": "query", - "name": "deep_search", - "type": "boolean", - "x-example": false + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -367525,7 +403285,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -367534,6 +403294,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -367552,27 +403318,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search Shop.app products", + "summary": "List SKIMS product recommendations", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/shops/{handle}": { + "/skims/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns public Shop.app merchant profile details.", - "operationId": "shop-app-shop", + "description": "Returns products, collections, and query suggestions from SKIMS's (https://skims.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", + "operationId": "skims-search-suggest", "parameters": [ { - "description": "Shop handle", - "in": "path", - "name": "handle", + "description": "Search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "marcnolan" + "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": [ @@ -367582,7 +403362,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.shopResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -367591,12 +403371,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -367615,64 +403389,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Shop.app shop", + "summary": "Get SKIMS search suggestions", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/shops/{handle}/collections/{collection_id}/products": { + "/skims/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns public product cards from a Shop.app merchant collection. sort_by allowed values: MOST_SALES, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW, RELEVANCE.", - "operationId": "shop-app-collection-products", + "description": "Returns capped URL entries from SKIMS's (https://skims.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "skims-sitemap-urls", "parameters": [ { - "description": "Shop handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "marcnolan" - }, - { - "description": "Collection id", - "in": "path", - "name": "collection_id", - "required": true, - "type": "string", - "x-example": "292518002767" - }, - { - "description": "Maximum products, defaults to 30 and supports up to 60", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 30 - }, - { - "default": "MOST_SALES", - "description": "Sort mode", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", "enum": [ - "MOST_SALES", - "PRICE_LOW_TO_HIGH", - "PRICE_HIGH_TO_LOW", - "RELEVANCE" + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" ], "in": "query", - "name": "sort_by", + "name": "type", "type": "string", - "x-example": "MOST_SALES" + "x-example": "products" }, { - "default": true, - "description": "Request in-stock products", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "in_stock", - "type": "boolean", - "x-example": true + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -367682,7 +403434,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.shopProductsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -367709,36 +403461,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Shop.app collection products", + "summary": "List SKIMS sitemap URLs", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/shops/{handle}/locations": { + "/skims/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns public retail locations for a Shop.app merchant profile.", - "operationId": "shop-app-shop-locations", - "parameters": [ - { - "description": "Shop handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "marcnolan" - }, - { - "description": "Maximum locations, defaults to 10 and supports up to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - } - ], + "description": "Returns child sitemap URLs from SKIMS's (https://skims.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "skims-sitemaps", "produces": [ "application/json" ], @@ -367746,7 +403481,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.shopLocationsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -367755,12 +403490,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -367776,61 +403505,22 @@ }, "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "List Shop.app shop locations", - "tags": [ - "Shop.app" - ] - } - }, - "/shop-app/shops/{handle}/products": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public product cards from a Shop.app merchant profile. sort_by allowed values: MOST_SALES, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW, RELEVANCE.", - "operationId": "shop-app-shop-products", - "parameters": [ - { - "description": "Shop handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "marcnolan" - }, - { - "description": "Maximum products, defaults to 30 and supports up to 60", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 30 - }, - { - "default": "MOST_SALES", - "description": "Sort mode", - "enum": [ - "MOST_SALES", - "PRICE_LOW_TO_HIGH", - "PRICE_HIGH_TO_LOW", - "RELEVANCE" - ], - "in": "query", - "name": "sort_by", - "type": "string", - "x-example": "MOST_SALES" - }, - { - "default": true, - "description": "Request in-stock products", - "in": "query", - "name": "in_stock", - "type": "boolean", - "x-example": true + "ApiKeyAuth": [] } ], + "summary": "List SKIMS sitemaps", + "tags": [ + "SKIMS" + ] + } + }, + "/skims/store": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns normalized storefront metadata for SKIMS (https://skims.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", + "operationId": "skims-store", "produces": [ "application/json" ], @@ -367838,7 +403528,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.shopProductsResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -367865,34 +403555,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Shop.app shop products", + "summary": "Get SKIMS store metadata", "tags": [ - "Shop.app" + "SKIMS" ] } }, - "/shop-app/shops/{handle}/reviews": { + "/skynews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public reviews for a Shop.app merchant profile.", - "operationId": "shop-app-shop-reviews", + "description": "Returns public Sky News article metadata and body paragraphs from a canonical article URL.", + "operationId": "skynews-article", "parameters": [ { - "description": "Shop handle", - "in": "path", - "name": "handle", + "description": "Canonical Sky News article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "marcnolan" - }, - { - "description": "Maximum reviews, defaults to 20 and supports up to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "https://news.sky.com/story/example-story-12345678" } ], "produces": [ @@ -367902,7 +403582,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.shopReviewsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -367917,12 +403597,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -367935,42 +403609,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Shop.app shop reviews", + "summary": "Get Sky News article content", "tags": [ - "Shop.app" + "Sky News" ] } }, - "/shop-app/shops/{handle}/typeahead": { + "/skynews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public store typeahead suggestions for a Shop.app merchant profile.", - "operationId": "shop-app-shop-typeahead", + "description": "Returns a Sky News author's byline metadata, biography, and recent articles from a canonical author URL.", + "operationId": "skynews-author", "parameters": [ { - "description": "Shop handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "marcnolan" - }, - { - "description": "Typeahead query", + "description": "Canonical Sky News author URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "loafer" - }, - { - "description": "Maximum suggestions, defaults to 20 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "https://news.sky.com/author/sam-coates-763" } ], "produces": [ @@ -367980,7 +403636,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.shopTypeaheadResponseDoc" + "$ref": "#/definitions/publicnews.skyNewsAuthorResponseDoc" } }, "400": { @@ -367995,12 +403651,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -368013,34 +403663,40 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest products and collections inside a Shop.app shop", + "summary": "Get a Sky News author profile", "tags": [ - "Shop.app" + "Sky News" ] } }, - "/shop-app/suggestions": { + "/skynews/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Shop.app autocomplete suggestions. Limit defaults to 10 and supports up to 20.", - "operationId": "shop-app-suggestions", + "description": "Returns fresh headlines from one Sky News section, either its official RSS feed or (for the 5 sections with no feed) its public hub page.", + "operationId": "skynews-headlines", "parameters": [ { - "description": "Search query", + "description": "Sky News section slug", + "enum": [ + "home", + "uk", + "world", + "us", + "business", + "politics", + "technology", + "entertainment", + "strange", + "money", + "science-climate-tech", + "offbeat", + "analysis", + "data-and-forensics" + ], "in": "query", - "name": "query", + "name": "section", "required": true, "type": "string", - "x-example": "sneakers" - }, - { - "description": "Maximum suggestions, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "home" } ], "produces": [ @@ -368050,7 +403706,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopapp.suggestionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -368059,12 +403715,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -368077,43 +403727,16 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Shop.app searches", + "summary": "Get Sky News section headlines", "tags": [ - "Shop.app" + "Sky News" ] } }, - "/shopify/collections": { + "/skynews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized collections from a public Shopify `/collections.json` endpoint. Valid empty result pages return `200` with an empty collections array.", - "operationId": "shopify-collections", - "parameters": [ - { - "description": "Shopify storefront URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.allbirds.com" - }, - { - "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 fresh Sky News top stories from its public RSS feed.", + "operationId": "skynews-news", "produces": [ "application/json" ], @@ -368121,13 +403744,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.collectionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -368148,113 +403765,50 @@ "ApiKeyAuth": [] } ], - "summary": "List Shopify collections", + "summary": "Get Sky News top stories", "tags": [ - "Shopify" + "Sky News" ] } }, - "/shopify/collections/{handle}/products": { + "/skynews/sections": { "get": { - "consumes": [ + "description": "Returns the Sky News section inventory: 9 official RSS feeds plus 5 additional site sections with no RSS feed, listed from their public hub page instead.", + "operationId": "skynews-sections", + "produces": [ "application/json" ], - "description": "Returns normalized products from a public Shopify collection `/products.json` endpoint. `sortBy` and dynamic facet-filter query params (e.g. `fit`, `canonicalColour`) only take effect for headless storefronts served via the embedded-SSR-JSON fallback transport (`transport_mode: \"ssr_embedded\"`) and return an invalid-param error if supplied against a classic-transport store, since Shopify's classic public catalog JSON has no server-side sort or filter support. `sort_by`, `min_price`, `max_price`, `product_type`, `in_stock_only`, and `option_`-prefixed params (e.g. `option_size=Small,Medium`) drive a separate, independent mechanism -- Shopify's own native Storefront Filtering collection-page feature (`transport_mode: \"storefront_filtered\"`) -- which works for both classic- and SSR-fallback-transport stores; supplying any of these takes precedence over sortBy/dynamic facet filters.", - "operationId": "shopify-collection-products", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "mens" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Sky News sections", + "tags": [ + "Sky News" + ] + } + }, + "/skynews/video": { + "get": { + "description": "Returns one Sky News video's public metadata (title, description, thumbnails, duration, embed URL) from a canonical video URL. There is no transcript or article body for a video.", + "operationId": "skynews-video", + "parameters": [ { - "description": "Shopify storefront URL", + "description": "Canonical Sky News video URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.allbirds.com" - }, - { - "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": "SSR-fallback transport only (transport_mode ssr_embedded). Allowed values: sortLTH, sortHTL, newest. Omit for the storefront's default relevancy order. Rejected as an invalid param for classic-transport stores.", - "enum": [ - "sortLTH", - "sortHTL", - "newest" - ], - "in": "query", - "name": "sortBy", - "type": "string", - "x-example": "sortLTH" - }, - { - "description": "Storefront-filtering transport. Allowed values: manual, best-selling, title-ascending, title-descending, price-ascending, price-descending, created-ascending, created-descending. Omit for the collection's own default order.", - "enum": [ - "manual", - "best-selling", - "title-ascending", - "title-descending", - "price-ascending", - "price-descending", - "created-ascending", - "created-descending" - ], - "in": "query", - "name": "sort_by", - "type": "string", - "x-example": "price-ascending" - }, - { - "description": "Storefront-filtering transport. Minimum price (inclusive), in the storefront's display currency's major unit.", - "in": "query", - "name": "min_price", - "type": "number", - "x-example": 10 - }, - { - "description": "Storefront-filtering transport. Maximum price (inclusive), in the storefront's display currency's major unit.", - "in": "query", - "name": "max_price", - "type": "number", - "x-example": 100 - }, - { - "description": "Storefront-filtering transport, comma-separated. Exact product-type display strings from the storefront's own Product Type facet -- see facets.product_type in an unfiltered response for the live value set.", - "in": "query", - "name": "product_type", - "type": "string", - "x-example": "Hats,T-Shirts" - }, - { - "description": "Storefront-filtering transport. true restricts to currently in-stock items only.", - "in": "query", - "name": "in_stock_only", - "type": "boolean", - "x-example": true - }, - { - "description": "Storefront-filtering transport. Example dynamic variant-option filter: comma-separated exact display values for the storefront's own size option (e.g. option_size=Small,Medium). Any variant option name is accepted the same way (option_color, ...) -- see facets in an unfiltered response for the live option names/values per store.", - "in": "query", - "name": "option_size", - "type": "string", - "x-example": "Small,Medium" + "x-example": "https://news.sky.com/video/example-video-12345678" } ], "produces": [ @@ -368264,7 +403818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.collectionProductsResponseDoc" + "$ref": "#/definitions/publicnews.skyNewsVideoResponseDoc" } }, "400": { @@ -368279,11 +403833,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Sky News video metadata", + "tags": [ + "Sky News" + ] + } + }, + "/skynews/videos": { + "get": { + "description": "Returns recent videos from the public Sky News videos hub.", + "operationId": "skynews-videos", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.skyNewsVideosResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -368297,41 +403877,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Shopify collection products", + "summary": "Get the Sky News videos hub", "tags": [ - "Shopify" + "Sky News" ] } }, - "/shopify/pages": { + "/skysports/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized static pages from a public Shopify `/pages.json` endpoint. Page body HTML is returned as cleaned text only.", - "operationId": "shopify-pages", + "description": "Returns public Sky Sports article metadata and body paragraphs from a canonical article URL.", + "operationId": "skysports-article", "parameters": [ { - "description": "Shopify storefront URL", + "description": "Canonical Sky Sports article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.allbirds.com" - }, - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum pages, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "https://www.skysports.com/football/news/13592544/example-story" } ], "produces": [ @@ -368341,7 +403904,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.pagesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -368350,8 +403913,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -368368,35 +403931,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Shopify pages", + "summary": "Get a Sky Sports article", "tags": [ - "Shopify" + "Sky Sports" ] } }, - "/shopify/pages/{handle}": { + "/skysports/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized page detail from Shopify's credential-free `/pages/{handle}.json` endpoint. Page body HTML is returned as cleaned text only.", - "operationId": "shopify-page", + "description": "Returns public author metadata, biography, and recent articles from a canonical author URL.", + "operationId": "skysports-author", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "accessibility" - }, - { - "description": "Shopify storefront URL", + "description": "Canonical Sky Sports author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.allbirds.com" + "x-example": "https://www.skysports.com/author/kaveh-solhekol-773" } ], "produces": [ @@ -368406,7 +403958,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.pageResponseDoc" + "$ref": "#/definitions/publicnews.skySportsAuthorResponseDoc" } }, "400": { @@ -368421,12 +403973,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -368439,105 +403985,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Shopify page", + "summary": "Get a Sky Sports author profile", "tags": [ - "Shopify" + "Sky Sports" ] } }, - "/shopify/products": { + "/skysports/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized products from a public Shopify `/products.json` endpoint. Valid empty result pages return `200` with an empty products array. `sortBy` and dynamic facet-filter query params (e.g. `fit`, `canonicalColour`) only take effect for headless storefronts served via the embedded-SSR-JSON fallback transport (`transport_mode: \"ssr_embedded\"`) and return an invalid-param error if supplied against a classic-transport store, since Shopify's classic public catalog JSON has no server-side sort or filter support. `sort_by`, `min_price`, `max_price`, `product_type`, `in_stock_only`, and `option_`-prefixed params (e.g. `option_size=Small,Medium`) drive a separate, independent mechanism -- Shopify's own native Storefront Filtering collection-page feature (`transport_mode: \"storefront_filtered\"`) -- which works for both classic- and SSR-fallback-transport stores; supplying any of these takes precedence over sortBy/dynamic facet filters.", - "operationId": "shopify-products", + "description": "Returns current headlines from one live Sky Sports section page.", + "operationId": "skysports-headlines", "parameters": [ { - "description": "Shopify storefront URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.allbirds.com" - }, - { - "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": "SSR-fallback transport only (transport_mode ssr_embedded). Allowed values: sortLTH, sortHTL, newest. Omit for the storefront's default relevancy order. Rejected as an invalid param for classic-transport stores.", - "enum": [ - "sortLTH", - "sortHTL", - "newest" - ], - "in": "query", - "name": "sortBy", - "type": "string", - "x-example": "sortLTH" - }, - { - "description": "Storefront-filtering transport. Allowed values: manual, best-selling, title-ascending, title-descending, price-ascending, price-descending, created-ascending, created-descending. Omit for the collection's own default order.", + "description": "Sky Sports section slug", "enum": [ - "manual", - "best-selling", - "title-ascending", - "title-descending", - "price-ascending", - "price-descending", - "created-ascending", - "created-descending" + "football", + "f1", + "cricket", + "rugby-union", + "rugby-league", + "golf", + "boxing", + "nfl", + "tennis", + "nba", + "racing", + "darts", + "netball", + "mma", + "more-sports", + "athletics", + "basketball", + "cycling", + "snooker", + "motor-sport", + "wwe", + "olympics" ], "in": "query", - "name": "sort_by", - "type": "string", - "x-example": "price-ascending" - }, - { - "description": "Storefront-filtering transport. Minimum price (inclusive), in the storefront's display currency's major unit.", - "in": "query", - "name": "min_price", - "type": "number", - "x-example": 10 - }, - { - "description": "Storefront-filtering transport. Maximum price (inclusive), in the storefront's display currency's major unit.", - "in": "query", - "name": "max_price", - "type": "number", - "x-example": 100 - }, - { - "description": "Storefront-filtering transport, comma-separated. Exact product-type display strings from the storefront's own Product Type facet -- see facets.product_type in an unfiltered response for the live value set.", - "in": "query", - "name": "product_type", - "type": "string", - "x-example": "Hats,T-Shirts" - }, - { - "description": "Storefront-filtering transport. true restricts to currently in-stock items only.", - "in": "query", - "name": "in_stock_only", - "type": "boolean", - "x-example": true - }, - { - "description": "Storefront-filtering transport. Example dynamic variant-option filter: comma-separated exact display values for the storefront's own size option (e.g. option_size=Small,Medium). Any variant option name is accepted the same way (option_color, ...) -- see facets in an unfiltered response for the live option names/values per store.", - "in": "query", - "name": "option_size", + "name": "section", + "required": true, "type": "string", - "x-example": "Small,Medium" + "x-example": "football" } ], "produces": [ @@ -368547,7 +404036,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.productsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -368556,11 +404045,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Sky Sports section headlines", + "tags": [ + "Sky Sports" + ] + } + }, + "/skysports/news": { + "get": { + "description": "Returns the latest Sky Sports top stories from its public RSS feed.", + "operationId": "skysports-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -368574,35 +404089,50 @@ "ApiKeyAuth": [] } ], - "summary": "List Shopify products", + "summary": "Get Sky Sports top stories", "tags": [ - "Shopify" + "Sky Sports" ] } }, - "/shopify/products/{handle}": { + "/skysports/sections": { "get": { - "consumes": [ + "description": "Returns the 22 currently reachable sections in the live Sky Sports sports navigation.", + "operationId": "skysports-sections", + "produces": [ "application/json" ], - "description": "Returns normalized product detail from Shopify's credential-free product handle `.js` endpoint.", - "operationId": "shopify-product", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "mens-wool-runners" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Sky Sports sections", + "tags": [ + "Sky Sports" + ] + } + }, + "/slate/article": { + "get": { + "description": "Returns public Slate article metadata and server-delivered body paragraphs from a canonical dated Slate URL. It does not log in, use account cookies, or bypass a challenge; is_paywalled reports when Slate marks the delivered page as subscription-gated.", + "operationId": "slate-article", + "parameters": [ { - "description": "Shopify storefront URL", + "description": "Canonical HTTPS Slate article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.allbirds.com" + "x-example": "https://slate.com/news-and-politics/2026/09/example.html" } ], "produces": [ @@ -368612,7 +404142,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.productResponseDoc" + "$ref": "#/definitions/slate.articleResponseDoc" } }, "400": { @@ -368633,6 +404163,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -368645,55 +404181,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Shopify product", + "summary": "Slate article content", "tags": [ - "Shopify" + "Slate" ] } }, - "/shopify/products/{handle}/recommendations": { + "/slate/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized recommended products from Shopify's credential-free recommendations Ajax endpoint. The route handle is resolved to a Shopify product id before fetching recommendations.", - "operationId": "shopify-product-recommendations", - "parameters": [ - { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "mens-wool-runners" - }, - { - "description": "Shopify storefront URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.allbirds.com" - }, - { - "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" - } - ], + "description": "Lists the exact Slate section values accepted by slate-headlines. The set includes all, news-and-politics, culture, technology, business, life, and advice; subsection navigation pages are not RSS feeds and are intentionally not accepted by slate-headlines.", + "operationId": "slate-categories", "produces": [ "application/json" ], @@ -368701,23 +404198,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.productRecommendationsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/slate.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" } @@ -368734,49 +404225,32 @@ "ApiKeyAuth": [] } ], - "summary": "List Shopify product recommendations", + "summary": "Slate public feed sections", "tags": [ - "Shopify" + "Slate" ] } }, - "/shopify/search/suggest": { + "/slate/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from Shopify's credential-free predictive search Ajax endpoint.", - "operationId": "shopify-search-suggest", + "description": "Returns current Slate article-card metadata from one public RSS feed. section must be one of the values returned by slate-categories.", + "operationId": "slate-headlines", "parameters": [ { - "description": "Shopify storefront URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.allbirds.com" - }, - { - "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", + "default": "all", + "description": "Slate feed section", + "enum": [ + "all", + "news-and-politics", + "culture", + "technology", + "business", + "life", + "advice" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "section", + "type": "string" } ], "produces": [ @@ -368786,7 +404260,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.searchSuggestResponseDoc" + "$ref": "#/definitions/slate.headlinesResponseDoc" } }, "400": { @@ -368795,12 +404269,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": { @@ -368813,50 +404299,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Shopify search suggestions", + "summary": "Slate section headlines", "tags": [ - "Shopify" + "Slate" ] } }, - "/shopify/sitemap/urls": { + "/slickdeals/categories": { "get": { "consumes": [ "application/json" ], - "description": "Fetches capped URL entries from Shopify child sitemaps matching the requested type.", - "operationId": "shopify-sitemap-urls", + "description": "Returns Slickdeals' own full category/tag list -- the discovery endpoint for GET /slickdeals/category's slug parameter. This is a separate taxonomy from the category/sub_category fields GET /slickdeals/deal returns for an individual deal (Slickdeals maintains multiple parallel category/tag id spaces, not one) -- these slugs are the ones GET /slickdeals/category's own browse pages accept. The list is refreshed from Slickdeals' own site periodically; an optional q parameter narrows it to a substring match.", + "operationId": "slickdeals-categories", "parameters": [ { - "description": "Shopify storefront URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.allbirds.com" - }, - { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "Case-insensitive substring filter on slug or name", "in": "query", - "name": "type", + "name": "q", "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": "laptop" } ], "produces": [ @@ -368866,13 +404328,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.sitemapURLsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/slickdeals.categoriesResponseDoc" } }, "429": { @@ -368893,27 +404349,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Shopify sitemap URLs", + "summary": "List every Slickdeals deal category/tag", "tags": [ - "Shopify" + "Slickdeals" ] } }, - "/shopify/sitemaps": { + "/slickdeals/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns child sitemap URLs from a public Shopify `/sitemap.xml` index with inferred sitemap types.", - "operationId": "shopify-sitemaps", + "description": "Returns the current deal listing for one Slickdeals category/tag (e.g. \"laptop-bag\", \"apparel\"): for each deal, title, price, list price, store, community vote score, comment count, the public username who posted it, and status flags (is_popular, is_expired, is_new, is_frontpage). slug must be one of the values from GET /slickdeals/categories -- an unrecognized slug returns a typed invalid-parameter error rather than being sent upstream. Pair a result's thread_id or url with GET /slickdeals/deal for the full detail record (description, full taxonomy).", + "operationId": "slickdeals-category", "parameters": [ { - "description": "Shopify storefront URL", + "description": "Category/tag slug from GET /slickdeals/categories", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.allbirds.com" + "x-example": "laptop-bag" } ], "produces": [ @@ -368923,7 +404379,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.sitemapIndexResponseDoc" + "$ref": "#/definitions/slickdeals.categoryResponseDoc" } }, "400": { @@ -368950,27 +404406,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Shopify sitemaps", + "summary": "Browse current deals in one Slickdeals category/tag", "tags": [ - "Shopify" + "Slickdeals" ] } }, - "/shopify/store": { + "/slickdeals/comments": { "get": { "consumes": [ "application/json" ], - "description": "Resolves a public Shopify storefront and returns normalized metadata from credential-free storefront JSON. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page.", - "operationId": "shopify-store", + "description": "Returns one Slickdeals deal thread's full comment thread: for each comment, the public username who posted it (with their forum rank/title and total post count -- the same public-forum-post attribution class this repo already exposes for Reddit), the comment content (as HTML and as cleaned plain text), when it was posted, a permalink, and reaction counts (like, funny, helpful, not helpful). Give either url (the exact value returned by GET /slickdeals/search or GET /slickdeals/deal) or thread_id; at least one is required. has_more indicates whether Slickdeals' own page truncated the reply list (no further pagination is currently exposed by this endpoint).", + "operationId": "slickdeals-comments", "parameters": [ { - "description": "Shopify storefront URL", + "description": "Full Slickdeals deal URL, as returned by GET /slickdeals/search or GET /slickdeals/deal (https://slickdeals.net/f/...)", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.allbirds.com" + "x-example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53" + }, + { + "description": "Slickdeals numeric thread id", + "in": "query", + "name": "thread_id", + "type": "integer", + "x-example": 20015817 } ], "produces": [ @@ -368980,7 +404442,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopify.storeResponseDoc" + "$ref": "#/definitions/slickdeals.commentsResponseDoc" } }, "400": { @@ -368989,6 +404451,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -369007,26 +404475,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Shopify store metadata", + "summary": "Get one Slickdeals deal thread's comments", "tags": [ - "Shopify" + "Slickdeals" ] } }, - "/similarweb/search": { + "/slickdeals/deal": { "get": { "consumes": [ "application/json" ], - "description": "Returns SimilarWeb data for a given query (typically a domain).", - "operationId": "similarweb-search", + "description": "Returns one Slickdeals deal thread's full detail: title, store, final/list price, community vote score, comment count, whether the deal is marked expired, the deal's product category and taxonomy (category/sub_category/category_paths, and separately the legacy forum/forum_id the thread was posted under), the public Slickdeals username who posted it (\"found by\" attribution, the same public-forum-post class this repo already exposes for Reddit) with a public community-standing summary (reputation, join date, deals posted, total votes/comments), a related_deals sidebar (Slickdeals' own Popular/Trending picks), the outbound merchant link, and the deal's own description. Give either url (the exact value returned by GET /slickdeals/search) or thread_id (Slickdeals' own numeric thread id, e.g. from a deal's URL path /f/{thread_id}-...); at least one is required. An unknown or removed deal returns 404.", + "operationId": "slickdeals-deal", "parameters": [ { - "description": "Domain or keyword to search", + "description": "Full Slickdeals deal URL, as returned by GET /slickdeals/search (https://slickdeals.net/f/...)", "in": "query", - "name": "q", - "required": true, - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53" + }, + { + "description": "Slickdeals numeric thread id", + "in": "query", + "name": "thread_id", + "type": "integer", + "x-example": 20015817 } ], "produces": [ @@ -369036,23 +404511,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/similarweb.searchResponseDoc" + "$ref": "#/definitions/slickdeals.dealResponseDoc" } }, "400": { - "description": "Invalid query parameter", + "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" } @@ -369063,26 +404544,26 @@ "ApiKeyAuth": [] } ], - "summary": "Search SimilarWeb Info", + "summary": "Get one Slickdeals deal thread's full detail", "tags": [ - "SimilarWeb" + "Slickdeals" ] } }, - "/similarweb/web/{domain}": { + "/slickdeals/deal-types": { "get": { "consumes": [ "application/json" ], - "description": "Returns traffic and engagement data from SimilarWeb for a specific domain.", - "operationId": "similarweb-web", + "description": "Returns Slickdeals' own deal-type tag list (Coupon, Free / Freebie, Giveaway, Gift Card, Mail In Rebate, Online Only, YMMV, ...) -- the discovery endpoint for GET /slickdeals/search's deal_type_id parameter. Confirmed identical across multiple Slickdeals sub-forums, unlike the broader interest-tag space it is drawn from, which was not found to be reliably enumerable. An optional q parameter narrows it to a substring match on name.", + "operationId": "slickdeals-deal-types", "parameters": [ { - "description": "Domain to fetch SimilarWeb data for", - "in": "path", - "name": "domain", - "required": true, - "type": "string" + "description": "Case-insensitive substring filter on name", + "in": "query", + "name": "q", + "type": "string", + "x-example": "free" } ], "produces": [ @@ -369092,23 +404573,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/similarweb.webResponseDoc" - } - }, - "400": { - "description": "Invalid domain parameter", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/slickdeals.dealTypesResponseDoc" } }, "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" } @@ -369119,33 +404594,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get SimilarWeb Web Info", + "summary": "List every Slickdeals deal-type tag", "tags": [ - "SimilarWeb" + "Slickdeals" ] } }, - "/skims/collections": { + "/slickdeals/forums": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized collections from SKIMS (https://skims.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "skims-collections", + "description": "Returns Slickdeals' own full legacy sub-forum list (e.g. Hot Deals, Coupons, Freebies) -- the discovery endpoint for GET /slickdeals/search's forum_id parameter. A separate, coarser-grained taxonomy from GET /slickdeals/categories' 421-entry tag list: this is the classification GET /slickdeals/deal, /slickdeals/search/advanced, and /slickdeals/frontpage already surface as forum_id, with this endpoint as the way to resolve an id to a name or filter search results by it. The list is refreshed from Slickdeals' own site periodically; an optional q parameter narrows it to a substring match on name.", + "operationId": "slickdeals-forums", "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": "Case-insensitive substring filter on name", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "q", + "type": "string", + "x-example": "deal" } ], "produces": [ @@ -369155,13 +404623,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/slickdeals.forumsResponseDoc" } }, "429": { @@ -369182,41 +404644,26 @@ "ApiKeyAuth": [] } ], - "summary": "List SKIMS collections", + "summary": "List every Slickdeals legacy sub-forum", "tags": [ - "SKIMS" + "Slickdeals" ] } }, - "/skims/collections/{handle}/products": { + "/slickdeals/frontpage": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from one SKIMS (https://skims.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "skims-collection-products", + "description": "Returns one page of Slickdeals' own homepage deal listing -- the deals Slickdeals itself is currently featuring, distinct from a keyword search or a single category/tag's own listing. Each deal carries the same fields as GET /slickdeals/search/advanced's results (real integer vote/comment/view counts, store id, discount, status flags), plus is_fire_deal and has_rebate flags this feed's cards carry. Pagination is next-page-only (has_next_page), since the page itself exposes no total page count.", + "operationId": "slickdeals-frontpage", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "collection-handle" - }, - { - "description": "1-based page, defaults to 1", + "description": "1-based frontpage listing page, default 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": [ @@ -369226,7 +404673,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/slickdeals.frontpageResponseDoc" } }, "400": { @@ -369235,12 +404682,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -369259,33 +404700,26 @@ "ApiKeyAuth": [] } ], - "summary": "List SKIMS collection products", + "summary": "Browse Slickdeals' own homepage deal feed", "tags": [ - "SKIMS" + "Slickdeals" ] } }, - "/skims/pages": { + "/slickdeals/primary-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static pages from SKIMS (https://skims.com). The storefront URL is fixed server-side.", - "operationId": "skims-pages", + "description": "Returns Slickdeals' small, curated set of \"featured\" primary-category landing pages (e.g. laptop-deals, tv-deals) -- the discovery endpoint for GET /slickdeals/primary-category's slug parameter. This is a separate taxonomy from GET /slickdeals/categories' 421-entry tag list and from GET /slickdeals/deal's own category/sub_category fields -- Slickdeals maintains multiple parallel category/tag id spaces, not one. Unlike /slickdeals/categories, no single live page enumerates this set; it is maintained as periodically-refreshed reference data.", + "operationId": "slickdeals-primary-categories", "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": "Case-insensitive substring filter on slug or name", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "q", + "type": "string", + "x-example": "laptop" } ], "produces": [ @@ -369295,13 +404729,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/slickdeals.primaryCategoriesResponseDoc" } }, "429": { @@ -369322,27 +404750,27 @@ "ApiKeyAuth": [] } ], - "summary": "List SKIMS static pages", + "summary": "List Slickdeals' featured primary-category landing pages", "tags": [ - "SKIMS" + "Slickdeals" ] } }, - "/skims/pages/{handle}": { + "/slickdeals/primary-category": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized static page detail for one SKIMS (https://skims.com) page handle. The storefront URL is fixed server-side.", - "operationId": "skims-page", + "description": "Returns the current deal listing for one Slickdeals featured primary-category landing page (e.g. laptop-deals, tv-deals): for each deal, title, price, list price, store, community vote score, comment count, found-by username, and status flags. slug must be one of the values from GET /slickdeals/primary-categories -- an unrecognized slug (including a valid GET /slickdeals/categories tag slug, which is a different taxonomy) returns a typed invalid-parameter error rather than being sent upstream.", + "operationId": "slickdeals-primary-category", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Featured-category slug from GET /slickdeals/primary-categories", + "in": "query", + "name": "slug", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "laptop-deals" } ], "produces": [ @@ -369352,7 +404780,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/slickdeals.primaryCategoryResponseDoc" } }, "400": { @@ -369361,12 +404789,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -369385,33 +404807,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SKIMS static page", + "summary": "Browse current deals in one Slickdeals featured primary category", "tags": [ - "SKIMS" + "Slickdeals" ] } }, - "/skims/products": { + "/slickdeals/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized products from SKIMS's (https://skims.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "skims-products", + "description": "Searches Slickdeals (slickdeals.net), a community deal/coupon aggregator, for deal threads matching a free-text keyword query -- the same search this repo already exposes for Reddit, applied to Slickdeals' own deal-posting community. Each result is one community-submitted deal thread with its title (which conventionally embeds the deal price), a best-effort price extracted from that title, the merchant domain, the community vote (\"thumb\") score, the public Slickdeals username who posted it, and when it was posted. Pair a result's thread_id or url with GET /slickdeals/deal for the full detail record, including comment count and category. An optional forum_id restricts results to one Slickdeals legacy sub-forum (e.g. Hot Deals, Coupons) -- obtain a value from GET /slickdeals/forums, a closed enum validated before the request reaches upstream. An optional deal_type_id restricts results to one Slickdeals deal-type tag (e.g. Coupon, Free / Freebie, YMMV) -- obtain a value from GET /slickdeals/deal-types, also a closed enum validated before the request reaches upstream; composes with forum_id.", + "operationId": "slickdeals-search", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Free-text keyword query", "in": "query", - "name": "page", + "name": "q", + "required": true, + "type": "string", + "x-example": "laptop" + }, + { + "description": "Restrict results to one Slickdeals legacy sub-forum, from GET /slickdeals/forums", + "in": "query", + "name": "forum_id", "type": "integer", - "x-example": 1 + "x-example": 9 }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Restrict results to one Slickdeals deal-type tag, from GET /slickdeals/deal-types", "in": "query", - "name": "limit", + "name": "deal_type_id", "type": "integer", - "x-example": 50 + "x-example": 1774 } ], "produces": [ @@ -369421,7 +404851,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/slickdeals.searchResponseDoc" } }, "400": { @@ -369448,27 +404878,61 @@ "ApiKeyAuth": [] } ], - "summary": "List SKIMS products", + "summary": "Search Slickdeals community-submitted deals by keyword", "tags": [ - "SKIMS" + "Slickdeals" ] } }, - "/skims/products/{handle}": { + "/slickdeals/search/advanced": { "get": { "consumes": [ "application/json" ], - "description": "Returns normalized product detail for one SKIMS (https://skims.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "skims-product", + "description": "Searches Slickdeals' modern search surface -- a richer alternative to GET /slickdeals/search's keyword-only RSS feed. Returns real pagination (page/total_pages/per_page/result_count), integer vote/comment/view counts read directly from the page's own data (not parsed from free text), a fuller per-deal record (store id, discount percent, status flags), and facets -- Categories, Stores, and Brands available for the current query, each option carrying a value usable as category_id/brand_id/store_id. Facet values and counts are scoped to the current query, not a site-wide enumeration -- category_id/brand_id/store_id are passthrough filters (obtain a value from a prior response's own facets), not validated against a closed enum. sort defaults to relevance; other values are passed through unvalidated since no server-side enumeration of the full accepted set was found.", + "operationId": "slickdeals-search-advanced", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Free-text keyword query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "laptop" + }, + { + "description": "1-based result page, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Sort order, default relevance", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "relevance" + }, + { + "description": "Category facet id, from a prior response's own facets", + "in": "query", + "name": "category_id", + "type": "integer", + "x-example": 9 + }, + { + "description": "Brand facet id, from a prior response's own facets", + "in": "query", + "name": "brand_id", + "type": "integer" + }, + { + "description": "Store facet id, from a prior response's own facets", + "in": "query", + "name": "store_id", + "type": "integer", + "x-example": 482 } ], "produces": [ @@ -369478,7 +404942,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/slickdeals.searchAdvancedResponseDoc" } }, "400": { @@ -369487,12 +404951,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -369511,45 +404969,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SKIMS product", + "summary": "Search Slickdeals with real pagination, counts, and facets", "tags": [ - "SKIMS" + "Slickdeals" ] } }, - "/skims/products/{handle}/recommendations": { + "/sloanreview/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns normalized recommended products for one SKIMS (https://skims.com) product handle. The route handle is resolved to a Shopify product id before fetching recommendations. The storefront URL is fixed server-side.", - "operationId": "skims-product-recommendations", + "description": "Returns an MIT Sloan Management Review article's metadata and full body paragraphs from an existing public archive.today snapshot. Sloan Review's origin HTML is paywalled/partial; no login, cookies, or subscription credentials are used. Coverage is partial and an article without a verified full snapshot returns 404.", + "operationId": "sloanreview-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 Sloan Review article URL", "in": "query", - "name": "intent", + "name": "url", + "required": true, "type": "string", - "x-example": "related" + "x-example": "https://sloanreview.mit.edu/article/how-ai-creates-a-capability-mirage/" } ], "produces": [ @@ -369559,7 +404996,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/sloanreview.articleResponseDoc" } }, "400": { @@ -369592,41 +405029,30 @@ "ApiKeyAuth": [] } ], - "summary": "List SKIMS product recommendations", + "summary": "Get MIT Sloan Management Review article content", "tags": [ - "SKIMS" + "MIT Sloan Management Review" ] } }, - "/skims/search/suggest": { + "/sloanreview/articles": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from SKIMS's (https://skims.com) credential-free predictive search Ajax endpoint. The storefront URL is fixed server-side.", - "operationId": "skims-search-suggest", + "description": "Returns a paginated, sitemap-backed index of all article URLs currently published by MIT Sloan Management Review. Use an item's URL with sloanreview-article to request archive-backed body content; archive availability remains dependent on a public snapshot existing for that article.", + "operationId": "sloanreview-articles", "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", + "description": "1-based page number (default 1)", "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Items per page, 1-500 (default 100)", "in": "query", - "name": "limit", + "name": "page_size", "type": "integer", - "x-example": 10 + "x-example": 100 } ], "produces": [ @@ -369636,7 +405062,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/sloanreview.articlesResponseDoc" } }, "400": { @@ -369663,44 +405089,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get SKIMS search suggestions", + "summary": "List MIT Sloan Management Review article URLs", "tags": [ - "SKIMS" + "MIT Sloan Management Review" ] } }, - "/skims/sitemap/urls": { + "/sloanreview/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns capped URL entries from SKIMS's (https://skims.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "skims-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 complete public MIT Sloan Management Review topic taxonomy discovered from the site's All Topics page. The returned slugs are the accepted values for sloanreview-topic.", + "operationId": "sloanreview-categories", "produces": [ "application/json" ], @@ -369708,13 +405106,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sloanreview.categoriesResponseDoc" } }, "429": { @@ -369735,19 +405127,16 @@ "ApiKeyAuth": [] } ], - "summary": "List SKIMS sitemap URLs", + "summary": "Get MIT Sloan Management Review topic taxonomy", "tags": [ - "SKIMS" + "MIT Sloan Management Review" ] } }, - "/skims/sitemaps": { + "/sloanreview/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns child sitemap URLs from SKIMS's (https://skims.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "skims-sitemaps", + "description": "Returns article cards from MIT Sloan Management Review's public homepage feed.", + "operationId": "sloanreview-headlines", "produces": [ "application/json" ], @@ -369755,13 +405144,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sloanreview.headlinesResponseDoc" } }, "429": { @@ -369782,19 +405165,82 @@ "ApiKeyAuth": [] } ], - "summary": "List SKIMS sitemaps", + "summary": "Get MIT Sloan Management Review headlines", "tags": [ - "SKIMS" + "MIT Sloan Management Review" ] } }, - "/skims/store": { + "/sloanreview/topic": { "get": { - "consumes": [ - "application/json" + "description": "Returns article cards from one public Sloan Review topic page. Use sloanreview-categories for the complete accepted slug set; this includes the primary navigation topics and the site's child topic pages.", + "operationId": "sloanreview-topic", + "parameters": [ + { + "description": "Sloan Review topic slug returned by sloanreview-categories", + "enum": [ + "ai-machine-learning", + "analytics-business-intelligence", + "automation", + "boards-corporate-governance", + "business-models-strategy", + "climate-change", + "collaboration", + "corporate-social-responsibility-sustainability", + "crisis-management", + "culture", + "customers", + "data-ai-machine-learning", + "data-culture", + "developing-strategy", + "digital-marketing", + "disruption", + "diversity-inclusion", + "equality", + "ethics", + "executing-strategy", + "financial-management-risk", + "global-strategy", + "innovation-3", + "innovation-strategy", + "it-governance-leadership", + "leadership", + "leadership-skills", + "leading-change", + "managing-technology", + "managing-your-career", + "marketing", + "marketing-strategy", + "new-product-development", + "operations", + "organizational-behavior", + "organizational-structure", + "organizational-transformation", + "performance-management", + "platforms-ecosystems", + "project-management", + "quality-service", + "remote-work", + "security-privacy", + "skills-learning", + "social-media", + "social-responsibility", + "strategy", + "supply-chains-logistics", + "sustainability-social-responsibility", + "talent-management", + "technology-implementation", + "technology-innovation-strategy", + "work-life-balance", + "workplace-teams-culture" + ], + "in": "query", + "name": "topic", + "required": true, + "type": "string", + "x-example": "strategy" + } ], - "description": "Returns normalized storefront metadata for SKIMS (https://skims.com), sourced from credential-free storefront JSON. This endpoint is a brand-pinned wrapper around the generic Shopify store family: the storefront URL is fixed server-side, so no `url` parameter is accepted. If the vanity domain blocks `/products.json`, the service may fall back to a public `*.myshopify.com` domain discovered from the storefront page, or to the storefront's own embedded page data for storefronts that expose neither.", - "operationId": "skims-store", "produces": [ "application/json" ], @@ -369802,7 +405248,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/sloanreview.topicResponseDoc" } }, "400": { @@ -369811,6 +405257,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -369829,24 +405281,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get SKIMS store metadata", + "summary": "Get an MIT Sloan Management Review topic archive", "tags": [ - "SKIMS" + "MIT Sloan Management Review" ] } }, - "/skynews/article": { + "/smh/article": { "get": { - "description": "Returns public Sky News article metadata and body paragraphs from a canonical article URL.", - "operationId": "skynews-article", + "description": "Returns one Sydney Morning Herald article's public metadata and the body paragraphs an anonymous visitor's page request is served, from a canonical article URL. The Sydney Morning Herald 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": "smh-article", "parameters": [ { - "description": "Canonical Sky News article URL", + "description": "Canonical The Sydney Morning Herald article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://news.sky.com/story/example-story-12345678" + "x-example": "https://www.smh.com.au/politics/nsw/identity-rabbit-hole-one-nation-cops-spray-over-criticism-of-aboriginal-flag-pin-20260924-p6107h.html" } ], "produces": [ @@ -369856,7 +405308,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/publicnews.smhArticleResponseDoc" } }, "400": { @@ -369883,24 +405335,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sky News article content", + "summary": "Get The Sydney Morning Herald article content", "tags": [ - "Sky News" + "The Sydney Morning Herald" ] } }, - "/skynews/author": { + "/smh/author": { "get": { - "description": "Returns a Sky News author's byline metadata, biography, and recent articles from a canonical author URL.", - "operationId": "skynews-author", + "description": "Returns a Sydney Morning Herald journalist's public profile -- name, short biography, headshot, contact email and social links where published -- plus their recent stories, from a canonical https://www.smh.com.au/by/- URL.", + "operationId": "smh-author", "parameters": [ { - "description": "Canonical Sky News author URL", + "description": "Canonical The Sydney Morning Herald journalist URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://news.sky.com/author/sam-coates-763" + "x-example": "https://www.smh.com.au/by/michael-mcgowan-p536tc" } ], "produces": [ @@ -369910,7 +405362,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.skyNewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.smhAuthorResponseDoc" } }, "400": { @@ -369937,39 +405389,122 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sky News author profile", + "summary": "Get a Sydney Morning Herald journalist profile", "tags": [ - "Sky News" + "The Sydney Morning Herald" ] } }, - "/skynews/headlines": { + "/smh/headlines": { "get": { - "description": "Returns fresh headlines from one Sky News section, either its official RSS feed or (for the 5 sections with no feed) its public hub page.", - "operationId": "skynews-headlines", + "description": "Returns the current stories for one Sydney Morning Herald section: title, canonical URL, summary, author, publication time, and image where the section lists them. section must be one of the slugs returned by /smh/sections; any other value is rejected with a 400 before The Sydney Morning Herald is contacted.", + "operationId": "smh-headlines", "parameters": [ { - "description": "Sky News section slug", + "description": "Section slug from /smh/sections", "enum": [ - "home", - "uk", - "world", - "us", - "business", + "sydney-news", + "national/nsw", "politics", - "technology", - "entertainment", - "strange", + "politics/federal", + "politics/nsw", + "politics/victoria", + "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/victoria", + "national/queensland", + "national/western-australia", + "opinion", + "property", + "property/news", + "property/living", + "sport", + "sport/nrl", + "sport/rugby-union", + "sport/cricket", + "sport/soccer", + "sport/afl", + "sport/racing", + "sport/tennis", + "sport/netball", + "sport/basketball", + "sport/motorsport", + "sport/cycling", + "sport/golf", + "sport/nfl", + "sport/athletics", + "sport/swimming", + "sport/boxing", + "goodfood", + "goodfood/sydney-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", - "science-climate-tech", - "offbeat", - "analysis", - "data-and-forensics" + "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" + "type": "string", + "x-example": "politics/federal" } ], "produces": [ @@ -370000,16 +405535,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sky News section headlines", + "summary": "Get The Sydney Morning Herald section headlines", "tags": [ - "Sky News" + "The Sydney Morning Herald" ] } }, - "/skynews/news": { + "/smh/news": { "get": { - "description": "Returns fresh Sky News top stories from its public RSS feed.", - "operationId": "skynews-news", + "description": "Returns The Sydney Morning Herald's current \"Latest News\" public RSS feed: each story's title, canonical URL, summary, author, publication time, and lead image.", + "operationId": "smh-news", "produces": [ "application/json" ], @@ -370038,16 +405573,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sky News top stories", + "summary": "Get The Sydney Morning Herald top stories", "tags": [ - "Sky News" + "The Sydney Morning Herald" ] } }, - "/skynews/sections": { + "/smh/sections": { "get": { - "description": "Returns the Sky News section inventory: 9 official RSS feeds plus 5 additional site sections with no RSS feed, listed from their public hub page instead.", - "operationId": "skynews-sections", + "description": "Lists every Sydney Morning Herald section accepted by /smh/headlines (96 sections from the site's own section menu), each with its slug, display name, and public section-front URL.", + "operationId": "smh-sections", "produces": [ "application/json" ], @@ -370064,24 +405599,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sky News sections", + "summary": "Get The Sydney Morning Herald sections", "tags": [ - "Sky News" + "The Sydney Morning Herald" ] } }, - "/skynews/video": { + "/sofascore/event": { "get": { - "description": "Returns one Sky News video's public metadata (title, description, thumbnails, duration, embed URL) from a canonical video URL. There is no transcript or article body for a video.", - "operationId": "skynews-video", + "consumes": [ + "application/json" + ], + "description": "Returns one match's detail (teams, score, status, venue, referee) from SofaScore's credential-free public JSON.", + "operationId": "sofascore-event", "parameters": [ { - "description": "Canonical Sky News video URL", + "description": "Numeric SofaScore event (match) id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://news.sky.com/video/example-video-12345678" + "x-example": "14025013" } ], "produces": [ @@ -370091,7 +405629,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.skyNewsVideoResponseDoc" + "$ref": "#/definitions/sofascore.eventResponseDoc" } }, "400": { @@ -370106,37 +405644,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Sky News video metadata", - "tags": [ - "Sky News" - ] - } - }, - "/skynews/videos": { - "get": { - "description": "Returns recent videos from the public Sky News videos hub.", - "operationId": "skynews-videos", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.skyNewsVideosResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -370150,24 +405662,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Sky News videos hub", + "summary": "SofaScore event detail", "tags": [ - "Sky News" + "SofaScore" ] } }, - "/skysports/article": { + "/sofascore/event-h2h": { "get": { - "description": "Returns public Sky Sports article metadata and body paragraphs from a canonical article URL.", - "operationId": "skysports-article", + "consumes": [ + "application/json" + ], + "description": "Returns the historical head-to-head win/draw record between a match's two teams (and managers, when available) from SofaScore's credential-free public JSON.", + "operationId": "sofascore-event-h2h", "parameters": [ { - "description": "Canonical Sky Sports article URL", + "description": "Numeric SofaScore event (match) id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.skysports.com/football/news/13592544/example-story" + "x-example": "14025013" } ], "produces": [ @@ -370177,7 +405692,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/sofascore.eventH2HResponseDoc" } }, "400": { @@ -370192,6 +405707,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -370204,24 +405725,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sky Sports article", + "summary": "SofaScore event head-to-head", "tags": [ - "Sky Sports" + "SofaScore" ] } }, - "/skysports/author": { + "/sofascore/event-incidents": { "get": { - "description": "Returns public author metadata, biography, and recent articles from a canonical author URL.", - "operationId": "skysports-author", + "consumes": [ + "application/json" + ], + "description": "Returns one match's goal, card, substitution, and period timeline from SofaScore's credential-free public JSON. An empty `incidents` list is a valid response before kickoff.", + "operationId": "sofascore-event-incidents", "parameters": [ { - "description": "Canonical Sky Sports author URL", + "description": "Numeric SofaScore event (match) id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.skysports.com/author/kaveh-solhekol-773" + "x-example": "14025013" } ], "produces": [ @@ -370231,7 +405755,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.skySportsAuthorResponseDoc" + "$ref": "#/definitions/sofascore.eventIncidentsResponseDoc" } }, "400": { @@ -370246,108 +405770,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Sky Sports author profile", - "tags": [ - "Sky Sports" - ] - } - }, - "/skysports/headlines": { - "get": { - "description": "Returns current headlines from one live Sky Sports section page.", - "operationId": "skysports-headlines", - "parameters": [ - { - "description": "Sky Sports section slug", - "enum": [ - "football", - "f1", - "cricket", - "rugby-union", - "rugby-league", - "golf", - "boxing", - "nfl", - "tennis", - "nba", - "racing", - "darts", - "netball", - "mma", - "more-sports", - "athletics", - "basketball", - "cycling", - "snooker", - "motor-sport", - "wwe", - "olympics" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string" - } - ], - "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", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Sky Sports section headlines", - "tags": [ - "Sky Sports" - ] - } - }, - "/skysports/news": { - "get": { - "description": "Returns the latest Sky Sports top stories from its public RSS feed.", - "operationId": "skysports-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -370361,50 +405788,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sky Sports top stories", + "summary": "SofaScore event incidents", "tags": [ - "Sky Sports" + "SofaScore" ] } }, - "/skysports/sections": { + "/sofascore/event-lineups": { "get": { - "description": "Returns the 22 currently reachable sections in the live Sky Sports sports navigation.", - "operationId": "skysports-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Sky Sports sections", - "tags": [ - "Sky Sports" - ] - } - }, - "/slate/article": { - "get": { - "description": "Returns public Slate article metadata and server-delivered body paragraphs from a canonical dated Slate URL. It does not log in, use account cookies, or bypass a challenge; is_paywalled reports when Slate marks the delivered page as subscription-gated.", - "operationId": "slate-article", + "description": "Returns one match's starting XI and substitutes per side, with formation, from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no lineups for the match.", + "operationId": "sofascore-event-lineups", "parameters": [ { - "description": "Canonical HTTPS Slate article URL", + "description": "Numeric SofaScore event (match) id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://slate.com/news-and-politics/2026/09/example.html" + "x-example": "14025013" } ], "produces": [ @@ -370414,7 +405818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slate.articleResponseDoc" + "$ref": "#/definitions/sofascore.eventLineupsResponseDoc" } }, "400": { @@ -370435,12 +405839,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -370453,76 +405851,27 @@ "ApiKeyAuth": [] } ], - "summary": "Slate article content", + "summary": "SofaScore event lineups", "tags": [ - "Slate" + "SofaScore" ] } }, - "/slate/categories": { + "/sofascore/event-odds": { "get": { - "description": "Lists the exact Slate section values accepted by slate-headlines. The set includes all, news-and-politics, culture, technology, business, life, and advice; subsection navigation pages are not RSS feeds and are intentionally not accepted by slate-headlines.", - "operationId": "slate-categories", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/slate.categoriesResponseDoc" - } - }, - "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": "Slate public feed sections", - "tags": [ - "Slate" - ] - } - }, - "/slate/headlines": { - "get": { - "description": "Returns current Slate article-card metadata from one public RSS feed. section must be one of the values returned by slate-categories.", - "operationId": "slate-headlines", + "description": "Returns one match's betting markets and choices from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no odds for the match.", + "operationId": "sofascore-event-odds", "parameters": [ { - "default": "all", - "description": "Slate feed section", - "enum": [ - "all", - "news-and-politics", - "culture", - "technology", - "business", - "life", - "advice" - ], + "description": "Numeric SofaScore event (match) id", "in": "query", - "name": "section", - "type": "string" + "name": "id", + "required": true, + "type": "string", + "x-example": "14025013" } ], "produces": [ @@ -370532,7 +405881,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slate.headlinesResponseDoc" + "$ref": "#/definitions/sofascore.eventOddsResponseDoc" } }, "400": { @@ -370553,12 +405902,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -370571,26 +405914,27 @@ "ApiKeyAuth": [] } ], - "summary": "Slate section headlines", + "summary": "SofaScore event odds", "tags": [ - "Slate" + "SofaScore" ] } }, - "/slickdeals/categories": { + "/sofascore/event-statistics": { "get": { "consumes": [ "application/json" ], - "description": "Returns Slickdeals' own full category/tag list -- the discovery endpoint for GET /slickdeals/category's slug parameter. This is a separate taxonomy from the category/sub_category fields GET /slickdeals/deal returns for an individual deal (Slickdeals maintains multiple parallel category/tag id spaces, not one) -- these slugs are the ones GET /slickdeals/category's own browse pages accept. The list is refreshed from Slickdeals' own site periodically; an optional q parameter narrows it to a substring match.", - "operationId": "slickdeals-categories", + "description": "Returns one match's statistics (possession, shots, passes, and more, grouped and split by period) from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no tracked statistics for the match.", + "operationId": "sofascore-event-statistics", "parameters": [ { - "description": "Case-insensitive substring filter on slug or name", + "description": "Numeric SofaScore event (match) id", "in": "query", - "name": "q", + "name": "id", + "required": true, "type": "string", - "x-example": "laptop" + "x-example": "14025013" } ], "produces": [ @@ -370600,7 +405944,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.categoriesResponseDoc" + "$ref": "#/definitions/sofascore.eventStatisticsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -370621,27 +405977,32 @@ "ApiKeyAuth": [] } ], - "summary": "List every Slickdeals deal category/tag", + "summary": "SofaScore event statistics", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/category": { + "/sofascore/live-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current deal listing for one Slickdeals category/tag (e.g. \"laptop-bag\", \"apparel\"): for each deal, title, price, list price, store, community vote score, comment count, the public username who posted it, and status flags (is_popular, is_expired, is_new, is_frontpage). slug must be one of the values from GET /slickdeals/categories -- an unrecognized slug returns a typed invalid-parameter error rather than being sent upstream. Pair a result's thread_id or url with GET /slickdeals/deal for the full detail record (description, full taxonomy).", - "operationId": "slickdeals-category", + "description": "Returns currently live events for a sport from SofaScore's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, and `tennis`. An empty `events` list is a valid response when nothing is live right now.", + "operationId": "sofascore-live-events", "parameters": [ { - "description": "Category/tag slug from GET /slickdeals/categories", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "tennis" + ], "in": "query", - "name": "slug", + "name": "sport", "required": true, "type": "string", - "x-example": "laptop-bag" + "x-example": "football" } ], "produces": [ @@ -370651,7 +406012,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.categoryResponseDoc" + "$ref": "#/definitions/sofascore.liveEventsResponseDoc" } }, "400": { @@ -370678,33 +406039,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse current deals in one Slickdeals category/tag", + "summary": "SofaScore live events", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/comments": { + "/sofascore/player": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Slickdeals deal thread's full comment thread: for each comment, the public username who posted it (with their forum rank/title and total post count -- the same public-forum-post attribution class this repo already exposes for Reddit), the comment content (as HTML and as cleaned plain text), when it was posted, a permalink, and reaction counts (like, funny, helpful, not helpful). Give either url (the exact value returned by GET /slickdeals/search or GET /slickdeals/deal) or thread_id; at least one is required. has_more indicates whether Slickdeals' own page truncated the reply list (no further pagination is currently exposed by this endpoint).", - "operationId": "slickdeals-comments", + "description": "Returns one player's bio (position, height, market value, current team) from SofaScore's credential-free public JSON.", + "operationId": "sofascore-player", "parameters": [ { - "description": "Full Slickdeals deal URL, as returned by GET /slickdeals/search or GET /slickdeals/deal (https://slickdeals.net/f/...)", + "description": "Numeric SofaScore player id", "in": "query", - "name": "url", + "name": "id", + "required": true, "type": "string", - "x-example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53" - }, - { - "description": "Slickdeals numeric thread id", - "in": "query", - "name": "thread_id", - "type": "integer", - "x-example": 20015817 + "x-example": "855833" } ], "produces": [ @@ -370714,7 +406069,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.commentsResponseDoc" + "$ref": "#/definitions/sofascore.playerResponseDoc" } }, "400": { @@ -370747,33 +406102,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Slickdeals deal thread's comments", + "summary": "SofaScore player detail", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/deal": { + "/sofascore/round-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Slickdeals deal thread's full detail: title, store, final/list price, community vote score, comment count, whether the deal is marked expired, the deal's product category and taxonomy (category/sub_category/category_paths, and separately the legacy forum/forum_id the thread was posted under), the public Slickdeals username who posted it (\"found by\" attribution, the same public-forum-post class this repo already exposes for Reddit) with a public community-standing summary (reputation, join date, deals posted, total votes/comments), a related_deals sidebar (Slickdeals' own Popular/Trending picks), the outbound merchant link, and the deal's own description. Give either url (the exact value returned by GET /slickdeals/search) or thread_id (Slickdeals' own numeric thread id, e.g. from a deal's URL path /f/{thread_id}-...); at least one is required. An unknown or removed deal returns 404.", - "operationId": "slickdeals-deal", + "description": "Returns fixtures for one round of a competition season from SofaScore's credential-free public JSON. Get `id` from search and `season` from tournament-seasons.", + "operationId": "sofascore-round-events", "parameters": [ { - "description": "Full Slickdeals deal URL, as returned by GET /slickdeals/search (https://slickdeals.net/f/...)", + "description": "Numeric SofaScore unique-tournament (competition) id", "in": "query", - "name": "url", + "name": "id", + "required": true, "type": "string", - "x-example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53" + "x-example": "17" }, { - "description": "Slickdeals numeric thread id", + "description": "Numeric SofaScore season id", "in": "query", - "name": "thread_id", + "name": "season", + "required": true, + "type": "string", + "x-example": "76986" + }, + { + "description": "Round number", + "in": "query", + "name": "round", + "required": true, "type": "integer", - "x-example": 20015817 + "x-example": 1 } ], "produces": [ @@ -370783,7 +406148,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.dealResponseDoc" + "$ref": "#/definitions/sofascore.roundEventsResponseDoc" } }, "400": { @@ -370816,26 +406181,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Slickdeals deal thread's full detail", + "summary": "SofaScore round fixtures", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/deal-types": { + "/sofascore/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Slickdeals' own deal-type tag list (Coupon, Free / Freebie, Giveaway, Gift Card, Mail In Rebate, Online Only, YMMV, ...) -- the discovery endpoint for GET /slickdeals/search's deal_type_id parameter. Confirmed identical across multiple Slickdeals sub-forums, unlike the broader interest-tag space it is drawn from, which was not found to be reliably enumerable. An optional q parameter narrows it to a substring match on name.", - "operationId": "slickdeals-deal-types", + "description": "Searches SofaScore's credential-free public JSON for teams, players, and competitions matching a free-text query. An empty `results` list is a valid response when nothing matches.", + "operationId": "sofascore-search", "parameters": [ { - "description": "Case-insensitive substring filter on name", + "description": "Free-text search query", "in": "query", "name": "q", + "required": true, "type": "string", - "x-example": "free" + "x-example": "barcelona" } ], "produces": [ @@ -370845,7 +406211,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.dealTypesResponseDoc" + "$ref": "#/definitions/sofascore.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -370866,26 +406238,48 @@ "ApiKeyAuth": [] } ], - "summary": "List every Slickdeals deal-type tag", + "summary": "SofaScore universal search", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/forums": { + "/sofascore/standings": { "get": { "consumes": [ "application/json" ], - "description": "Returns Slickdeals' own full legacy sub-forum list (e.g. Hot Deals, Coupons, Freebies) -- the discovery endpoint for GET /slickdeals/search's forum_id parameter. A separate, coarser-grained taxonomy from GET /slickdeals/categories' 421-entry tag list: this is the classification GET /slickdeals/deal, /slickdeals/search/advanced, and /slickdeals/frontpage already surface as forum_id, with this endpoint as the way to resolve an id to a name or filter search results by it. The list is refreshed from Slickdeals' own site periodically; an optional q parameter narrows it to a substring match on name.", - "operationId": "slickdeals-forums", + "description": "Returns a league table for a competition season from SofaScore's credential-free public JSON. The `type` enum accepts `total`, `home`, and `away`. Get `id` from search and `season` from tournament-seasons.", + "operationId": "sofascore-standings", "parameters": [ { - "description": "Case-insensitive substring filter on name", + "description": "Numeric SofaScore unique-tournament (competition) id", "in": "query", - "name": "q", + "name": "id", + "required": true, "type": "string", - "x-example": "deal" + "x-example": "17" + }, + { + "description": "Numeric SofaScore season id", + "in": "query", + "name": "season", + "required": true, + "type": "string", + "x-example": "76986" + }, + { + "description": "Standings variant", + "enum": [ + "total", + "home", + "away" + ], + "in": "query", + "name": "type", + "required": true, + "type": "string", + "x-example": "total" } ], "produces": [ @@ -370895,7 +406289,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.forumsResponseDoc" + "$ref": "#/definitions/sofascore.standingsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -370916,26 +406322,27 @@ "ApiKeyAuth": [] } ], - "summary": "List every Slickdeals legacy sub-forum", + "summary": "SofaScore standings", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/frontpage": { + "/sofascore/team": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Slickdeals' own homepage deal listing -- the deals Slickdeals itself is currently featuring, distinct from a keyword search or a single category/tag's own listing. Each deal carries the same fields as GET /slickdeals/search/advanced's results (real integer vote/comment/view counts, store id, discount, status flags), plus is_fire_deal and has_rebate flags this feed's cards carry. Pagination is next-page-only (has_next_page), since the page itself exposes no total page count.", - "operationId": "slickdeals-frontpage", + "description": "Returns one team's detail (identity, manager, venue, primary competition) from SofaScore's credential-free public JSON.", + "operationId": "sofascore-team", "parameters": [ { - "description": "1-based frontpage listing page, default 1", + "description": "Numeric SofaScore team id", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "id", + "required": true, + "type": "string", + "x-example": "2817" } ], "produces": [ @@ -370945,7 +406352,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.frontpageResponseDoc" + "$ref": "#/definitions/sofascore.teamResponseDoc" } }, "400": { @@ -370954,6 +406361,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -370972,26 +406385,46 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Slickdeals' own homepage deal feed", + "summary": "SofaScore team detail", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/primary-categories": { + "/sofascore/team-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns Slickdeals' small, curated set of \"featured\" primary-category landing pages (e.g. laptop-deals, tv-deals) -- the discovery endpoint for GET /slickdeals/primary-category's slug parameter. This is a separate taxonomy from GET /slickdeals/categories' 421-entry tag list and from GET /slickdeals/deal's own category/sub_category fields -- Slickdeals maintains multiple parallel category/tag id spaces, not one. Unlike /slickdeals/categories, no single live page enumerates this set; it is maintained as periodically-refreshed reference data.", - "operationId": "slickdeals-primary-categories", + "description": "Returns a page of a team's upcoming or recent fixtures from SofaScore's credential-free public JSON. The `direction` enum accepts `next` and `last`. An empty `events` list is a valid response when there is no fixture on that page.", + "operationId": "sofascore-team-events", "parameters": [ { - "description": "Case-insensitive substring filter on slug or name", + "description": "Numeric SofaScore team id", "in": "query", - "name": "q", + "name": "id", + "required": true, "type": "string", - "x-example": "laptop" + "x-example": "2817" + }, + { + "description": "Fixture direction", + "enum": [ + "next", + "last" + ], + "in": "query", + "name": "direction", + "required": true, + "type": "string", + "x-example": "next" + }, + { + "description": "Zero-based page number", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -371001,7 +406434,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.primaryCategoriesResponseDoc" + "$ref": "#/definitions/sofascore.teamEventsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -371022,27 +406467,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Slickdeals' featured primary-category landing pages", + "summary": "SofaScore team fixtures", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/primary-category": { + "/sofascore/team-players": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current deal listing for one Slickdeals featured primary-category landing page (e.g. laptop-deals, tv-deals): for each deal, title, price, list price, store, community vote score, comment count, found-by username, and status flags. slug must be one of the values from GET /slickdeals/primary-categories -- an unrecognized slug (including a valid GET /slickdeals/categories tag slug, which is a different taxonomy) returns a typed invalid-parameter error rather than being sent upstream.", - "operationId": "slickdeals-primary-category", + "description": "Returns a team's full squad from SofaScore's credential-free public JSON.", + "operationId": "sofascore-team-players", "parameters": [ { - "description": "Featured-category slug from GET /slickdeals/primary-categories", + "description": "Numeric SofaScore team id", "in": "query", - "name": "slug", + "name": "id", "required": true, "type": "string", - "x-example": "laptop-deals" + "x-example": "2817" } ], "produces": [ @@ -371052,7 +406497,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.primaryCategoryResponseDoc" + "$ref": "#/definitions/sofascore.teamPlayersResponseDoc" } }, "400": { @@ -371061,6 +406506,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -371079,41 +406530,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse current deals in one Slickdeals featured primary category", + "summary": "SofaScore team players", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/search": { + "/sofascore/tournament-seasons": { "get": { "consumes": [ "application/json" ], - "description": "Searches Slickdeals (slickdeals.net), a community deal/coupon aggregator, for deal threads matching a free-text keyword query -- the same search this repo already exposes for Reddit, applied to Slickdeals' own deal-posting community. Each result is one community-submitted deal thread with its title (which conventionally embeds the deal price), a best-effort price extracted from that title, the merchant domain, the community vote (\"thumb\") score, the public Slickdeals username who posted it, and when it was posted. Pair a result's thread_id or url with GET /slickdeals/deal for the full detail record, including comment count and category. An optional forum_id restricts results to one Slickdeals legacy sub-forum (e.g. Hot Deals, Coupons) -- obtain a value from GET /slickdeals/forums, a closed enum validated before the request reaches upstream. An optional deal_type_id restricts results to one Slickdeals deal-type tag (e.g. Coupon, Free / Freebie, YMMV) -- obtain a value from GET /slickdeals/deal-types, also a closed enum validated before the request reaches upstream; composes with forum_id.", - "operationId": "slickdeals-search", + "description": "Returns the season list for a competition from SofaScore's credential-free public JSON. Use a returned season id with the standings and round-events endpoints.", + "operationId": "sofascore-tournament-seasons", "parameters": [ { - "description": "Free-text keyword query", + "description": "Numeric SofaScore unique-tournament (competition) id", "in": "query", - "name": "q", + "name": "id", "required": true, "type": "string", - "x-example": "laptop" - }, - { - "description": "Restrict results to one Slickdeals legacy sub-forum, from GET /slickdeals/forums", - "in": "query", - "name": "forum_id", - "type": "integer", - "x-example": 9 - }, - { - "description": "Restrict results to one Slickdeals deal-type tag, from GET /slickdeals/deal-types", - "in": "query", - "name": "deal_type_id", - "type": "integer", - "x-example": 1774 + "x-example": "17" } ], "produces": [ @@ -371123,7 +406560,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.searchResponseDoc" + "$ref": "#/definitions/sofascore.tournamentSeasonsResponseDoc" } }, "400": { @@ -371132,6 +406569,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -371150,61 +406593,37 @@ "ApiKeyAuth": [] } ], - "summary": "Search Slickdeals community-submitted deals by keyword", + "summary": "SofaScore competition seasons", "tags": [ - "Slickdeals" + "SofaScore" ] } }, - "/slickdeals/search/advanced": { + "/sonic/availability": { "get": { "consumes": [ "application/json" ], - "description": "Searches Slickdeals' modern search surface -- a richer alternative to GET /slickdeals/search's keyword-only RSS feed. Returns real pagination (page/total_pages/per_page/result_count), integer vote/comment/view counts read directly from the page's own data (not parsed from free text), a fuller per-deal record (store id, discount percent, status flags), and facets -- Categories, Stores, and Brands available for the current query, each option carrying a value usable as category_id/brand_id/store_id. Facet values and counts are scoped to the current query, not a site-wide enumeration -- category_id/brand_id/store_id are passthrough filters (obtain a value from a prior response's own facets), not validated against a closed enum. sort defaults to relevance; other values are passed through unvalidated since no server-side enumeration of the full accepted set was found.", - "operationId": "slickdeals-search-advanced", + "description": "Returns the bookable order-ahead windows for one Sonic Drive-In restaurant, grouped by service channel and local date. Each window has a UTC start_time and end_time. Also returns the store's timezone, how long each window lasts (slot_duration_minutes), the prep/handoff buffer before the first bookable window (lead_time_minutes), and service_types -- every channel the store supports, which is a superset of the channels that currently have windows. fulfillment selects the request method and accepts exactly `PICKUP` or `DELIVERY`; note the per-window service_type is a separate, finer vocabulary and can be `ORDER_AHEAD`, `CURBSIDE_PICKUP`, `DRIVE_THROUGH`, `STORE`, `PICKUP` or `DELIVERY`. A closed or fully-booked restaurant returns an empty channels array with total_slots 0, not an error. An unknown store_id returns 404.", + "operationId": "sonic-availability", "parameters": [ { - "description": "Free-text keyword query", + "description": "Sonic store number, e.g. from /sonic/nearby", "in": "query", - "name": "q", + "name": "store_id", "required": true, "type": "string", - "x-example": "laptop" - }, - { - "description": "1-based result page, default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Sort order, default relevance", - "in": "query", - "name": "sort", - "type": "string", - "x-example": "relevance" - }, - { - "description": "Category facet id, from a prior response's own facets", - "in": "query", - "name": "category_id", - "type": "integer", - "x-example": 9 - }, - { - "description": "Brand facet id, from a prior response's own facets", - "in": "query", - "name": "brand_id", - "type": "integer" + "x-example": "4521" }, { - "description": "Store facet id, from a prior response's own facets", + "description": "Fulfillment method: PICKUP or DELIVERY. Defaults to PICKUP.", + "enum": [ + "PICKUP", + "DELIVERY" + ], "in": "query", - "name": "store_id", - "type": "integer", - "x-example": 482 + "name": "fulfillment", + "type": "string" } ], "produces": [ @@ -371214,7 +406633,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/slickdeals.searchAdvancedResponseDoc" + "$ref": "#/definitions/sonic.availabilityResponseDoc" } }, "400": { @@ -371223,6 +406642,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -371241,26 +406666,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Slickdeals with real pagination, counts, and facets", + "summary": "List a Sonic Drive-In restaurant's order-ahead time slots", "tags": [ - "Slickdeals" + "Sonic" ] } }, - "/sloanreview/article": { + "/sonic/categories": { "get": { - "description": "Returns an MIT Sloan Management Review article's metadata and full body paragraphs from an existing public archive.today snapshot. Sloan Review's origin HTML is paywalled/partial; no login, cookies, or subscription credentials are used. Coverage is partial and an article without a verified full snapshot returns 404.", - "operationId": "sloanreview-article", - "parameters": [ - { - "description": "Canonical Sloan Review article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://sloanreview.mit.edu/article/how-ai-creates-a-capability-mirage/" - } + "consumes": [ + "application/json" ], + "description": "Returns Sonic Drive-In's national menu's top-level categories -- Breakfast, Value, Limited Time, Combos, Burgers, Chicken, Hot Dogs, Sandwiches, Snacks & Sides, Sweets, Tea & Coffee, Lemonades & Limeades, Sodas, Slushes, Refreshers, Wacky Pack Kids Meals and others -- each with its slug (the value GET /sonic/menu takes) and a page_count of subcategory/item pages nested under it.", + "operationId": "sonic-categories", "produces": [ "application/json" ], @@ -371268,19 +406686,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sloanreview.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sonic.categoriesResponseDoc" } }, "429": { @@ -371301,32 +406707,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get MIT Sloan Management Review article content", + "summary": "List Sonic Drive-In menu categories", "tags": [ - "MIT Sloan Management Review" + "Sonic" ] } }, - "/sloanreview/articles": { + "/sonic/deals": { "get": { - "description": "Returns a paginated, sitemap-backed index of all article URLs currently published by MIT Sloan Management Review. Use an item's URL with sloanreview-article to request archive-backed body content; archive availability remains dependent on a public snapshot existing for that article.", - "operationId": "sloanreview-articles", - "parameters": [ - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Items per page, 1-500 (default 100)", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 100 - } + "consumes": [ + "application/json" ], + "description": "Returns the promotions currently published on Sonic Drive-In's national deals page -- each with its marketing headline, public name, description, legal terms, call-to-action label and link, and creative image. This page is not listed in Sonic's own sitemap, so GET /sonic/sitemap will never surface it. Deals are national marketing offers, not per-store pricing; there is no price field in this source. Between campaigns Sonic can publish the page with no promotions at all, which returns an empty deals array with count 0 rather than an error.", + "operationId": "sonic-deals", "produces": [ "application/json" ], @@ -371334,13 +406727,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sloanreview.articlesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sonic.dealsResponseDoc" } }, "429": { @@ -371361,16 +406748,19 @@ "ApiKeyAuth": [] } ], - "summary": "List MIT Sloan Management Review article URLs", + "summary": "List Sonic Drive-In's current promotions", "tags": [ - "MIT Sloan Management Review" + "Sonic" ] } }, - "/sloanreview/categories": { + "/sonic/directory": { "get": { - "description": "Returns the complete public MIT Sloan Management Review topic taxonomy discovered from the site's All Topics page. The returned slugs are the accepted values for sloanreview-topic.", - "operationId": "sloanreview-categories", + "consumes": [ + "application/json" + ], + "description": "Returns Sonic Drive-In's restaurant directory as a country to state to city tree, with a restaurant count at every level. Use it to discover which states and cities have restaurants before calling GET /sonic/locations or GET /sonic/nearby. Each city carries both its display name and the slug that composes into a store path. Counts here describe listed restaurants and are internally consistent (the city counts sum to total_count); GET /sonic/locations enumerates a larger set of store pages, so the two totals intentionally differ.", + "operationId": "sonic-directory", "produces": [ "application/json" ], @@ -371378,7 +406768,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sloanreview.categoriesResponseDoc" + "$ref": "#/definitions/sonic.directoryResponseDoc" } }, "429": { @@ -371399,16 +406789,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get MIT Sloan Management Review topic taxonomy", + "summary": "Browse Sonic Drive-In's restaurant directory by country, state and city", "tags": [ - "MIT Sloan Management Review" + "Sonic" ] } }, - "/sloanreview/headlines": { + "/sonic/item": { "get": { - "description": "Returns article cards from MIT Sloan Management Review's public homepage feed.", - "operationId": "sloanreview-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one menu page's detail: name, description, image, and a link to Sonic's site-wide nutrition/allergen guide PDF. path must be a \"menu\" section path with kind category, subcategory, or item from GET /sonic/sitemap (or a path copied from a GET /sonic/menu-adjacent page you already know).", + "operationId": "sonic-item", + "parameters": [ + { + "description": "A menu page path from /sonic/sitemap (section=menu)", + "in": "query", + "name": "path", + "required": true, + "type": "string", + "x-example": "menu/categories/breakfast/local-breakfast-favorites/bacon-egg-and-cheese-bagel" + } + ], "produces": [ "application/json" ], @@ -371416,7 +406819,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sloanreview.headlinesResponseDoc" + "$ref": "#/definitions/sonic.itemResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -371437,80 +406852,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get MIT Sloan Management Review headlines", + "summary": "Look up one Sonic Drive-In menu item's detail", "tags": [ - "MIT Sloan Management Review" + "Sonic" ] } }, - "/sloanreview/topic": { + "/sonic/location-suggest": { "get": { - "description": "Returns article cards from one public Sloan Review topic page. Use sloanreview-categories for the complete accepted slug set; this includes the primary navigation topics and the site's child topic pages.", - "operationId": "sloanreview-topic", + "consumes": [ + "application/json" + ], + "description": "Completes a partial address, place, city, state or ZIP into ranked matches, each already carrying the latitude and longitude that GET /sonic/nearby takes -- so a caller can run a Sonic restaurant search from free text instead of coordinates. Each suggestion's layer describes its granularity and is one of `address`, `locality`, `state`, `postalCode` or `place`, and confidence is one of `exact`, `interpolated` or `fallback`. Results are restricted to one country (default US). A query that matches nothing returns an empty suggestions array with count 0, not an error.", + "operationId": "sonic-location-suggest", "parameters": [ { - "description": "Sloan Review topic slug returned by sloanreview-categories", - "enum": [ - "ai-machine-learning", - "analytics-business-intelligence", - "automation", - "boards-corporate-governance", - "business-models-strategy", - "climate-change", - "collaboration", - "corporate-social-responsibility-sustainability", - "crisis-management", - "culture", - "customers", - "data-ai-machine-learning", - "data-culture", - "developing-strategy", - "digital-marketing", - "disruption", - "diversity-inclusion", - "equality", - "ethics", - "executing-strategy", - "financial-management-risk", - "global-strategy", - "innovation-3", - "innovation-strategy", - "it-governance-leadership", - "leadership", - "leadership-skills", - "leading-change", - "managing-technology", - "managing-your-career", - "marketing", - "marketing-strategy", - "new-product-development", - "operations", - "organizational-behavior", - "organizational-structure", - "organizational-transformation", - "performance-management", - "platforms-ecosystems", - "project-management", - "quality-service", - "remote-work", - "security-privacy", - "skills-learning", - "social-media", - "social-responsibility", - "strategy", - "supply-chains-logistics", - "sustainability-social-responsibility", - "talent-management", - "technology-implementation", - "technology-innovation-strategy", - "work-life-balance", - "workplace-teams-culture" - ], + "description": "Partial address, place, city, state or ZIP to complete", "in": "query", - "name": "topic", + "name": "query", "required": true, "type": "string", - "x-example": "strategy" + "x-example": "cheyenne wy" + }, + { + "description": "Maximum suggestions, 1-25. Defaults to 5. Upstream may return fewer.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 5 + }, + { + "description": "ISO 3166-1 alpha-2 country code to restrict results to. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -371520,7 +406896,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sloanreview.topicResponseDoc" + "$ref": "#/definitions/sonic.locationSuggestResponseDoc" } }, "400": { @@ -371529,12 +406905,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -371553,24 +406923,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MIT Sloan Management Review topic archive", + "summary": "Complete an address into coordinates for Sonic Drive-In store search", "tags": [ - "MIT Sloan Management Review" + "Sonic" ] } }, - "/smh/article": { + "/sonic/locations": { "get": { - "description": "Returns one Sydney Morning Herald article's public metadata and the body paragraphs an anonymous visitor's page request is served, from a canonical article URL. The Sydney Morning Herald 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": "smh-article", + "consumes": [ + "application/json" + ], + "description": "Returns Sonic Drive-In's restaurant listing one page at a time, each entry already split into its country, state, city and address parts plus a ready-made path value that GET /sonic/store takes -- so enumerating restaurants needs no path parsing. Filter by state and/or city to narrow the list; city slugs come from GET /sonic/directory. Results are sorted by path so paging is reproducible. This listing covers more store pages than GET /sonic/directory counts, since the directory counts listed restaurants while this enumerates every published store page; a filter that matches nothing returns an empty locations array with total 0, not an error. If Sonic's live store-locator service refuses the request, the list is built from Sonic's public store sitemap instead (same entry shape; it can omit stores without a published page, and source_url shows which source answered).", + "operationId": "sonic-locations", "parameters": [ { - "description": "Canonical The Sydney Morning Herald article URL", + "description": "Two-letter state or province code to filter by", "in": "query", - "name": "url", - "required": true, + "name": "state", "type": "string", - "x-example": "https://www.smh.com.au/politics/nsw/identity-rabbit-hole-one-nation-cops-spray-over-criticism-of-aboriginal-flag-pin-20260924-p6107h.html" + "x-example": "WY" + }, + { + "description": "City slug to filter by, from /sonic/directory", + "in": "query", + "name": "city", + "type": "string", + "x-example": "cheyenne" + }, + { + "description": "1-based page number. Defaults to 1.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Entries per page, 1-500. Defaults to 100.", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -371580,7 +406973,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.smhArticleResponseDoc" + "$ref": "#/definitions/sonic.locationsResponseDoc" } }, "400": { @@ -371589,8 +406982,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371607,24 +407000,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Sydney Morning Herald article content", + "summary": "List Sonic Drive-In restaurants with ready-made store paths", "tags": [ - "The Sydney Morning Herald" + "Sonic" ] } }, - "/smh/author": { + "/sonic/menu": { "get": { - "description": "Returns a Sydney Morning Herald journalist's public profile -- name, short biography, headshot, contact email and social links where published -- plus their recent stories, from a canonical https://www.smh.com.au/by/- URL.", - "operationId": "smh-author", + "consumes": [ + "application/json" + ], + "description": "Returns the items in one Sonic Drive-In menu category, each with its name and published calorie count. Category slugs come from GET /sonic/categories. Some entries are themselves a nested size/variant group (e.g. \"Coffee\" expands to Small/Medium/Large/Rt.44 orderable sizes) rather than a single orderable product -- there is no price or full nutrition panel in this source, only calories; see GET /sonic/item for description, image, and a link to Sonic's nutrition guide.", + "operationId": "sonic-menu", "parameters": [ { - "description": "Canonical The Sydney Morning Herald journalist URL", + "description": "Category slug from /sonic/categories", "in": "query", - "name": "url", + "name": "category", "required": true, "type": "string", - "x-example": "https://www.smh.com.au/by/michael-mcgowan-p536tc" + "x-example": "breakfast" } ], "produces": [ @@ -371634,7 +407030,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.smhAuthorResponseDoc" + "$ref": "#/definitions/sonic.menuResponseDoc" } }, "400": { @@ -371649,6 +407045,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -371661,122 +407063,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sydney Morning Herald journalist profile", + "summary": "List one Sonic Drive-In menu category's items", "tags": [ - "The Sydney Morning Herald" + "Sonic" ] } }, - "/smh/headlines": { + "/sonic/nearby": { "get": { - "description": "Returns the current stories for one Sydney Morning Herald section: title, canonical URL, summary, author, publication time, and image where the section lists them. section must be one of the slugs returned by /smh/sections; any other value is rejected with a 400 before The Sydney Morning Herald is contacted.", - "operationId": "smh-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns Sonic Drive-In restaurants within a radius of a latitude/longitude, nearest first, one page at a time. Each result carries the same detail as GET /sonic/store -- address, phone, coordinates, open/closed status, amenities, weekly hours per fulfillment channel, and delivery-provider deep links -- plus distance_miles from the search centre, so ranking or mapping results needs no follow-up call per store. Use this instead of paging GET /sonic/sitemap when you know roughly where you are looking. An area with no restaurants returns an empty stores array with total_stores 0, not an error.", + "operationId": "sonic-nearby", "parameters": [ { - "description": "Section slug from /smh/sections", - "enum": [ - "sydney-news", - "national/nsw", - "politics", - "politics/federal", - "politics/nsw", - "politics/victoria", - "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/victoria", - "national/queensland", - "national/western-australia", - "opinion", - "property", - "property/news", - "property/living", - "sport", - "sport/nrl", - "sport/rugby-union", - "sport/cricket", - "sport/soccer", - "sport/afl", - "sport/racing", - "sport/tennis", - "sport/netball", - "sport/basketball", - "sport/motorsport", - "sport/cycling", - "sport/golf", - "sport/nfl", - "sport/athletics", - "sport/swimming", - "sport/boxing", - "goodfood", - "goodfood/sydney-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" - ], + "description": "Latitude of the search centre, -90 to 90", "in": "query", - "name": "section", + "name": "latitude", "required": true, - "type": "string", - "x-example": "politics/federal" + "type": "number", + "x-example": 35.4676 + }, + { + "description": "Longitude of the search centre, -180 to 180", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -97.5164 + }, + { + "description": "Search radius in miles, 1-100. Defaults to 25.", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 25 + }, + { + "description": "Stores per page, 1-50. Defaults to 10.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Zero-based page number. Defaults to 0.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -371786,7 +407122,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/sonic.nearbyResponseDoc" } }, "400": { @@ -371795,6 +407131,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -371807,16 +407149,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Sydney Morning Herald section headlines", + "summary": "Find Sonic Drive-In restaurants near a coordinate", "tags": [ - "The Sydney Morning Herald" + "Sonic" ] } }, - "/smh/news": { + "/sonic/nutrition-documents": { "get": { - "description": "Returns The Sydney Morning Herald's current \"Latest News\" public RSS feed: each story's title, canonical URL, summary, author, publication time, and lead image.", - "operationId": "smh-news", + "consumes": [ + "application/json" + ], + "description": "Returns the nutrition, allergen and ingredient documents Sonic Drive-In publishes nationally -- the printable menu, the Spanish-language menu, the nutrition guide, allergen information, and the ingredient statement -- each with a directly fetchable URL, file name, MIME type, size in bytes, and the date it was last republished. These are the only structured nutrition source Sonic publishes; per-item macro and micronutrient values are not available anywhere on the public site, and GET /sonic/menu carries calories only. Files are large print-ready PDFs (several megabytes each), so check size_bytes before downloading.", + "operationId": "sonic-nutrition-documents", "produces": [ "application/json" ], @@ -371824,7 +407169,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/sonic.nutritionDocumentsResponseDoc" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -371845,16 +407196,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Sydney Morning Herald top stories", + "summary": "List Sonic Drive-In's official nutrition and allergen documents", "tags": [ - "The Sydney Morning Herald" + "Sonic" ] } }, - "/smh/sections": { + "/sonic/sitemap": { "get": { - "description": "Lists every Sydney Morning Herald section accepted by /smh/headlines (96 sections from the site's own section menu), each with its slug, display name, and public section-front URL.", - "operationId": "smh-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one page of Sonic Drive-In's own sitemap: section=menu lists every menu category/subcategory/item page (298 pages), section=locations lists every store-directory page (state/city/store, ~3,365 stores). Each entry's path is what GET /sonic/item (menu section) or GET /sonic/store (locations section, kind=store) takes.", + "operationId": "sonic-sitemap", + "parameters": [ + { + "description": "Which sitemap to read", + "enum": [ + "menu", + "locations" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "menu" + }, + { + "description": "Optional. Filter by page kind. menu: index, category, subcategory, item. locations: index, state, city, store.", + "enum": [ + "index", + "category", + "subcategory", + "item", + "state", + "city", + "store" + ], + "in": "query", + "name": "kind", + "type": "string" + }, + { + "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" ], @@ -371862,7 +407259,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/sonic.sitemapResponseDoc" + } + }, + "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" } } }, @@ -371871,27 +407286,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Sydney Morning Herald sections", + "summary": "Browse Sonic Drive-In's menu-page or store-locator sitemap", "tags": [ - "The Sydney Morning Herald" + "Sonic" ] } }, - "/sofascore/event": { + "/sonic/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns one match's detail (teams, score, status, venue, referee) from SofaScore's credential-free public JSON.", - "operationId": "sofascore-event", + "description": "Returns one Sonic Drive-In restaurant's address, phone, coordinates, open/closed status, amenities, weekly hours broken down per fulfillment channel (order-ahead, pickup, curbside, in-store, delivery, drive-through), and delivery-provider deep links (DoorDash, GrubHub, Uber Eats, Postmates). path must be a \"locations\" section, kind=store path from GET /sonic/sitemap.", + "operationId": "sonic-store", "parameters": [ { - "description": "Numeric SofaScore event (match) id", + "description": "A store path from /sonic/sitemap (section=locations, kind=store)", "in": "query", - "name": "id", + "name": "path", "required": true, "type": "string", - "x-example": "14025013" + "x-example": "locations/us/wy/cheyenne/2540-dell-range-blvd/store-4521" } ], "produces": [ @@ -371901,7 +407316,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.eventResponseDoc" + "$ref": "#/definitions/sonic.storeResponseDoc" } }, "400": { @@ -371934,27 +407349,27 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore event detail", + "summary": "Look up one Sonic Drive-In restaurant by its locator path", "tags": [ - "SofaScore" + "Sonic" ] } }, - "/sofascore/event-h2h": { + "/soundcloud/playlist": { "get": { "consumes": [ "application/json" ], - "description": "Returns the historical head-to-head win/draw record between a match's two teams (and managers, when available) from SofaScore's credential-free public JSON.", - "operationId": "sofascore-event-h2h", + "description": "Returns one playlist or album's metadata plus its full track list: owner, likes/reposts counts, and every track's title, artwork, and playback/likes counts. Public data sourced from SoundCloud's own JSON API.", + "operationId": "soundcloud-playlist", "parameters": [ { - "description": "Numeric SofaScore event (match) id", + "description": "Full soundcloud.com playlist/album URL (a playlist's permalink_url)", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "14025013" + "x-example": "https://soundcloud.com/lofi_chill/sets/lofi-chill" } ], "produces": [ @@ -371964,7 +407379,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.eventH2HResponseDoc" + "$ref": "#/definitions/soundcloud.playlistResponseDoc" } }, "400": { @@ -371997,27 +407412,27 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore event head-to-head", + "summary": "Get a SoundCloud playlist or album's detail", "tags": [ - "SofaScore" + "SoundCloud" ] } }, - "/sofascore/event-incidents": { + "/soundcloud/profile": { "get": { "consumes": [ "application/json" ], - "description": "Returns one match's goal, card, substitution, and period timeline from SofaScore's credential-free public JSON. An empty `incidents` list is a valid response before kickoff.", - "operationId": "sofascore-event-incidents", + "description": "Returns one user/artist's profile: bio, avatar, followers/followings/track/playlist/likes counts, and verified status. Public data sourced from SoundCloud's own JSON API.", + "operationId": "soundcloud-profile", "parameters": [ { - "description": "Numeric SofaScore event (match) id", + "description": "Full soundcloud.com user/artist profile URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "14025013" + "x-example": "https://soundcloud.com/lofi_girl" } ], "produces": [ @@ -372027,7 +407442,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.eventIncidentsResponseDoc" + "$ref": "#/definitions/soundcloud.profileResponseDoc" } }, "400": { @@ -372060,27 +407475,34 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore event incidents", + "summary": "Get a SoundCloud user/artist profile", "tags": [ - "SofaScore" + "SoundCloud" ] } }, - "/sofascore/event-lineups": { + "/soundcloud/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one match's starting XI and substitutes per side, with formation, from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no lineups for the match.", - "operationId": "sofascore-event-lineups", + "description": "Returns tracks matching a query: title, artwork, playback/likes/comment/repost counts, and uploader. Public data sourced from SoundCloud's own JSON API.", + "operationId": "soundcloud-search", "parameters": [ { - "description": "Numeric SofaScore event (match) id", + "description": "Search text", "in": "query", - "name": "id", + "name": "query", "required": true, "type": "string", - "x-example": "14025013" + "x-example": "lofi hip hop" + }, + { + "description": "Number of tracks to return (default 20, max 50)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -372090,7 +407512,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.eventLineupsResponseDoc" + "$ref": "#/definitions/soundcloud.searchResponseDoc" } }, "400": { @@ -372099,12 +407521,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -372123,27 +407539,27 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore event lineups", + "summary": "Search SoundCloud tracks", "tags": [ - "SofaScore" + "SoundCloud" ] } }, - "/sofascore/event-odds": { + "/soundcloud/track": { "get": { "consumes": [ "application/json" ], - "description": "Returns one match's betting markets and choices from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no odds for the match.", - "operationId": "sofascore-event-odds", + "description": "Returns one track's full metadata: title, artwork, description, genre, tags, playback/likes/comment/repost counts, and uploader. Public data sourced from SoundCloud's own JSON API.", + "operationId": "soundcloud-track", "parameters": [ { - "description": "Numeric SofaScore event (match) id", + "description": "Full soundcloud.com track URL (a track's permalink_url)", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "14025013" + "x-example": "https://soundcloud.com/lofi_girl/4-am-studysession" } ], "produces": [ @@ -372153,7 +407569,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.eventOddsResponseDoc" + "$ref": "#/definitions/soundcloud.trackResponseDoc" } }, "400": { @@ -372186,27 +407602,34 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore event odds", + "summary": "Get a SoundCloud track's detail", "tags": [ - "SofaScore" + "SoundCloud" ] } }, - "/sofascore/event-statistics": { + "/soundcloud/user-tracks": { "get": { "consumes": [ "application/json" ], - "description": "Returns one match's statistics (possession, shots, passes, and more, grouped and split by period) from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no tracked statistics for the match.", - "operationId": "sofascore-event-statistics", + "description": "Returns a user/artist's own uploaded tracks, most recent first: title, artwork, playback/likes/comment/repost counts. Public data sourced from SoundCloud's own JSON API.", + "operationId": "soundcloud-user-tracks", "parameters": [ { - "description": "Numeric SofaScore event (match) id", + "description": "Full soundcloud.com user/artist profile URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "14025013" + "x-example": "https://soundcloud.com/lofi_girl" + }, + { + "description": "Number of tracks to return (default 20, max 50)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -372216,7 +407639,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.eventStatisticsResponseDoc" + "$ref": "#/definitions/soundcloud.userTracksResponseDoc" } }, "400": { @@ -372249,32 +407672,24 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore event statistics", + "summary": "Get a SoundCloud user's own uploaded tracks", "tags": [ - "SofaScore" + "SoundCloud" ] } }, - "/sofascore/live-events": { + "/space/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns currently live events for a sport from SofaScore's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, and `tennis`. An empty `events` list is a valid response when nothing is live right now.", - "operationId": "sofascore-live-events", + "description": "Returns public Space.com article metadata and body paragraphs from a canonical article URL.", + "operationId": "space-article", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "tennis" - ], + "description": "Canonical Space.com article URL", "in": "query", - "name": "sport", + "name": "url", "required": true, "type": "string", - "x-example": "football" + "x-example": "https://www.space.com/astronomy/solar-system/asteroids/astronomers-just-named-an-asteroid-after-weird-al-yankovic" } ], "produces": [ @@ -372284,7 +407699,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.liveEventsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -372293,8 +407708,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -372311,27 +407726,30 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore live events", + "summary": "Get Space.com article content", "tags": [ - "SofaScore" + "Space" ] } }, - "/sofascore/player": { + "/space/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one player's bio (position, height, market value, current team) from SofaScore's credential-free public JSON.", - "operationId": "sofascore-player", + "description": "Returns one Space.com author's public profile: name, job title, biography, and their most recent articles.", + "operationId": "space-author", "parameters": [ { - "description": "Numeric SofaScore player id", + "description": "Author slug, e.g. elizabeth-howell", "in": "query", - "name": "id", - "required": true, + "name": "slug", "type": "string", - "x-example": "855833" + "x-example": "elizabeth-howell" + }, + { + "description": "Canonical space.com/author/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.space.com/author/elizabeth-howell" } ], "produces": [ @@ -372341,7 +407759,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.playerResponseDoc" + "$ref": "#/definitions/publicnews.spaceAuthorResponseDoc" } }, "400": { @@ -372356,12 +407774,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -372374,43 +407786,87 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore player detail", + "summary": "Get a Space.com author profile", "tags": [ - "SofaScore" + "Space" ] } }, - "/sofascore/round-events": { + "/space/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns fixtures for one round of a competition season from SofaScore's credential-free public JSON. Get `id` from search and `season` from tournament-seasons.", - "operationId": "sofascore-round-events", + "description": "Returns fresh Space.com headlines from one public category hub.", + "operationId": "space-headlines", "parameters": [ { - "description": "Numeric SofaScore unique-tournament (competition) id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "17" - }, - { - "description": "Numeric SofaScore season id", + "description": "Space.com category slug", + "enum": [ + "astronomy", + "astronomy-black-holes", + "astronomy-dark-universe", + "astronomy-exoplanets", + "astronomy-galaxies", + "astronomy-hubble-space-telescope", + "astronomy-james-webb-space-telescope", + "astronomy-solar-system", + "astronomy-solar-system-asteroids", + "astronomy-solar-system-comets", + "astronomy-solar-system-dwarf-planets", + "astronomy-solar-system-earth", + "astronomy-solar-system-jupiter", + "astronomy-solar-system-mars", + "astronomy-solar-system-mercury", + "astronomy-solar-system-moon", + "astronomy-solar-system-neptune", + "astronomy-solar-system-pluto", + "astronomy-solar-system-saturn", + "astronomy-solar-system-sun", + "astronomy-solar-system-uranus", + "astronomy-solar-system-venus", + "astronomy-stars", + "entertainment", + "entertainment-space-books", + "entertainment-space-games", + "entertainment-space-movies-shows", + "entertainment-space-toys-lego", + "science", + "science-astrophysics", + "science-climate-change", + "science-particle-physics", + "science-weather", + "space-exploration", + "space-exploration-human-spaceflight", + "space-exploration-launches-spacecraft", + "space-exploration-missions", + "space-exploration-missions-apollo", + "space-exploration-missions-artemis", + "space-exploration-missions-asteroid-comet-missions", + "space-exploration-missions-international-space-station", + "space-exploration-missions-mars-rovers", + "space-exploration-missions-new-horizons", + "space-exploration-missions-parker-solar-probe", + "space-exploration-missions-space-shuttle", + "space-exploration-missions-voyager", + "space-exploration-private-spaceflight", + "space-exploration-satellites", + "space-exploration-search-for-life", + "stargazing", + "stargazing-astrophotography", + "stargazing-auroras", + "stargazing-constellations", + "stargazing-eclipses", + "stargazing-eclipses-lunar-eclipses", + "stargazing-eclipses-solar-eclipses", + "stargazing-meteor-showers", + "stargazing-skywatching-kit", + "technology", + "technology-aerospace", + "technology-drones" + ], "in": "query", - "name": "season", + "name": "section", "required": true, "type": "string", - "x-example": "76986" - }, - { - "description": "Round number", - "in": "query", - "name": "round", - "required": true, - "type": "integer", - "x-example": 1 + "x-example": "astronomy" } ], "produces": [ @@ -372420,7 +407876,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.roundEventsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -372429,18 +407885,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": { @@ -372453,29 +407897,16 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore round fixtures", + "summary": "Get Space.com section headlines", "tags": [ - "SofaScore" + "Space" ] } }, - "/sofascore/search": { + "/space/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches SofaScore's credential-free public JSON for teams, players, and competitions matching a free-text query. An empty `results` list is a valid response when nothing matches.", - "operationId": "sofascore-search", - "parameters": [ - { - "description": "Free-text search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "barcelona" - } - ], + "description": "Returns fresh Space.com top stories (space, astronomy, and skywatching news) from the site's own latest-news hub.", + "operationId": "space-news", "produces": [ "application/json" ], @@ -372483,13 +407914,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -372510,50 +407935,42 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore universal search", + "summary": "Get Space.com top stories", "tags": [ - "SofaScore" + "Space" ] } }, - "/sofascore/standings": { + "/space/sections": { "get": { - "consumes": [ + "description": "Returns the public Space.com category taxonomy used by the headlines endpoint.", + "operationId": "space-sections", + "produces": [ "application/json" ], - "description": "Returns a league table for a competition season from SofaScore's credential-free public JSON. The `type` enum accepts `total`, `home`, and `away`. Get `id` from search and `season` from tournament-seasons.", - "operationId": "sofascore-standings", - "parameters": [ - { - "description": "Numeric SofaScore unique-tournament (competition) id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "17" - }, - { - "description": "Numeric SofaScore season id", - "in": "query", - "name": "season", - "required": true, - "type": "string", - "x-example": "76986" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Standings variant", - "enum": [ - "total", - "home", - "away" - ], - "in": "query", - "name": "type", - "required": true, - "type": "string", - "x-example": "total" + "ApiKeyAuth": [] } ], + "summary": "Get Space.com sections", + "tags": [ + "Space" + ] + } + }, + "/sparkfun/categories": { + "get": { + "description": "Lists public SparkFun top-level browse categories with URL keys for sparkfun-category.", + "operationId": "sparkfun-categories", "produces": [ "application/json" ], @@ -372561,19 +407978,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.standingsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sparkfun.categoriesResponseDoc" } }, "429": { @@ -372594,27 +407999,53 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore standings", + "summary": "List SparkFun categories", "tags": [ - "SofaScore" + "SparkFun" ] } }, - "/sofascore/team": { + "/sparkfun/category": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one team's detail (identity, manager, venue, primary competition) from SofaScore's credential-free public JSON.", - "operationId": "sofascore-team", + "description": "Returns paginated public products and dynamic facet filters for a SparkFun category URL key. Each filter must be `attribute:value`; use values from the response's filters array.", + "operationId": "sparkfun-category", "parameters": [ { - "description": "Numeric SofaScore team id", + "description": "SparkFun category URL key", "in": "query", - "name": "id", + "name": "url_key", "required": true, "type": "string", - "x-example": "2817" + "x-example": "development-boards" + }, + { + "default": 1, + "description": "One-based result page (1-100)", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 24, + "description": "Products per page (1-24)", + "in": "query", + "maximum": 24, + "minimum": 1, + "name": "per_page", + "type": "integer" + }, + { + "collectionFormat": "multi", + "description": "Repeatable dynamic facet in attribute:value form", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "sf_qwiic_dev_board_type:8417" } ], "produces": [ @@ -372624,7 +408055,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.teamResponseDoc" + "$ref": "#/definitions/sparkfun.categoryResponseDoc" } }, "400": { @@ -372657,46 +408088,24 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore team detail", + "summary": "Browse a SparkFun category", "tags": [ - "SofaScore" + "SparkFun" ] } }, - "/sofascore/team-events": { + "/sparkfun/product": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of a team's upcoming or recent fixtures from SofaScore's credential-free public JSON. The `direction` enum accepts `next` and `last`. An empty `events` list is a valid response when there is no fixture on that page.", - "operationId": "sofascore-team-events", + "description": "Returns public product metadata, price, stock status, images, categories, a cleaned description, and SparkFun-related product recommendations for one SKU.", + "operationId": "sparkfun-product", "parameters": [ { - "description": "Numeric SofaScore team id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "2817" - }, - { - "description": "Fixture direction", - "enum": [ - "next", - "last" - ], + "description": "SparkFun product SKU", "in": "query", - "name": "direction", + "name": "sku", "required": true, "type": "string", - "x-example": "next" - }, - { - "description": "Zero-based page number", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 0 + "x-example": "DEV-18158" } ], "produces": [ @@ -372706,7 +408115,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.teamEventsResponseDoc" + "$ref": "#/definitions/sparkfun.productResponseDoc" } }, "400": { @@ -372739,27 +408148,53 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore team fixtures", + "summary": "Get a SparkFun product", "tags": [ - "SofaScore" + "SparkFun" ] } }, - "/sofascore/team-players": { + "/sparkfun/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a team's full squad from SofaScore's credential-free public JSON.", - "operationId": "sofascore-team-players", + "description": "Searches public SparkFun product data with pagination and dynamic facet filters. Each filter must be `attribute:value`; use values from the response's filters array.", + "operationId": "sparkfun-search", "parameters": [ { - "description": "Numeric SofaScore team id", + "description": "Product search query", "in": "query", - "name": "id", + "name": "q", "required": true, "type": "string", - "x-example": "2817" + "x-example": "arduino" + }, + { + "default": 1, + "description": "One-based result page (1-100)", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 24, + "description": "Products per page (1-24)", + "in": "query", + "maximum": 24, + "minimum": 1, + "name": "per_page", + "type": "integer" + }, + { + "collectionFormat": "multi", + "description": "Repeatable dynamic facet in attribute:value form", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "sf_qwiic_dev_board_type:8417" } ], "produces": [ @@ -372769,7 +408204,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.teamPlayersResponseDoc" + "$ref": "#/definitions/sparkfun.searchResponseDoc" } }, "400": { @@ -372778,12 +408213,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -372802,27 +408231,24 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore team players", + "summary": "Search SparkFun products", "tags": [ - "SofaScore" + "SparkFun" ] } }, - "/sofascore/tournament-seasons": { + "/sportingnews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the season list for a competition from SofaScore's credential-free public JSON. Use a returned season id with the standings and round-events endpoints.", - "operationId": "sofascore-tournament-seasons", + "description": "Returns public Sporting News US article metadata and body paragraphs from a canonical article URL.", + "operationId": "sportingnews-article", "parameters": [ { - "description": "Numeric SofaScore unique-tournament (competition) id", + "description": "Canonical Sporting News US article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "17" + "x-example": "https://www.sportingnews.com/us/nfl/dallas-cowboys/news/cowboys-george-pickens-production-way-down/30f07d65f36691600b3f97ba" } ], "produces": [ @@ -372832,7 +408258,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sofascore.tournamentSeasonsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -372847,12 +408273,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -372865,37 +408285,30 @@ "ApiKeyAuth": [] } ], - "summary": "SofaScore competition seasons", + "summary": "Get Sporting News article content", "tags": [ - "SofaScore" + "Sporting News" ] } }, - "/sonic/availability": { + "/sportingnews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the bookable order-ahead windows for one Sonic Drive-In restaurant, grouped by service channel and local date. Each window has a UTC start_time and end_time. Also returns the store's timezone, how long each window lasts (slot_duration_minutes), the prep/handoff buffer before the first bookable window (lead_time_minutes), and service_types -- every channel the store supports, which is a superset of the channels that currently have windows. fulfillment selects the request method and accepts exactly `PICKUP` or `DELIVERY`; note the per-window service_type is a separate, finer vocabulary and can be `ORDER_AHEAD`, `CURBSIDE_PICKUP`, `DRIVE_THROUGH`, `STORE`, `PICKUP` or `DELIVERY`. A closed or fully-booked restaurant returns an empty channels array with total_slots 0, not an error. An unknown store_id returns 404.", - "operationId": "sonic-availability", + "description": "Returns one Sporting News US author's public profile: name, bio, photo, public social links, and their most recent articles.", + "operationId": "sportingnews-author", "parameters": [ { - "description": "Sonic store number, e.g. from /sonic/nearby", + "description": "Author slug, e.g. anne-erickson", "in": "query", - "name": "store_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "4521" + "x-example": "anne-erickson" }, { - "description": "Fulfillment method: PICKUP or DELIVERY. Defaults to PICKUP.", - "enum": [ - "PICKUP", - "DELIVERY" - ], + "description": "Canonical sportingnews.com/us/author/ URL; alternative to slug", "in": "query", - "name": "fulfillment", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.sportingnews.com/us/author/anne-erickson" } ], "produces": [ @@ -372905,7 +408318,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.availabilityResponseDoc" + "$ref": "#/definitions/publicnews.sportingNewsAuthorResponseDoc" } }, "400": { @@ -372920,12 +408333,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -372938,19 +408345,72 @@ "ApiKeyAuth": [] } ], - "summary": "List a Sonic Drive-In restaurant's order-ahead time slots", + "summary": "Get a Sporting News author profile", "tags": [ - "Sonic" + "Sporting News" ] } }, - "/sonic/categories": { + "/sportingnews/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns fresh headlines from one public Sporting News US sport, league or topic feed.", + "operationId": "sportingnews-headlines", + "parameters": [ + { + "description": "Sporting News section slug", + "enum": [ + "baseball", + "basketball", + "boxing", + "bundesliga", + "champions-league", + "club-world-cup", + "college", + "cricket", + "culture", + "darts", + "fantasy", + "football", + "formula-1", + "golf", + "high-school", + "horse-racing", + "la-liga", + "liga-mx", + "mlb", + "mls", + "mma", + "nascar", + "nba", + "nba-draft", + "ncaa", + "ncaa-basketball", + "ncaa-football", + "nfl", + "nfl-draft", + "nhl", + "olympics", + "premier-league", + "sec", + "serie-a", + "soccer", + "softball", + "tennis", + "tickets", + "tsn", + "ufc", + "watch", + "wnba", + "womens-college-basketball", + "wwe" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "baseball" + } ], - "description": "Returns Sonic Drive-In's national menu's top-level categories -- Breakfast, Value, Limited Time, Combos, Burgers, Chicken, Hot Dogs, Sandwiches, Snacks & Sides, Sweets, Tea & Coffee, Lemonades & Limeades, Sodas, Slushes, Refreshers, Wacky Pack Kids Meals and others -- each with its slug (the value GET /sonic/menu takes) and a page_count of subcategory/item pages nested under it.", - "operationId": "sonic-categories", "produces": [ "application/json" ], @@ -372958,11 +408418,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -372979,19 +408439,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Sonic Drive-In menu categories", + "summary": "Get Sporting News section headlines", "tags": [ - "Sonic" + "Sporting News" ] } }, - "/sonic/deals": { + "/sportingnews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the promotions currently published on Sonic Drive-In's national deals page -- each with its marketing headline, public name, description, legal terms, call-to-action label and link, and creative image. This page is not listed in Sonic's own sitemap, so GET /sonic/sitemap will never surface it. Deals are national marketing offers, not per-store pricing; there is no price field in this source. Between campaigns Sonic can publish the page with no promotions at all, which returns an empty deals array with count 0 rather than an error.", - "operationId": "sonic-deals", + "description": "Returns fresh top stories from the Sporting News US edition public RSS feed. Only the US edition (sportingnews.com/us) is covered.", + "operationId": "sportingnews-news", "produces": [ "application/json" ], @@ -372999,7 +408456,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.dealsResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -373020,19 +408477,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Sonic Drive-In's current promotions", + "summary": "Get Sporting News top stories", "tags": [ - "Sonic" + "Sporting News" ] } }, - "/sonic/directory": { + "/sportingnews/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Sonic Drive-In's restaurant directory as a country to state to city tree, with a restaurant count at every level. Use it to discover which states and cities have restaurants before calling GET /sonic/locations or GET /sonic/nearby. Each city carries both its display name and the slug that composes into a store path. Counts here describe listed restaurants and are internally consistent (the city counts sum to total_count); GET /sonic/locations enumerates a larger set of store pages, so the two totals intentionally differ.", - "operationId": "sonic-directory", + "description": "Returns the public Sporting News US sport, league and topic feeds accepted by the headlines endpoint.", + "operationId": "sportingnews-sections", "produces": [ "application/json" ], @@ -373040,7 +408494,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.directoryResponseDoc" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -373061,27 +408515,30 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Sonic Drive-In's restaurant directory by country, state and city", + "summary": "Get Sporting News sections", "tags": [ - "Sonic" + "Sporting News" ] } }, - "/sonic/item": { + "/sportskeeda/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one menu page's detail: name, description, image, and a link to Sonic's site-wide nutrition/allergen guide PDF. path must be a \"menu\" section path with kind category, subcategory, or item from GET /sonic/sitemap (or a path copied from a GET /sonic/menu-adjacent page you already know).", - "operationId": "sonic-item", + "description": "Returns public article metadata and body paragraphs for a Sportskeeda article slug. Discovered slugs may contain case-preserving percent-encoded characters. A canonical Sportskeeda URL remains accepted for existing clients. Provide exactly one of slug or url; use /sportskeeda/sections and /sportskeeda/sitemaps for topic discovery.", + "operationId": "sportskeeda-article", "parameters": [ { - "description": "A menu page path from /sonic/sitemap (section=menu)", + "description": "Sportskeeda article path without host; preferred over url", "in": "query", - "name": "path", - "required": true, + "name": "slug", "type": "string", - "x-example": "menu/categories/breakfast/local-breakfast-favorites/bacon-egg-and-cheese-bagel" + "x-example": "football/rumor-psg-handed-major-lionel-messi-injury-scare-ahead-bayern-munich-clash-latest-fitness-update-reports" + }, + { + "description": "Canonical Sportskeeda article URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.sportskeeda.com/football/rumor-psg-handed-major-lionel-messi-injury-scare-ahead-bayern-munich-clash-latest-fitness-update-reports" } ], "produces": [ @@ -373091,7 +408548,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.itemResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -373106,12 +408563,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -373124,41 +408575,30 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Sonic Drive-In menu item's detail", + "summary": "Get a Sportskeeda article", "tags": [ - "Sonic" + "Sportskeeda" ] } }, - "/sonic/location-suggest": { + "/sportskeeda/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Completes a partial address, place, city, state or ZIP into ranked matches, each already carrying the latitude and longitude that GET /sonic/nearby takes -- so a caller can run a Sonic restaurant search from free text instead of coordinates. Each suggestion's layer describes its granularity and is one of `address`, `locality`, `state`, `postalCode` or `place`, and confidence is one of `exact`, `interpolated` or `fallback`. Results are restricted to one country (default US). A query that matches nothing returns an empty suggestions array with count 0, not an error.", - "operationId": "sonic-location-suggest", + "description": "Returns one public Sportskeeda author's name and recent article links from the canonical author profile.", + "operationId": "sportskeeda-author", "parameters": [ { - "description": "Partial address, place, city, state or ZIP to complete", + "description": "Sportskeeda author slug, e.g. sripad", "in": "query", - "name": "query", - "required": true, + "name": "slug", "type": "string", - "x-example": "cheyenne wy" - }, - { - "description": "Maximum suggestions, 1-25. Defaults to 5. Upstream may return fewer.", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 + "x-example": "sripad" }, { - "description": "ISO 3166-1 alpha-2 country code to restrict results to. Defaults to US.", + "description": "Canonical Sportskeeda /author/ URL; alternative to slug", "in": "query", - "name": "country", + "name": "url", "type": "string", - "x-example": "US" + "x-example": "https://www.sportskeeda.com/author/sripad" } ], "produces": [ @@ -373168,7 +408608,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.locationSuggestResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaAuthorResponseDoc" } }, "400": { @@ -373177,8 +408617,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -373195,47 +408635,32 @@ "ApiKeyAuth": [] } ], - "summary": "Complete an address into coordinates for Sonic Drive-In store search", + "summary": "Get a Sportskeeda author profile", "tags": [ - "Sonic" + "Sportskeeda" ] } }, - "/sonic/locations": { + "/sportskeeda/college-basketball-schedule": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Sonic Drive-In's restaurant listing one page at a time, each entry already split into its country, state, city and address parts plus a ready-made path value that GET /sonic/store takes -- so enumerating restaurants needs no path parsing. Filter by state and/or city to narrow the list; city slugs come from GET /sonic/directory. Results are sorted by path so paging is reproducible. This listing covers more store pages than GET /sonic/directory counts, since the directory counts listed restaurants while this enumerates every published store page; a filter that matches nothing returns an empty locations array with total 0, not an error.", - "operationId": "sonic-locations", + "description": "Returns all games and published scores for the requested date and season from Sportskeeda's first-party JSON feed. Discover valid season values with college-basketball-schedule-options. The upstream conference filter is currently unreliable and this endpoint does not accept it.", + "operationId": "sportskeeda-college-basketball-schedule", "parameters": [ { - "description": "Two-letter state or province code to filter by", - "in": "query", - "name": "state", - "type": "string", - "x-example": "WY" - }, - { - "description": "City slug to filter by, from /sonic/directory", + "description": "Game date in YYYY-MM-DD format", "in": "query", - "name": "city", + "name": "date", + "required": true, "type": "string", - "x-example": "cheyenne" - }, - { - "description": "1-based page number. Defaults to 1.", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "2026-11-02" }, { - "description": "Entries per page, 1-500. Defaults to 100.", + "description": "Season starting year returned by college-basketball-schedule-options", "in": "query", - "name": "page_size", + "name": "season", + "required": true, "type": "integer", - "x-example": 100 + "x-example": 2026 } ], "produces": [ @@ -373245,7 +408670,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.locationsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaCollegeBasketballScheduleResponseDoc" } }, "400": { @@ -373254,8 +408679,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -373272,27 +408697,23 @@ "ApiKeyAuth": [] } ], - "summary": "List Sonic Drive-In restaurants with ready-made store paths", + "summary": "Get Sportskeeda college basketball games for a date", "tags": [ - "Sonic" + "Sportskeeda" ] } }, - "/sonic/menu": { + "/sportskeeda/college-basketball-schedule-options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the items in one Sonic Drive-In menu category, each with its name and published calorie count. Category slugs come from GET /sonic/categories. Some entries are themselves a nested size/variant group (e.g. \"Coffee\" expands to Small/Medium/Large/Rt.44 orderable sizes) rather than a single orderable product -- there is no price or full nutrition panel in this source, only calories; see GET /sonic/item for description, image, and a link to Sonic's nutrition guide.", - "operationId": "sonic-menu", + "description": "Reads Sportskeeda's current college basketball schedule configuration. It returns every season from the published minimum through the current schedule season and the date-picker window. The conference selector is shown by the site, but its current-season feed metadata is incomplete.", + "operationId": "sportskeeda-college-basketball-schedule-options", "parameters": [ { - "description": "Category slug from /sonic/categories", + "description": "A season starting year from the live seasons list; defaults to the current schedule season", "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "breakfast" + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -373302,7 +408723,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.menuResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaCollegeBasketballScheduleOptionsResponseDoc" } }, "400": { @@ -373311,18 +408732,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": { @@ -373335,56 +408744,45 @@ "ApiKeyAuth": [] } ], - "summary": "List one Sonic Drive-In menu category's items", + "summary": "Discover college basketball schedule seasons and date window", "tags": [ - "Sonic" + "Sportskeeda" ] } }, - "/sonic/nearby": { + "/sportskeeda/cricket-commentary": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Sonic Drive-In restaurants within a radius of a latitude/longitude, nearest first, one page at a time. Each result carries the same detail as GET /sonic/store -- address, phone, coordinates, open/closed status, amenities, weekly hours per fulfillment channel, and delivery-provider deep links -- plus distance_miles from the search centre, so ranking or mapping results needs no follow-up call per store. Use this instead of paging GET /sonic/sitemap when you know roughly where you are looking. An area with no restaurants returns an empty stores array with total_stores 0, not an error.", - "operationId": "sonic-nearby", + "description": "Returns the current commentary feed. To page to older events, pass a 24-character lowercase hexadecimal cursor from an event in /sportskeeda/cricket-match's commentary field (the full feed may contain zero-filled IDs); language then selects an upstream language. The match page's commentary selector offers en, hi, ta, te, and bho. Language without cursor is rejected because the upstream feed ignores it.", + "operationId": "sportskeeda-cricket-commentary", "parameters": [ { - "description": "Latitude of the search centre, -90 to 90", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 35.4676 - }, - { - "description": "Longitude of the search centre, -180 to 180", + "description": "Host-free match path returned by /sportskeeda/schedule", "in": "query", - "name": "longitude", + "name": "slug", "required": true, - "type": "number", - "x-example": -97.5164 - }, - { - "description": "Search radius in miles, 1-100. Defaults to 25.", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 25 + "type": "string", + "x-example": "live-cricket-score/india-vs-west-indies-2nd-odi-30-september-2026" }, { - "description": "Stores per page, 1-50. Defaults to 10.", + "description": "Nonzero 24-character lowercase hexadecimal commentary ID from /sportskeeda/cricket-match commentary", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "cursor", + "type": "string", + "x-example": "6abba0970c04cda719d37b18" }, { - "description": "Zero-based page number. Defaults to 0.", + "description": "Older-comment language; valid only with cursor", + "enum": [ + "en", + "hi", + "ta", + "te", + "bho" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 0 + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -373394,7 +408792,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.nearbyResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaCricketCommentaryResponseDoc" } }, "400": { @@ -373403,8 +408801,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -373421,19 +408819,26 @@ "ApiKeyAuth": [] } ], - "summary": "Find Sonic Drive-In restaurants near a coordinate", + "summary": "Get Sportskeeda cricket ball-by-ball commentary", "tags": [ - "Sonic" + "Sportskeeda" ] } }, - "/sonic/nutrition-documents": { + "/sportskeeda/cricket-match": { "get": { - "consumes": [ - "application/json" + "description": "Returns the public scorecard, innings, teams, squads, player data, and latest commentary for a cricket match slug discovered from /sportskeeda/schedule. Betting fields are excluded.", + "operationId": "sportskeeda-cricket-match", + "parameters": [ + { + "description": "Host-free match path returned by /sportskeeda/schedule", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "live-cricket-score/india-vs-west-indies-2nd-odi-30-september-2026" + } ], - "description": "Returns the nutrition, allergen and ingredient documents Sonic Drive-In publishes nationally -- the printable menu, the Spanish-language menu, the nutrition guide, allergen information, and the ingredient statement -- each with a directly fetchable URL, file name, MIME type, size in bytes, and the date it was last republished. These are the only structured nutrition source Sonic publishes; per-item macro and micronutrient values are not available anywhere on the public site, and GET /sonic/menu carries calories only. Files are large print-ready PDFs (several megabytes each), so check size_bytes before downloading.", - "operationId": "sonic-nutrition-documents", "produces": [ "application/json" ], @@ -373441,17 +408846,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.nutritionDocumentsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaCricketMatchResponseDoc" } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -373468,59 +408873,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Sonic Drive-In's official nutrition and allergen documents", + "summary": "Get a Sportskeeda cricket match center", "tags": [ - "Sonic" + "Sportskeeda" ] } }, - "/sonic/sitemap": { + "/sportskeeda/depth-chart": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of Sonic Drive-In's own sitemap: section=menu lists every menu category/subcategory/item page (298 pages), section=locations lists every store-directory page (state/city/store, ~3,365 stores). Each entry's path is what GET /sonic/item (menu section) or GET /sonic/store (locations section, kind=store) takes.", - "operationId": "sonic-sitemap", + "description": "Returns every team and listed position/player from the live NFL depth chart. Players and team detail pages include slugs when Sportskeeda links them.", + "operationId": "sportskeeda-depth-chart", "parameters": [ { - "description": "Which sitemap to read", + "description": "Must be nfl/depth-chart", "enum": [ - "menu", - "locations" + "nfl/depth-chart" ], "in": "query", - "name": "section", + "name": "slug", "required": true, - "type": "string" - }, - { - "description": "Optional. Filter by page kind. menu: index, category, subcategory, item. locations: index, state, city, store.", - "enum": [ - "index", - "category", - "subcategory", - "item", - "state", - "city", - "store" - ], - "in": "query", - "name": "kind", - "type": "string" - }, - { - "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 + "type": "string", + "x-example": "nfl/depth-chart" } ], "produces": [ @@ -373530,7 +408903,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.sitemapResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaDepthChartResponseDoc" } }, "400": { @@ -373539,8 +408912,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -373557,27 +408930,66 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Sonic Drive-In's menu-page or store-locator sitemap", + "summary": "Get the NFL depth chart for all teams", "tags": [ - "Sonic" + "Sportskeeda" ] } }, - "/sonic/store": { + "/sportskeeda/draft-picks": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Sonic Drive-In restaurant's address, phone, coordinates, open/closed status, amenities, weekly hours broken down per fulfillment channel (order-ahead, pickup, curbside, in-store, delivery, drive-through), and delivery-provider deep links (DoorDash, GrubHub, Uber Eats, Postmates). path must be a \"locations\" section, kind=store path from GET /sonic/sitemap.", - "operationId": "sonic-store", + "description": "Reads the complete public draft JSON asset, not only the rows initially visible on the page. Filter by year, round, position or player name. Discover each team's exact filter values with draft-picks-options. Source history and latest available year are published by Sportskeeda and may lag the current season.", + "operationId": "sportskeeda-draft-picks", "parameters": [ { - "description": "A store path from /sonic/sitemap (section=locations, kind=store)", + "description": "NFL team draft-picks page path without host", "in": "query", - "name": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "locations/us/wy/cheyenne/2540-dell-range-blvd/store-4521" + "x-example": "nfl/san-francisco-49ers/draft-picks" + }, + { + "description": "Year from draft-picks-options; omit for all years", + "in": "query", + "name": "year", + "type": "integer", + "x-example": 2025 + }, + { + "description": "Exact round from draft-picks-options; historical special labels are accepted", + "in": "query", + "name": "round", + "type": "string", + "x-example": "1" + }, + { + "description": "Exact position from draft-picks-options", + "in": "query", + "name": "position", + "type": "string", + "x-example": "QB" + }, + { + "description": "Case-insensitive player-name substring, at most 100 characters", + "in": "query", + "name": "q", + "type": "string", + "x-example": "Purdy" + }, + { + "description": "Page number, 1-1000; default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Records per page, 1-500; default 100", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -373587,7 +408999,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sonic.storeResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaDraftPicksResponseDoc" } }, "400": { @@ -373602,12 +409014,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -373620,27 +409026,24 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Sonic Drive-In restaurant by its locator path", + "summary": "Get all historical NFL team draft picks from Sportskeeda", "tags": [ - "Sonic" + "Sportskeeda" ] } }, - "/soundcloud/playlist": { + "/sportskeeda/draft-picks-options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one playlist or album's metadata plus its full track list: owner, likes/reposts counts, and every track's title, artwork, and playback/likes counts. Public data sourced from SoundCloud's own JSON API.", - "operationId": "soundcloud-playlist", + "description": "Reads the public draft JSON asset named by the team page and returns every available year, round and position, including historical special rounds. Team page slugs are discoverable from page-options on an NFL team overview.", + "operationId": "sportskeeda-draft-picks-options", "parameters": [ { - "description": "Full soundcloud.com playlist/album URL (a playlist's permalink_url)", + "description": "NFL team draft-picks page path without host", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://soundcloud.com/lofi_chill/sets/lofi-chill" + "x-example": "nfl/san-francisco-49ers/draft-picks" } ], "produces": [ @@ -373650,7 +409053,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/soundcloud.playlistResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaDraftPicksOptionsResponseDoc" } }, "400": { @@ -373665,12 +409068,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -373683,27 +409080,93 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SoundCloud playlist or album's detail", + "summary": "Discover an NFL team's complete Sportskeeda draft filters", "tags": [ - "SoundCloud" + "Sportskeeda" ] } }, - "/soundcloud/profile": { + "/sportskeeda/event-calendar": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one user/artist's profile: bio, avatar, followers/followings/track/playlist/likes counts, and verified status. Public data sourced from SoundCloud's own JSON API.", - "operationId": "soundcloud-profile", + "description": "Returns all events from the embedded Sports Calendar, optionally filtered by an offered region-specific sport, one or more offered months, or an inclusive date range. Discover the current region, sport, and month values through /sportskeeda/event-calendar-options.", + "operationId": "sportskeeda-event-calendar", "parameters": [ { - "description": "Full soundcloud.com user/artist profile URL", + "default": "us", + "description": "Calendar region", + "enum": [ + "us", + "india" + ], "in": "query", - "name": "url", - "required": true, + "name": "region", + "type": "string" + }, + { + "description": "Exact sport label offered for the selected region; see event-calendar-options", + "enum": [ + "NFL", + "Football", + "MLB", + "College Football", + "NBA", + "College Basketball", + "NHL", + "WNBA", + "Golf", + "Tennis", + "NASCAR", + "WWE", + "Boxing", + "UFC", + "MMA", + "Formula 1", + "College Baseball", + "IndyCar", + "AEW", + "MotoGP", + "Wrestling", + "Cricket", + "Table Tennis", + "Chess", + "Kabaddi", + "Hockey", + "Badminton", + "Athletics" + ], + "in": "query", + "name": "sport", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "One or more offered calendar months in YYYY-MM format; repeat this parameter for multiple months", + "in": "query", + "items": { + "enum": [ + "2026-09", + "2026-10", + "2026-11", + "2026-12" + ], + "type": "string" + }, + "name": "month", + "type": "array" + }, + { + "description": "Inclusive range start in YYYY-MM-DD; provide together with end_date", + "in": "query", + "name": "start_date", "type": "string", - "x-example": "https://soundcloud.com/lofi_girl" + "x-example": "2026-09-01" + }, + { + "description": "Inclusive range end in YYYY-MM-DD; provide together with start_date", + "in": "query", + "name": "end_date", + "type": "string", + "x-example": "2026-09-30" } ], "produces": [ @@ -373713,7 +409176,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/soundcloud.profileResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaEventCalendarResponseDoc" } }, "400": { @@ -373722,18 +409185,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": { @@ -373746,36 +409197,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SoundCloud user/artist profile", + "summary": "Get Sportskeeda regional sports calendar events", "tags": [ - "SoundCloud" + "Sportskeeda" ] } }, - "/soundcloud/search": { + "/sportskeeda/event-calendar-options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns tracks matching a query: title, artwork, playback/likes/comment/repost counts, and uploader. Public data sourced from SoundCloud's own JSON API.", - "operationId": "soundcloud-search", - "parameters": [ - { - "description": "Search text", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "lofi hip hop" - }, - { - "description": "Number of tracks to return (default 20, max 50)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - } - ], + "description": "Returns the live region-specific sport and month filters from Sportskeeda's embedded event calendar feed. Use these values with /sportskeeda/event-calendar.", + "operationId": "sportskeeda-event-calendar-options", "produces": [ "application/json" ], @@ -373783,19 +409214,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/soundcloud.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sportskeedaEventCalendarOptionsResponseDoc" } }, "503": { @@ -373810,27 +409229,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search SoundCloud tracks", + "summary": "Discover Sportskeeda calendar regions, sports, and months", "tags": [ - "SoundCloud" + "Sportskeeda" ] } }, - "/soundcloud/track": { + "/sportskeeda/feed": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one track's full metadata: title, artwork, description, genre, tags, playback/likes/comment/repost counts, and uploader. Public data sourced from SoundCloud's own JSON API.", - "operationId": "soundcloud-track", + "description": "Fetches the public article cards for a Sportskeeda section, event, team-news, or player-news slug. Page pagination is accepted only when the source advertises it.", + "operationId": "sportskeeda-feed", "parameters": [ { - "description": "Full soundcloud.com track URL (a track's permalink_url)", + "description": "Sportskeeda path without host, such as wwe, go/epl, or player/jannik-sinner/news", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://soundcloud.com/lofi_girl/4-am-studysession" + "x-example": "wwe" + }, + { + "default": 1, + "description": "Source page, for feeds with pagination; defaults to 1", + "in": "query", + "maximum": 1000, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -373840,7 +409265,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/soundcloud.trackResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaFeedResponseDoc" } }, "400": { @@ -373855,12 +409280,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -373873,34 +409292,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SoundCloud track's detail", + "summary": "Get articles from a Sportskeeda section or topic", "tags": [ - "SoundCloud" + "Sportskeeda" ] } }, - "/soundcloud/user-tracks": { + "/sportskeeda/football-data": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a user/artist's own uploaded tracks, most recent first: title, artwork, playback/likes/comment/repost counts. Public data sourced from SoundCloud's own JSON API.", - "operationId": "soundcloud-user-tracks", + "description": "Returns first-party football widget fixtures and standings. Event and optional matchday must be offered by football-options. Omit matchday for the widget's selected round. Scores and standings reflect upstream data, which may be stale.", + "operationId": "sportskeeda-football-data", "parameters": [ { - "description": "Full soundcloud.com user/artist profile URL", + "description": "Tournament slug from football-options; current selector: featured, epl, uefa-champions-league, uefa-nations-league, la-liga, ligue-1, mls, bundesliga", "in": "query", - "name": "url", + "name": "event", "required": true, "type": "string", - "x-example": "https://soundcloud.com/lofi_girl" + "x-example": "epl" }, { - "description": "Number of tracks to return (default 20, max 50)", + "description": "Round slug from football-options for the selected event", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "matchday", + "type": "string", + "x-example": "round-5" } ], "produces": [ @@ -373910,7 +409326,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/soundcloud.userTracksResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaFootballDataResponseDoc" } }, "400": { @@ -373919,18 +409335,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": { @@ -373943,24 +409347,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SoundCloud user's own uploaded tracks", + "summary": "Get football fixtures and standings", "tags": [ - "SoundCloud" + "Sportskeeda" ] } }, - "/space/article": { + "/sportskeeda/football-options": { "get": { - "description": "Returns public Space.com article metadata and body paragraphs from a canonical article URL.", - "operationId": "space-article", + "description": "Lists the live football widget's tournament selector. With event, follows the full previous/next matchday chain and returns every currently offered round slug. The discovered values feed sportskeeda-football-data.", + "operationId": "sportskeeda-football-options", "parameters": [ { - "description": "Canonical Space.com article URL", + "description": "Live tournament slug; current selector: featured, epl, uefa-champions-league, uefa-nations-league, la-liga, ligue-1, mls, bundesliga. Omit to list tournaments only", "in": "query", - "name": "url", - "required": true, + "name": "event", "type": "string", - "x-example": "https://www.space.com/astronomy/solar-system/asteroids/astronomers-just-named-an-asteroid-after-weird-al-yankovic" + "x-example": "epl" } ], "produces": [ @@ -373970,17 +409373,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sportskeedaFootballOptionsResponseDoc" } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -373997,30 +409394,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Space.com article content", + "summary": "Discover football tournaments and matchdays", "tags": [ - "Space" + "Sportskeeda" ] } }, - "/space/author": { + "/sportskeeda/guessing-game": { "get": { - "description": "Returns one Space.com author's public profile: name, job title, biography, and their most recent articles.", - "operationId": "space-author", + "description": "Returns the public clues and image metadata for a discovered player-guessing game and ISO date. The answer is omitted so the endpoint does not reveal the active puzzle solution.", + "operationId": "sportskeeda-guessing-game", "parameters": [ { - "description": "Author slug, e.g. elizabeth-howell", + "description": "Discovered host-free game page path", + "enum": [ + "wwe/brainbuster-wwe-player-guessing-game", + "nfl/gridle-nfl-player-guessing-game" + ], "in": "query", "name": "slug", + "required": true, "type": "string", - "x-example": "elizabeth-howell" + "x-example": "wwe/brainbuster-wwe-player-guessing-game" }, { - "description": "Canonical space.com/author/ URL; alternative to slug", + "description": "Puzzle date in YYYY-MM-DD format", "in": "query", - "name": "url", + "name": "date", + "required": true, "type": "string", - "x-example": "https://www.space.com/author/elizabeth-howell" + "x-example": "2026-09-30" } ], "produces": [ @@ -374030,7 +409433,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.spaceAuthorResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaGuessingGameResponseDoc" } }, "400": { @@ -374057,86 +409460,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Space.com author profile", + "summary": "Get a Sportskeeda daily guessing-game puzzle", "tags": [ - "Space" + "Sportskeeda" ] } }, - "/space/headlines": { + "/sportskeeda/guessing-game-entities": { "get": { - "description": "Returns fresh Space.com headlines from one public category hub.", - "operationId": "space-headlines", + "description": "Returns the live public entity list used by a discovered player-guessing game, including the game-specific team, position, and profile fields.", + "operationId": "sportskeeda-guessing-game-entities", "parameters": [ { - "description": "Space.com category slug", + "description": "Discovered host-free game page path", "enum": [ - "astronomy", - "astronomy-black-holes", - "astronomy-dark-universe", - "astronomy-exoplanets", - "astronomy-galaxies", - "astronomy-hubble-space-telescope", - "astronomy-james-webb-space-telescope", - "astronomy-solar-system", - "astronomy-solar-system-asteroids", - "astronomy-solar-system-comets", - "astronomy-solar-system-dwarf-planets", - "astronomy-solar-system-earth", - "astronomy-solar-system-jupiter", - "astronomy-solar-system-mars", - "astronomy-solar-system-mercury", - "astronomy-solar-system-moon", - "astronomy-solar-system-neptune", - "astronomy-solar-system-pluto", - "astronomy-solar-system-saturn", - "astronomy-solar-system-sun", - "astronomy-solar-system-uranus", - "astronomy-solar-system-venus", - "astronomy-stars", - "entertainment", - "entertainment-space-books", - "entertainment-space-games", - "entertainment-space-movies-shows", - "entertainment-space-toys-lego", - "science", - "science-astrophysics", - "science-climate-change", - "science-particle-physics", - "science-weather", - "space-exploration", - "space-exploration-human-spaceflight", - "space-exploration-launches-spacecraft", - "space-exploration-missions", - "space-exploration-missions-apollo", - "space-exploration-missions-artemis", - "space-exploration-missions-asteroid-comet-missions", - "space-exploration-missions-international-space-station", - "space-exploration-missions-mars-rovers", - "space-exploration-missions-new-horizons", - "space-exploration-missions-parker-solar-probe", - "space-exploration-missions-space-shuttle", - "space-exploration-missions-voyager", - "space-exploration-private-spaceflight", - "space-exploration-satellites", - "space-exploration-search-for-life", - "stargazing", - "stargazing-astrophotography", - "stargazing-auroras", - "stargazing-constellations", - "stargazing-eclipses", - "stargazing-eclipses-lunar-eclipses", - "stargazing-eclipses-solar-eclipses", - "stargazing-meteor-showers", - "stargazing-skywatching-kit", - "technology", - "technology-aerospace", - "technology-drones" + "wwe/brainbuster-wwe-player-guessing-game", + "nfl/gridle-nfl-player-guessing-game" ], "in": "query", - "name": "section", + "name": "slug", "required": true, - "type": "string" + "type": "string", + "x-example": "wwe/brainbuster-wwe-player-guessing-game" } ], "produces": [ @@ -374146,7 +409491,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaGuessingGameEntitiesResponseDoc" } }, "400": { @@ -374155,40 +409500,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Space.com section headlines", - "tags": [ - "Space" - ] - } - }, - "/space/news": { - "get": { - "description": "Returns fresh Space.com top stories (space, astronomy, and skywatching news) from the site's own latest-news hub.", - "operationId": "space-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" } @@ -374205,42 +409518,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Space.com top stories", - "tags": [ - "Space" - ] - } - }, - "/space/sections": { - "get": { - "description": "Returns the public Space.com category taxonomy used by the headlines endpoint.", - "operationId": "space-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Space.com sections", + "summary": "List players for a Sportskeeda guessing game", "tags": [ - "Space" + "Sportskeeda" ] } }, - "/sparkfun/categories": { + "/sportskeeda/guessing-games": { "get": { - "description": "Lists public SparkFun top-level browse categories with URL keys for sparkfun-category.", - "operationId": "sparkfun-categories", + "description": "Discovers every currently linked player-guessing game and returns its host-free page slug for the daily instance and entity endpoints.", + "operationId": "sportskeeda-guessing-games", "produces": [ "application/json" ], @@ -374248,11 +409535,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sparkfun.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaGuessingGamesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -374269,53 +409556,43 @@ "ApiKeyAuth": [] } ], - "summary": "List SparkFun categories", + "summary": "List Sportskeeda player-guessing games", "tags": [ - "SparkFun" + "Sportskeeda" ] } }, - "/sparkfun/category": { + "/sportskeeda/nba-queries": { "get": { - "description": "Returns paginated public products and dynamic facet filters for a SparkFun category URL key. Each filter must be `attribute:value`; use values from the response's filters array.", - "operationId": "sparkfun-category", + "description": "Pages through the server-rendered questions on Sportskeeda's Top NBA Queries page. Slugs are host-free and can be passed to sportskeeda_page_data for the linked player stats table. The live category directory is returned on every page.", + "operationId": "sportskeeda-nba-queries", "parameters": [ { - "description": "SparkFun category URL key", + "description": "Optional category id", + "enum": [ + "player-stat", + "player-vs-team" + ], "in": "query", - "name": "url_key", - "required": true, - "type": "string", - "x-example": "development-boards" + "name": "category", + "type": "string" }, { - "default": 1, - "description": "One-based result page (1-100)", + "default": 0, + "description": "Zero-based result offset", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", + "minimum": 0, + "name": "offset", "type": "integer" }, { - "default": 24, - "description": "Products per page (1-24)", + "default": 100, + "description": "Page size; 0 or omitted defaults to 100, maximum is 500", "in": "query", - "maximum": 24, - "minimum": 1, - "name": "per_page", + "maximum": 500, + "minimum": 0, + "name": "limit", "type": "integer" - }, - { - "collectionFormat": "multi", - "description": "Repeatable dynamic facet in attribute:value form", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "sf_qwiic_dev_board_type:8417" } ], "produces": [ @@ -374325,7 +409602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sparkfun.categoryResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaNBAQueriesResponseDoc" } }, "400": { @@ -374334,18 +409611,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": { @@ -374358,26 +409623,16 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a SparkFun category", + "summary": "List Sportskeeda NBA player query pages", "tags": [ - "SparkFun" + "Sportskeeda" ] } }, - "/sparkfun/product": { + "/sportskeeda/news": { "get": { - "description": "Returns public product metadata, price, stock status, images, categories, a cleaned description, and SparkFun-related product recommendations for one SKU.", - "operationId": "sparkfun-product", - "parameters": [ - { - "description": "SparkFun product SKU", - "in": "query", - "name": "sku", - "required": true, - "type": "string", - "x-example": "DEV-18158" - } - ], + "description": "Returns the current public Sportskeeda news sitemap entries. Use /sportskeeda/sections to discover all navigation groups and sports landing pages, and /sportskeeda/taxonomy-search to search categories, events, teams, players, wiki pages, and wiki tags.", + "operationId": "sportskeeda-news", "produces": [ "application/json" ], @@ -374385,25 +409640,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sparkfun.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" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -374418,53 +409655,76 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SparkFun product", + "summary": "Get Sportskeeda's latest news", "tags": [ - "SparkFun" + "Sportskeeda" ] } }, - "/sparkfun/search": { + "/sportskeeda/page-data": { "get": { - "description": "Searches public SparkFun product data with pagination and dynamic facet filters. Each filter must be `attribute:value`; use values from the response's filters array.", - "operationId": "sparkfun-search", + "description": "Returns server-rendered team, player, roster, leaderboard, ranking, depth, playoff, and game-log tables. NFL team stats include team-leader cards, player-category tables, and Basic, Advanced, and Expert team tables. Season and type are accepted only if offered by the selected page; discover their values with page-options. Player game-log seasons use their discovered season-specific path and return every table offered by the page; NFL category tabs are listed by page-options. College-football schedule slugs accept a discovered conference slug and filter the embedded schedule rows locally; an offered group with no games on that week returns status no_data. The trade value chart uses its public JSON asset and has a separate endpoint. A page with no structured tables returns an upstream error.", + "operationId": "sportskeeda-page-data", "parameters": [ { - "description": "Product search query", + "description": "Sportskeeda path without host", "in": "query", - "name": "q", + "name": "slug", "required": true, "type": "string", - "x-example": "arduino" + "x-example": "nfl/team-stat/net-yards-per-game-leaders" }, { - "default": 1, - "description": "One-based result page (1-100)", + "description": "Season year offered by this page's page-options filter", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "season", + "type": "integer", + "x-example": 2026 }, { - "default": 24, - "description": "Products per page (1-24)", + "description": "Season phase offered by this page's page-options filter; leaderboard pages offer pre, regular, post", "in": "query", - "maximum": 24, - "minimum": 1, - "name": "per_page", - "type": "integer" + "name": "type", + "type": "string", + "x-example": "regular" }, { - "collectionFormat": "multi", - "description": "Repeatable dynamic facet in attribute:value form", + "description": "College-football schedule conference slug from page-options", + "enum": [ + "all-conferences", + "all-fbs-i-a", + "atlantic-coast", + "big-ten", + "mid-american", + "pac-12", + "southeastern", + "independents-fbs", + "big-12", + "conference-usa", + "mountain-west", + "sun-belt", + "aac", + "all-fcs-i-aa", + "big-sky", + "missouri-valley", + "ivy-league", + "mid-eastern-athletic", + "ohio-valley", + "patriot-league", + "pioneer-league", + "southern", + "southland", + "swac", + "northeast", + "independents-fcs", + "big-south", + "caa", + "united-athletic" + ], "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "sf_qwiic_dev_board_type:8417" + "name": "conference", + "type": "string", + "x-example": "big-ten" } ], "produces": [ @@ -374474,7 +409734,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sparkfun.searchResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaTablesResponseDoc" } }, "400": { @@ -374483,8 +409743,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -374501,24 +409761,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search SparkFun products", + "summary": "Get Sportskeeda structured sports tables", "tags": [ - "SparkFun" + "Sportskeeda" ] } }, - "/sportingnews/article": { + "/sportskeeda/page-options": { "get": { - "description": "Returns public Sporting News US article metadata and body paragraphs from a canonical article URL.", - "operationId": "sportingnews-article", + "description": "Returns the page's live contextual menus, team and ranking links, tabs, schedule views, and every currently offered select-filter value. Leaderboard category and metric values carry their destination slugs. College-football schedule pages expose the client-side conference selector here.", + "operationId": "sportskeeda-page-options", "parameters": [ { - "description": "Canonical Sporting News US article URL", + "description": "Sportskeeda path without host", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.sportingnews.com/us/nfl/dallas-cowboys/news/cowboys-george-pickens-production-way-down/30f07d65f36691600b3f97ba" + "x-example": "nfl" } ], "produces": [ @@ -374528,7 +409788,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaPageOptionsResponseDoc" } }, "400": { @@ -374555,30 +409815,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sporting News article content", + "summary": "Discover Sportskeeda page menus and filters", "tags": [ - "Sporting News" + "Sportskeeda" ] } }, - "/sportingnews/author": { + "/sportskeeda/player-stats": { "get": { - "description": "Returns one Sporting News US author's public profile: name, bio, photo, public social links, and their most recent articles.", - "operationId": "sportingnews-author", + "description": "Reads the anonymous season-stats JSON embedded in an NFL or NBA player stats page. Without event_type, returns all event phases offered by that page's selector. NBA source data may contain extra internal phases that the page does not offer; these are excluded. Discover the current event_type values with sportskeeda-page-options for the same slug.", + "operationId": "sportskeeda-player-stats", "parameters": [ { - "description": "Author slug, e.g. anne-erickson", + "description": "NFL or NBA player stats path without host", "in": "query", "name": "slug", + "required": true, "type": "string", - "x-example": "anne-erickson" + "x-example": "nfl/jacoby-brissett/stats" }, { - "description": "Canonical sportingnews.com/us/author/ URL; alternative to slug", + "description": "Event phase offered by this player's stats-event-type-dropdown; NFL offers 0,1,2,3 and NBA offers 0,1,2", + "enum": [ + "0", + "1", + "2", + "3" + ], "in": "query", - "name": "url", + "name": "event_type", "type": "string", - "x-example": "https://www.sportingnews.com/us/author/anne-erickson" + "x-example": "1" } ], "produces": [ @@ -374588,7 +409855,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportingNewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaPlayerStatsResponseDoc" } }, "400": { @@ -374615,69 +409882,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sporting News author profile", + "summary": "Get NFL or NBA player season stats across event phases", "tags": [ - "Sporting News" + "Sportskeeda" ] } }, - "/sportingnews/headlines": { + "/sportskeeda/profile": { "get": { - "description": "Returns fresh headlines from one public Sporting News US sport, league or topic feed.", - "operationId": "sportingnews-headlines", + "description": "Returns facts and available news cards from a public player or team profile path, including sport-specific slugs.", + "operationId": "sportskeeda-profile", "parameters": [ { - "description": "Sporting News section slug", - "enum": [ - "baseball", - "basketball", - "boxing", - "bundesliga", - "champions-league", - "club-world-cup", - "college", - "cricket", - "culture", - "darts", - "fantasy", - "football", - "formula-1", - "golf", - "high-school", - "horse-racing", - "la-liga", - "liga-mx", - "mlb", - "mls", - "mma", - "nascar", - "nba", - "nba-draft", - "ncaa", - "ncaa-basketball", - "ncaa-football", - "nfl", - "nfl-draft", - "nhl", - "olympics", - "premier-league", - "sec", - "serie-a", - "soccer", - "softball", - "tennis", - "tickets", - "tsn", - "ufc", - "watch", - "wnba", - "womens-college-basketball", - "wwe" - ], + "description": "Sportskeeda player or team profile path without host", "in": "query", - "name": "section", + "name": "slug", "required": true, - "type": "string" + "type": "string", + "x-example": "player/jannik-sinner" } ], "produces": [ @@ -374687,7 +409909,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaProfileResponseDoc" } }, "400": { @@ -374696,6 +409918,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -374708,16 +409936,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sporting News section headlines", + "summary": "Get a Sportskeeda player or team profile", "tags": [ - "Sporting News" + "Sportskeeda" ] } }, - "/sportingnews/news": { + "/sportskeeda/quiz": { "get": { - "description": "Returns fresh top stories from the Sporting News US edition public RSS feed. Only the US edition (sportingnews.com/us) is covered.", - "operationId": "sportingnews-news", + "description": "Returns public question prompts and choice text from a quiz page, sorted by question number. The source does not expose correct answers in its anonymous page data; answer checking and user submissions are not included.", + "operationId": "sportskeeda-quiz", + "parameters": [ + { + "description": "Sportskeeda quiz path without host, discovered through /sportskeeda/quizzes", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "wwe/quiz/how-well-know-cody-rhodes" + } + ], "produces": [ "application/json" ], @@ -374725,11 +409963,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaQuizResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -374746,16 +409990,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sporting News top stories", + "summary": "Get a Sportskeeda quiz definition", "tags": [ - "Sporting News" + "Sportskeeda" ] } }, - "/sportingnews/sections": { + "/sportskeeda/quiz-categories": { "get": { - "description": "Returns the public Sporting News US sport, league and topic feeds accepted by the headlines endpoint.", - "operationId": "sportingnews-sections", + "description": "Discovers every quiz category linked from the public quiz hub. Use a returned host-free category slug with /sportskeeda/quizzes.", + "operationId": "sportskeeda-quiz-categories", "produces": [ "application/json" ], @@ -374763,11 +410007,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaQuizCategoriesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -374784,30 +410028,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sporting News sections", + "summary": "List current Sportskeeda quiz categories", "tags": [ - "Sporting News" + "Sportskeeda" ] } }, - "/sportskeeda/article": { + "/sportskeeda/quizzes": { "get": { - "description": "Returns public article metadata and body paragraphs for a Sportskeeda article slug. Discovered slugs may contain case-preserving percent-encoded characters. A canonical Sportskeeda URL remains accepted for existing clients. Provide exactly one of slug or url; use /sportskeeda/sections and /sportskeeda/sitemaps for topic discovery.", - "operationId": "sportskeeda-article", + "description": "Returns public quiz cards for one category path discovered through /sportskeeda/quiz-categories. The source currently renders its first quiz page; page pagination is not exposed because the visible page links currently repeat the same cards.", + "operationId": "sportskeeda-quizzes", "parameters": [ { - "description": "Sportskeeda article path without host; preferred over url", + "description": "Sportskeeda quiz category path without host", + "enum": [ + "anime/quiz", + "cricket/quiz", + "daily-soaps/quiz", + "esports/quiz", + "fortnite/quiz", + "minecraft/quiz", + "movies/quiz", + "pokemon/quiz", + "shows/quiz", + "tennis/quiz", + "wwe/quiz" + ], "in": "query", "name": "slug", + "required": true, "type": "string", - "x-example": "football/rumor-psg-handed-major-lionel-messi-injury-scare-ahead-bayern-munich-clash-latest-fitness-update-reports" - }, - { - "description": "Canonical Sportskeeda article URL; alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.sportskeeda.com/football/rumor-psg-handed-major-lionel-messi-injury-scare-ahead-bayern-munich-clash-latest-fitness-update-reports" + "x-example": "anime/quiz" } ], "produces": [ @@ -374817,7 +410068,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaQuizzesResponseDoc" } }, "400": { @@ -374844,30 +410095,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sportskeeda article", + "summary": "List quizzes in a Sportskeeda category", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/author": { + "/sportskeeda/salary-cap": { "get": { - "description": "Returns one public Sportskeeda author's name and recent article links from the canonical author profile.", - "operationId": "sportskeeda-author", + "description": "Returns the source's published season, team totals, every player cap scenario and expanded salary breakdown. The site's player search and sortable columns are applied to the complete server-rendered rows. The published season may lag the current season.", + "operationId": "sportskeeda-salary-cap", "parameters": [ { - "description": "Sportskeeda author slug, e.g. sripad", + "description": "NFL team salary-cap page path without host", "in": "query", "name": "slug", + "required": true, "type": "string", - "x-example": "sripad" + "x-example": "nfl/san-francisco-49ers/salary-cap" }, { - "description": "Canonical Sportskeeda /author/ URL; alternative to slug", + "description": "Case-insensitive player-name substring, at most 100 characters", "in": "query", - "name": "url", + "name": "q", "type": "string", - "x-example": "https://www.sportskeeda.com/author/sripad" + "x-example": "Purdy" + }, + { + "description": "Sortable column; omit to preserve source order", + "enum": [ + "player", + "cap_number", + "cut_pre_june_1_dead_money", + "cut_pre_june_1_cap_saving", + "cut_post_june_1_dead_money", + "cut_post_june_1_cap_saving", + "trade_pre_june_1_dead_money", + "trade_pre_june_1_cap_saving", + "trade_post_june_1_dead_money", + "trade_post_june_1_cap_saving", + "restructure_cap_saving", + "extension_cap_saving" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "description": "Sort direction; requires sort_by; default asc", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "order", + "type": "string" } ], "produces": [ @@ -374877,7 +410159,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaAuthorResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaSalaryCapResponseDoc" } }, "400": { @@ -374904,27 +410186,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sportskeeda author profile", + "summary": "Get NFL team salary-cap figures from Sportskeeda", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/depth-chart": { + "/sportskeeda/schedule": { "get": { - "description": "Returns every team and listed position/player from the live NFL depth chart. Players and team detail pages include slugs when Sportskeeda links them.", - "operationId": "sportskeeda-depth-chart", + "description": "Parses public cricket and football match cards or sport-specific schedule tables. A genuine no-matches widget returns status no_matches.", + "operationId": "sportskeeda-schedule", "parameters": [ { - "description": "Must be nfl/depth-chart", - "enum": [ - "nfl/depth-chart" - ], + "description": "Sportskeeda schedule path without host", "in": "query", "name": "slug", "required": true, "type": "string", - "x-example": "nfl/depth-chart" + "x-example": "nfl/schedule" } ], "produces": [ @@ -374934,7 +410213,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaDepthChartResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaTablesResponseDoc" } }, "400": { @@ -374961,35 +410240,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the NFL depth chart for all teams", + "summary": "Get Sportskeeda fixtures and results", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/feed": { + "/sportskeeda/sections": { "get": { - "description": "Fetches the public article cards for a Sportskeeda section, event, team-news, or player-news slug. Page pagination is accepted only when the source advertises it.", - "operationId": "sportskeeda-feed", - "parameters": [ - { - "description": "Sportskeeda path without host, such as wwe, go/epl, or player/jannik-sinner/news", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "wwe" - }, - { - "default": 1, - "description": "Source page, for feeds with pagination; defaults to 1", - "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page", - "type": "integer" - } - ], + "description": "Returns the live parent/child navigation tree, including external destinations marked explicitly, plus every public sports landing URL from Sportskeeda's sports sitemap.", + "operationId": "sportskeeda-sections", "produces": [ "application/json" ], @@ -374997,19 +410257,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaFeedResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sportskeedaSectionsResponseDoc" } }, "503": { @@ -375024,78 +410272,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get articles from a Sportskeeda section or topic", + "summary": "Discover Sportskeeda sections and topics", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/football-data": { + "/sportskeeda/sitemap-items": { "get": { - "description": "Returns first-party football widget fixtures and standings. Event and optional matchday must be offered by football-options. Omit matchday for the widget's selected round. Scores and standings reflect upstream data, which may be stale.", - "operationId": "sportskeeda-football-data", + "description": "Returns canonical URLs and host-free path slugs from one sitemap discovered by /sportskeeda/sitemaps. Returned path slugs preserve case and percent-encode unusual characters. A sitemap_url remains accepted for existing callers. Provide exactly one; the source is checked against the live index and robots sitemap list on each call.", + "operationId": "sportskeeda-sitemap-items", "parameters": [ { - "description": "Tournament slug from football-options; current selector: featured, epl, uefa-champions-league, uefa-nations-league, la-liga, ligue-1, mls, bundesliga", + "description": "Sitemap slug returned by /sportskeeda/sitemaps; preferred", "in": "query", - "name": "event", - "required": true, + "name": "slug", "type": "string", - "x-example": "epl" + "x-example": "tournaments.xml" }, { - "description": "Round slug from football-options for the selected event", + "description": "Exact sitemap URL; alternative to slug", "in": "query", - "name": "matchday", + "name": "sitemap_url", "type": "string", - "x-example": "round-5" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sportskeedaFootballDataResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "https://www.sportskeeda.com/tournaments.xml" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get football fixtures and standings", - "tags": [ - "Sportskeeda" - ] - } - }, - "/sportskeeda/football-options": { - "get": { - "description": "Lists the live football widget's tournament selector. With event, follows the full previous/next matchday chain and returns every currently offered round slug. The discovered values feed sportskeeda-football-data.", - "operationId": "sportskeeda-football-options", - "parameters": [ + "default": 0, + "description": "Zero-based item offset", + "in": "query", + "maximum": 1000000, + "minimum": 0, + "name": "offset", + "type": "integer" + }, { - "description": "Live tournament slug; current selector: featured, epl, uefa-champions-league, uefa-nations-league, la-liga, ligue-1, mls, bundesliga. Omit to list tournaments only", + "default": 100, + "description": "Page size from 1 to 500; defaults to 100", "in": "query", - "name": "event", - "type": "string", - "x-example": "epl" + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -375105,7 +410323,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaFootballOptionsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaSitemapItemsResponseDoc" } }, "400": { @@ -375126,16 +410344,16 @@ "ApiKeyAuth": [] } ], - "summary": "Discover football tournaments and matchdays", + "summary": "Page through a Sportskeeda sitemap", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/news": { + "/sportskeeda/sitemaps": { "get": { - "description": "Returns the current public Sportskeeda news sitemap entries. Use /sportskeeda/sections to discover all navigation groups and sports landing pages, and /sportskeeda/taxonomy-search to search categories, events, teams, players, wiki pages, and wiki tags.", - "operationId": "sportskeeda-news", + "description": "Returns current public sitemaps from Sportskeeda's sitemap index and robots.txt. Pass a returned slug to /sportskeeda/sitemap-items to page through its complete URL set.", + "operationId": "sportskeeda-sitemaps", "produces": [ "application/json" ], @@ -375143,7 +410361,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaSitemapsResponseDoc" } }, "503": { @@ -375158,38 +410376,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sportskeeda's latest news", + "summary": "Discover Sportskeeda sitemap sources", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/page-data": { + "/sportskeeda/standings": { "get": { - "description": "Returns server-rendered team, player, roster, leaderboard, ranking, depth, and playoff tables. Season and type are accepted only if offered by the selected page; discover their values with page-options. The trade value chart uses its public JSON asset and has a separate endpoint. A page with no structured tables returns an upstream error.", - "operationId": "sportskeeda-page-data", + "description": "Parses current standings tables. College basketball supports a live-discovered season value; its unpopulated current season returns status no_data.", + "operationId": "sportskeeda-standings", "parameters": [ { - "description": "Sportskeeda path without host", + "description": "Sportskeeda standings or rankings path without host", "in": "query", "name": "slug", "required": true, "type": "string", - "x-example": "nfl/team-stat/net-yards-per-game-leaders" + "x-example": "nfl/standings" }, { - "description": "Season year offered by this page's page-options filter", + "description": "College basketball season starting year; live values from standings-options", + "enum": [ + 2026, + 2025, + 2024, + 2023, + 2022, + 2021, + 2020, + 2019, + 2018, + 2017, + 2016, + 2015, + 2014, + 2013 + ], "in": "query", "name": "season", "type": "integer", - "x-example": 2026 - }, - { - "description": "Season phase offered by this page's page-options filter; leaderboard pages offer pre, regular, post", - "in": "query", - "name": "type", - "type": "string", - "x-example": "regular" + "x-example": 2025 } ], "produces": [ @@ -375226,24 +410453,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sportskeeda structured sports tables", + "summary": "Get Sportskeeda standings or rankings", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/page-options": { + "/sportskeeda/standings-options": { "get": { - "description": "Returns the page's live contextual menus, team and ranking links, tabs, schedule views, and every currently offered select-filter value. Leaderboard category and metric values carry their destination slugs.", - "operationId": "sportskeeda-page-options", + "description": "Returns all live-offered college basketball season years and the conference slugs for the selected season.", + "operationId": "sportskeeda-standings-options", "parameters": [ { - "description": "Sportskeeda path without host", + "description": "College basketball standings slug", "in": "query", "name": "slug", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "college-basketball/college-basketball-standings" + }, + { + "description": "A live-offered starting year; selects its conference list", + "enum": [ + 2026, + 2025, + 2024, + 2023, + 2022, + 2021, + 2020, + 2019, + 2018, + 2017, + 2016, + 2015, + 2014, + 2013 + ], + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2025 } ], "produces": [ @@ -375253,7 +410503,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaPageOptionsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaStandingsOptionsResponseDoc" } }, "400": { @@ -375262,12 +410512,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -375280,37 +410524,24 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Sportskeeda page menus and filters", + "summary": "Discover Sportskeeda college standings seasons and conferences", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/player-stats": { + "/sportskeeda/taxonomy-search": { "get": { - "description": "Reads the anonymous season-stats JSON embedded in an NFL or NBA player stats page. Without event_type, returns all event phases offered by that page's selector. NBA source data may contain extra internal phases that the page does not offer; these are excluded. Discover the current event_type values with sportskeeda-page-options for the same slug.", - "operationId": "sportskeeda-player-stats", + "description": "Calls Sportskeeda's anonymous frontend taxonomy search across categories, events, teams, players, wiki pages, and wiki tags. The upstream UI always searches all six types; the q phrase is sanitized and capped at 100 characters just like the site.", + "operationId": "sportskeeda-taxonomy-search", "parameters": [ { - "description": "NFL or NBA player stats path without host", + "description": "Search phrase; punctuation is replaced with spaces and the result is capped at 100 characters", "in": "query", - "name": "slug", + "name": "q", "required": true, "type": "string", - "x-example": "nfl/jacoby-brissett/stats" - }, - { - "description": "Event phase offered by this player's stats-event-type-dropdown; NFL offers 0,1,2,3 and NBA offers 0,1,2", - "enum": [ - "0", - "1", - "2", - "3" - ], - "in": "query", - "name": "event_type", - "type": "string", - "x-example": "1" + "x-example": "nfl draft" } ], "produces": [ @@ -375320,7 +410551,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaPlayerStatsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaTaxonomySearchResponseDoc" } }, "400": { @@ -375329,12 +410560,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -375347,24 +410572,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get NFL or NBA player season stats across event phases", + "summary": "Search Sportskeeda categories and entities", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/profile": { + "/sportskeeda/topic": { "get": { - "description": "Returns facts and available news cards from a public player or team profile path, including sport-specific slugs.", - "operationId": "sportskeeda-profile", + "description": "Returns ordered prose, headings, lists, tables, images and embeds from a public topic, event, team or player overview page, plus available byline, modification text and related stories. Discover slugs with /sportskeeda/sitemap-items using tags.xml, tournaments.xml, teams.xml, players.xml or us-sitemap.xml. Pages without a CMS body return an upstream error.", + "operationId": "sportskeeda-topic", "parameters": [ { - "description": "Sportskeeda player or team profile path without host", + "description": "Canonical Sportskeeda topic, event, team or player path without host", "in": "query", "name": "slug", "required": true, "type": "string", - "x-example": "player/jannik-sinner" + "x-example": "football/jurgen-klopp" } ], "produces": [ @@ -375374,7 +410599,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaProfileResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaTopicResponseDoc" } }, "400": { @@ -375401,24 +410626,79 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sportskeeda player or team profile", + "summary": "Get a Sportskeeda topic or entity overview's full content", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/schedule": { + "/sportskeeda/trade-values": { "get": { - "description": "Parses public cricket and football match cards or sport-specific schedule tables. A genuine no-matches widget returns status no_matches.", - "operationId": "sportskeeda-schedule", + "description": "Reads the same anonymous JSON asset as the public chart. Returns source update time, ranks, values, and linked player slugs. The All position includes all source rows, including positions not displayed as chart sections. Discover current chart and filter choices with page-options.", + "operationId": "sportskeeda-trade-values", "parameters": [ { - "description": "Sportskeeda schedule path without host", + "description": "Chart path without host", + "enum": [ + "nfl/fantasy-football-trade-value-charts", + "nfl/dynasty-trade-value-charts" + ], "in": "query", "name": "slug", "required": true, "type": "string", - "x-example": "nfl/schedule" + "x-example": "nfl/fantasy-football-trade-value-charts" + }, + { + "default": "All", + "description": "Displayed position section; defaults to All", + "enum": [ + "All", + "QB", + "RB", + "WR", + "TE" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "default": "ppr", + "description": "Scoring system; defaults to ppr", + "enum": [ + "ppr", + "non_ppr", + "0.5_ppr" + ], + "in": "query", + "name": "scoring", + "type": "string" + }, + { + "default": false, + "description": "Use superflex chart; defaults to false", + "in": "query", + "name": "superflex", + "type": "boolean" + }, + { + "default": 0, + "description": "Zero-based player offset", + "in": "query", + "maximum": 1000000, + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "default": 100, + "description": "Page size from 1 to 500", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -375428,7 +410708,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaTablesResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaTradeValuesResponseDoc" } }, "400": { @@ -375455,16 +410735,144 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sportskeeda fixtures and results", + "summary": "Get NFL redraft or dynasty trade values", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/sections": { + "/sportskeeda/transactions": { "get": { - "description": "Returns the live parent/child navigation tree, including external destinations marked explicitly, plus every public sports landing URL from Sportskeeda's sports sitemap.", - "operationId": "sportskeeda-sections", + "description": "Reads the first-party public transaction feed in month-sized windows, avoiding its 10000-row broad-range cap. Discover accepted seasons, months, and team slugs with sportskeeda-transactions-options.", + "operationId": "sportskeeda-transactions", + "parameters": [ + { + "description": "Host-free page slug; nfl/transactions or an NFL team transactions slug", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "nfl/dallas-cowboys/transactions" + }, + { + "description": "Season start year; current live choices: 2020,2021,2022,2023,2024,2025,2026; defaults to current", + "enum": [ + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "season", + "type": "integer" + }, + { + "description": "MMYYYY month code from transactions-options for the selected season; current live union is listed here", + "enum": [ + "022020", + "032020", + "042020", + "052020", + "062020", + "072020", + "082020", + "092020", + "102020", + "112020", + "122020", + "012021", + "022021", + "032021", + "042021", + "052021", + "062021", + "072021", + "082021", + "092021", + "102021", + "112021", + "122021", + "012022", + "022022", + "032022", + "042022", + "052022", + "062022", + "072022", + "082022", + "092022", + "102022", + "112022", + "122022", + "012023", + "022023", + "032023", + "042023", + "052023", + "062023", + "072023", + "082023", + "092023", + "102023", + "112023", + "122023", + "012024", + "022024", + "032024", + "042024", + "052024", + "062024", + "072024", + "082024", + "092024", + "102024", + "112024", + "122024", + "012025", + "022025", + "032025", + "042025", + "052025", + "062025", + "072025", + "082025", + "092025", + "102025", + "112025", + "122025", + "012026", + "022026", + "032026", + "042026", + "052026", + "062026", + "072026", + "082026", + "092026" + ], + "in": "query", + "name": "month", + "required": true, + "type": "string", + "x-example": "092026" + }, + { + "description": "Page number, 1-1000; default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Records per page, 1-500; default 100", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 100 + } + ], "produces": [ "application/json" ], @@ -375472,7 +410880,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaSectionsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaTransactionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -375487,47 +410907,30 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Sportskeeda sections and topics", + "summary": "Get complete monthly NFL league or team transactions", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/sitemap-items": { + "/sportskeeda/transactions-options": { "get": { - "description": "Returns canonical URLs and host-free path slugs from one sitemap discovered by /sportskeeda/sitemaps. Returned path slugs preserve case and percent-encode unusual characters. A sitemap_url remains accepted for existing callers. Provide exactly one; the source is checked against the live index and robots sitemap list on each call.", - "operationId": "sportskeeda-sitemap-items", + "description": "Discovers the complete live NFL transaction season list, months for the selected season, and all team transaction page slugs. Use these values with sportskeeda-transactions.", + "operationId": "sportskeeda-transactions-options", "parameters": [ { - "description": "Sitemap slug returned by /sportskeeda/sitemaps; preferred", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "tournaments.xml" - }, - { - "description": "Exact sitemap URL; alternative to slug", - "in": "query", - "name": "sitemap_url", - "type": "string", - "x-example": "https://www.sportskeeda.com/tournaments.xml" - }, - { - "default": 0, - "description": "Zero-based item offset", - "in": "query", - "maximum": 1000000, - "minimum": 0, - "name": "offset", - "type": "integer" - }, - { - "default": 100, - "description": "Page size from 1 to 500; defaults to 100", + "description": "Season start year; current live choices: 2020,2021,2022,2023,2024,2025,2026; defaults to current", + "enum": [ + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", + "name": "season", "type": "integer" } ], @@ -375538,7 +410941,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaSitemapItemsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaTransactionsOptionsResponseDoc" } }, "400": { @@ -375559,16 +410962,26 @@ "ApiKeyAuth": [] } ], - "summary": "Page through a Sportskeeda sitemap", + "summary": "List NFL transaction seasons, months and team slugs", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/sitemaps": { + "/sportskeeda/video": { "get": { - "description": "Returns current public sitemaps from Sportskeeda's sitemap index and robots.txt. Pass a returned slug to /sportskeeda/sitemap-items to page through its complete URL set.", - "operationId": "sportskeeda-sitemaps", + "description": "Returns the public video player's ID, title, poster, and stream URL for a video page slug.", + "operationId": "sportskeeda-video", + "parameters": [ + { + "description": "Individual Sportskeeda video page path without host", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "cricket/sunil-naraine-batting-cpl" + } + ], "produces": [ "application/json" ], @@ -375576,7 +410989,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaSitemapsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaVideoResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -375591,47 +411016,24 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Sportskeeda sitemap sources", + "summary": "Get Sportskeeda video metadata", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/standings": { + "/sportskeeda/videos": { "get": { - "description": "Parses current standings tables. College basketball supports a live-discovered season value; its unpopulated current season returns status no_data.", - "operationId": "sportskeeda-standings", + "description": "Lists public video cards from the main video library or a sport/event video listing.", + "operationId": "sportskeeda-videos", "parameters": [ { - "description": "Sportskeeda standings or rankings path without host", + "default": "videos", + "description": "Video listing path without host; defaults to videos", "in": "query", "name": "slug", - "required": true, "type": "string", - "x-example": "nfl/standings" - }, - { - "description": "College basketball season starting year; live values from standings-options", - "enum": [ - 2026, - 2025, - 2024, - 2023, - 2022, - 2021, - 2020, - 2019, - 2018, - 2017, - 2016, - 2015, - 2014, - 2013 - ], - "in": "query", - "name": "season", - "type": "integer", - "x-example": 2025 + "x-example": "go/epl/videos" } ], "produces": [ @@ -375641,7 +411043,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaTablesResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaVideosResponseDoc" } }, "400": { @@ -375668,47 +411070,64 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sportskeeda standings or rankings", + "summary": "List Sportskeeda videos and channels", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/standings-options": { + "/sportskeeda/wiki-activity": { "get": { - "description": "Returns all live-offered college basketball season years and the conference slugs for the selected season.", - "operationId": "sportskeeda-standings-options", + "description": "Returns the public accepted activity history for one Wiki article, with bounded pagination and the page's live sort fields. The source page slug is obtained from sportskeeda-wiki-pages.", + "operationId": "sportskeeda-wiki-activity", "parameters": [ { - "description": "College basketball standings slug", + "description": "Host-free Wiki page path_slug from sportskeeda-wiki-pages", "in": "query", "name": "slug", "required": true, "type": "string", - "x-example": "college-basketball/college-basketball-standings" + "x-example": "minecraft-wiki/achievements" }, { - "description": "A live-offered starting year; selects its conference list", + "default": 1, + "description": "1-based page", + "in": "query", + "maximum": 10000, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Activity items per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": "desc", + "description": "Sort direction", "enum": [ - 2026, - 2025, - 2024, - 2023, - 2022, - 2021, - 2020, - 2019, - 2018, - 2017, - 2016, - 2015, - 2014, - 2013 + "asc", + "desc" ], "in": "query", - "name": "season", - "type": "integer", - "x-example": 2025 + "name": "sort", + "type": "string" + }, + { + "default": "updated_at", + "description": "Activity sort field", + "enum": [ + "author_name", + "updated_at" + ], + "in": "query", + "name": "sort_by", + "type": "string" } ], "produces": [ @@ -375718,7 +411137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaStandingsOptionsResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaWikiActivityResponseDoc" } }, "400": { @@ -375727,6 +411146,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": { @@ -375739,24 +411170,24 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Sportskeeda college standings seasons and conferences", + "summary": "List accepted edits for a Sportskeeda Wiki page", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/taxonomy-search": { + "/sportskeeda/wiki-article": { "get": { - "description": "Calls Sportskeeda's anonymous frontend taxonomy search across categories, events, teams, players, wiki pages, and wiki tags. The upstream UI always searches all six types; the q phrase is sanitized and capped at 100 characters just like the site.", - "operationId": "sportskeeda-taxonomy-search", + "description": "Returns the rendered article title, metadata, and body paragraphs. Pass the path_slug returned by sportskeeda-wiki-pages; URL and host input are not accepted.", + "operationId": "sportskeeda-wiki-article", "parameters": [ { - "description": "Search phrase; punctuation is replaced with spaces and the result is capped at 100 characters", + "description": "Host-free Wiki page path_slug from sportskeeda-wiki-pages", "in": "query", - "name": "q", + "name": "slug", "required": true, "type": "string", - "x-example": "nfl draft" + "x-example": "minecraft-wiki/achievements" } ], "produces": [ @@ -375766,7 +411197,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaTaxonomySearchResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaWikiArticleResponseDoc" } }, "400": { @@ -375775,6 +411206,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": { @@ -375787,79 +411230,224 @@ "ApiKeyAuth": [] } ], - "summary": "Search Sportskeeda categories and entities", + "summary": "Get a Sportskeeda Wiki article", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/trade-values": { + "/sportskeeda/wiki-categories": { "get": { - "description": "Reads the same anonymous JSON asset as the public chart. Returns source update time, ranks, values, and linked player slugs. The All position includes all source rows, including positions not displayed as chart sections. Discover current chart and filter choices with page-options.", - "operationId": "sportskeeda-trade-values", + "description": "Returns the nested live category menu for one Sportskeeda Wiki project, including child categories beneath expandable groups.", + "operationId": "sportskeeda-wiki-categories", "parameters": [ { - "description": "Chart path without host", + "description": "Project slug returned by sportskeeda-wiki-options", "enum": [ - "nfl/fantasy-football-trade-value-charts", - "nfl/dynasty-trade-value-charts" + "minecraft", + "terraria", + "naruto", + "tiktok", + "youtube", + "gta", + "one-piece", + "sk-communities" ], "in": "query", + "name": "wiki", + "required": true, + "type": "string", + "x-example": "minecraft" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sportskeedaWikiCategoriesResponseDoc" + } + }, + "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 Sportskeeda Wiki categories", + "tags": [ + "Sportskeeda" + ] + } + }, + "/sportskeeda/wiki-contributors": { + "get": { + "description": "Returns public accepted contributors for one Wiki article. The source page slug is obtained from sportskeeda-wiki-pages; user IP and private account fields are never returned.", + "operationId": "sportskeeda-wiki-contributors", + "parameters": [ + { + "description": "Host-free Wiki page path_slug from sportskeeda-wiki-pages", + "in": "query", "name": "slug", "required": true, "type": "string", - "x-example": "nfl/fantasy-football-trade-value-charts" + "x-example": "minecraft-wiki/achievements" }, { - "default": "All", - "description": "Displayed position section; defaults to All", + "default": 1, + "description": "1-based page", + "in": "query", + "maximum": 10000, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Contributors per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": "desc", + "description": "Sort direction", "enum": [ - "All", - "QB", - "RB", - "WR", - "TE" + "asc", + "desc" ], "in": "query", - "name": "position", + "name": "sort", "type": "string" }, { - "default": "ppr", - "description": "Scoring system; defaults to ppr", + "default": "contributions", + "description": "Contributor sort field", "enum": [ - "ppr", - "non_ppr", - "0.5_ppr" + "author_name", + "contributions", + "updated_at" ], "in": "query", - "name": "scoring", + "name": "sort_by", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sportskeedaWikiContributorsResponseDoc" + } + }, + "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": [ { - "default": false, - "description": "Use superflex chart; defaults to false", + "ApiKeyAuth": [] + } + ], + "summary": "List contributors to a Sportskeeda Wiki page", + "tags": [ + "Sportskeeda" + ] + } + }, + "/sportskeeda/wiki-issues": { + "get": { + "description": "Returns public opened or closed issues for one Wiki article. The upstream also returns submitter IP addresses; this endpoint deliberately omits them.", + "operationId": "sportskeeda-wiki-issues", + "parameters": [ + { + "description": "Host-free Wiki page path_slug from sportskeeda-wiki-pages", "in": "query", - "name": "superflex", - "type": "boolean" + "name": "slug", + "required": true, + "type": "string", + "x-example": "minecraft-wiki/achievements" }, { - "default": 0, - "description": "Zero-based player offset", + "default": 1, + "description": "1-based page", "in": "query", - "maximum": 1000000, - "minimum": 0, - "name": "offset", + "maximum": 10000, + "minimum": 1, + "name": "page", "type": "integer" }, { - "default": 100, - "description": "Page size from 1 to 500", + "default": 10, + "description": "Issues per page", "in": "query", - "maximum": 500, + "maximum": 100, "minimum": 1, "name": "limit", "type": "integer" + }, + { + "default": "opened", + "description": "Issue status", + "enum": [ + "opened", + "closed" + ], + "in": "query", + "name": "status", + "type": "string" } ], "produces": [ @@ -375869,7 +411457,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaTradeValuesResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaWikiIssuesResponseDoc" } }, "400": { @@ -375884,6 +411472,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -375896,24 +411490,121 @@ "ApiKeyAuth": [] } ], - "summary": "Get NFL redraft or dynasty trade values", + "summary": "List reported issues for a Sportskeeda Wiki page", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/video": { + "/sportskeeda/wiki-options": { "get": { - "description": "Returns the public video player's ID, title, poster, and stream URL for a video page slug.", - "operationId": "sportskeeda-video", + "description": "Returns the live-verified project slugs and taxonomy mappings accepted by the Wiki category, catalog, and article endpoints.", + "operationId": "sportskeeda-wiki-options", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sportskeedaWikiOptionsResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Sportskeeda Wiki projects", + "tags": [ + "Sportskeeda" + ] + } + }, + "/sportskeeda/wiki-pages": { + "get": { + "description": "Returns catalog pages for one Wiki project. Use path_slug as the preferred host-free slug for sportskeeda-wiki-article. total_items is the record count; the upstream field named total_pages is mislabelled and does not mean page count.", + "operationId": "sportskeeda-wiki-pages", "parameters": [ { - "description": "Individual Sportskeeda video page path without host", + "description": "Project slug returned by sportskeeda-wiki-options", + "enum": [ + "minecraft", + "terraria", + "naruto", + "tiktok", + "youtube", + "gta", + "one-piece", + "sk-communities" + ], "in": "query", - "name": "slug", + "name": "wiki", "required": true, "type": "string", - "x-example": "cricket/sunil-naraine-batting-cpl" + "x-example": "minecraft" + }, + { + "default": 1, + "description": "1-based catalog page", + "in": "query", + "maximum": 10000, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 10, + "description": "Items per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": "DESC", + "description": "Sort direction", + "enum": [ + "ASC", + "DESC" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "last_updated", + "description": "Catalog field to sort by", + "enum": [ + "last_updated", + "page_size", + "ratings", + "issues_count" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "description": "Title or page search text; sent upstream as searchText", + "in": "query", + "maxLength": 100, + "name": "search", + "type": "string" } ], "produces": [ @@ -375923,7 +411614,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaVideoResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaWikiPagesResponseDoc" } }, "400": { @@ -375938,6 +411629,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -375950,24 +411647,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Sportskeeda video metadata", + "summary": "Search and paginate Sportskeeda Wiki pages", "tags": [ "Sportskeeda" ] } }, - "/sportskeeda/videos": { + "/sportskeeda/wiki-summary": { "get": { - "description": "Lists public video cards from the main video library or a sport/event video listing.", - "operationId": "sportskeeda-videos", + "description": "Returns accepted contributor and activity totals plus the open-issue count for one Wiki article. The source page slug is obtained from sportskeeda-wiki-pages.", + "operationId": "sportskeeda-wiki-summary", "parameters": [ { - "default": "videos", - "description": "Video listing path without host; defaults to videos", + "description": "Host-free Wiki page path_slug from sportskeeda-wiki-pages", "in": "query", "name": "slug", + "required": true, "type": "string", - "x-example": "go/epl/videos" + "x-example": "minecraft-wiki/achievements" } ], "produces": [ @@ -375977,7 +411674,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sportskeedaVideosResponseDoc" + "$ref": "#/definitions/publicnews.sportskeedaWikiSummaryResponseDoc" } }, "400": { @@ -375992,6 +411689,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -376004,7 +411707,7 @@ "ApiKeyAuth": [] } ], - "summary": "List Sportskeeda videos and channels", + "summary": "Get community counts for a Sportskeeda Wiki page", "tags": [ "Sportskeeda" ] @@ -379362,7 +415065,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -382536,24 +418240,507 @@ "ApiKeyAuth": [] } ], - "summary": "Search/browse StockX products", + "summary": "Search/browse StockX products", + "tags": [ + "StockX" + ] + } + }, + "/straitstimes/article": { + "get": { + "description": "Returns public The Straits Times article metadata and body paragraphs from a canonical article URL. A subscriber-only article returns only its publicly served teaser paragraphs with paywalled set to true.", + "operationId": "straitstimes-article", + "parameters": [ + { + "description": "Canonical The Straits Times article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.straitstimes.com/singapore/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" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Straits Times article content", + "tags": [ + "The Straits Times" + ] + } + }, + "/straitstimes/author": { + "get": { + "description": "Returns a The Straits Times author's byline metadata and their recent articles from a canonical author URL.", + "operationId": "straitstimes-author", + "parameters": [ + { + "description": "Canonical The Straits Times author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.straitstimes.com/authors/example-author" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.straitstimesAuthorResponseDoc" + } + }, + "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 The Straits Times author profile", + "tags": [ + "The Straits Times" + ] + } + }, + "/straitstimes/headlines": { + "get": { + "description": "Returns fresh headlines from one public The Straits Times section.", + "operationId": "straitstimes-headlines", + "parameters": [ + { + "description": "The Straits Times section slug", + "enum": [ + "singapore", + "singapore/housing", + "singapore/health", + "singapore/transport", + "singapore/parenting-education", + "singapore/politics", + "singapore/jobs", + "singapore/environment", + "singapore/courts-crime", + "singapore/community", + "asia", + "asia/se-asia", + "asia/east-asia", + "asia/south-asia", + "asia/australianz", + "world", + "world/united-states", + "world/europe", + "world/middle-east", + "opinion", + "opinion/forum", + "life", + "life/entertainment", + "life/travel", + "life/food", + "life/home-design", + "life/style", + "life/arts", + "business", + "business/economy", + "business/banking", + "business/companies-markets", + "business/invest", + "sport", + "sport/basketball", + "sport/football", + "sport/formula-one", + "sport/golf", + "sport/schools", + "sport/tennis", + "sport/racing", + "tech", + "breaking-news" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "singapore" + } + ], + "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 The Straits Times section headlines", + "tags": [ + "The Straits Times" + ] + } + }, + "/straitstimes/news": { + "get": { + "description": "Returns fresh The Straits Times top stories from its public top-stories page.", + "operationId": "straitstimes-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 The Straits Times top stories", + "tags": [ + "The Straits Times" + ] + } + }, + "/straitstimes/sections": { + "get": { + "description": "Returns the public The Straits Times category/section inventory used by the headlines endpoint.", + "operationId": "straitstimes-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Straits Times sections", + "tags": [ + "The Straits Times" + ] + } + }, + "/strava/challenges": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Strava's public challenge gallery: the currently promoted challenge plus every gallery section (partner challenges, and one section per sport such as run/ride), each with its challenges' goal, duration, and cover art. Public data, sourced from Strava's own challenge gallery.", + "operationId": "strava-challenges", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/strava.challengesResponseDoc" + } + }, + "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": "Strava's public challenge gallery", + "tags": [ + "Strava" + ] + } + }, + "/strava/clubs/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a Strava club's public profile: name, verified/private flags, location, description, member count, and cover/avatar images. Only the base public profile is returned -- discussion, leaderboard, member list, and recent-activity data require a logged-in Strava session and are not available. Public data, sourced from Strava's own server-rendered club page.", + "operationId": "strava-club", + "parameters": [ + { + "description": "Strava club ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "521703" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/strava.clubResponseDoc" + } + }, + "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 Strava club's public profile", + "tags": [ + "Strava" + ] + } + }, + "/strava/routes": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of Strava's public route recommendations for a sport, country, and region (state, or state/city). `sport` values: `hiking`, `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking`. Public data, sourced from Strava's own server-rendered route pages.", + "operationId": "strava-routes", + "parameters": [ + { + "description": "Route sport. Allowed values: hiking, road-biking, mountain-biking, trail-running, gravel-biking", + "enum": [ + "hiking", + "road-biking", + "mountain-biking", + "trail-running", + "gravel-biking" + ], + "in": "query", + "name": "sport", + "required": true, + "type": "string", + "x-example": "hiking" + }, + { + "description": "Country slug, e.g. usa", + "in": "query", + "name": "country", + "required": true, + "type": "string", + "x-example": "usa" + }, + { + "description": "Region slug: a state (colorado) or state/city (colorado/boulder)", + "in": "query", + "name": "region", + "required": true, + "type": "string", + "x-example": "colorado" + }, + { + "description": "Page number, starting at 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/strava.routesResponseDoc" + } + }, + "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": "Strava route-index listing for a sport, country, and region", "tags": [ - "StockX" + "Strava" ] } }, - "/straitstimes/article": { + "/strava/routes/detail": { "get": { - "description": "Returns public The Straits Times article metadata and body paragraphs from a canonical article URL. A subscriber-only article returns only its publicly served teaser paragraphs with paywalled set to true.", - "operationId": "straitstimes-article", + "consumes": [ + "application/json" + ], + "description": "Returns a single Strava route's detail: type, difficulty, distance, elevation gain, estimated time, and summary. `path` is the relative route path returned by `/strava/routes` results (e.g. `hiking/usa/colorado/boulder/mallory-cave_5171952737974445730`). Public data, sourced from Strava's own server-rendered route pages.", + "operationId": "strava-route-detail", "parameters": [ { - "description": "Canonical The Straits Times article URL", + "description": "Relative route path, from a /strava/routes result's path field", "in": "query", - "name": "url", + "name": "path", "required": true, "type": "string", - "x-example": "https://www.straitstimes.com/singapore/example-article-slug" + "x-example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730" } ], "produces": [ @@ -382563,7 +418750,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/strava.routeDetailResponseDoc" } }, "400": { @@ -382578,6 +418765,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": { @@ -382590,24 +418789,71 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Straits Times article content", + "summary": "A single Strava route's detail page", "tags": [ - "The Straits Times" + "Strava" ] } }, - "/straitstimes/author": { + "/streeteasy/areas": { "get": { - "description": "Returns a The Straits Times author's byline metadata and their recent articles from a canonical author URL.", - "operationId": "straitstimes-author", + "consumes": [ + "application/json" + ], + "description": "Returns the complete area hierarchy exposed by StreetEasy's public homepage location picker. Use area IDs with streeteasy-rentals-search.", + "operationId": "streeteasy-areas", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "items": { + "$ref": "#/definitions/streeteasy.Area" + }, + "type": "array" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List StreetEasy search areas", + "tags": [ + "StreetEasy" + ] + } + }, + "/streeteasy/buildings/{slug}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Retrieves public building facts, location, description, policies, amenities, and available sale/rental listing cards from StreetEasy's server-rendered building page. Pass the building slug from a StreetEasy /building/{slug} URL.", + "operationId": "streeteasy-building", "parameters": [ { - "description": "Canonical The Straits Times author URL", - "in": "query", - "name": "url", + "description": "StreetEasy building slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.straitstimes.com/authors/example-author" + "x-example": "tribeca-space" } ], "produces": [ @@ -382617,7 +418863,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.straitstimesAuthorResponseDoc" + "$ref": "#/definitions/streeteasy.BuildingDetails" } }, "400": { @@ -382632,6 +418878,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -382644,70 +418896,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Straits Times author profile", + "summary": "Get StreetEasy building details", "tags": [ - "The Straits Times" + "StreetEasy" ] } }, - "/straitstimes/headlines": { + "/streeteasy/market-data/catalog": { "get": { - "description": "Returns fresh headlines from one public The Straits Times section.", - "operationId": "straitstimes-headlines", - "parameters": [ - { - "description": "The Straits Times section slug", - "enum": [ - "singapore", - "singapore/housing", - "singapore/health", - "singapore/transport", - "singapore/parenting-education", - "singapore/politics", - "singapore/jobs", - "singapore/environment", - "singapore/courts-crime", - "singapore/community", - "asia", - "asia/se-asia", - "asia/east-asia", - "asia/south-asia", - "asia/australianz", - "world", - "world/united-states", - "world/europe", - "world/middle-east", - "opinion", - "opinion/forum", - "life", - "life/entertainment", - "life/travel", - "life/food", - "life/home-design", - "life/style", - "life/arts", - "business", - "business/economy", - "business/banking", - "business/companies-markets", - "business/invest", - "sport", - "sport/basketball", - "sport/football", - "sport/formula-one", - "sport/golf", - "sport/schools", - "sport/tennis", - "sport/racing", - "tech", - "breaking-news" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string" - } + "consumes": [ + "application/json" ], + "description": "Returns every selectable public dashboard dataset, including supported bedroom and property-type variants. Use a returned dataset ID with streeteasy-market-data-series.", + "operationId": "streeteasy-market-data-catalog", "produces": [ "application/json" ], @@ -382715,11 +418916,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/streeteasy.MarketDataCatalog" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -382736,16 +418937,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Straits Times section headlines", + "summary": "List StreetEasy dashboard metric datasets", "tags": [ - "The Straits Times" + "StreetEasy" ] } }, - "/straitstimes/news": { + "/streeteasy/market-data/indices": { "get": { - "description": "Returns fresh The Straits Times top stories from its public top-stories page.", - "operationId": "straitstimes-news", + "consumes": [ + "application/json" + ], + "description": "Returns public sale-price and rent index values by dashboard area. The datasets have different historical start dates; missing values are omitted. Defaults to the latest 12 months and limits each request to 36 months.", + "operationId": "streeteasy-market-indices", + "parameters": [ + { + "description": "First month, inclusive, in YYYY-MM format", + "in": "query", + "name": "start_month", + "type": "string" + }, + { + "description": "Last month, inclusive, in YYYY-MM format; defaults to the latest available month", + "in": "query", + "name": "end_month", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -382753,7 +418971,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/streeteasy.MarketIndices" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -382774,16 +418998,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Straits Times top stories", + "summary": "Get StreetEasy monthly market indices", "tags": [ - "The Straits Times" + "StreetEasy" ] } }, - "/straitstimes/sections": { + "/streeteasy/market-data/inventory": { "get": { - "description": "Returns the public The Straits Times category/section inventory used by the headlines endpoint.", - "operationId": "straitstimes-sections", + "consumes": [ + "application/json" + ], + "description": "Returns monthly sales and rental inventory counts for every area in StreetEasy's public Data Dashboard. Defaults to the latest 12 available months; each request is limited to 36 months.", + "operationId": "streeteasy-market-inventory", + "parameters": [ + { + "description": "First month, inclusive, in YYYY-MM format", + "in": "query", + "name": "start_month", + "type": "string" + }, + { + "description": "Last month, inclusive, in YYYY-MM format; defaults to the latest available month", + "in": "query", + "name": "end_month", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -382791,7 +419032,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/streeteasy.MarketInventory" + } + }, + "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" } } }, @@ -382800,19 +419059,106 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Straits Times sections", + "summary": "Get StreetEasy monthly market inventory", "tags": [ - "The Straits Times" + "StreetEasy" ] } }, - "/strava/challenges": { + "/streeteasy/market-data/series": { "get": { "consumes": [ "application/json" ], - "description": "Returns Strava's public challenge gallery: the currently promoted challenge plus every gallery section (partner challenges, and one section per sport such as run/ride), each with its challenges' goal, duration, and cover art. Public data, sourced from Strava's own challenge gallery.", - "operationId": "strava-challenges", + "description": "Returns a public dashboard metric for every published area. Obtain the complete dataset ID set and its labels/dimensions from streeteasy-market-data-catalog. Defaults to the latest 12 months and limits requests to 36 months.", + "operationId": "streeteasy-market-data-series", + "parameters": [ + { + "description": "StreetEasy dashboard dataset ID", + "enum": [ + "medianAskingPPSF", + "medianAskingPPSFOneBd", + "medianAskingPPSFStudio", + "medianAskingPPSFThreePlusBd", + "medianAskingPPSFTwoBd", + "medianAskingPrice", + "medianAskingPriceCondo", + "medianAskingPriceCoop", + "medianAskingPriceSfr", + "medianAskingRent", + "medianAskingRentOneBd", + "medianAskingRentStudio", + "medianAskingRentThreePlusBd", + "medianAskingRentTwoBd", + "medianDaysMarket", + "medianDaysMarketCondo", + "medianDaysMarketCoop", + "medianRecordedSalesPrice", + "medianRecordedSalesPriceCondo", + "medianRecordedSalesPriceCoop", + "medianRecordedSalesPriceSfr", + "medianRentalDiscount", + "medianRentalDiscountOneBd", + "medianRentalDiscountStudio", + "medianRentalDiscountThreePlusBd", + "medianRentalDiscountTwoBd", + "newInventory", + "newInventoryCondo", + "newInventoryCoop", + "newInventorySfr", + "priceIndex", + "recordedSales", + "recordedSalesCondo", + "recordedSalesCoop", + "recordedSalesSfr", + "rentIndex", + "rentalConcessions", + "rentalInventory", + "rentalInventoryOneBd", + "rentalInventoryStudio", + "rentalInventoryThreePlusBd", + "rentalInventoryTwoBd", + "saleListRatio", + "saleListRatioCondo", + "saleListRatioCoop", + "saleListRatioSfr", + "salesInventory", + "salesInventoryCondo", + "salesInventoryCoop", + "salesInventoryOneBd", + "salesInventorySfr", + "salesInventoryStudio", + "salesInventoryThreePlusBd", + "salesInventoryTwoBd", + "shareOfRentalsDiscounted", + "shareOfRentalsDiscountedOneBd", + "shareOfRentalsDiscountedStudio", + "shareOfRentalsDiscountedThreePlusBd", + "shareOfRentalsDiscountedTwoBd", + "sharePriceCut", + "sharePriceCutCondo", + "sharePriceCutCoop", + "sharePriceCutSfr" + ], + "in": "query", + "name": "dataset", + "required": true, + "type": "string", + "x-example": "medianAskingPPSF" + }, + { + "description": "First month, inclusive, in YYYY-MM format", + "in": "query", + "name": "start_month", + "type": "string" + }, + { + "description": "Last month, inclusive, in YYYY-MM format; defaults to the latest available month", + "in": "query", + "name": "end_month", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -382820,17 +419166,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/strava.challengesResponseDoc" + "$ref": "#/definitions/streeteasy.MarketDataSeries" } }, - "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" } @@ -382847,27 +419193,27 @@ "ApiKeyAuth": [] } ], - "summary": "Strava's public challenge gallery", + "summary": "Get one StreetEasy monthly market metric", "tags": [ - "Strava" + "StreetEasy" ] } }, - "/strava/clubs/{id}": { + "/streeteasy/quick-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Strava club's public profile: name, verified/private flags, location, description, member count, and cover/avatar images. Only the base public profile is returned -- discussion, leaderboard, member list, and recent-activity data require a logged-in Strava session and are not available. Public data, sourced from Strava's own server-rendered club page.", - "operationId": "strava-club", + "description": "Searches StreetEasy's public quick-search page and returns its rendered neighborhood, building, complex, school, agent, and recorded-sale groups. Recorded-sale entries are a limited anonymous preview when the page requires registration to see the remaining matches.", + "operationId": "streeteasy-quick-search", "parameters": [ { - "description": "Strava club ID", - "in": "path", - "name": "id", + "description": "Free-text StreetEasy quick-search query (1-160 characters)", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "521703" + "x-example": "Astoria" } ], "produces": [ @@ -382877,7 +419223,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/strava.clubResponseDoc" + "$ref": "#/definitions/streeteasy.QuickSearchResult" } }, "400": { @@ -382886,20 +419232,294 @@ "$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 StreetEasy across public result types", + "tags": [ + "StreetEasy" + ] + } + }, + "/streeteasy/rentals/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches active StreetEasy rentals in one or more areas with the public site's price, room, building, amenity, pet, open-house, tour, transit, and sort filters. Obtain valid area IDs from /streeteasy/areas.", + "operationId": "streeteasy-rentals-search", + "parameters": [ + { + "collectionFormat": "multi", + "description": "StreetEasy area ID from /streeteasy/areas; repeat for multiple areas", + "in": "query", + "items": { + "type": "integer" + }, + "name": "area_id", + "required": true, + "type": "array", + "x-example": 271 }, - "500": { - "description": "Internal Server Error", + { + "default": 1, + "description": "1-based result page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 500, + "description": "Results per page, 1-500", + "in": "query", + "name": "per_page", + "type": "integer" + }, + { + "description": "Result order", + "enum": [ + "default", + "newest", + "recently_updated", + "price_desc", + "price_asc", + "largest", + "smallest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Minimum monthly rent", + "in": "query", + "name": "min_price", + "type": "integer" + }, + { + "description": "Maximum monthly rent", + "in": "query", + "name": "max_price", + "type": "integer" + }, + { + "description": "Minimum bedrooms; zero means studio", + "in": "query", + "name": "min_bedrooms", + "type": "integer" + }, + { + "description": "Maximum bedrooms", + "in": "query", + "name": "max_bedrooms", + "type": "integer" + }, + { + "description": "Minimum bathrooms", + "in": "query", + "name": "min_bathrooms", + "type": "number" + }, + { + "description": "Maximum bathrooms", + "in": "query", + "name": "max_bathrooms", + "type": "number" + }, + { + "description": "Minimum square footage", + "in": "query", + "name": "min_sqft", + "type": "integer" + }, + { + "description": "Maximum square footage", + "in": "query", + "name": "max_sqft", + "type": "integer" + }, + { + "collectionFormat": "multi", + "description": "Building type; repeat for multiple", + "in": "query", + "items": { + "enum": [ + "rental", + "condo", + "co-op", + "house", + "multifamily" + ], + "type": "string" + }, + "name": "building_type", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Required amenity; repeat for multiple", + "in": "query", + "items": { + "enum": [ + "washer_dryer", + "dishwasher", + "private_outdoor_space", + "central_air", + "furnished", + "fireplace", + "loft", + "city_view", + "garden_view", + "park_view", + "skyline_view", + "water_view", + "elevator", + "doorman", + "laundry", + "gym", + "parking", + "shared_outdoor_space", + "pool", + "pied_a_terre", + "childrens_playroom", + "smoke_free", + "storage" + ], + "type": "string" + }, + "name": "amenity", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Preferred amenity; results may omit these. Repeat for multiple.", + "in": "query", + "items": { + "enum": [ + "washer_dryer", + "dishwasher", + "private_outdoor_space", + "central_air", + "furnished", + "fireplace", + "loft", + "city_view", + "garden_view", + "park_view", + "skyline_view", + "water_view", + "elevator", + "doorman", + "laundry", + "gym", + "parking", + "shared_outdoor_space", + "pool", + "pied_a_terre", + "childrens_playroom", + "smoke_free", + "storage" + ], + "type": "string" + }, + "name": "optional_amenity", + "type": "array" + }, + { + "description": "Require listings that allow pets", + "in": "query", + "name": "pets_allowed", + "type": "boolean" + }, + { + "description": "Require an open house within the next seven days", + "in": "query", + "name": "open_house", + "type": "boolean" + }, + { + "description": "Require a 3D tour", + "in": "query", + "name": "tour_3d", + "type": "boolean" + }, + { + "description": "Require a video tour", + "in": "query", + "name": "video_tour", + "type": "boolean" + }, + { + "collectionFormat": "multi", + "description": "Nearby transit line; repeat for multiple", + "in": "query", + "items": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "A", + "C", + "E", + "B", + "D", + "F", + "M", + "G", + "N", + "Q", + "R", + "W", + "J", + "Z", + "L", + "S", + "HBLR", + "PATH" + ], + "type": "string" + }, + "name": "transit_line", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/streeteasy.RentalSearch" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -382916,57 +419536,386 @@ "ApiKeyAuth": [] } ], - "summary": "A Strava club's public profile", + "summary": "Search StreetEasy rental listings", "tags": [ - "Strava" + "StreetEasy" ] } }, - "/strava/routes": { + "/streeteasy/sales/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of Strava's public route recommendations for a sport, country, and region (state, or state/city). `sport` values: `hiking`, `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking`. Public data, sourced from Strava's own server-rendered route pages.", - "operationId": "strava-routes", + "description": "Searches public sale listings with location, status, sale type, price, bedroom, bathroom, square-footage, carrying cost, building age, school, ZIP, keyword, building type, amenity, pet, open-house, virtual-tour, transit, and sort filters. Obtain area IDs from /streeteasy/areas. When sale_status is omitted, active, preview, and coming_soon listings are included.", + "operationId": "streeteasy-sales-search", "parameters": [ { - "description": "Route sport. Allowed values: hiking, road-biking, mountain-biking, trail-running, gravel-biking", - "enum": [ - "hiking", - "road-biking", - "mountain-biking", - "trail-running", - "gravel-biking" - ], + "collectionFormat": "multi", + "description": "StreetEasy area ID from /streeteasy/areas; repeat for multiple areas", "in": "query", - "name": "sport", + "items": { + "type": "integer" + }, + "name": "area_id", "required": true, - "type": "string", - "x-example": "hiking" + "type": "array", + "x-example": 100 }, { - "description": "Country slug, e.g. usa", + "collectionFormat": "multi", + "description": "Sale status; repeat for multiple. Defaults to active, preview, and coming_soon.", "in": "query", - "name": "country", - "required": true, - "type": "string", - "x-example": "usa" + "items": { + "enum": [ + "active", + "preview", + "coming_soon", + "in_contract", + "sold", + "unavailable" + ], + "type": "string" + }, + "name": "sale_status", + "type": "array" }, { - "description": "Region slug: a state (colorado) or state/city (colorado/boulder)", + "collectionFormat": "multi", + "description": "Sale type; repeat for multiple.", "in": "query", - "name": "region", - "required": true, - "type": "string", - "x-example": "colorado" + "items": { + "enum": [ + "sponsor_unit", + "foreclosure", + "resale", + "restricted_sale" + ], + "type": "string" + }, + "name": "sale_type", + "type": "array" }, { - "description": "Page number, starting at 1", + "default": 1, + "description": "1-based result page", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" + }, + { + "default": 500, + "description": "Results per page, 1-500", + "in": "query", + "name": "per_page", + "type": "integer" + }, + { + "description": "default, newest, recently_updated, price_desc, price_asc, largest, or smallest", + "enum": [ + "default", + "newest", + "recently_updated", + "price_desc", + "price_asc", + "largest", + "smallest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Minimum sale price", + "in": "query", + "name": "min_price", + "type": "integer" + }, + { + "description": "Maximum sale price", + "in": "query", + "name": "max_price", + "type": "integer" + }, + { + "description": "Minimum bedrooms; zero means studio", + "in": "query", + "name": "min_bedrooms", + "type": "integer" + }, + { + "description": "Maximum bedrooms", + "in": "query", + "name": "max_bedrooms", + "type": "integer" + }, + { + "description": "Minimum bathrooms", + "in": "query", + "name": "min_bathrooms", + "type": "number" + }, + { + "description": "Maximum bathrooms", + "in": "query", + "name": "max_bathrooms", + "type": "number" + }, + { + "description": "Minimum square footage", + "in": "query", + "name": "min_sqft", + "type": "integer" + }, + { + "description": "Maximum square footage", + "in": "query", + "name": "max_sqft", + "type": "integer" + }, + { + "description": "Minimum monthly maintenance fee", + "in": "query", + "name": "min_maintenance", + "type": "integer" + }, + { + "description": "Maximum monthly maintenance fee", + "in": "query", + "name": "max_maintenance", + "type": "integer" + }, + { + "description": "Minimum monthly property taxes", + "in": "query", + "name": "min_monthly_taxes", + "type": "integer" + }, + { + "description": "Maximum monthly property taxes", + "in": "query", + "name": "max_monthly_taxes", + "type": "integer" + }, + { + "description": "Minimum price per square foot", + "in": "query", + "name": "min_price_per_sqft", + "type": "integer" + }, + { + "description": "Maximum price per square foot", + "in": "query", + "name": "max_price_per_sqft", + "type": "integer" + }, + { + "description": "Include listings with unknown price per square foot", + "in": "query", + "name": "include_unknown_price_per_sqft", + "type": "boolean" + }, + { + "description": "Minimum building year built", + "in": "query", + "name": "min_year_built", + "type": "integer" + }, + { + "description": "Maximum building year built", + "in": "query", + "name": "max_year_built", + "type": "integer" + }, + { + "description": "Set true to select prewar buildings", + "in": "query", + "name": "prewar", + "type": "boolean" + }, + { + "description": "New development filter", + "enum": [ + "pre_construction" + ], + "in": "query", + "name": "development", + "type": "string" + }, + { + "description": "Set true to select income-restricted homes", + "in": "query", + "name": "income_restricted", + "type": "boolean" + }, + { + "collectionFormat": "multi", + "description": "StreetEasy school ID selected by the public search UI; repeat for multiple schools", + "in": "query", + "items": { + "type": "integer" + }, + "name": "school_id", + "type": "array" + }, + { + "description": "Five-digit ZIP code", + "in": "query", + "name": "zip_code", + "type": "string" + }, + { + "description": "Listing-description keyword filter", + "in": "query", + "name": "keywords", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Building type", + "in": "query", + "items": { + "enum": [ + "condo", + "co-op", + "house", + "multifamily" + ], + "type": "string" + }, + "name": "building_type", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Amenity filter; repeat for multiple", + "in": "query", + "items": { + "enum": [ + "washer_dryer", + "dishwasher", + "private_outdoor_space", + "central_air", + "furnished", + "fireplace", + "loft", + "city_view", + "garden_view", + "park_view", + "skyline_view", + "water_view", + "elevator", + "doorman", + "laundry", + "gym", + "parking", + "shared_outdoor_space", + "pool", + "pied_a_terre", + "childrens_playroom", + "smoke_free", + "storage" + ], + "type": "string" + }, + "name": "amenity", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Nice-to-have amenity; results may omit these. Repeat for multiple.", + "in": "query", + "items": { + "enum": [ + "washer_dryer", + "dishwasher", + "private_outdoor_space", + "central_air", + "furnished", + "fireplace", + "loft", + "city_view", + "garden_view", + "park_view", + "skyline_view", + "water_view", + "elevator", + "doorman", + "laundry", + "gym", + "parking", + "shared_outdoor_space", + "pool", + "pied_a_terre", + "childrens_playroom", + "smoke_free", + "storage" + ], + "type": "string" + }, + "name": "optional_amenity", + "type": "array" + }, + { + "description": "Require pets allowed", + "in": "query", + "name": "pets_allowed", + "type": "boolean" + }, + { + "description": "Require open house within the next seven days", + "in": "query", + "name": "open_house", + "type": "boolean" + }, + { + "description": "Require a 3D tour", + "in": "query", + "name": "tour_3d", + "type": "boolean" + }, + { + "description": "Require a video tour", + "in": "query", + "name": "video_tour", + "type": "boolean" + }, + { + "collectionFormat": "multi", + "description": "Nearby transit line; repeat for multiple", + "in": "query", + "items": { + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "A", + "C", + "E", + "B", + "D", + "F", + "M", + "G", + "N", + "Q", + "R", + "W", + "J", + "Z", + "L", + "S", + "HBLR", + "PATH" + ], + "type": "string" + }, + "name": "transit_line", + "type": "array" } ], "produces": [ @@ -382976,7 +419925,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/strava.routesResponseDoc" + "$ref": "#/definitions/streeteasy.RentalSearch" } }, "400": { @@ -382985,20 +419934,71 @@ "$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 StreetEasy sale listings", + "tags": [ + "StreetEasy" + ] + } + }, + "/streeteasy/schools/{slug}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Retrieves the public school facts rendered on StreetEasy, including neighborhood, grade labels, district, address, phone, and fax when available. Use the school slug from a public /nyc/school/{slug} link, including the school results returned by streeteasy-quick-search.", + "operationId": "streeteasy-school", + "parameters": [ + { + "description": "StreetEasy school slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "q286-queens" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/streeteasy.SchoolDetails" + } + }, + "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" } @@ -383015,27 +420015,35 @@ "ApiKeyAuth": [] } ], - "summary": "Strava route-index listing for a sport, country, and region", + "summary": "Get StreetEasy school details", "tags": [ - "Strava" + "StreetEasy" ] } }, - "/strava/routes/detail": { + "/streeteasy/units/{building_slug}/{unit}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Strava route's detail: type, difficulty, distance, elevation gain, estimated time, and summary. `path` is the relative route path returned by `/strava/routes` results (e.g. `hiking/usa/colorado/boulder/mallory-cave_5171952737974445730`). Public data, sourced from Strava's own server-rendered route pages.", - "operationId": "strava-route-detail", + "description": "Retrieves a public unit's structured listing details from its server-rendered page, including address, asking price, description, amenities, and scheduled open houses.", + "operationId": "streeteasy-unit", "parameters": [ { - "description": "Relative route path, from a /strava/routes result's path field", - "in": "query", - "name": "path", + "description": "StreetEasy building slug", + "in": "path", + "name": "building_slug", "required": true, "type": "string", - "x-example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730" + "x-example": "nusun-vernon" + }, + { + "description": "StreetEasy unit segment from /building/{building_slug}/{unit}", + "in": "path", + "name": "unit", + "required": true, + "type": "string", + "x-example": "2p" } ], "produces": [ @@ -383045,7 +420053,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/strava.routeDetailResponseDoc" + "$ref": "#/definitions/streeteasy.UnitDetails" } }, "400": { @@ -383066,12 +420074,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -383084,9 +420086,9 @@ "ApiKeyAuth": [] } ], - "summary": "A single Strava route's detail page", + "summary": "Get StreetEasy unit details", "tags": [ - "Strava" + "StreetEasy" ] } }, @@ -383124,7 +420126,8 @@ "in": "query", "name": "top_level_category_id", "required": true, - "type": "integer" + "type": "integer", + "x-example": 1 }, { "description": "StubHub category id", @@ -384020,7 +421023,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "latest-news" } ], "produces": [ @@ -386023,7 +423027,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -387251,7 +424256,8 @@ "in": "query", "name": "tcin", "required": true, - "type": "string" + "type": "string", + "x-example": "91940750" }, { "default": 0, @@ -387315,7 +424321,8 @@ "in": "query", "name": "tcin", "required": true, - "type": "string" + "type": "string", + "x-example": "91940750" }, { "default": 0, @@ -387694,7 +424701,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "apps" } ], "produces": [ @@ -387953,7 +424961,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "ai-platforms-assistants" } ], "produces": [ @@ -388187,7 +425196,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "uk-news" } ], "produces": [ @@ -389639,6 +426649,278 @@ ] } }, + "/theblaze/article": { + "get": { + "description": "Returns article metadata and body paragraphs from a canonical, publicly accessible editorial or show-story URL.", + "operationId": "theblaze-article", + "parameters": [ + { + "description": "Canonical theblaze.com article URL", + "in": "query", + "name": "url", + "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" + } + ], + "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 Blaze Media article", + "tags": [ + "TheBlaze" + ] + } + }, + "/theblaze/author": { + "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" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.theBlazeAuthorResponseDoc" + } + }, + "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 Blaze Media contributor profile", + "tags": [ + "TheBlaze" + ] + } + }, + "/theblaze/headlines": { + "get": { + "description": "Returns headlines from a public section RSS feed. Use /theblaze/sections to discover the complete accepted section list.", + "operationId": "theblaze-headlines", + "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" + ], + "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 Blaze Media section headlines", + "tags": [ + "TheBlaze" + ] + } + }, + "/theblaze/news": { + "get": { + "description": "Returns fresh news and opinion stories from the public Blaze Media RSS feed.", + "operationId": "theblaze-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 Blaze Media top stories", + "tags": [ + "TheBlaze" + ] + } + }, + "/theblaze/sections": { + "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", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Blaze Media sections", + "tags": [ + "TheBlaze" + ] + } + }, "/thebodyshop/collections": { "get": { "consumes": [ @@ -390546,7 +427828,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "lifestyle" } ], "produces": [ @@ -390780,7 +428063,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "home" } ], "produces": [ @@ -391075,7 +428359,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -391284,47 +428569,280 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TheJournal.ie author page", + "summary": "Get a TheJournal.ie author page", + "tags": [ + "TheJournal.ie" + ] + } + }, + "/thejournal/headlines": { + "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", + "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" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "irish" + } + ], + "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 TheJournal.ie section headlines", + "tags": [ + "TheJournal.ie" + ] + } + }, + "/thejournal/news": { + "get": { + "description": "Returns fresh TheJournal.ie stories from the public site-wide RSS feed, with real publish times.", + "operationId": "thejournal-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 TheJournal.ie top stories", + "tags": [ + "TheJournal.ie" + ] + } + }, + "/thejournal/sections": { + "get": { + "description": "Returns the public TheJournal.ie section inventory: the category pages and navigation topic pages this family serves headlines for.", + "operationId": "thejournal-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get TheJournal.ie sections", + "tags": [ + "TheJournal.ie" + ] + } + }, + "/thenextweb/article": { + "get": { + "description": "Returns public The Next Web article metadata and body paragraphs from a canonical article URL.", + "operationId": "thenextweb-article", + "parameters": [ + { + "description": "Canonical thenextweb.com article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://thenextweb.com/news/netflix-wonka-golden-ticket-ai-gene-wilder-voice" + } + ], + "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 The Next Web article content", + "tags": [ + "The Next Web" + ] + } + }, + "/thenextweb/author": { + "get": { + "description": "Returns one public author profile and the story cards shown on its public author archive.", + "operationId": "thenextweb-author", + "parameters": [ + { + "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", + "type": "string", + "x-example": "https://thenextweb.com/author/darius-popa" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.thenextwebAuthorResponseDoc" + } + }, + "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 The Next Web author profile", "tags": [ - "TheJournal.ie" + "The Next Web" ] } }, - "/thejournal/headlines": { + "/thenextweb/headlines": { "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", + "description": "Returns article cards from the public server-rendered section page. Pagination uses a robots-disallowed JSON path and is not requested.", + "operationId": "thenextweb-headlines", "parameters": [ { - "description": "TheJournal.ie section slug", + "description": "Editorial section slug returned by thenextweb_sections", "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" + "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" + "type": "string", + "x-example": "deep-tech" } ], "produces": [ @@ -391355,16 +428873,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get TheJournal.ie section headlines", + "summary": "Get The Next Web section headlines", "tags": [ - "TheJournal.ie" + "The Next Web" ] } }, - "/thejournal/news": { + "/thenextweb/news": { "get": { - "description": "Returns fresh TheJournal.ie stories from the public site-wide RSS feed, with real publish times.", - "operationId": "thejournal-news", + "description": "Returns current The Next Web stories from its public RSS feed.", + "operationId": "thenextweb-news", "produces": [ "application/json" ], @@ -391375,6 +428893,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -391387,16 +428911,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get TheJournal.ie top stories", + "summary": "Get The Next Web top stories", "tags": [ - "TheJournal.ie" + "The Next Web" ] } }, - "/thejournal/sections": { + "/thenextweb/sections": { "get": { - "description": "Returns the public TheJournal.ie section inventory: the category pages and navigation topic pages this family serves headlines for.", - "operationId": "thejournal-sections", + "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" ], @@ -391413,9 +428937,9 @@ "ApiKeyAuth": [] } ], - "summary": "Get TheJournal.ie sections", + "summary": "Get The Next Web sections", "tags": [ - "TheJournal.ie" + "The Next Web" ] } }, @@ -392342,7 +429866,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news-latest" } ], "produces": [ @@ -392567,7 +430092,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "tech" } ], "produces": [ @@ -392792,7 +430318,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "money" } ], "produces": [ @@ -392897,14 +430424,16 @@ "in": "path", "name": "username", "required": true, - "type": "string" + "type": "string", + "x-example": "zuck" }, { "description": "Threads post code", "in": "path", "name": "code", "required": true, - "type": "string" + "type": "string", + "x-example": "DakyAavlKLZ" } ], "produces": [ @@ -392957,14 +430486,16 @@ "in": "path", "name": "username", "required": true, - "type": "string" + "type": "string", + "x-example": "zuck" }, { "description": "Threads post code", "in": "path", "name": "code", "required": true, - "type": "string" + "type": "string", + "x-example": "DakyAavlKLZ" } ], "produces": [ @@ -393017,7 +430548,8 @@ "in": "path", "name": "username", "required": true, - "type": "string" + "type": "string", + "x-example": "zuck" } ], "produces": [ @@ -393070,7 +430602,8 @@ "in": "path", "name": "username", "required": true, - "type": "string" + "type": "string", + "x-example": "zuck" }, { "description": "Opaque cursor returned by the previous response", @@ -393129,7 +430662,8 @@ "in": "query", "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "openai" } ], "produces": [ @@ -393531,7 +431065,8 @@ "in": "query", "name": "category_id", "required": true, - "type": "string" + "type": "string", + "x-example": "KnvZfZ7vAeA" }, { "default": 0, @@ -393651,7 +431186,8 @@ "in": "query", "name": "city", "required": true, - "type": "string" + "type": "string", + "x-example": "new-york-city" }, { "default": "US", @@ -393860,7 +431396,8 @@ "in": "query", "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "arian" } ], "produces": [ @@ -395262,7 +432799,8 @@ "in": "path", "name": "id", "required": true, - "type": "integer" + "type": "integer", + "x-example": 120 } ], "produces": [ @@ -395324,7 +432862,8 @@ "in": "path", "name": "name", "required": true, - "type": "string" + "type": "string", + "x-example": "christmas" } ], "produces": [ @@ -396862,7 +434401,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -396963,6 +434503,197 @@ ] } }, + "/timeslive/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", + "parameters": [ + { + "description": "Canonical TimesLIVE 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/" + } + ], + "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 TimesLIVE article content", + "tags": [ + "TimesLIVE" + ] + } + }, + "/timeslive/headlines": { + "get": { + "description": "Returns current TimesLIVE stories from the public Arc section feed. Pass a slug from timeslive_sections; results are the first 15 items in the live section order.", + "operationId": "timeslive-headlines", + "parameters": [ + { + "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": "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 TimesLIVE section headlines", + "tags": [ + "TimesLIVE" + ] + } + }, + "/timeslive/news": { + "get": { + "description": "Returns current TimesLIVE stories from its public anonymous Arc RSS feed. Section-specific headlines use the public TimesLIVE content feed; article access can vary by story.", + "operationId": "timeslive-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 TimesLIVE top stories", + "tags": [ + "TimesLIVE" + ] + } + }, + "/timeslive/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", + "produces": [ + "application/json" + ], + "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.", @@ -397144,7 +434875,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "top-stories" } ], "produces": [ @@ -397370,7 +435102,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "israel-and-the-region" } ], "produces": [ @@ -398349,7 +436082,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -399078,7 +436812,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "ai" } ], "produces": [ @@ -399332,7 +437067,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "3d-printing" } ], "produces": [ @@ -399628,7 +437364,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -399859,7 +437596,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -400347,14 +438085,22 @@ "x-example": "en" }, { - "description": "Review sort type", + "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": "Review sort field", + "description": "Legacy sort field; DATE selects newest first, FAVORABLE_RATING uses upstream order", + "enum": [ + "FAVORABLE_RATING", + "DATE" + ], "in": "query", "name": "sort_by", "type": "string", @@ -400365,6 +438111,13 @@ "description": "Rating filters", "in": "query", "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ], "type": "integer" }, "name": "ratings", @@ -403961,7 +441714,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -404578,7 +442332,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "celebrity-news" } ], "produces": [ @@ -405052,7 +442807,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "national-news" } ], "produces": [ @@ -405285,7 +443041,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "hollywood" } ], "produces": [ @@ -405543,7 +443300,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "artisans" } ], "produces": [ @@ -406304,7 +444062,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -407076,7 +444835,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "politics" } ], "produces": [ @@ -407171,6 +444931,374 @@ ] } }, + "/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. Tries request profiles in order; each attempt and retry uses a fresh proxy connection.", + "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", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Vrbo property details", + "tags": [ + "Vrbo" + ] + } + }, + "/vrbo/properties/{property_id}/rate-calendar": { + "get": { + "description": "Returns public calendar dates, nightly display prices when provided, availability, check-in/out validity, and stay constraints. Resolves the property's GraphQL product ID from the server-rendered page and uses a fresh proxy connection for every request attempt.", + "operationId": "vrbo-rate-calendar", + "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.vrboRateCalendarResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Vrbo property rate calendar", + "tags": [ + "Vrbo" + ] + } + }, + "/vrbo/properties/{property_id}/reviews": { + "get": { + "description": "Returns one page of public traveler reviews, aggregate count, and current sort choices. Pagination and sort values follow the public reviews query; each property-page and GraphQL request uses a fresh proxy connection.", + "operationId": "vrbo-property-reviews", + "parameters": [ + { + "description": "Vrbo property ID (optionally ending in ha)", + "in": "path", + "name": "property_id", + "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" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/vrbo.vrboReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Vrbo property reviews", + "tags": [ + "Vrbo" + ] + } + }, + "/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": "Search criteria", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/vrbo.SearchOption" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/vrbo.vrboSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "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", + "schema": { + "$ref": "#/definitions/vrbo.vrboTravelPagesResponseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Vrbo travel pages", + "tags": [ + "Vrbo" + ] + } + }, + "/vrbo/travel-pages/{slug}": { + "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", + "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" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/vrbo.vrboTravelPageDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Vrbo travel page", + "tags": [ + "Vrbo" + ] + } + }, "/walesonline/article": { "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.", @@ -407353,7 +445481,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -407799,37 +445928,255 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Washington Post article's content", + "summary": "Get a Washington Post article's content", + "tags": [ + "Washington Post" + ] + } + }, + "/wapo/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", + "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", + "in": "query", + "name": "url", + "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" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/wapo.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 Washington Post staff author profile", + "tags": [ + "Washington Post" + ] + } + }, + "/wapo/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", + "parameters": [ + { + "description": "Section path from /wapo/sections", + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "world" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/wapo.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 Washington Post section", + "tags": [ + "Washington Post" + ] + } + }, + "/wapo/news": { + "get": { + "description": "Returns The Washington Post's current public news-sitemap feed with titles, canonical URLs, publication times, and last-modified times.", + "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", + "tags": [ + "Washington Post" + ] + } + }, + "/wapo/sections": { + "get": { + "description": "Lists every Washington Post section accepted by /wapo/headlines, with its path slug, display name, and landing-page URL.", + "operationId": "wapo-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$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" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Washington Post sections", "tags": [ "Washington Post" ] } }, - "/wapo/author": { + "/wayfair/categories": { "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", + "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", "parameters": [ { - "description": "Washington Post people slug, e.g. adam-taylor", + "description": "Case-insensitive substring filter on name or department", "in": "query", - "name": "slug", + "name": "q", "type": "string", - "x-example": "adam-taylor" + "x-example": "chair" }, { - "description": "Canonical washingtonpost.com/people// URL, optionally with a ?page= query; alternative to slug", + "description": "Result page, 1-based, defaults to 1", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.washingtonpost.com/people/adam-taylor/?page=2" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "default": 1, - "description": "1-based page number; overrides any page number in url", + "description": "Results per page, defaults to 100, max 1000", "in": "query", - "name": "page", - "type": "integer" + "name": "page_size", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -407839,7 +446186,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wapo.authorResponseDoc" + "$ref": "#/definitions/wayfair.categoriesResponseDoc" } }, "400": { @@ -407848,12 +446195,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -407872,24 +446213,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Washington Post staff author profile", + "summary": "List Wayfair categories", "tags": [ - "Washington Post" + "Wayfair" ] } }, - "/wapo/headlines": { + "/wayfair/category": { "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", + "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. The trailing category id is resolved to Wayfair's current canonical URL through its published sitemap. Returns normalized products with name, brand, pricing, and image.", + "operationId": "wayfair-category", "parameters": [ { - "description": "Section path from /wapo/sections", + "description": "Wayfair category id, slug, or URL", "in": "query", - "name": "section", + "name": "category", "required": true, "type": "string", - "x-example": "world" + "x-example": "office-chairs-c478390" + }, + { + "description": "Result page, 1-based, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -407899,7 +446250,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wapo.headlinesResponseDoc" + "$ref": "#/definitions/wayfair.categoryResponseDoc" } }, "400": { @@ -407932,16 +446283,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Washington Post section", + "summary": "Browse a Wayfair category", "tags": [ - "Washington Post" + "Wayfair" ] } }, - "/wapo/news": { + "/wayfair/product/{id}": { "get": { - "description": "Returns The Washington Post's current public news-sitemap feed with titles, canonical URLs, publication times, and last-modified times.", - "operationId": "wapo-news", + "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", + "parameters": [ + { + "description": "Wayfair product id, starting with W", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "W100794312" + } + ], "produces": [ "application/json" ], @@ -407949,7 +446313,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wapo.newsResponseDoc" + "$ref": "#/definitions/wayfair.productDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -407970,16 +446346,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest Washington Post stories", + "summary": "Get a Wayfair product's full detail", "tags": [ - "Washington Post" + "Wayfair" ] } }, - "/wapo/sections": { + "/wccftech/article": { "get": { - "description": "Lists every Washington Post section accepted by /wapo/headlines, with its path slug, display name, and landing-page URL.", - "operationId": "wapo-sections", + "description": "Returns metadata and body paragraphs for a canonical public Wccftech news, review, how-to, roundup, company, or best-of article URL.", + "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" ], @@ -407987,7 +446373,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wapo.sectionsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -407996,8 +446382,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -408014,40 +446400,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Washington Post sections", + "summary": "Get a Wccftech article", "tags": [ - "Washington Post" + "Wccftech" ] } }, - "/wayfair/categories": { + "/wccftech/author": { "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 author's public profile and recent article cards. Identify the author by slug or canonical /author// URL.", + "operationId": "wccftech-author", "parameters": [ { - "description": "Case-insensitive substring filter on name or department", + "description": "Wccftech author slug, e.g. sarfraz", "in": "query", - "name": "q", + "name": "slug", "type": "string", - "x-example": "chair" + "x-example": "sarfraz" }, { - "description": "Result page, 1-based, defaults to 1", + "description": "Canonical Wccftech author page URL", "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 + "name": "url", + "type": "string", + "x-example": "https://wccftech.com/author/sarfraz/" } ], "produces": [ @@ -408057,7 +446433,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wayfair.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.wccftechAuthorResponseDoc" } }, "400": { @@ -408066,8 +446442,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -408084,34 +446460,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Wayfair categories", + "summary": "Get a Wccftech author profile", "tags": [ - "Wayfair" + "Wccftech" ] } }, - "/wayfair/category": { + "/wccftech/headlines": { "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. The trailing category id is resolved to Wayfair's current canonical URL through its published sitemap. Returns normalized products with name, brand, pricing, and image.", - "operationId": "wayfair-category", + "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": "Wayfair category id, slug, or URL", + "description": "Wccftech section slug returned by /wccftech/sections", "in": "query", - "name": "category", + "name": "section", "required": true, "type": "string", - "x-example": "office-chairs-c478390" - }, - { - "description": "Result page, 1-based, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "topic:hardware" } ], "produces": [ @@ -408121,7 +446487,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wayfair.categoryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -408130,18 +446496,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": { @@ -408154,29 +446508,16 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Wayfair category", + "summary": "Get Wccftech section headlines", "tags": [ - "Wayfair" + "Wccftech" ] } }, - "/wayfair/product/{id}": { + "/wccftech/news": { "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", - "parameters": [ - { - "description": "Wayfair product id, starting with W", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "W100794312" - } - ], + "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" ], @@ -408184,25 +446525,45 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wayfair.productDetailResponseDoc" + "$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" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get current Wccftech news", + "tags": [ + "Wccftech" + ] + } + }, + "/wccftech/sections": { + "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; taxonomy values are refreshed from the public WordPress REST API.", + "operationId": "wccftech-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "503": { @@ -408217,9 +446578,9 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wayfair product's full detail", + "summary": "Discover Wccftech sections", "tags": [ - "Wayfair" + "Wccftech" ] } }, @@ -411157,7 +449518,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "2071148560779976947" }, { "description": "Expected author username. When provided, mismatched authors return 404.", @@ -411219,7 +449581,8 @@ "in": "path", "name": "username", "required": true, - "type": "string" + "type": "string", + "x-example": "Ansel_Flipradio" } ], "produces": [ @@ -411275,7 +449638,8 @@ "in": "path", "name": "username", "required": true, - "type": "string" + "type": "string", + "x-example": "Ansel_Flipradio" }, { "description": "Maximum posts returned from the first page payload. Defaults to 20 and must be 1-50.", @@ -412390,7 +450754,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "news" } ], "produces": [ @@ -412959,7 +451324,8 @@ "in": "path", "name": "type", "required": true, - "type": "string" + "type": "string", + "x-example": "earnings" }, { "description": "Start date as YYYY-MM-DD, RFC3339, or Unix seconds", @@ -413156,7 +451522,8 @@ "in": "path", "name": "key", "required": true, - "type": "string" + "type": "string", + "x-example": "semiconductors" } ], "produces": [ @@ -413218,7 +451585,8 @@ "in": "query", "name": "query", "required": true, - "type": "string" + "type": "string", + "x-example": "apple" }, { "description": "Instrument type filter", @@ -413308,7 +451676,8 @@ "in": "path", "name": "market", "required": true, - "type": "string" + "type": "string", + "x-example": "US" } ], "produces": [ @@ -413370,7 +451739,8 @@ "in": "path", "name": "market", "required": true, - "type": "string" + "type": "string", + "x-example": "US" } ], "produces": [ @@ -413496,7 +451866,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "day_gainers" }, { "description": "Result count", @@ -413617,7 +451988,8 @@ "in": "query", "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "apple" }, { "description": "Quote result count", @@ -413744,7 +452116,8 @@ "in": "path", "name": "key", "required": true, - "type": "string" + "type": "string", + "x-example": "technology" } ], "produces": [ @@ -413806,7 +452179,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -413868,7 +452242,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -413930,7 +452305,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -413992,7 +452368,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "SPY" } ], "produces": [ @@ -414054,7 +452431,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -414116,7 +452494,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -414178,7 +452557,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" }, { "description": "Result count, max 100", @@ -414252,7 +452632,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" }, { "description": "Statement type. Allowed values: income (alias income-statement), balance-sheet (alias balance), cash-flow (alias cashflow)", @@ -414339,7 +452720,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "SPY" } ], "produces": [ @@ -414401,7 +452783,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" }, { "description": "Range such as 1d, 1mo, 1y, max", @@ -414523,7 +452906,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -414585,7 +452969,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -414647,7 +453032,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -414709,7 +453095,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -414771,7 +453158,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" }, { "description": "News result count", @@ -414845,7 +453233,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -414907,14 +453296,16 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" }, { "description": "Unix expiration timestamp", "in": "path", "name": "expiration", "required": true, - "type": "string" + "type": "string", + "x-example": "1863475200" } ], "produces": [ @@ -414976,7 +453367,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -415038,7 +453430,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -415100,7 +453493,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -415162,7 +453556,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" }, { "description": "Start date as YYYY-MM-DD, RFC3339, or Unix seconds", @@ -415236,7 +453631,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -415298,7 +453694,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -415360,7 +453757,8 @@ "in": "path", "name": "symbol", "required": true, - "type": "string" + "type": "string", + "x-example": "AAPL" } ], "produces": [ @@ -415422,7 +453820,8 @@ "in": "path", "name": "region", "required": true, - "type": "string" + "type": "string", + "x-example": "US" }, { "description": "Symbol count", @@ -417939,94 +456338,191 @@ "x-example": "nfl" }, { - "description": "Date as YYYY-MM-DD; defaults to Yahoo Sports' current scoreboard date", - "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-08-13" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/yahoosports.scoreboardResponseDoc" - } - }, - "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": "Yahoo Sports scoreboard", - "tags": [ - "Yahoo Sports" - ] - } - }, - "/yahoo-sports/standings": { - "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", - "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" - ], + "description": "Date as YYYY-MM-DD; defaults to Yahoo Sports' current scoreboard date", + "in": "query", + "name": "date", + "type": "string", + "x-example": "2026-08-13" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/yahoosports.scoreboardResponseDoc" + } + }, + "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": "Yahoo Sports scoreboard", + "tags": [ + "Yahoo Sports" + ] + } + }, + "/yahoo-sports/standings": { + "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", + "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" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "mlb" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/yahoosports.standingsResponseDoc" + } + }, + "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": "Yahoo Sports standings", + "tags": [ + "Yahoo Sports" + ] + } + }, + "/yahoo-sports/team": { + "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": "league", + "name": "team", "required": true, "type": "string", - "x-example": "mlb" + "x-example": "green-bay" } ], "produces": [ @@ -418036,7 +456532,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.standingsResponseDoc" + "$ref": "#/definitions/yahoosports.teamResponseDoc" } }, "400": { @@ -418069,19 +456565,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports standings", + "summary": "Yahoo Sports team detail", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/team": { + "/yahoo-sports/team-roster": { "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", + "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", @@ -418133,7 +456629,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.teamResponseDoc" + "$ref": "#/definitions/yahoosports.rosterResponseDoc" } }, "400": { @@ -418166,19 +456662,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports team detail", + "summary": "Yahoo Sports team roster", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/team-roster": { + "/yahoo-sports/team-schedule": { "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", + "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", "parameters": [ { "description": "League key", @@ -418230,7 +456726,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.rosterResponseDoc" + "$ref": "#/definitions/yahoosports.teamScheduleResponseDoc" } }, "400": { @@ -418263,61 +456759,33 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports team roster", + "summary": "Yahoo Sports team schedule", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/team-schedule": { + "/yahoo-sports/tennis-rankings": { "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 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", - "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" + "mens-singles", + "womens-singles", + "mens-doubles", + "womens-doubles" ], "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Yahoo Sports team slug", - "in": "query", - "name": "team", + "name": "type", "required": true, "type": "string", - "x-example": "green-bay" + "x-example": "mens-singles" } ], "produces": [ @@ -418327,7 +456795,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.teamScheduleResponseDoc" + "$ref": "#/definitions/yahoosports.tennisRankingsResponseDoc" } }, "400": { @@ -418360,35 +456828,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports team schedule", + "summary": "Yahoo Sports tennis rankings", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/tennis-rankings": { + "/yahoo-sports/tennis-schedule": { "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", - "parameters": [ - { - "description": "Rankings type", - "enum": [ - "mens-singles", - "womens-singles", - "mens-doubles", - "womens-doubles" - ], - "in": "query", - "name": "type", - "required": true, - "type": "string", - "x-example": "mens-singles" - } - ], + "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" ], @@ -418396,7 +456848,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.tennisRankingsResponseDoc" + "$ref": "#/definitions/yahoosports.tennisScheduleResponseDoc" } }, "400": { @@ -418429,19 +456881,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports tennis rankings", + "summary": "Yahoo Sports tennis tournament schedule", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/tennis-schedule": { + "/yahoo-sports/tennis-scoreboard": { "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": "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" ], @@ -418449,7 +456901,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.tennisScheduleResponseDoc" + "$ref": "#/definitions/yahoosports.tennisScoreboardResponseDoc" } }, "400": { @@ -418482,19 +456934,29 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports tennis tournament schedule", + "summary": "Yahoo Sports tennis scoreboard", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/tennis-scoreboard": { + "/yahoo-tech/article": { "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 a single Yahoo Tech article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical tech.yahoo.com article URL, such as one returned by the home or category story streams.", + "operationId": "yahoo-tech-article", + "parameters": [ + { + "description": "Canonical tech.yahoo.com article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://tech.yahoo.com/audio/article/example-headline-000000000.html" + } + ], "produces": [ "application/json" ], @@ -418502,7 +456964,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.tennisScoreboardResponseDoc" + "$ref": "#/definitions/yahootech.articleResponseDoc" } }, "400": { @@ -418523,6 +456985,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -418535,27 +457003,50 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports tennis scoreboard", + "summary": "Yahoo Tech article content", "tags": [ - "Yahoo Sports" + "Yahoo Tech" ] } }, - "/yahoo-tech/article": { + "/yahoo-tech/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Yahoo Tech article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical tech.yahoo.com article URL, such as one returned by the home or category story streams.", - "operationId": "yahoo-tech-article", + "description": "Returns a Yahoo Tech section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Tech's own server-rendered section pages.", + "operationId": "yahoo-tech-category", "parameters": [ { - "description": "Canonical tech.yahoo.com article URL", + "description": "Yahoo Tech section", + "enum": [ + "ai", + "apps", + "audio", + "computing", + "deals", + "gaming", + "home", + "home-entertainment", + "phones", + "puzzles", + "science", + "streaming", + "vpn", + "wearables" + ], "in": "query", - "name": "url", + "name": "category", "required": true, "type": "string", - "x-example": "https://tech.yahoo.com/audio/article/example-headline-000000000.html" + "x-example": "ai" + }, + { + "description": "1-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -418565,7 +457056,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahootech.articleResponseDoc" + "$ref": "#/definitions/yahootech.categoryResponseDoc" } }, "400": { @@ -418604,50 +457095,71 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Tech article content", + "summary": "Yahoo Tech section story stream", "tags": [ "Yahoo Tech" ] } }, - "/yahoo-tech/category": { + "/yahoo-tech/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Yahoo Tech section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Tech's own server-rendered section pages.", - "operationId": "yahoo-tech-category", + "description": "Returns Yahoo Tech's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Tech's own server-rendered homepage.", + "operationId": "yahoo-tech-home", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/yahootech.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 Tech homepage story stream", + "tags": [ + "Yahoo Tech" + ] + } + }, + "/yardbarker/article": { + "get": { + "description": "Extracts metadata and the publicly served text paragraphs from a canonical Yardbarker story URL. Quiz, account, player, and non-article URLs are rejected.", + "operationId": "yardbarker-article", "parameters": [ { - "description": "Yahoo Tech section", - "enum": [ - "ai", - "apps", - "audio", - "computing", - "deals", - "gaming", - "home", - "home-entertainment", - "phones", - "puzzles", - "science", - "streaming", - "vpn", - "wearables" - ], + "description": "Canonical Yardbarker story URL", "in": "query", - "name": "category", + "name": "url", "required": true, "type": "string", - "x-example": "ai" - }, - { - "description": "1-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://www.yardbarker.com/mlb/articles/example_story/s1_17730_44366680" } ], "produces": [ @@ -418657,7 +457169,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahootech.categoryResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -418678,8 +457190,62 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Yardbarker article", + "tags": [ + "Yardbarker" + ] + } + }, + "/yardbarker/author": { + "get": { + "description": "Returns an author's public profile name, image, and story links from a canonical Yardbarker author URL.", + "operationId": "yardbarker-author", + "parameters": [ + { + "description": "Canonical Yardbarker author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.yardbarker.com/authors/mike_j_asti/1297" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.yardbarkerAuthorResponseDoc" + } + }, + "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" } @@ -418696,19 +457262,26 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Tech section story stream", + "summary": "Get a Yardbarker author profile", "tags": [ - "Yahoo Tech" + "Yardbarker" ] } }, - "/yahoo-tech/home": { + "/yardbarker/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns recent Yardbarker headlines and short RSS summaries for one section. Call /yardbarker/sections for the complete current slug list.", + "operationId": "yardbarker-headlines", + "parameters": [ + { + "description": "Section slug returned by /yardbarker/sections", + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "team_18" + } ], - "description": "Returns Yahoo Tech's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Tech's own server-rendered homepage.", - "operationId": "yahoo-tech-home", "produces": [ "application/json" ], @@ -418716,7 +457289,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahootech.homeResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -418725,8 +457304,40 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get headlines for a Yardbarker section", + "tags": [ + "Yardbarker" + ] + } + }, + "/yardbarker/news": { + "get": { + "description": "Returns recent Yardbarker story metadata and short summaries from its public homepage. Use /yardbarker/sections to discover the supported sports, team, school, and topic sections.", + "operationId": "yardbarker-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -418743,9 +457354,41 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Tech homepage story stream", + "summary": "Get Yardbarker top stories", "tags": [ - "Yahoo Tech" + "Yardbarker" + ] + } + }, + "/yardbarker/sections": { + "get": { + "description": "Returns the complete live-verified directory snapshot of Yardbarker sports, teams, schools, and topics. Use each returned slug in /yardbarker/headlines.", + "operationId": "yardbarker-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": "List Yardbarker sections", + "tags": [ + "Yardbarker" ] } }, @@ -419604,7 +458247,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "YbJOTdZBX1g" }, { "default": "en", @@ -419667,7 +458311,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "UCXZCJLdBC09xxGZ6gcdrc6A" }, { "description": "Pagination token returned by a previous request", @@ -419729,14 +458374,16 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "UCXZCJLdBC09xxGZ6gcdrc6A" }, { "description": "Search query", "in": "query", "name": "q", "required": true, - "type": "string" + "type": "string", + "x-example": "gpt" }, { "description": "Pagination token returned by a previous request", @@ -419798,7 +458445,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "UCXZCJLdBC09xxGZ6gcdrc6A" } ], "produces": [ @@ -419854,7 +458502,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "UCXZCJLdBC09xxGZ6gcdrc6A" }, { "description": "Pagination token returned by a previous request", @@ -419916,7 +458565,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "YbJOTdZBX1g" }, { "description": "Pagination token returned by a previous request, first page if empty", @@ -419978,7 +458628,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "PL-szjqIBRvM_aWOj-uXCVm28l-ZZFa4D2" }, { "description": "Pagination token returned by a previous request", @@ -420040,7 +458691,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "UCXZCJLdBC09xxGZ6gcdrc6A" } ], "produces": [ @@ -420248,7 +458900,8 @@ "in": "path", "name": "tag", "required": true, - "type": "string" + "type": "string", + "x-example": "openai" }, { "default": "all", @@ -420327,7 +458980,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "YbJOTdZBX1g" }, { "default": "en", @@ -420417,7 +459071,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "YbJOTdZBX1g" } ], "produces": [ @@ -420473,7 +459128,8 @@ "in": "path", "name": "id", "required": true, - "type": "string" + "type": "string", + "x-example": "YbJOTdZBX1g" } ], "produces": [ @@ -420553,7 +459209,8 @@ "in": "query", "name": "market", "required": true, - "type": "string" + "type": "string", + "x-example": "at" }, { "description": "Restrict to one Zalando shopping department. Omit to return all three.", @@ -420652,7 +459309,8 @@ "in": "query", "name": "market", "required": true, - "type": "string" + "type": "string", + "x-example": "at" } ], "produces": [ @@ -420772,7 +459430,8 @@ "in": "query", "name": "market", "required": true, - "type": "string" + "type": "string", + "x-example": "at" } ], "produces": [ @@ -420866,7 +459525,8 @@ "in": "query", "name": "market", "required": true, - "type": "string" + "type": "string", + "x-example": "at" } ], "produces": [ @@ -420954,7 +459614,8 @@ "in": "query", "name": "market", "required": true, - "type": "string" + "type": "string", + "x-example": "at" } ], "produces": [ @@ -421523,7 +460184,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "WOMAN" }, { "description": "Zero-based result offset, defaults to 0", @@ -422134,7 +460796,8 @@ "in": "query", "name": "section", "required": true, - "type": "string" + "type": "string", + "x-example": "5g" } ], "produces": [ @@ -422252,7 +460915,7 @@ "consumes": [ "application/json" ], - "description": "Returns normalized Zillow public web autocomplete candidates. Semantic candidates may include region_id/region_type compatibility aliases plus region_ids/region_types arrays; prefer complete bounds metadata for Zillow search when present.", + "description": "Returns normalized Zillow public web autocomplete candidates, including region ids and types. Zillow autocomplete does not currently return map bounds.", "operationId": "zillow-autocomplete", "parameters": [ { @@ -422260,7 +460923,8 @@ "in": "query", "name": "query", "required": true, - "type": "string" + "type": "string", + "x-example": "Los Angeles, CA" }, { "description": "Maximum results, clamped to 20", @@ -422337,7 +461001,8 @@ "in": "path", "name": "zpid", "required": true, - "type": "string" + "type": "string", + "x-example": "48749425" } ], "produces": [ @@ -422391,7 +461056,7 @@ "consumes": [ "application/json" ], - "description": "Returns normalized Zillow public listing search results. Callers must pass complete map bounds from autocomplete when available, or a region id fallback.", + "description": "Returns normalized Zillow public listing search results. Callers may pass a region id from autocomplete or a complete map bounding box. When a usable region-only response contains no listings, the API retries with a viewport from Zillow's public search page if that page selects exactly the same region. Upstream blocks and transport failures return errors.", "operationId": "zillow-search", "parameters": [ { @@ -422399,7 +461064,8 @@ "in": "query", "name": "location", "required": true, - "type": "string" + "type": "string", + "x-example": "Los Angeles, CA" }, { "description": "1-based page", @@ -422435,25 +461101,25 @@ "type": "integer" }, { - "description": "Map west bound from autocomplete", + "description": "Map west bound; pass with east, south, and north", "in": "query", "name": "west", "type": "number" }, { - "description": "Map east bound from autocomplete", + "description": "Map east bound; pass with west, south, and north", "in": "query", "name": "east", "type": "number" }, { - "description": "Map south bound from autocomplete", + "description": "Map south bound; pass with west, east, and north", "in": "query", "name": "south", "type": "number" }, { - "description": "Map north bound from autocomplete", + "description": "Map north bound; pass with west, east, and south", "in": "query", "name": "north", "type": "number" diff --git a/pom.xml b/pom.xml index bee44b4..4f66eff 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.crawlora crawlora-sdk - 1.44.0-sdk.2 + 1.45.0-sdk.1 jar Crawlora Java SDK diff --git a/scripts/_sdkgen/core.py b/scripts/_sdkgen/core.py index 5168960..02e21ce 100644 --- a/scripts/_sdkgen/core.py +++ b/scripts/_sdkgen/core.py @@ -28,6 +28,7 @@ "7NOW": "7now", "7NEWS Australia": "sevennewsau", "9to5Mac": "ninetofivemac", + "9to5Google": "ninetofivegoogle", "1stDibs": "firstdibs", "AppStore": "appstore", "CoinGecko": "coingecko", diff --git a/scripts/generate.py b/scripts/generate.py index 9cfa5bc..b09eedd 100644 --- a/scripts/generate.py +++ b/scripts/generate.py @@ -64,6 +64,7 @@ def _lower_camel(parts): "7NOW": "sevenNow", "7NEWS Australia": "sevenNewsAustralia", "9to5Mac": "nineToFiveMac", + "9to5Google": "nineToFiveGoogle", "AppStore": "appStore", "CoinGecko": "coinGecko", "GooglePlay": "googlePlay", diff --git a/src/main/java/net/crawlora/ClientGroups.java b/src/main/java/net/crawlora/ClientGroups.java index 5531222..1f972da 100644 --- a/src/main/java/net/crawlora/ClientGroups.java +++ b/src/main/java/net/crawlora/ClientGroups.java @@ -82,6 +82,14 @@ public AlComGroup alCom() { return new AlComGroup((CrawloraClient) this); } + /** + * Typed accessor for the "aliExpress" operation group. + * @return a new {@link AliExpressGroup} bound to this client + */ + public AliExpressGroup aliExpress() { + return new AliExpressGroup((CrawloraClient) this); + } + /** * Typed accessor for the "alJazeera" operation group. * @return a new {@link AlJazeeraGroup} bound to this client @@ -130,6 +138,14 @@ public AndroidAuthorityGroup androidAuthority() { return new AndroidAuthorityGroup((CrawloraClient) this); } + /** + * Typed accessor for the "androidPolice" operation group. + * @return a new {@link AndroidPoliceGroup} bound to this client + */ + public AndroidPoliceGroup androidPolice() { + return new AndroidPoliceGroup((CrawloraClient) this); + } + /** * Typed accessor for the "anime" operation group. * @return a new {@link AnimeGroup} bound to this client @@ -266,6 +282,14 @@ public BbcGroup bbc() { return new BbcGroup((CrawloraClient) this); } + /** + * Typed accessor for the "benzinga" operation group. + * @return a new {@link BenzingaGroup} bound to this client + */ + public BenzingaGroup benzinga() { + return new BenzingaGroup((CrawloraClient) this); + } + /** * Typed accessor for the "bestBuy" operation group. * @return a new {@link BestBuyGroup} bound to this client @@ -410,6 +434,14 @@ public BreitbartGroup breitbart() { return new BreitbartGroup((CrawloraClient) this); } + /** + * Typed accessor for the "brisbaneTimes" operation group. + * @return a new {@link BrisbaneTimesGroup} bound to this client + */ + public BrisbaneTimesGroup brisbaneTimes() { + return new BrisbaneTimesGroup((CrawloraClient) this); + } + /** * Typed accessor for the "brooklinen" operation group. * @return a new {@link BrooklinenGroup} bound to this client @@ -706,6 +738,14 @@ public DailyExpressGroup dailyExpress() { return new DailyExpressGroup((CrawloraClient) this); } + /** + * Typed accessor for the "dailyKos" operation group. + * @return a new {@link DailyKosGroup} bound to this client + */ + public DailyKosGroup dailyKos() { + return new DailyKosGroup((CrawloraClient) this); + } + /** * Typed accessor for the "dailyMail" operation group. * @return a new {@link DailyMailGroup} bound to this client @@ -714,6 +754,14 @@ public DailyMailGroup dailyMail() { return new DailyMailGroup((CrawloraClient) this); } + /** + * Typed accessor for the "dailyMaverick" operation group. + * @return a new {@link DailyMaverickGroup} bound to this client + */ + public DailyMaverickGroup dailyMaverick() { + return new DailyMaverickGroup((CrawloraClient) this); + } + /** * Typed accessor for the "dailyRecord" operation group. * @return a new {@link DailyRecordGroup} bound to this client @@ -770,6 +818,14 @@ public DeliverooGroup deliveroo() { return new DeliverooGroup((CrawloraClient) this); } + /** + * Typed accessor for the "theDenverPost" operation group. + * @return a new {@link TheDenverPostGroup} bound to this client + */ + public TheDenverPostGroup theDenverPost() { + return new TheDenverPostGroup((CrawloraClient) this); + } + /** * Typed accessor for the "depop" operation group. * @return a new {@link DepopGroup} bound to this client @@ -914,6 +970,14 @@ public ExpediaGroup expedia() { return new ExpediaGroup((CrawloraClient) this); } + /** + * Typed accessor for the "theExpressTribune" operation group. + * @return a new {@link TheExpressTribuneGroup} bound to this client + */ + public TheExpressTribuneGroup theExpressTribune() { + return new TheExpressTribuneGroup((CrawloraClient) this); + } + /** * Typed accessor for the "facebook" operation group. * @return a new {@link FacebookGroup} bound to this client @@ -1202,6 +1266,14 @@ public GoodreadsGroup goodreads() { return new GoodreadsGroup((CrawloraClient) this); } + /** + * Typed accessor for the "goodRx" operation group. + * @return a new {@link GoodRxGroup} bound to this client + */ + public GoodRxGroup goodRx() { + return new GoodRxGroup((CrawloraClient) this); + } + /** * Typed accessor for the "googleJobs" operation group. * @return a new {@link GoogleJobsGroup} bound to this client @@ -1250,6 +1322,14 @@ public GrailedGroup grailed() { return new GrailedGroup((CrawloraClient) this); } + /** + * Typed accessor for the "greystar" operation group. + * @return a new {@link GreystarGroup} bound to this client + */ + public GreystarGroup greystar() { + return new GreystarGroup((CrawloraClient) this); + } + /** * Typed accessor for the "grubhub" operation group. * @return a new {@link GrubhubGroup} bound to this client @@ -1298,6 +1378,14 @@ public HarvardBusinessReviewGroup harvardBusinessReview() { return new HarvardBusinessReviewGroup((CrawloraClient) this); } + /** + * Typed accessor for the "healthgrades" operation group. + * @return a new {@link HealthgradesGroup} bound to this client + */ + public HealthgradesGroup healthgrades() { + return new HealthgradesGroup((CrawloraClient) this); + } + /** * Typed accessor for the "hermes" operation group. * @return a new {@link HermesGroup} bound to this client @@ -1346,6 +1434,14 @@ public HotelsComGroup hotelsCom() { return new HotelsComGroup((CrawloraClient) this); } + /** + * Typed accessor for the "houstonChronicle" operation group. + * @return a new {@link HoustonChronicleGroup} bound to this client + */ + public HoustonChronicleGroup houstonChronicle() { + return new HoustonChronicleGroup((CrawloraClient) this); + } + /** * Typed accessor for the "howToGeek" operation group. * @return a new {@link HowToGeekGroup} bound to this client @@ -1498,6 +1594,14 @@ public IrishTimesGroup irishTimes() { return new IrishTimesGroup((CrawloraClient) this); } + /** + * Typed accessor for the "theJapanTimes" operation group. + * @return a new {@link TheJapanTimesGroup} bound to this client + */ + public TheJapanTimesGroup theJapanTimes() { + return new TheJapanTimesGroup((CrawloraClient) this); + } + /** * Typed accessor for the "jCrew" operation group. * @return a new {@link JCrewGroup} bound to this client @@ -1706,6 +1810,22 @@ public MacySGroup macyS() { return new MacySGroup((CrawloraClient) this); } + /** + * Typed accessor for the "makeUseOf" operation group. + * @return a new {@link MakeUseOfGroup} bound to this client + */ + public MakeUseOfGroup makeUseOf() { + return new MakeUseOfGroup((CrawloraClient) this); + } + + /** + * Typed accessor for the "malayMail" operation group. + * @return a new {@link MalayMailGroup} bound to this client + */ + public MalayMailGroup malayMail() { + return new MalayMailGroup((CrawloraClient) this); + } + /** * Typed accessor for the "manga" operation group. * @return a new {@link MangaGroup} bound to this client @@ -1882,6 +2002,14 @@ public NationAfricaGroup nationAfrica() { return new NationAfricaGroup((CrawloraClient) this); } + /** + * Typed accessor for the "theNational" operation group. + * @return a new {@link TheNationalGroup} bound to this client + */ + public TheNationalGroup theNational() { + return new TheNationalGroup((CrawloraClient) this); + } + /** * Typed accessor for the "nationalPost" operation group. * @return a new {@link NationalPostGroup} bound to this client @@ -1962,6 +2090,14 @@ public NikeGroup nike() { return new NikeGroup((CrawloraClient) this); } + /** + * Typed accessor for the "nineToFiveGoogle" operation group. + * @return a new {@link NineToFiveGoogleGroup} bound to this client + */ + public NineToFiveGoogleGroup nineToFiveGoogle() { + return new NineToFiveGoogleGroup((CrawloraClient) this); + } + /** * Typed accessor for the "nineToFiveMac" operation group. * @return a new {@link NineToFiveMacGroup} bound to this client @@ -2162,6 +2298,14 @@ public PhoneArenaGroup phoneArena() { return new PhoneArenaGroup((CrawloraClient) this); } + /** + * Typed accessor for the "physOrg" operation group. + * @return a new {@link PhysOrgGroup} bound to this client + */ + public PhysOrgGroup physOrg() { + return new PhysOrgGroup((CrawloraClient) this); + } + /** * Typed accessor for the "meta" operation group. * @return a new {@link MetaGroup} bound to this client @@ -2386,6 +2530,14 @@ public ResyGroup resy() { return new ResyGroup((CrawloraClient) this); } + /** + * Typed accessor for the "retailMeNot" operation group. + * @return a new {@link RetailMeNotGroup} bound to this client + */ + public RetailMeNotGroup retailMeNot() { + return new RetailMeNotGroup((CrawloraClient) this); + } + /** * Typed accessor for the "reuters" operation group. * @return a new {@link ReutersGroup} bound to this client @@ -2786,6 +2938,14 @@ public StravaGroup strava() { return new StravaGroup((CrawloraClient) this); } + /** + * Typed accessor for the "streetEasy" operation group. + * @return a new {@link StreetEasyGroup} bound to this client + */ + public StreetEasyGroup streetEasy() { + return new StreetEasyGroup((CrawloraClient) this); + } + /** * Typed accessor for the "stubHub" operation group. * @return a new {@link StubHubGroup} bound to this client @@ -2906,6 +3066,14 @@ public TheAtlanticGroup theAtlantic() { return new TheAtlanticGroup((CrawloraClient) this); } + /** + * Typed accessor for the "theBlaze" operation group. + * @return a new {@link TheBlazeGroup} bound to this client + */ + public TheBlazeGroup theBlaze() { + return new TheBlazeGroup((CrawloraClient) this); + } + /** * Typed accessor for the "theBodyShop" operation group. * @return a new {@link TheBodyShopGroup} bound to this client @@ -2946,6 +3114,14 @@ public TheJournalIeGroup theJournalIe() { return new TheJournalIeGroup((CrawloraClient) this); } + /** + * Typed accessor for the "theNextWeb" operation group. + * @return a new {@link TheNextWebGroup} bound to this client + */ + public TheNextWebGroup theNextWeb() { + return new TheNextWebGroup((CrawloraClient) this); + } + /** * Typed accessor for the "theRealReal" operation group. * @return a new {@link TheRealRealGroup} bound to this client @@ -3026,6 +3202,14 @@ public TimeGroup time() { return new TimeGroup((CrawloraClient) this); } + /** + * Typed accessor for the "timesLive" operation group. + * @return a new {@link TimesLiveGroup} bound to this client + */ + public TimesLiveGroup timesLive() { + return new TimesLiveGroup((CrawloraClient) this); + } + /** * Typed accessor for the "timesOfIndia" operation group. * @return a new {@link TimesOfIndiaGroup} bound to this client @@ -3266,6 +3450,14 @@ public VoxGroup vox() { return new VoxGroup((CrawloraClient) this); } + /** + * Typed accessor for the "vrbo" operation group. + * @return a new {@link VrboGroup} bound to this client + */ + public VrboGroup vrbo() { + return new VrboGroup((CrawloraClient) this); + } + /** * Typed accessor for the "walesOnline" operation group. * @return a new {@link WalesOnlineGroup} bound to this client @@ -3306,6 +3498,14 @@ public WayfairGroup wayfair() { return new WayfairGroup((CrawloraClient) this); } + /** + * Typed accessor for the "wccftech" operation group. + * @return a new {@link WccftechGroup} bound to this client + */ + public WccftechGroup wccftech() { + return new WccftechGroup((CrawloraClient) this); + } + /** * Typed accessor for the "wendys" operation group. * @return a new {@link WendysGroup} bound to this client @@ -3474,6 +3674,14 @@ public YahooTechGroup yahooTech() { return new YahooTechGroup((CrawloraClient) this); } + /** + * Typed accessor for the "yardbarker" operation group. + * @return a new {@link YardbarkerGroup} bound to this client + */ + public YardbarkerGroup yardbarker() { + return new YardbarkerGroup((CrawloraClient) this); + } + /** * Typed accessor for the "yelp" operation group. * @return a new {@link YelpGroup} bound to this client diff --git a/src/main/java/net/crawlora/OperationId.java b/src/main/java/net/crawlora/OperationId.java index 996821c..3443dec 100644 --- a/src/main/java/net/crawlora/OperationId.java +++ b/src/main/java/net/crawlora/OperationId.java @@ -60,6 +60,9 @@ private OperationId() {} public static final String AL_JAZEERA_ALJAZEERA_CATEGORIES = "aljazeera-categories"; public static final String AL_JAZEERA_ALJAZEERA_HEADLINES = "aljazeera-headlines"; public static final String AL_JAZEERA_ALJAZEERA_TOPIC = "aljazeera-topic"; + public static final String ALI_EXPRESS_ALIEXPRESS_REVIEWS = "aliexpress-reviews"; + public static final String ALI_EXPRESS_ALIEXPRESS_SEARCH = "aliexpress-search"; + public static final String ALI_EXPRESS_ALIEXPRESS_SEARCH_FILTERS = "aliexpress-search-filters"; public static final String ALLBIRDS_COLLECTION_PRODUCTS = "allbirds-collection-products"; public static final String ALLBIRDS_COLLECTIONS = "allbirds-collections"; public static final String ALLBIRDS_PAGE = "allbirds-page"; @@ -92,6 +95,11 @@ private OperationId() {} public static final String ANDROID_AUTHORITY_ANDROIDAUTHORITY_HEADLINES = "androidauthority-headlines"; public static final String ANDROID_AUTHORITY_ANDROIDAUTHORITY_NEWS = "androidauthority-news"; public static final String ANDROID_AUTHORITY_ANDROIDAUTHORITY_SECTIONS = "androidauthority-sections"; + public static final String ANDROID_POLICE_ANDROIDPOLICE_ARTICLE = "androidpolice-article"; + public static final String ANDROID_POLICE_ANDROIDPOLICE_AUTHOR = "androidpolice-author"; + public static final String ANDROID_POLICE_ANDROIDPOLICE_HEADLINES = "androidpolice-headlines"; + public static final String ANDROID_POLICE_ANDROIDPOLICE_NEWS = "androidpolice-news"; + public static final String ANDROID_POLICE_ANDROIDPOLICE_SECTIONS = "androidpolice-sections"; public static final String ANIME_AIRING_SCHEDULE = "anime-airing-schedule"; public static final String ANIME_CHARACTER = "anime-character"; public static final String ANIME_CHARACTER_SEARCH = "anime-character-search"; @@ -115,6 +123,8 @@ private OperationId() {} public static final String APP_INSIGHTS_APK_TEARDOWN_TIMELINE = "apkTeardownTimeline"; public static final String APP_STORE_APP = "appstore-app"; public static final String APP_STORE_CATEGORIES = "appstore-categories"; + public static final String APP_STORE_COLLECTION = "appstore-collection"; + public static final String APP_STORE_COLLECTIONS = "appstore-collections"; public static final String APP_STORE_DEVELOPER = "appstore-developer"; public static final String APP_STORE_EDITORIAL = "appstore-editorial"; public static final String APP_STORE_EDITORIAL_CATEGORY = "appstore-editorial-category"; @@ -220,6 +230,11 @@ private OperationId() {} public static final String BBC_HEADLINES = "bbc-headlines"; public static final String BBC_LIVE = "bbc-live"; public static final String BBC_SEARCH = "bbc-search"; + public static final String BENZINGA_ARTICLE = "benzinga-article"; + public static final String BENZINGA_HEADLINES = "benzinga-headlines"; + public static final String BENZINGA_NEWS = "benzinga-news"; + public static final String BENZINGA_SEARCH = "benzinga-search"; + public static final String BENZINGA_SECTIONS = "benzinga-sections"; public static final String BEST_BUY_BESTBUY_BRANDS = "bestbuy-brands"; public static final String BEST_BUY_BESTBUY_CATEGORIES = "bestbuy-categories"; public static final String BEST_BUY_BESTBUY_CATEGORIES_TRENDING = "bestbuy-categories-trending"; @@ -339,6 +354,11 @@ 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 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"; + public static final String BRISBANE_TIMES_BRISBANETIMES_NEWS = "brisbanetimes-news"; + public static final String BRISBANE_TIMES_BRISBANETIMES_SECTIONS = "brisbanetimes-sections"; public static final String BROOKLINEN_COLLECTION_PRODUCTS = "brooklinen-collection-products"; public static final String BROOKLINEN_COLLECTIONS = "brooklinen-collections"; public static final String BROOKLINEN_PAGE = "brooklinen-page"; @@ -573,11 +593,19 @@ private OperationId() {} public static final String DAILY_EXPRESS_DAILYEXPRESS_HEADLINES = "dailyexpress-headlines"; public static final String DAILY_EXPRESS_DAILYEXPRESS_NEWS = "dailyexpress-news"; public static final String DAILY_EXPRESS_DAILYEXPRESS_SECTIONS = "dailyexpress-sections"; + public static final String DAILY_KOS_DAILYKOS_ARTICLE = "dailykos-article"; + public static final String DAILY_KOS_DAILYKOS_HEADLINES = "dailykos-headlines"; + public static final String DAILY_KOS_DAILYKOS_NEWS = "dailykos-news"; + public static final String DAILY_KOS_DAILYKOS_SECTIONS = "dailykos-sections"; public static final String DAILY_MAIL_DAILYMAIL_ARTICLE = "dailymail-article"; public static final String DAILY_MAIL_DAILYMAIL_AUTHOR = "dailymail-author"; public static final String DAILY_MAIL_DAILYMAIL_HEADLINES = "dailymail-headlines"; public static final String DAILY_MAIL_DAILYMAIL_NEWS = "dailymail-news"; public static final String DAILY_MAIL_DAILYMAIL_SECTIONS = "dailymail-sections"; + public static final String DAILY_MAVERICK_DAILYMAVERICK_ARTICLE = "dailymaverick-article"; + public static final String DAILY_MAVERICK_DAILYMAVERICK_HEADLINES = "dailymaverick-headlines"; + public static final String DAILY_MAVERICK_DAILYMAVERICK_NEWS = "dailymaverick-news"; + public static final String DAILY_MAVERICK_DAILYMAVERICK_SECTIONS = "dailymaverick-sections"; public static final String DAILY_RECORD_DAILYRECORD_ARTICLE = "dailyrecord-article"; public static final String DAILY_RECORD_DAILYRECORD_AUTHOR = "dailyrecord-author"; public static final String DAILY_RECORD_DAILYRECORD_HEADLINES = "dailyrecord-headlines"; @@ -617,6 +645,10 @@ private OperationId() {} 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_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"; + public static final String DATASETS_DOORDASH_STORES_NEARBY = "datasets-doordash-stores-nearby"; + public static final String DATASETS_DOORDASH_STORES_SEARCH = "datasets-doordash-stores-search"; public static final String DATASETS_FACEBOOK_PAGES_FACETS = "datasets-facebook-pages-facets"; public static final String DATASETS_FACEBOOK_PAGES_ITEM = "datasets-facebook-pages-item"; public static final String DATASETS_FACEBOOK_PAGES_SEARCH = "datasets-facebook-pages-search"; @@ -1143,6 +1175,26 @@ private OperationId() {} public static final String GOLDIN_LISTING = "goldin-listing"; public static final String GOLDIN_SEARCH = "goldin-search"; public static final String GOLDIN_SUGGEST = "goldin-suggest"; + public static final String GOOD_RX_GOODRX_ANSWER = "goodrx-answer"; + public static final String GOOD_RX_GOODRX_ANSWERS = "goodrx-answers"; + public static final String GOOD_RX_GOODRX_BRANDS = "goodrx-brands"; + public static final String GOOD_RX_GOODRX_CLASS = "goodrx-class"; + public static final String GOOD_RX_GOODRX_CLASSES = "goodrx-classes"; + public static final String GOOD_RX_GOODRX_COMPARISON = "goodrx-comparison"; + public static final String GOOD_RX_GOODRX_COMPARISONS = "goodrx-comparisons"; + public static final String GOOD_RX_GOODRX_CONDITION = "goodrx-condition"; + public static final String GOOD_RX_GOODRX_CONDITION_DRUGS = "goodrx-condition-drugs"; + public static final String GOOD_RX_GOODRX_CONDITIONS = "goodrx-conditions"; + public static final String GOOD_RX_GOODRX_DRUG_GUIDE = "goodrx-drug-guide"; + public static final String GOOD_RX_GOODRX_DRUG_GUIDES = "goodrx-drug-guides"; + public static final String GOOD_RX_GOODRX_DRUG_INFO = "goodrx-drug-info"; + public static final String GOOD_RX_GOODRX_DRUG_OPTIONS = "goodrx-drug-options"; + public static final String GOOD_RX_GOODRX_DRUG_PRICES = "goodrx-drug-prices"; + public static final String GOOD_RX_GOODRX_DRUGS = "goodrx-drugs"; + public static final String GOOD_RX_GOODRX_HEALTH_ARTICLE = "goodrx-health-article"; + public static final String GOOD_RX_GOODRX_HEALTH_ARTICLES = "goodrx-health-articles"; + public static final String GOOD_RX_GOODRX_HEALTH_TOPICS = "goodrx-health-topics"; + public static final String GOOD_RX_GOODRX_PET_MEDICATIONS = "goodrx-pet-medications"; public static final String GOODREADS_AUTHOR = "goodreads-author"; public static final String GOODREADS_AUTHOR_BOOKS = "goodreads-author-books"; public static final String GOODREADS_AUTHOR_QUOTES = "goodreads-author-quotes"; @@ -1228,6 +1280,15 @@ private OperationId() {} public static final String GRAILED_SIMILAR_LISTINGS = "grailed-similar-listings"; public static final String GRAILED_SOLD_LISTINGS = "grailed-sold-listings"; public static final String GRAILED_SUGGEST = "grailed-suggest"; + public static final String GREYSTAR_ARTICLE = "greystar-article"; + public static final String GREYSTAR_ARTICLES = "greystar-articles"; + public static final String GREYSTAR_LOCATION = "greystar-location"; + public static final String GREYSTAR_LOCATIONS = "greystar-locations"; + public static final String GREYSTAR_MARKETS = "greystar-markets"; + public static final String GREYSTAR_NEWSROOM = "greystar-newsroom"; + public static final String GREYSTAR_NEWSROOM_ARTICLE = "greystar-newsroom-article"; + public static final String GREYSTAR_PROPERTY = "greystar-property"; + public static final String GREYSTAR_SEARCH = "greystar-search"; public static final String GRUBHUB_AVAILABILITY = "grubhub-availability"; public static final String GRUBHUB_OFFERS = "grubhub-offers"; public static final String GRUBHUB_RESTAURANT = "grubhub-restaurant"; @@ -1276,6 +1337,22 @@ private OperationId() {} public static final String HARVARD_BUSINESS_REVIEW_HBR_CATEGORIES = "hbr-categories"; public static final String HARVARD_BUSINESS_REVIEW_HBR_HEADLINES = "hbr-headlines"; public static final String HARVARD_BUSINESS_REVIEW_HBR_TOPIC = "hbr-topic"; + public static final String HEALTHGRADES_AUTOCOMPLETE = "healthgrades-autocomplete"; + public static final String HEALTHGRADES_FACILITIES_FILTERS = "healthgrades-facilities-filters"; + public static final String HEALTHGRADES_FACILITIES_SEARCH = "healthgrades-facilities-search"; + public static final String HEALTHGRADES_FACILITY = "healthgrades-facility"; + public static final String HEALTHGRADES_HEALTH_ARTICLE = "healthgrades-health-article"; + public static final String HEALTHGRADES_HEALTH_ARTICLES = "healthgrades-health-articles"; + public static final String HEALTHGRADES_HEALTH_TOPICS = "healthgrades-health-topics"; + public static final String HEALTHGRADES_HOSPITAL = "healthgrades-hospital"; + public static final String HEALTHGRADES_HOSPITAL_AWARD_FILTERS = "healthgrades-hospital-award-filters"; + public static final String HEALTHGRADES_HOSPITAL_AWARDS = "healthgrades-hospital-awards"; + public static final String HEALTHGRADES_LOCATIONS = "healthgrades-locations"; + public static final String HEALTHGRADES_PHYSICIAN = "healthgrades-physician"; + public static final String HEALTHGRADES_PHYSICIANS_FILTERS = "healthgrades-physicians-filters"; + public static final String HEALTHGRADES_PHYSICIANS_SEARCH = "healthgrades-physicians-search"; + public static final String HEALTHGRADES_SPECIALTIES = "healthgrades-specialties"; + public static final String HEALTHGRADES_TOP_SEARCHES = "healthgrades-top-searches"; public static final String HERMES_CATEGORIES = "hermes-categories"; public static final String HERMES_CATEGORY = "hermes-category"; public static final String HERMES_PRODUCT = "hermes-product"; @@ -1307,6 +1384,11 @@ private OperationId() {} public static final String HOTELS_COM_HOTELS_REVIEWS = "hotels-reviews"; public static final String HOTELS_COM_HOTELS_REVIEWS_ARCHIVE = "hotels-reviews-archive"; public static final String HOTELS_COM_HOTELS_SEARCH = "hotels-search"; + public static final String HOUSTON_CHRONICLE_ARTICLE = "houston-chronicle-article"; + public static final String HOUSTON_CHRONICLE_AUTHOR = "houston-chronicle-author"; + public static final String HOUSTON_CHRONICLE_HEADLINES = "houston-chronicle-headlines"; + public static final String HOUSTON_CHRONICLE_NEWS = "houston-chronicle-news"; + public static final String HOUSTON_CHRONICLE_SECTIONS = "houston-chronicle-sections"; public static final String HOW_TO_GEEK_HOWTOGEEK_NEWS = "howtogeek-news"; public static final String HUFF_POST_HUFFPOST_ARTICLE = "huffpost-article"; public static final String HUFF_POST_HUFFPOST_AUTHOR = "huffpost-author"; @@ -1610,6 +1692,15 @@ private OperationId() {} public static final String MACY_SMACYS_PRODUCT = "macys-product"; public static final String MACY_SMACYS_PRODUCT_REVIEWS = "macys-product-reviews"; public static final String MACY_SMACYS_SUGGEST = "macys-suggest"; + public static final String MAKE_USE_OF_MAKEUSEOF_ARTICLE = "makeuseof-article"; + public static final String MAKE_USE_OF_MAKEUSEOF_AUTHOR = "makeuseof-author"; + public static final String MAKE_USE_OF_MAKEUSEOF_HEADLINES = "makeuseof-headlines"; + public static final String MAKE_USE_OF_MAKEUSEOF_NEWS = "makeuseof-news"; + public static final String MAKE_USE_OF_MAKEUSEOF_SECTIONS = "makeuseof-sections"; + public static final String MALAY_MAIL_MALAYMAIL_ARTICLE = "malaymail-article"; + public static final String MALAY_MAIL_MALAYMAIL_HEADLINES = "malaymail-headlines"; + public static final String MALAY_MAIL_MALAYMAIL_NEWS = "malaymail-news"; + public static final String MALAY_MAIL_MALAYMAIL_SECTIONS = "malaymail-sections"; public static final String MANCHESTER_EVENING_NEWS_MEN_ARTICLE = "men-article"; public static final String MANCHESTER_EVENING_NEWS_MEN_AUTHOR = "men-author"; public static final String MANCHESTER_EVENING_NEWS_MEN_HEADLINES = "men-headlines"; @@ -1722,13 +1813,59 @@ private OperationId() {} public static final String MLB_LEAGUE_STATS = "mlb-league-stats"; public static final String MLB_PLAYER = "mlb-player"; public static final String MLB_PLAYER_STATS = "mlb-player-stats"; + public static final String MLB_PROSPECT_RANKINGS = "mlb-prospect-rankings"; public static final String MLB_PROSPECT_STATS = "mlb-prospect-stats"; public static final String MLB_SCHEDULE = "mlb-schedule"; public static final String MLB_SEARCH = "mlb-search"; public static final String MLB_STANDINGS = "mlb-standings"; public static final String MLB_STATCAST = "mlb-statcast"; + public static final String MLB_STATCAST_ABS_CHALLENGES = "mlb-statcast-abs-challenges"; + public static final String MLB_STATCAST_ACTIVE_SPIN = "mlb-statcast-active-spin"; + public static final String MLB_STATCAST_ARM_ANGLE = "mlb-statcast-arm-angle"; + public static final String MLB_STATCAST_ARM_STRENGTH = "mlb-statcast-arm-strength"; + public static final String MLB_STATCAST_ARM_STRENGTH_PLAYER = "mlb-statcast-arm-strength-player"; + public static final String MLB_STATCAST_ARM_VALUE = "mlb-statcast-arm-value"; + public static final String MLB_STATCAST_ARM_VALUE_DETAILS = "mlb-statcast-arm-value-details"; + public static final String MLB_STATCAST_BASERUNNING = "mlb-statcast-baserunning"; + public static final String MLB_STATCAST_BAT_TRACKING = "mlb-statcast-bat-tracking"; + public static final String MLB_STATCAST_BATTED_BALL = "mlb-statcast-batted-ball"; + public static final String MLB_STATCAST_BIRTHDAY_INDEX = "mlb-statcast-birthday-index"; + public static final String MLB_STATCAST_CATCHER_BLOCKING = "mlb-statcast-catcher-blocking"; + public static final String MLB_STATCAST_CATCHER_BLOCKING_DETAILS = "mlb-statcast-catcher-blocking-details"; + public static final String MLB_STATCAST_CATCHER_FRAMING = "mlb-statcast-catcher-framing"; + public static final String MLB_STATCAST_CATCHER_FRAMING_DETAILS = "mlb-statcast-catcher-framing-details"; + public static final String MLB_STATCAST_CATCHER_POP_TIME = "mlb-statcast-catcher-pop-time"; + public static final String MLB_STATCAST_CATCHER_STANCE = "mlb-statcast-catcher-stance"; + public static final String MLB_STATCAST_CATCHER_THROWING = "mlb-statcast-catcher-throwing"; + public static final String MLB_STATCAST_CATCHER_THROWING_DETAILS = "mlb-statcast-catcher-throwing-details"; public static final String MLB_STATCAST_EXPECTED = "mlb-statcast-expected"; + public static final String MLB_STATCAST_FIELDING_RUN_VALUE = "mlb-statcast-fielding-run-value"; + public static final String MLB_STATCAST_FIRST_BASE_RECEIVING = "mlb-statcast-first-base-receiving"; + public static final String MLB_STATCAST_FIRST_BASE_RECEIVING_DETAILS = "mlb-statcast-first-base-receiving-details"; + public static final String MLB_STATCAST_HOME_RUNS = "mlb-statcast-home-runs"; + public static final String MLB_STATCAST_HOME_RUNS_DETAILS = "mlb-statcast-home-runs-details"; public static final String MLB_STATCAST_OAA = "mlb-statcast-oaa"; + public static final String MLB_STATCAST_PARK_FACTORS = "mlb-statcast-park-factors"; + public static final String MLB_STATCAST_PERCENTILE = "mlb-statcast-percentile"; + public static final String MLB_STATCAST_PITCH_ARSENAL = "mlb-statcast-pitch-arsenal"; + public static final String MLB_STATCAST_PITCH_ARSENAL_DETAILS = "mlb-statcast-pitch-arsenal-details"; + public static final String MLB_STATCAST_PITCH_ARSENALS = "mlb-statcast-pitch-arsenals"; + public static final String MLB_STATCAST_PITCH_MOVEMENT = "mlb-statcast-pitch-movement"; + public static final String MLB_STATCAST_PITCH_TEMPO = "mlb-statcast-pitch-tempo"; + public static final String MLB_STATCAST_PITCH_TEMPO_PLAYER = "mlb-statcast-pitch-tempo-player"; + public static final String MLB_STATCAST_PITCH_TIMER = "mlb-statcast-pitch-timer"; + public static final String MLB_STATCAST_PLAYER_DETAILS = "mlb-statcast-player-details"; + public static final String MLB_STATCAST_ROLLING = "mlb-statcast-rolling"; + public static final String MLB_STATCAST_RUN_VALUE = "mlb-statcast-run-value"; + public static final String MLB_STATCAST_RUNNING_GAME = "mlb-statcast-running-game"; + public static final String MLB_STATCAST_RUNNING_GAME_DETAILS = "mlb-statcast-running-game-details"; + public static final String MLB_STATCAST_SPRINT_SPEED = "mlb-statcast-sprint-speed"; + public static final String MLB_STATCAST_SPRINT_SPEED_TEAMS = "mlb-statcast-sprint-speed-teams"; + public static final String MLB_STATCAST_SWING_PATH = "mlb-statcast-swing-path"; + public static final String MLB_STATCAST_SWING_TIMING = "mlb-statcast-swing-timing"; + public static final String MLB_STATCAST_SWING_TIMING_DETAILS = "mlb-statcast-swing-timing-details"; + public static final String MLB_STATCAST_TOP_PERFORMERS = "mlb-statcast-top-performers"; + public static final String MLB_STATCAST_YEAR_TO_YEAR = "mlb-statcast-year-to-year"; public static final String MLB_TEAM_ROSTER = "mlb-team-roster"; public static final String MLB_TEAM_STATS = "mlb-team-stats"; public static final String MLB_TEAMS = "mlb-teams"; @@ -1773,9 +1910,15 @@ private OperationId() {} public static final String NDTV_ARTICLE = "ndtv-article"; public static final String NDTV_AUTHOR = "ndtv-author"; public static final String NDTV_HEADLINES = "ndtv-headlines"; + public static final String NDTV_LATEST_VIDEOS = "ndtv-latest-videos"; + public static final String NDTV_LIVE_BLOG = "ndtv-live-blog"; + public static final String NDTV_LIVE_BLOGS = "ndtv-live-blogs"; public static final String NDTV_NEWS = "ndtv-news"; public static final String NDTV_SEARCH = "ndtv-search"; public static final String NDTV_SECTIONS = "ndtv-sections"; + 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 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"; @@ -1829,6 +1972,11 @@ private OperationId() {} public static final String NIKE_SEARCH = "nike-search"; public static final String NIKE_STORES = "nike-stores"; public static final String NIKE_SUGGEST = "nike-suggest"; + public static final String NINE_TO_FIVE_GOOGLE_ARTICLE = "ninetofivegoogle-article"; + public static final String NINE_TO_FIVE_GOOGLE_AUTHOR = "ninetofivegoogle-author"; + public static final String NINE_TO_FIVE_GOOGLE_HEADLINES = "ninetofivegoogle-headlines"; + public static final String NINE_TO_FIVE_GOOGLE_NEWS = "ninetofivegoogle-news"; + public static final String NINE_TO_FIVE_GOOGLE_SECTIONS = "ninetofivegoogle-sections"; public static final String NINE_TO_FIVE_MAC_ARTICLE = "ninetofivemac-article"; public static final String NINE_TO_FIVE_MAC_AUTHOR = "ninetofivemac-author"; public static final String NINE_TO_FIVE_MAC_HEADLINES = "ninetofivemac-headlines"; @@ -2000,6 +2148,10 @@ private OperationId() {} public static final String PHONE_ARENA_PHONEARENA_HEADLINES = "phonearena-headlines"; public static final String PHONE_ARENA_PHONEARENA_NEWS = "phonearena-news"; public static final String PHONE_ARENA_PHONEARENA_SECTIONS = "phonearena-sections"; + public static final String PHYS_ORG_PHYSORG_ARTICLE = "physorg-article"; + public static final String PHYS_ORG_PHYSORG_HEADLINES = "physorg-headlines"; + public static final String PHYS_ORG_PHYSORG_NEWS = "physorg-news"; + public static final String PHYS_ORG_PHYSORG_SECTIONS = "physorg-sections"; public static final String PINTEREST_BOARD = "pinterest-board"; public static final String PINTEREST_CATEGORIES = "pinterest-categories"; public static final String PINTEREST_IDEA = "pinterest-idea"; @@ -2258,6 +2410,19 @@ private OperationId() {} public static final String RESY_LOCATIONS = "resy-locations"; public static final String RESY_RESTAURANT = "resy-restaurant"; public static final String RESY_SEARCH = "resy-search"; + public static final String RETAIL_ME_NOT_RETAILMENOT_AUTOCOMPLETE = "retailmenot-autocomplete"; + public static final String RETAIL_ME_NOT_RETAILMENOT_BLOG_CATEGORIES = "retailmenot-blog-categories"; + public static final String RETAIL_ME_NOT_RETAILMENOT_BLOG_POST = "retailmenot-blog-post"; + public static final String RETAIL_ME_NOT_RETAILMENOT_BLOG_POSTS = "retailmenot-blog-posts"; + public static final String RETAIL_ME_NOT_RETAILMENOT_BLOG_TAGS = "retailmenot-blog-tags"; + public static final String RETAIL_ME_NOT_RETAILMENOT_CASHBACK = "retailmenot-cashback"; + public static final String RETAIL_ME_NOT_RETAILMENOT_CATEGORIES = "retailmenot-categories"; + public static final String RETAIL_ME_NOT_RETAILMENOT_CATEGORY = "retailmenot-category"; + public static final String RETAIL_ME_NOT_RETAILMENOT_DEAL_EVENT = "retailmenot-deal-event"; + public static final String RETAIL_ME_NOT_RETAILMENOT_DEAL_EVENTS = "retailmenot-deal-events"; + public static final String RETAIL_ME_NOT_RETAILMENOT_HOME = "retailmenot-home"; + public static final String RETAIL_ME_NOT_RETAILMENOT_STORE = "retailmenot-store"; + public static final String RETAIL_ME_NOT_RETAILMENOT_STORES = "retailmenot-stores"; public static final String REUTERS_ARTICLE = "reuters-article"; public static final String REUTERS_ARTICLES = "reuters-articles"; public static final String REUTERS_AUTHOR = "reuters-author"; @@ -2539,15 +2704,31 @@ private OperationId() {} public static final String SPORTING_NEWS_SPORTINGNEWS_SECTIONS = "sportingnews-sections"; public static final String SPORTSKEEDA_ARTICLE = "sportskeeda-article"; public static final String SPORTSKEEDA_AUTHOR = "sportskeeda-author"; + public static final String SPORTSKEEDA_COLLEGE_BASKETBALL_SCHEDULE = "sportskeeda-college-basketball-schedule"; + public static final String SPORTSKEEDA_COLLEGE_BASKETBALL_SCHEDULE_OPTIONS = "sportskeeda-college-basketball-schedule-options"; + public static final String SPORTSKEEDA_CRICKET_COMMENTARY = "sportskeeda-cricket-commentary"; + public static final String SPORTSKEEDA_CRICKET_MATCH = "sportskeeda-cricket-match"; public static final String SPORTSKEEDA_DEPTH_CHART = "sportskeeda-depth-chart"; + public static final String SPORTSKEEDA_DRAFT_PICKS = "sportskeeda-draft-picks"; + public static final String SPORTSKEEDA_DRAFT_PICKS_OPTIONS = "sportskeeda-draft-picks-options"; + public static final String SPORTSKEEDA_EVENT_CALENDAR = "sportskeeda-event-calendar"; + public static final String SPORTSKEEDA_EVENT_CALENDAR_OPTIONS = "sportskeeda-event-calendar-options"; public static final String SPORTSKEEDA_FEED = "sportskeeda-feed"; public static final String SPORTSKEEDA_FOOTBALL_DATA = "sportskeeda-football-data"; public static final String SPORTSKEEDA_FOOTBALL_OPTIONS = "sportskeeda-football-options"; + public static final String SPORTSKEEDA_GUESSING_GAME = "sportskeeda-guessing-game"; + public static final String SPORTSKEEDA_GUESSING_GAME_ENTITIES = "sportskeeda-guessing-game-entities"; + public static final String SPORTSKEEDA_GUESSING_GAMES = "sportskeeda-guessing-games"; + public static final String SPORTSKEEDA_NBA_QUERIES = "sportskeeda-nba-queries"; public static final String SPORTSKEEDA_NEWS = "sportskeeda-news"; public static final String SPORTSKEEDA_PAGE_DATA = "sportskeeda-page-data"; public static final String SPORTSKEEDA_PAGE_OPTIONS = "sportskeeda-page-options"; public static final String SPORTSKEEDA_PLAYER_STATS = "sportskeeda-player-stats"; public static final String SPORTSKEEDA_PROFILE = "sportskeeda-profile"; + public static final String SPORTSKEEDA_QUIZ = "sportskeeda-quiz"; + public static final String SPORTSKEEDA_QUIZ_CATEGORIES = "sportskeeda-quiz-categories"; + public static final String SPORTSKEEDA_QUIZZES = "sportskeeda-quizzes"; + public static final String SPORTSKEEDA_SALARY_CAP = "sportskeeda-salary-cap"; public static final String SPORTSKEEDA_SCHEDULE = "sportskeeda-schedule"; public static final String SPORTSKEEDA_SECTIONS = "sportskeeda-sections"; public static final String SPORTSKEEDA_SITEMAP_ITEMS = "sportskeeda-sitemap-items"; @@ -2555,9 +2736,20 @@ private OperationId() {} public static final String SPORTSKEEDA_STANDINGS = "sportskeeda-standings"; public static final String SPORTSKEEDA_STANDINGS_OPTIONS = "sportskeeda-standings-options"; public static final String SPORTSKEEDA_TAXONOMY_SEARCH = "sportskeeda-taxonomy-search"; + public static final String SPORTSKEEDA_TOPIC = "sportskeeda-topic"; public static final String SPORTSKEEDA_TRADE_VALUES = "sportskeeda-trade-values"; + public static final String SPORTSKEEDA_TRANSACTIONS = "sportskeeda-transactions"; + public static final String SPORTSKEEDA_TRANSACTIONS_OPTIONS = "sportskeeda-transactions-options"; public static final String SPORTSKEEDA_VIDEO = "sportskeeda-video"; public static final String SPORTSKEEDA_VIDEOS = "sportskeeda-videos"; + public static final String SPORTSKEEDA_WIKI_ACTIVITY = "sportskeeda-wiki-activity"; + public static final String SPORTSKEEDA_WIKI_ARTICLE = "sportskeeda-wiki-article"; + public static final String SPORTSKEEDA_WIKI_CATEGORIES = "sportskeeda-wiki-categories"; + public static final String SPORTSKEEDA_WIKI_CONTRIBUTORS = "sportskeeda-wiki-contributors"; + public static final String SPORTSKEEDA_WIKI_ISSUES = "sportskeeda-wiki-issues"; + public static final String SPORTSKEEDA_WIKI_OPTIONS = "sportskeeda-wiki-options"; + public static final String SPORTSKEEDA_WIKI_PAGES = "sportskeeda-wiki-pages"; + public static final String SPORTSKEEDA_WIKI_SUMMARY = "sportskeeda-wiki-summary"; public static final String SPOTIFY_ALBUM = "spotify-album"; public static final String SPOTIFY_ALBUM_TRACKS = "spotify-album-tracks"; public static final String SPOTIFY_ALBUMS_SEARCH = "spotify-albums-search"; @@ -2642,6 +2834,17 @@ private OperationId() {} public static final String STRAVA_CLUB = "strava-club"; public static final String STRAVA_ROUTE_DETAIL = "strava-route-detail"; public static final String STRAVA_ROUTES = "strava-routes"; + public static final String STREET_EASY_STREETEASY_AREAS = "streeteasy-areas"; + public static final String STREET_EASY_STREETEASY_BUILDING = "streeteasy-building"; + public static final String STREET_EASY_STREETEASY_MARKET_DATA_CATALOG = "streeteasy-market-data-catalog"; + public static final String STREET_EASY_STREETEASY_MARKET_DATA_SERIES = "streeteasy-market-data-series"; + public static final String STREET_EASY_STREETEASY_MARKET_INDICES = "streeteasy-market-indices"; + public static final String STREET_EASY_STREETEASY_MARKET_INVENTORY = "streeteasy-market-inventory"; + public static final String STREET_EASY_STREETEASY_QUICK_SEARCH = "streeteasy-quick-search"; + public static final String STREET_EASY_STREETEASY_RENTALS_SEARCH = "streeteasy-rentals-search"; + public static final String STREET_EASY_STREETEASY_SALES_SEARCH = "streeteasy-sales-search"; + public static final String STREET_EASY_STREETEASY_SCHOOL = "streeteasy-school"; + public static final String STREET_EASY_STREETEASY_UNIT = "streeteasy-unit"; public static final String STUB_HUB_STUBHUB_CAROUSEL = "stubhub-carousel"; public static final String STUB_HUB_STUBHUB_CATEGORIES = "stubhub-categories"; public static final String STUB_HUB_STUBHUB_CATEGORY_EVENTS = "stubhub-category-events"; @@ -2731,6 +2934,11 @@ private OperationId() {} public static final String THE_ATLANTIC_THEATLANTIC_AUTHOR = "theatlantic-author"; public static final String THE_ATLANTIC_THEATLANTIC_HEADLINES = "theatlantic-headlines"; public static final String THE_ATLANTIC_THEATLANTIC_SECTIONS = "theatlantic-sections"; + public static final String THE_BLAZE_THEBLAZE_ARTICLE = "theblaze-article"; + public static final String THE_BLAZE_THEBLAZE_AUTHOR = "theblaze-author"; + public static final String THE_BLAZE_THEBLAZE_HEADLINES = "theblaze-headlines"; + public static final String THE_BLAZE_THEBLAZE_NEWS = "theblaze-news"; + public static final String THE_BLAZE_THEBLAZE_SECTIONS = "theblaze-sections"; public static final String THE_BODY_SHOP_THEBODYSHOP_COLLECTION_PRODUCTS = "thebodyshop-collection-products"; public static final String THE_BODY_SHOP_THEBODYSHOP_COLLECTIONS = "thebodyshop-collections"; public static final String THE_BODY_SHOP_THEBODYSHOP_PAGE = "thebodyshop-page"; @@ -2752,6 +2960,16 @@ private OperationId() {} public static final String THE_DAILY_CALLER_DAILYCALLER_HEADLINES = "dailycaller-headlines"; public static final String THE_DAILY_CALLER_DAILYCALLER_NEWS = "dailycaller-news"; public static final String THE_DAILY_CALLER_DAILYCALLER_SECTIONS = "dailycaller-sections"; + public static final String THE_DENVER_POST_DENVERPOST_ARTICLE = "denverpost-article"; + public static final String THE_DENVER_POST_DENVERPOST_AUTHOR = "denverpost-author"; + public static final String THE_DENVER_POST_DENVERPOST_HEADLINES = "denverpost-headlines"; + public static final String THE_DENVER_POST_DENVERPOST_NEWS = "denverpost-news"; + public static final String THE_DENVER_POST_DENVERPOST_SECTIONS = "denverpost-sections"; + public static final String THE_EXPRESS_TRIBUNE_EXPRESSTRIBUNE_ARTICLE = "expresstribune-article"; + public static final String THE_EXPRESS_TRIBUNE_EXPRESSTRIBUNE_AUTHOR = "expresstribune-author"; + public static final String THE_EXPRESS_TRIBUNE_EXPRESSTRIBUNE_HEADLINES = "expresstribune-headlines"; + public static final String THE_EXPRESS_TRIBUNE_EXPRESSTRIBUNE_NEWS = "expresstribune-news"; + public static final String THE_EXPRESS_TRIBUNE_EXPRESSTRIBUNE_SECTIONS = "expresstribune-sections"; public static final String THE_HILL_THEHILL_ARTICLE = "thehill-article"; public static final String THE_HILL_THEHILL_AUTHOR = "thehill-author"; public static final String THE_HILL_THEHILL_HEADLINES = "thehill-headlines"; @@ -2772,6 +2990,11 @@ private OperationId() {} public static final String THE_INDIAN_EXPRESS_INDIANEXPRESS_HEADLINES = "indianexpress-headlines"; public static final String THE_INDIAN_EXPRESS_INDIANEXPRESS_NEWS = "indianexpress-news"; public static final String THE_INDIAN_EXPRESS_INDIANEXPRESS_SECTIONS = "indianexpress-sections"; + public static final String THE_JAPAN_TIMES_JAPANTIMES_ARTICLE = "japantimes-article"; + public static final String THE_JAPAN_TIMES_JAPANTIMES_AUTHOR = "japantimes-author"; + public static final String THE_JAPAN_TIMES_JAPANTIMES_HEADLINES = "japantimes-headlines"; + public static final String THE_JAPAN_TIMES_JAPANTIMES_NEWS = "japantimes-news"; + public static final String THE_JAPAN_TIMES_JAPANTIMES_SECTIONS = "japantimes-sections"; public static final String THE_JOURNAL_IE_THEJOURNAL_ARTICLE = "thejournal-article"; public static final String THE_JOURNAL_IE_THEJOURNAL_AUTHOR = "thejournal-author"; public static final String THE_JOURNAL_IE_THEJOURNAL_HEADLINES = "thejournal-headlines"; @@ -2782,11 +3005,21 @@ private OperationId() {} public static final String THE_MOTLEY_FOOL_MOTLEYFOOL_HEADLINES = "motleyfool-headlines"; public static final String THE_MOTLEY_FOOL_MOTLEYFOOL_NEWS = "motleyfool-news"; public static final String THE_MOTLEY_FOOL_MOTLEYFOOL_SECTIONS = "motleyfool-sections"; + public static final String THE_NATIONAL_NATIONAL_ARTICLE = "national-article"; + public static final String THE_NATIONAL_NATIONAL_AUTHOR = "national-author"; + public static final String THE_NATIONAL_NATIONAL_HEADLINES = "national-headlines"; + public static final String THE_NATIONAL_NATIONAL_NEWS = "national-news"; + public static final String THE_NATIONAL_NATIONAL_SECTIONS = "national-sections"; public static final String THE_NEW_YORKER_NEWYORKER_ARTICLE = "newyorker-article"; public static final String THE_NEW_YORKER_NEWYORKER_AUTHOR = "newyorker-author"; public static final String THE_NEW_YORKER_NEWYORKER_HEADLINES = "newyorker-headlines"; public static final String THE_NEW_YORKER_NEWYORKER_NEWS = "newyorker-news"; public static final String THE_NEW_YORKER_NEWYORKER_SECTIONS = "newyorker-sections"; + public static final String THE_NEXT_WEB_THENEXTWEB_ARTICLE = "thenextweb-article"; + public static final String THE_NEXT_WEB_THENEXTWEB_AUTHOR = "thenextweb-author"; + public static final String THE_NEXT_WEB_THENEXTWEB_HEADLINES = "thenextweb-headlines"; + public static final String THE_NEXT_WEB_THENEXTWEB_NEWS = "thenextweb-news"; + public static final String THE_NEXT_WEB_THENEXTWEB_SECTIONS = "thenextweb-sections"; public static final String THE_REAL_REAL_THEREALREAL_AUTOCOMPLETE = "therealreal-autocomplete"; public static final String THE_REAL_REAL_THEREALREAL_CATEGORIES = "therealreal-categories"; public static final String THE_REAL_REAL_THEREALREAL_CATEGORY = "therealreal-category"; @@ -2894,6 +3127,10 @@ private OperationId() {} public static final String TIME_HEADLINES = "time-headlines"; public static final String TIME_NEWS = "time-news"; public static final String TIME_SECTIONS = "time-sections"; + public static final String TIMES_LIVE_TIMESLIVE_ARTICLE = "timeslive-article"; + public static final String TIMES_LIVE_TIMESLIVE_HEADLINES = "timeslive-headlines"; + public static final String TIMES_LIVE_TIMESLIVE_NEWS = "timeslive-news"; + public static final String TIMES_LIVE_TIMESLIVE_SECTIONS = "timeslive-sections"; public static final String TIMES_OF_INDIA_TIMESOFINDIA_ARTICLE = "timesofindia-article"; public static final String TIMES_OF_INDIA_TIMESOFINDIA_AUTHOR = "timesofindia-author"; public static final String TIMES_OF_INDIA_TIMESOFINDIA_HEADLINES = "timesofindia-headlines"; @@ -3055,6 +3292,13 @@ private OperationId() {} public static final String VOX_HEADLINES = "vox-headlines"; public static final String VOX_NEWS = "vox-news"; public static final String VOX_SECTIONS = "vox-sections"; + public static final String VRBO_LOCATION_SUGGESTIONS = "vrbo-location-suggestions"; + public static final String VRBO_PROPERTY = "vrbo-property"; + public static final String VRBO_PROPERTY_REVIEWS = "vrbo-property-reviews"; + public static final String VRBO_RATE_CALENDAR = "vrbo-rate-calendar"; + public static final String VRBO_SEARCH = "vrbo-search"; + public static final String VRBO_TRAVEL_PAGE_DETAIL = "vrbo-travel-page-detail"; + public static final String VRBO_TRAVEL_PAGES = "vrbo-travel-pages"; public static final String WALES_ONLINE_WALESONLINE_ARTICLE = "walesonline-article"; public static final String WALES_ONLINE_WALESONLINE_AUTHOR = "walesonline-author"; public static final String WALES_ONLINE_WALESONLINE_HEADLINES = "walesonline-headlines"; @@ -3074,6 +3318,11 @@ private OperationId() {} public static final String WAYFAIR_CATEGORIES = "wayfair-categories"; public static final String WAYFAIR_CATEGORY = "wayfair-category"; public static final String WAYFAIR_PRODUCT = "wayfair-product"; + public static final String WCCFTECH_ARTICLE = "wccftech-article"; + public static final String WCCFTECH_AUTHOR = "wccftech-author"; + public static final String WCCFTECH_HEADLINES = "wccftech-headlines"; + public static final String WCCFTECH_NEWS = "wccftech-news"; + public static final String WCCFTECH_SECTIONS = "wccftech-sections"; public static final String WEB_ANTIBOT_CHECK = "antibot-check"; public static final String WEB_CONTACT = "contact"; public static final String WEB_EMAIL_VERIFY = "email-verify"; @@ -3225,6 +3474,11 @@ private OperationId() {} 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"; + public static final String YARDBARKER_ARTICLE = "yardbarker-article"; + public static final String YARDBARKER_AUTHOR = "yardbarker-author"; + public static final String YARDBARKER_HEADLINES = "yardbarker-headlines"; + public static final String YARDBARKER_NEWS = "yardbarker-news"; + public static final String YARDBARKER_SECTIONS = "yardbarker-sections"; public static final String YELP_BUSINESS = "yelp-business"; public static final String YELP_BUSINESS_MENU = "yelp-business-menu"; public static final String YELP_BUSINESS_PHOTOS = "yelp-business-photos"; diff --git a/src/main/java/net/crawlora/Operations.java b/src/main/java/net/crawlora/Operations.java index ff6982d..fa5b9b5 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 = 3275; + public static final int OPERATION_COUNT = 3529; /** Immutable map of operation id to its runtime metadata. */ public static final Map OPERATIONS = buildOperations(); @@ -80,6 +80,10 @@ private static Map buildOperations() { putOperations52(m); putOperations53(m); putOperations54(m); + putOperations55(m); + putOperations56(m); + putOperations57(m); + putOperations58(m); return Map.copyOf(m); } @@ -951,6 +955,53 @@ private static void putOperations0(Map m) { } private static void putOperations1(Map m) { + m.put("aliexpress-reviews", new Operation( + "aliexpress-reviews", + "GET", + "/aliexpress/reviews", + List.of(), + List.of( + new QueryParam("product_id", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("aliexpress-search", new Operation( + "aliexpress-search", + "GET", + "/aliexpress/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("best_match", "orders", "price_asc", "price_desc")), + new QueryParam("min_price", false, "number", List.of()), + new QueryParam("max_price", false, "number", List.of()), + new QueryParam("free_shipping", false, "boolean", List.of()), + new QueryParam("choice", false, "boolean", List.of()), + new QueryParam("attr", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("aliexpress-search-filters", new Operation( + "aliexpress-search-filters", + "GET", + "/aliexpress/search-filters", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("aljazeera-article", new Operation( "aljazeera-article", "GET", @@ -1466,6 +1517,69 @@ private static void putOperations1(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("androidpolice-article", new Operation( + "androidpolice-article", + "GET", + "/androidpolice/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("androidpolice-author", new Operation( + "androidpolice-author", + "GET", + "/androidpolice/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("androidpolice-headlines", new Operation( + "androidpolice-headlines", + "GET", + "/androidpolice/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("news", "phones", "tablets", "gadgets", "accessories", "apps", "entertainment", "productivity", "utilities", "ai-machine-learning", "operating-systems", "wearables", "smart-home", "smart-tv", "carriers", "deals", "videos", "awards"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("androidpolice-news", new Operation( + "androidpolice-news", + "GET", + "/androidpolice/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("androidpolice-sections", new Operation( + "androidpolice-sections", + "GET", + "/androidpolice/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("anime-airing-schedule", new Operation( "anime-airing-schedule", "GET", @@ -1675,6 +1789,9 @@ private static void putOperations1(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations2(Map m) { m.put("apnews-article", new Operation( "apnews-article", "GET", @@ -1781,9 +1898,6 @@ private static void putOperations1(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations2(Map m) { m.put("apple-books-audiobook", new Operation( "apple-books-audiobook", "GET", @@ -2447,6 +2561,37 @@ private static void putOperations2(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("appstore-collection", new Operation( + "appstore-collection", + "GET", + "/appstore/collection", + List.of(), + List.of( + new QueryParam("platform", true, "string", List.of("iphone", "ipad", "mac", "vision", "watch", "tv")), + new QueryParam("collection_id", true, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("lang", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("appstore-collections", new Operation( + "appstore-collections", + "GET", + "/appstore/collections", + List.of(), + List.of( + new QueryParam("platform", true, "string", List.of("iphone", "ipad", "mac", "vision", "watch", "tv")), + new QueryParam("country", false, "string", List.of()), + new QueryParam("lang", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("appstore-developer", new Operation( "appstore-developer", "GET", @@ -2578,6 +2723,9 @@ private static void putOperations2(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations3(Map m) { m.put("appstore-similar", new Operation( "appstore-similar", "GET", @@ -2718,9 +2866,6 @@ private static void putOperations2(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations3(Map m) { m.put("arstechnica-headlines", new Operation( "arstechnica-headlines", "GET", @@ -3341,6 +3486,72 @@ private static void putOperations3(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("benzinga-article", new Operation( + "benzinga-article", + "GET", + "/benzinga/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("benzinga-headlines", new Operation( + "benzinga-headlines", + "GET", + "/benzinga/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("latest", "technology-stocks", "politics", "health-care"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("benzinga-news", new Operation( + "benzinga-news", + "GET", + "/benzinga/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("benzinga-search", new Operation( + "benzinga-search", + "GET", + "/benzinga/search", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("benzinga-sections", new Operation( + "benzinga-sections", + "GET", + "/benzinga/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations4(Map m) { m.put("bestbuy-brands", new Operation( "bestbuy-brands", "GET", @@ -3538,9 +3749,6 @@ private static void putOperations3(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations4(Map m) { m.put("bilibili-autocomplete", new Operation( "bilibili-autocomplete", "GET", @@ -4134,6 +4342,9 @@ private static void putOperations4(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations5(Map m) { m.put("bluesky-author-feed", new Operation( "bluesky-author-feed", "GET", @@ -4359,9 +4570,6 @@ private static void putOperations4(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations5(Map m) { m.put("bonhams-lot-detail", new Operation( "bonhams-lot-detail", "GET", @@ -5034,6 +5242,72 @@ private static void putOperations5(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("brisbanetimes-article", new Operation( + "brisbanetimes-article", + "GET", + "/brisbanetimes/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 putOperations6(Map m) { + m.put("brisbanetimes-author", new Operation( + "brisbanetimes-author", + "GET", + "/brisbanetimes/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("brisbanetimes-headlines", new Operation( + "brisbanetimes-headlines", + "GET", + "/brisbanetimes/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("brisbanetimes-news", new Operation( + "brisbanetimes-news", + "GET", + "/brisbanetimes/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("brisbanetimes-sections", new Operation( + "brisbanetimes-sections", + "GET", + "/brisbanetimes/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("brooklinen-collections", new Operation( "brooklinen-collections", "GET", @@ -5252,9 +5526,6 @@ private static void putOperations5(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations6(Map m) { m.put("burberry-suggest", new Operation( "burberry-suggest", "GET", @@ -5793,6 +6064,9 @@ private static void putOperations6(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations7(Map m) { m.put("cbsnews-news", new Operation( "cbsnews-news", "GET", @@ -6070,9 +6344,6 @@ private static void putOperations6(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations7(Map m) { m.put("chewy-variants", new Operation( "chewy-variants", "GET", @@ -6651,6 +6922,9 @@ private static void putOperations7(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations8(Map m) { m.put("chrono24-models", new Operation( "chrono24-models", "GET", @@ -6924,9 +7198,6 @@ private static void putOperations7(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations8(Map m) { m.put("cnn-live-story", new Operation( "cnn-live-story", "GET", @@ -7475,6 +7746,9 @@ private static void putOperations8(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations9(Map m) { m.put("comc-search", new Operation( "comc-search", "GET", @@ -7759,9 +8033,6 @@ private static void putOperations8(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations9(Map m) { m.put("cricinfo-rankings", new Operation( "cricinfo-rankings", "GET", @@ -8297,6 +8568,9 @@ private static void putOperations9(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations10(Map m) { m.put("dailyexpress-author", new Operation( "dailyexpress-author", "GET", @@ -8347,6 +8621,56 @@ private static void putOperations9(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("dailykos-article", new Operation( + "dailykos-article", + "GET", + "/dailykos/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailykos-headlines", new Operation( + "dailykos-headlines", + "GET", + "/dailykos/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailykos-news", new Operation( + "dailykos-news", + "GET", + "/dailykos/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailykos-sections", new Operation( + "dailykos-sections", + "GET", + "/dailykos/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("dailymail-article", new Operation( "dailymail-article", "GET", @@ -8411,6 +8735,56 @@ private static void putOperations9(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("dailymaverick-article", new Operation( + "dailymaverick-article", + "GET", + "/dailymaverick/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailymaverick-headlines", new Operation( + "dailymaverick-headlines", + "GET", + "/dailymaverick/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailymaverick-news", new Operation( + "dailymaverick-news", + "GET", + "/dailymaverick/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailymaverick-sections", new Operation( + "dailymaverick-sections", + "GET", + "/dailymaverick/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("dailyrecord-article", new Operation( "dailyrecord-article", "GET", @@ -8553,9 +8927,6 @@ private static void putOperations9(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations10(Map m) { m.put("dailywire-author", new Operation( "dailywire-author", "GET", @@ -9110,6 +9481,91 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-doordash-stores-facets", new Operation( + "datasets-doordash-stores-facets", + "GET", + "/datasets/doordash-stores/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("country", "state", "city", "tags", "display_status", "price_range", "dash_pass_eligible")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("city", false, "string", List.of()), + new QueryParam("tag", false, "string", List.of()), + new QueryParam("dash_pass_only", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-doordash-stores-item", new Operation( + "datasets-doordash-stores-item", + "GET", + "/datasets/doordash-stores/items/{store_id}", + List.of("store_id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-doordash-stores-nearby", new Operation( + "datasets-doordash-stores-nearby", + "GET", + "/datasets/doordash-stores/nearby", + List.of(), + List.of( + new QueryParam("lat", true, "number", List.of()), + new QueryParam("lon", true, "number", List.of()), + new QueryParam("radius_m", true, "integer", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("tag", false, "string", List.of()), + new QueryParam("dash_pass_only", false, "boolean", List.of()), + new QueryParam("pagination", false, "string", List.of("offset", "cursor")), + new QueryParam("cursor", false, "string", 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("cursor"))); + } + + private static void putOperations11(Map m) { + m.put("datasets-doordash-stores-search", new Operation( + "datasets-doordash-stores-search", + "GET", + "/datasets/doordash-stores/search", + List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("city", false, "string", List.of()), + new QueryParam("tag", false, "string", List.of()), + new QueryParam("dash_pass_only", false, "boolean", List.of()), + new QueryParam("min_price", false, "integer", List.of()), + new QueryParam("max_price", false, "integer", List.of()), + new QueryParam("min_rating", false, "number", List.of()), + new QueryParam("lat", false, "number", List.of()), + new QueryParam("lon", false, "number", List.of()), + new QueryParam("radius_m", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("relevance", "rating", "distance", "distance_asc")), + new QueryParam("pagination", false, "string", List.of("offset", "cursor")), + new QueryParam("cursor", false, "string", 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("cursor"))); m.put("datasets-facebook-pages-facets", new Operation( "datasets-facebook-pages-facets", "GET", @@ -9819,9 +10275,6 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations11(Map m) { m.put("datasets-journalists-search", new Operation( "datasets-journalists-search", "GET", @@ -10384,6 +10837,9 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations12(Map m) { m.put("datasets-producthunt-products-item", new Operation( "datasets-producthunt-products-item", "GET", @@ -11044,9 +11500,6 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations12(Map m) { m.put("datasets-vehicle-listings-facets", new Operation( "datasets-vehicle-listings-facets", "GET", @@ -11497,6 +11950,73 @@ private static void putOperations12(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("denverpost-article", new Operation( + "denverpost-article", + "GET", + "/denverpost/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("denverpost-author", new Operation( + "denverpost-author", + "GET", + "/denverpost/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("denverpost-headlines", new Operation( + "denverpost-headlines", + "GET", + "/denverpost/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations13(Map m) { + m.put("denverpost-news", new Operation( + "denverpost-news", + "GET", + "/denverpost/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("denverpost-sections", new Operation( + "denverpost-sections", + "GET", + "/denverpost/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("depop-brands", new Operation( "depop-brands", "GET", @@ -12005,9 +12525,6 @@ private static void putOperations12(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations13(Map m) { m.put("doordash-store-reviews", new Operation( "doordash-store-reviews", "GET", @@ -12322,6 +12839,9 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations14(Map m) { m.put("dw-author", new Operation( "dw-author", "GET", @@ -12807,9 +13327,6 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations14(Map m) { m.put("espn-team-roster", new Operation( "espn-team-roster", "GET", @@ -13121,6 +13638,9 @@ private static void putOperations14(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations15(Map m) { m.put("everlane-sitemaps", new Operation( "everlane-sitemaps", "GET", @@ -13292,6 +13812,70 @@ private static void putOperations14(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("expresstribune-article", new Operation( + "expresstribune-article", + "GET", + "/expresstribune/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("expresstribune-author", new Operation( + "expresstribune-author", + "GET", + "/expresstribune/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("expresstribune-headlines", new Operation( + "expresstribune-headlines", + "GET", + "/expresstribune/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("expresstribune-news", new Operation( + "expresstribune-news", + "GET", + "/expresstribune/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("expresstribune-sections", new Operation( + "expresstribune-sections", + "GET", + "/expresstribune/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("extract", new Operation( "extract", "POST", @@ -13624,9 +14208,6 @@ private static void putOperations14(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations15(Map m) { m.put("farfetch-designers", new Operation( "farfetch-designers", "GET", @@ -13871,6 +14452,9 @@ private static void putOperations15(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations16(Map m) { m.put("fashionphile-products", new Operation( "fashionphile-products", "GET", @@ -14438,9 +15022,6 @@ private static void putOperations15(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations16(Map m) { m.put("flashscore-scores", new Operation( "flashscore-scores", "GET", @@ -14690,6 +15271,9 @@ private static void putOperations16(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations17(Map m) { m.put("forbes-person", new Operation( "forbes-person", "GET", @@ -15264,9 +15848,6 @@ private static void putOperations16(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations17(Map m) { m.put("fotmob-player-stats", new Operation( "fotmob-player-stats", "GET", @@ -15520,6 +16101,9 @@ private static void putOperations17(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations18(Map m) { m.put("foxnews-news", new Operation( "foxnews-news", "GET", @@ -16122,9 +16706,6 @@ private static void putOperations17(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations18(Map m) { m.put("gdelt-tv-stationchart", new Operation( "gdelt-tv-stationchart", "GET", @@ -16421,6 +17002,9 @@ private static void putOperations18(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations19(Map m) { m.put("github-org-repos", new Operation( "github-org-repos", "GET", @@ -17001,9 +17585,6 @@ private static void putOperations18(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations19(Map m) { m.put("goat-search-facets", new Operation( "goat-search-facets", "GET", @@ -17244,6 +17825,277 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations20(Map m) { + m.put("goodrx-answer", new Operation( + "goodrx-answer", + "GET", + "/goodrx/answer", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-answers", new Operation( + "goodrx-answers", + "GET", + "/goodrx/answers", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-brands", new Operation( + "goodrx-brands", + "GET", + "/goodrx/brands", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-class", new Operation( + "goodrx-class", + "GET", + "/goodrx/class", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-classes", new Operation( + "goodrx-classes", + "GET", + "/goodrx/classes", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-comparison", new Operation( + "goodrx-comparison", + "GET", + "/goodrx/comparison", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-comparisons", new Operation( + "goodrx-comparisons", + "GET", + "/goodrx/comparisons", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-condition", new Operation( + "goodrx-condition", + "GET", + "/goodrx/condition", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-condition-drugs", new Operation( + "goodrx-condition-drugs", + "GET", + "/goodrx/condition-drugs", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-conditions", new Operation( + "goodrx-conditions", + "GET", + "/goodrx/conditions", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-drug-guide", new Operation( + "goodrx-drug-guide", + "GET", + "/goodrx/drug-guide", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("topic", true, "string", List.of("side-effects", "dosage", "interactions"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-drug-guides", new Operation( + "goodrx-drug-guides", + "GET", + "/goodrx/drug-guides", + List.of(), + List.of( + new QueryParam("topic", false, "string", List.of("side-effects", "dosage", "interactions")), + new QueryParam("letter", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-drug-info", new Operation( + "goodrx-drug-info", + "GET", + "/goodrx/drug-info", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("audience", false, "string", List.of("people", "pets"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-drug-options", new Operation( + "goodrx-drug-options", + "GET", + "/goodrx/drug-options", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-drug-prices", new Operation( + "goodrx-drug-prices", + "GET", + "/goodrx/drug-prices", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("label", false, "string", List.of()), + new QueryParam("form", false, "string", List.of()), + new QueryParam("dosage", false, "string", List.of()), + new QueryParam("quantity", false, "integer", List.of()), + new QueryParam("latitude", false, "number", List.of()), + new QueryParam("longitude", false, "number", List.of()), + new QueryParam("zip_code", false, "string", List.of()), + new QueryParam("state", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-drugs", new Operation( + "goodrx-drugs", + "GET", + "/goodrx/drugs", + List.of(), + List.of( + new QueryParam("letter", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-health-article", new Operation( + "goodrx-health-article", + "GET", + "/goodrx/health-article", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-health-articles", new Operation( + "goodrx-health-articles", + "GET", + "/goodrx/health-articles", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("conditions", "health-topic", "well-being", "pet-health", "insurance", "classes", "drugs", "healthcare-access", "corporate", "hcp", "drug")), + new QueryParam("topic", false, "string", 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("goodrx-health-topics", new Operation( + "goodrx-health-topics", + "GET", + "/goodrx/health-topics", + List.of(), + List.of( + new QueryParam("section", false, "string", List.of("conditions", "health-topic", "well-being", "pet-health", "insurance", "classes", "drugs", "healthcare-access", "corporate", "hcp", "drug"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("goodrx-pet-medications", new Operation( + "goodrx-pet-medications", + "GET", + "/goodrx/pet-medications", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("google-jobs-job", new Operation( "google-jobs-job", "GET", @@ -17761,6 +18613,9 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations21(Map m) { m.put("google-trends-trending-detail", new Operation( "google-trends-trending-detail", "POST", @@ -17790,9 +18645,6 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations20(Map m) { m.put("googlepatents-classification", new Operation( "googlepatents-classification", "GET", @@ -18296,6 +19148,140 @@ private static void putOperations20(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("greystar-articles", new Operation( + "greystar-articles", + "GET", + "/greystar/articles", + List.of(), + List.of( + new QueryParam("section", false, "string", List.of("applying-and-leasing", "general-guides", "moving", "blog")), + new QueryParam("query", false, "string", 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("greystar-article", new Operation( + "greystar-article", + "GET", + "/greystar/articles/{section}/{slug}", + List.of("section", "slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("greystar-location", new Operation( + "greystar-location", + "GET", + "/greystar/location", + List.of(), + List.of( + new QueryParam("state", true, "string", List.of()), + new QueryParam("city", false, "string", List.of()), + new QueryParam("neighborhood", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("greystar-locations", new Operation( + "greystar-locations", + "GET", + "/greystar/locations", + List.of(), + List.of( + new QueryParam("level", false, "string", List.of("state", "city", "neighborhood")), + new QueryParam("state", false, "string", List.of()), + new QueryParam("city", false, "string", 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("greystar-markets", new Operation( + "greystar-markets", + "GET", + "/greystar/markets", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("greystar-newsroom", new Operation( + "greystar-newsroom", + "GET", + "/greystar/newsroom", + List.of(), + List.of( + new QueryParam("query", false, "string", 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("greystar-newsroom-article", new Operation( + "greystar-newsroom-article", + "GET", + "/greystar/newsroom/{slug}", + List.of("slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("greystar-property", new Operation( + "greystar-property", + "GET", + "/greystar/properties/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("greystar-search", new Operation( + "greystar-search", + "GET", + "/greystar/search", + List.of(), + List.of( + new QueryParam("query", false, "string", List.of()), + new QueryParam("market_area", false, "string", List.of()), + new QueryParam("neighborhood", false, "string", List.of()), + new QueryParam("city", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("country_code", false, "string", List.of()), + new QueryParam("min_price", false, "number", List.of()), + new QueryParam("max_price", false, "number", List.of()), + new QueryParam("sort", false, "string", List.of("relevance", "name", "price_asc", "price_desc")), + 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("grubhub-availability", new Operation( "grubhub-availability", "GET", @@ -18526,6 +19512,9 @@ private static void putOperations20(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations22(Map m) { m.put("gucci-search", new Operation( "gucci-search", "GET", @@ -18678,9 +19667,6 @@ private static void putOperations20(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations21(Map m) { m.put("gymshark-collections", new Operation( "gymshark-collections", "GET", @@ -18863,6 +19849,251 @@ private static void putOperations21(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("healthgrades-autocomplete", new Operation( + "healthgrades-autocomplete", + "GET", + "/healthgrades/autocomplete", + List.of(), + List.of( + new QueryParam("term", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-facilities-filters", new Operation( + "healthgrades-facilities-filters", + "GET", + "/healthgrades/facilities/filters", + List.of(), + List.of( + new QueryParam("type", true, "string", List.of("hospital", "pharmacy", "group_practice", "urgent_care")), + new QueryParam("query", false, "string", List.of()), + new QueryParam("where", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-facilities-search", new Operation( + "healthgrades-facilities-search", + "GET", + "/healthgrades/facilities/search", + List.of(), + List.of( + new QueryParam("type", true, "string", List.of("hospital", "pharmacy", "group_practice", "urgent_care")), + new QueryParam("query", false, "string", List.of()), + new QueryParam("where", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("bestmatch", "distance", "patientsatisfaction")), + new QueryParam("distance", false, "string", List.of("0.5", "1", "5", "10", "25", "50", "100", "national")), + new QueryParam("rating", false, "string", List.of()), + new QueryParam("award", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("healthgrades-facility", new Operation( + "healthgrades-facility", + "GET", + "/healthgrades/facility", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-health-article", new Operation( + "healthgrades-health-article", + "GET", + "/healthgrades/health-article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-health-articles", new Operation( + "healthgrades-health-articles", + "GET", + "/healthgrades/health-articles", + List.of(), + List.of( + new QueryParam("topic", true, "string", 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("healthgrades-health-topics", new Operation( + "healthgrades-health-topics", + "GET", + "/healthgrades/health-topics", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-hospital", new Operation( + "healthgrades-hospital", + "GET", + "/healthgrades/hospital", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-hospital-awards", new Operation( + "healthgrades-hospital-awards", + "GET", + "/healthgrades/hospital-awards", + List.of(), + List.of( + new QueryParam("award", true, "string", List.of("americas-best-hospitals", "specialty-excellence-americas-best-care", "patient-safety-excellence-award", "outstanding-patient-experience-award", "ob-gyn-care-excellence-awards", "state-rankings")), + new QueryParam("year", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("city", false, "string", List.of()), + new QueryParam("list", false, "string", List.of("top50", "top100", "top250")), + new QueryParam("list_category", false, "string", List.of("top50", "top100")), + new QueryParam("specialty", false, "string", List.of("BAR", "CVO", "CWS", "PCI", "NSG", "CCU", "GIO", "GSO", "ORJ", "NSC", "ORT", "OJO", "OOR", "OBP", "PRS", "PUL", "ORS", "NEU", "OVSC", "VAS")), + new QueryParam("ob_gyn_type", false, "string", List.of("GYS", "LAB", "OBG")), + new QueryParam("sort", false, "string", List.of("name", "distance")), + new QueryParam("latitude", false, "number", List.of()), + new QueryParam("longitude", false, "number", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("healthgrades-hospital-award-filters", new Operation( + "healthgrades-hospital-award-filters", + "GET", + "/healthgrades/hospital-awards/filters", + List.of(), + List.of( + new QueryParam("award", true, "string", List.of("americas-best-hospitals", "specialty-excellence-americas-best-care", "patient-safety-excellence-award", "outstanding-patient-experience-award", "ob-gyn-care-excellence-awards", "state-rankings")), + new QueryParam("state", false, "string", List.of()), + new QueryParam("year", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-locations", new Operation( + "healthgrades-locations", + "GET", + "/healthgrades/locations", + List.of(), + List.of( + new QueryParam("term", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-physician", new Operation( + "healthgrades-physician", + "GET", + "/healthgrades/physician", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-physicians-filters", new Operation( + "healthgrades-physicians-filters", + "GET", + "/healthgrades/physicians/filters", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of()), + new QueryParam("where", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-physicians-search", new Operation( + "healthgrades-physicians-search", + "GET", + "/healthgrades/physicians/search", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of()), + new QueryParam("where", false, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("bestmatch", "distance", "ratings")), + new QueryParam("gender", false, "string", List.of("F", "M")), + new QueryParam("distance", false, "string", List.of("1", "5", "10", "25", "50", "100", "national")), + new QueryParam("age", false, "string", List.of("*-40", "41-50", "51-60", "61-70", "71-*")), + new QueryParam("availability", false, "string", List.of("today", "tomorrow", "nextTwoWeeks", "online", "acceptsNewPatients", "telehealth")), + new QueryParam("rating", false, "string", List.of("1", "2", "3", "4", "5")), + new QueryParam("insurance", false, "string", List.of()), + new QueryParam("insurance_plan", false, "string", List.of()), + new QueryParam("language", false, "string", List.of()), + new QueryParam("clinical_focus", false, "string", List.of()), + new QueryParam("affiliated_hospital", false, "string", List.of()), + new QueryParam("specialty", false, "string", List.of()), + new QueryParam("affirming_care", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("healthgrades-specialties", new Operation( + "healthgrades-specialties", + "GET", + "/healthgrades/specialties", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("healthgrades-top-searches", new Operation( + "healthgrades-top-searches", + "GET", + "/healthgrades/top-searches", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("hermes-categories", new Operation( "hermes-categories", "GET", @@ -19125,6 +20356,9 @@ private static void putOperations21(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations23(Map m) { m.put("hm-stores", new Operation( "hm-stores", "GET", @@ -19368,6 +20602,69 @@ private static void putOperations21(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("houston-chronicle-article", new Operation( + "houston-chronicle-article", + "GET", + "/houston-chronicle/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("houston-chronicle-author", new Operation( + "houston-chronicle-author", + "GET", + "/houston-chronicle/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("houston-chronicle-headlines", new Operation( + "houston-chronicle-headlines", + "GET", + "/houston-chronicle/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("houston-chronicle-news", new Operation( + "houston-chronicle-news", + "GET", + "/houston-chronicle/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("houston-chronicle-sections", new Operation( + "houston-chronicle-sections", + "GET", + "/houston-chronicle/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("howtogeek-news", new Operation( "howtogeek-news", "GET", @@ -19469,9 +20766,6 @@ private static void putOperations21(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations22(Map m) { m.put("ign-headlines", new Operation( "ign-headlines", "GET", @@ -19903,6 +21197,9 @@ private static void putOperations22(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations24(Map m) { m.put("imdb-title-filming-locations", new Operation( "imdb-title-filming-locations", "GET", @@ -20341,9 +21638,6 @@ private static void putOperations22(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations23(Map m) { m.put("indiatoday-news", new Operation( "indiatoday-news", "GET", @@ -20709,6 +22003,9 @@ private static void putOperations23(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations25(Map m) { m.put("investopedia-headlines", new Operation( "investopedia-headlines", "GET", @@ -20936,6 +22233,69 @@ private static void putOperations23(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("japantimes-article", new Operation( + "japantimes-article", + "GET", + "/japantimes/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("japantimes-author", new Operation( + "japantimes-author", + "GET", + "/japantimes/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("japantimes-headlines", new Operation( + "japantimes-headlines", + "GET", + "/japantimes/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("japantimes-news", new Operation( + "japantimes-news", + "GET", + "/japantimes/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("japantimes-sections", new Operation( + "japantimes-sections", + "GET", + "/japantimes/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("jcrew-categories", new Operation( "jcrew-categories", "GET", @@ -21130,9 +22490,6 @@ private static void putOperations23(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations24(Map m) { m.put("jimmy-johns-menu", new Operation( "jimmy-johns-menu", "GET", @@ -21483,6 +22840,9 @@ private static void putOperations24(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations26(Map m) { m.put("jobs-recruitee-offer", new Operation( "jobs-recruitee-offer", "GET", @@ -22050,9 +23410,6 @@ private static void putOperations24(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations25(Map m) { m.put("kalshi-event", new Operation( "kalshi-event", "GET", @@ -22397,6 +23754,9 @@ private static void putOperations25(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations27(Map m) { m.put("kfc-nearby", new Operation( "kfc-nearby", "GET", @@ -22927,9 +24287,6 @@ private static void putOperations25(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations26(Map m) { m.put("kyliecosmetics-products", new Operation( "kyliecosmetics-products", "GET", @@ -23236,6 +24593,9 @@ private static void putOperations26(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations28(Map m) { m.put("letterboxd-person", new Operation( "letterboxd-person", "GET", @@ -23730,9 +25090,6 @@ private static void putOperations26(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations27(Map m) { m.put("livescore-sports", new Operation( "livescore-sports", "GET", @@ -23933,6 +25290,122 @@ private static void putOperations27(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("makeuseof-article", new Operation( + "makeuseof-article", + "GET", + "/makeuseof/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("makeuseof-author", new Operation( + "makeuseof-author", + "GET", + "/makeuseof/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("makeuseof-headlines", new Operation( + "makeuseof-headlines", + "GET", + "/makeuseof/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("windows", "linux", "google-android", "apple", "technology-explained", "networking", "security", "productivity", "creative", "entertainment", "streaming", "smart-home", "home", "news"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("makeuseof-news", new Operation( + "makeuseof-news", + "GET", + "/makeuseof/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("makeuseof-sections", new Operation( + "makeuseof-sections", + "GET", + "/makeuseof/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("malaymail-article", new Operation( + "malaymail-article", + "GET", + "/malaymail/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("malaymail-headlines", new Operation( + "malaymail-headlines", + "GET", + "/malaymail/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("malaysia", "singapore", "money", "world", "life", "eat-drink", "showbiz", "opinion", "sports", "tech-gadgets", "what-you-think"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("malaymail-news", new Operation( + "malaymail-news", + "GET", + "/malaymail/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations29(Map m) { + m.put("malaymail-sections", new Operation( + "malaymail-sections", + "GET", + "/malaymail/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("manga-rankings", new Operation( "manga-rankings", "GET", @@ -24536,9 +26009,6 @@ private static void putOperations27(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations28(Map m) { m.put("metacritic-browse", new Operation( "metacritic-browse", "GET", @@ -24734,6 +26204,9 @@ private static void putOperations28(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations30(Map m) { m.put("metaculus-question-forecast-history", new Operation( "metaculus-question-forecast-history", "GET", @@ -25329,6 +26802,28 @@ private static void putOperations28(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("mlb-prospect-rankings", new Operation( + "mlb-prospect-rankings", + "GET", + "/mlb/prospect-rankings", + List.of(), + List.of( + new QueryParam("view", false, "string", List.of("top100", "team", "position", "draft", "international")), + new QueryParam("year", false, "integer", List.of("2026", "2025", "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2011", "2012")), + new QueryParam("team_slug", false, "string", List.of()), + new QueryParam("position", false, "string", List.of("1b", "2b", "ss", "3b", "c", "of", "rhp", "lhp")), + new QueryParam("team_filter", false, "string", List.of()), + new QueryParam("q", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("rank", "level", "eta", "age")), + 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-prospect-stats", new Operation( "mlb-prospect-stats", "GET", @@ -25395,6 +26890,483 @@ private static void putOperations28(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("mlb-statcast-abs-challenges", new Operation( + "mlb-statcast-abs-challenges", + "GET", + "/mlb/statcast-abs-challenges", + List.of(), + List.of( + new QueryParam("challenge_type", false, "string", List.of("batter", "batting-team", "catcher", "pitcher", "catching-team", "team-summary", "league")), + new QueryParam("seasons", false, "array", List.of("2025", "2026")), + new QueryParam("game_types", false, "array", List.of("R", "S", "F", "D", "L", "W")), + new QueryParam("data_mode", false, "string", List.of("for", "against")), + new QueryParam("data_count", false, "string", List.of("chal", "runs")), + new QueryParam("min_challenges", false, "string", List.of("0", "1", "2", "5", "10", "20")), + new QueryParam("min_opponent_challenges", false, "string", List.of("0", "1", "2", "5", "10", "20")), + new QueryParam("level", false, "string", List.of("mlb", "aaa")), + new QueryParam("leverage", false, "string", List.of("vlow", "low", "med", "high")), + new QueryParam("ball_strike", false, "string", List.of("in", "out")), + new QueryParam("breakeven", false, "string", List.of("low", "med", "high", "vhigh")), + new QueryParam("split_year", false, "string", List.of("0", "1")), + new QueryParam("splits", false, "array", List.of("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")), + new QueryParam("challenge_team_ids", false, "array", List.of("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")), + new QueryParam("opponent_team_ids", false, "array", List.of("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")), + new QueryParam("pitch_types", false, "array", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), + new QueryParam("shadow_zones", false, "array", List.of("11", "12", "13", "14", "16", "17", "18", "19"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-statcast-active-spin", new Operation( + "mlb-statcast-active-spin", + "GET", + "/mlb/statcast-active-spin", + List.of(), + List.of( + new QueryParam("year", false, "string", List.of("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")), + new QueryParam("min", false, "string", List.of("50", "100", "250", "500", "750", "1000", "1500", "2000", "2500", "3000")), + new QueryParam("hand", false, "string", List.of("R", "L")), + new QueryParam("sort", false, "string", List.of("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")), + 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-arm-angle", new Operation( + "mlb-statcast-arm-angle", + "GET", + "/mlb/statcast-arm-angle", + List.of(), + List.of( + new QueryParam("seasons", false, "array", List.of("2026", "2025", "2024", "2023", "2022", "2021", "2020")), + 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("game_types", false, "array", List.of("R", "F", "D", "L", "W")), + new QueryParam("pitch_types", false, "array", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), + new QueryParam("pitch_hand", false, "string", List.of("L", "R")), + new QueryParam("bat_side", false, "string", List.of("L", "R")), + new QueryParam("min", false, "string", List.of("q", "1", "5", "10", "25", "50", "100", "300", "500", "1000", "1500", "2000", "2500", "3000")), + new QueryParam("min_group_pitches", false, "string", List.of("1", "5", "10", "25", "50", "100", "300", "500", "1000", "1500", "2000")), + new QueryParam("group_by", false, "array", List.of("year", "api_game_date_month_text", "api_pitch_type_group03", "game_type", "bat_side", "fld_team_id")), + new QueryParam("date_start", false, "string", List.of()), + new QueryParam("date_end", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("name", "team_name", "pitch_hand", "n_pitches", "arm_angle", "release_ball_x", "relative_release_ball_x", "release_ball_z", "relative_shoulder_x", "shoulder_z")), + 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-arm-strength", new Operation( + "mlb-statcast-arm-strength", + "GET", + "/mlb/statcast-arm-strength", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("player", "team")), + new QueryParam("year", false, "string", List.of("2020", "2021", "2022", "2023", "2024", "2025", "2026", "9999")), + 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("position", false, "string", List.of("arm_inf", "arm_of", "arm_1b", "arm_2b", "arm_3b", "arm_ss", "arm_lf", "arm_cf", "arm_rf")), + new QueryParam("min_throws", false, "string", List.of("50", "100", "300", "500", "1000")), + new QueryParam("sort", false, "string", List.of("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")), + 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-arm-strength-player", new Operation( + "mlb-statcast-arm-strength-player", + "GET", + "/mlb/statcast-arm-strength-player", + List.of(), + List.of( + new QueryParam("player_id", true, "string", List.of()), + new QueryParam("year", false, "string", List.of("2020", "2021", "2022", "2023", "2024", "2025", "2026", "9999"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-statcast-arm-value", new Operation( + "mlb-statcast-arm-value", + "GET", + "/mlb/statcast-arm-value", + List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("type", false, "string", List.of("Run", "Fld", "Pit", "Batting Team", "Pitching Team", "League")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + new QueryParam("key_base_out", false, "string", List.of("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")), + new QueryParam("minimum_opps", false, "string", List.of("top", "1", "5", "10", "20", "30", "40", "50", "75", "100", "250", "500", "1000")), + new QueryParam("start_year", false, "integer", List.of()), + new QueryParam("end_year", false, "integer", List.of()), + new QueryParam("split", false, "string", List.of("no", "yes")), + 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", "split")), + new QueryParam("with_team_only", false, "string", List.of("1", "0")), + new QueryParam("sort", false, "string", List.of("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")), + 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-arm-value-details", new Operation( + "mlb-statcast-arm-value-details", + "GET", + "/mlb/statcast-arm-value-details", + List.of(), + List.of( + new QueryParam("entity_id", true, "string", List.of()), + new QueryParam("type", false, "string", List.of("Run", "Fld", "Pit")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + new QueryParam("key_base_out", false, "string", List.of("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")), + new QueryParam("minimum_opps", false, "string", List.of("top", "1", "5", "10", "20", "30", "40", "50", "75", "100", "250", "500", "1000")), + new QueryParam("start_year", false, "integer", List.of()), + new QueryParam("end_year", false, "integer", List.of()), + new QueryParam("split", false, "string", List.of("no", "yes")), + 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", "split")), + new QueryParam("with_team_only", false, "string", List.of("1", "0"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-statcast-baserunning", new Operation( + "mlb-statcast-baserunning", + "GET", + "/mlb/statcast-baserunning", + List.of(), + List.of( + new QueryParam("board", true, "string", List.of("baserunning-run-value", "basestealing-running-game", "baserunning")), + new QueryParam("type", false, "string", List.of("Run", "Bat", "Batting Team", "Pitching Team", "Fld", "Pit", "League")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + 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("no", "yes")), + new QueryParam("n", false, "string", List.of("q", "top", "1", "5", "10", "20", "30", "40", "50", "75", "100", "250", "500", "1000", "1500", "2000")), + new QueryParam("team", false, "string", List.of("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")), + new QueryParam("with_team_only", false, "boolean", List.of()), + 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("key_base_out", false, "string", List.of("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")), + new QueryParam("sort", false, "string", List.of("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")), + new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), + new QueryParam("search", 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("mlb-statcast-bat-tracking", new Operation( + "mlb-statcast-bat-tracking", + "GET", + "/mlb/statcast-bat-tracking", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("batter", "batting-team", "pitcher", "pitching-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", "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("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("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("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("group_by", false, "array", List.of("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")), + new QueryParam("sort", false, "string", List.of("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")), + 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-batted-ball", new Operation( + "mlb-statcast-batted-ball", + "GET", + "/mlb/statcast-batted-ball", + 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("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "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_game_date_month_text", "game_type", "api_pitch_type_group03", "bat_side", "pitch_hand")), + new QueryParam("min", 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("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("include_league_average", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("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")), + 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-birthday-index", new Operation( + "mlb-statcast-birthday-index", + "GET", + "/mlb/statcast-birthday-index", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("batter", "pitcher")), + new QueryParam("min_games", false, "string", List.of("1", "2", "3", "5", "8", "10")), + new QueryParam("date", false, "string", List.of()), + new QueryParam("show_inactives", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("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")), + 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-catcher-blocking", new Operation( + "mlb-statcast-catcher-blocking", + "GET", + "/mlb/statcast-catcher-blocking", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("Cat", "Pit", "Pitching Team", "League")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + new QueryParam("min", false, "string", List.of("q", "1", "50", "100", "250", "500", "1000", "2000", "3000", "4000", "5000")), + new QueryParam("start_year", false, "integer", List.of()), + new QueryParam("end_year", false, "integer", List.of()), + new QueryParam("split", false, "string", List.of("yes", "no")), + new QueryParam("team", false, "string", List.of()), + new QueryParam("with_team_only", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("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")), + 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-catcher-blocking-details", new Operation( + "mlb-statcast-catcher-blocking-details", + "GET", + "/mlb/statcast-catcher-blocking-details", + List.of(), + List.of( + new QueryParam("entity_id", true, "string", List.of()), + new QueryParam("type", false, "string", List.of("Cat", "Pit", "Pitching Team")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + new QueryParam("start_year", false, "integer", List.of()), + new QueryParam("end_year", false, "integer", List.of()), + new QueryParam("split", false, "string", List.of("yes", "no")), + new QueryParam("team", false, "string", List.of()), + 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-catcher-framing", new Operation( + "mlb-statcast-catcher-framing", + "GET", + "/mlb/statcast-catcher-framing", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("catcher", "catching-team", "batter", "batting-team", "pitcher", "league")), + new QueryParam("game_type", false, "string", List.of("Any", "Playoff", "Regular")), + 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("min_pitches", false, "string", List.of("q", "100", "250", "500", "750", "1000", "1250", "1500")), + new QueryParam("min_results", false, "integer", List.of("1", "25", "50", "100", "250", "500", "750", "1000", "1250", "1500")), + new QueryParam("season_start", false, "integer", List.of("2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "integer", List.of("2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + 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("pitch_hand", false, "string", List.of("L", "R")), + new QueryParam("pitch_type", false, "string", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), + new QueryParam("ball_strike", false, "string", List.of("in", "out")), + new QueryParam("call", false, "string", List.of("original", "final")), + new QueryParam("sort", false, "string", List.of("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")), + 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-catcher-framing-details", new Operation( + "mlb-statcast-catcher-framing-details", + "GET", + "/mlb/statcast-catcher-framing-details", + List.of(), + List.of( + new QueryParam("entity_id", true, "string", List.of()), + new QueryParam("type", false, "string", List.of("catcher", "catching-team", "batter", "batting-team", "pitcher")), + new QueryParam("game_type", false, "string", List.of("Any", "Playoff", "Regular")), + 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("min_pitches", false, "string", List.of("q", "100", "250", "500", "750", "1000", "1250", "1500")), + new QueryParam("min_results", false, "integer", List.of("1", "25", "50", "100", "250", "500", "750", "1000", "1250", "1500")), + new QueryParam("season_start", false, "integer", List.of("2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "integer", List.of("2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + 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("pitch_hand", false, "string", List.of("L", "R")), + new QueryParam("pitch_type", false, "string", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), + new QueryParam("ball_strike", false, "string", List.of("in", "out")), + new QueryParam("call", false, "string", List.of("original", "final")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + } + + private static void putOperations31(Map m) { + m.put("mlb-statcast-catcher-pop-time", new Operation( + "mlb-statcast-catcher-pop-time", + "GET", + "/mlb/statcast-catcher-pop-time", + List.of(), + List.of( + new QueryParam("year", false, "string", List.of("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + 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", "111", "113", "115", "118", "116", "142", "145", "147")), + new QueryParam("min2b", false, "string", List.of("1", "5", "10", "15", "20")), + new QueryParam("min3b", false, "string", List.of("0", "1", "5", "10", "15", "20")), + new QueryParam("sort", false, "string", List.of("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")), + 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-catcher-stance", new Operation( + "mlb-statcast-catcher-stance", + "GET", + "/mlb/statcast-catcher-stance", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("catcher", "catching-team", "batter", "batting-team", "pitcher", "league")), + new QueryParam("season_start", false, "string", List.of("2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "string", List.of("2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("game_type", false, "string", List.of("Any", "Playoff", "Regular")), + new QueryParam("min_pitches", false, "string", List.of("q", "100", "250", "500", "750", "1000", "2500", "5000", "7500", "10000", "15000", "20000")), + new QueryParam("min_results", false, "string", List.of("1", "25", "50", "100", "250", "500", "750", "1000", "2500", "5000", "7500", "10000", "15000", "20000")), + 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("pitch_hand", false, "string", List.of("L", "R")), + new QueryParam("knee_code", false, "string", List.of("9999", "4", "1", "2", "3")), + 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", "140", "139", "111", "113", "115", "118", "116", "142", "145", "147")), + new QueryParam("pitch_types", false, "array", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), + new QueryParam("group_by", false, "array", List.of("none", "year", "api_game_date_month_text", "game_type", "knee_code_overview", "pitch_hand", "bat_side", "api_pitch_type_group03", "knee_code")), + new QueryParam("sort", false, "string", List.of("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")), + 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-catcher-throwing", new Operation( + "mlb-statcast-catcher-throwing", + "GET", + "/mlb/statcast-catcher-throwing", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("Cat", "Pitching Team", "League")), + new QueryParam("season_start", false, "string", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "string", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + new QueryParam("minimum", false, "string", List.of("q", "1", "5", "10", "20", "30", "40", "50", "75", "100")), + new QueryParam("target_base", false, "string", List.of("2B", "3B", "All")), + new QueryParam("split", false, "string", List.of("yes", "no")), + new QueryParam("team", false, "string", List.of("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")), + new QueryParam("with_team_only", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("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")), + 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-catcher-throwing-details", new Operation( + "mlb-statcast-catcher-throwing-details", + "GET", + "/mlb/statcast-catcher-throwing-details", + List.of(), + List.of( + new QueryParam("entity_id", true, "integer", List.of()), + new QueryParam("year", false, "integer", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + new QueryParam("minimum", false, "string", List.of("q", "1", "5", "10", "20", "30", "40", "50", "75", "100")), + new QueryParam("target_base", false, "string", List.of("2B", "3B", "All")), + 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", "111", "113", "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-expected", new Operation( "mlb-statcast-expected", "GET", @@ -25417,6 +27389,139 @@ private static void putOperations28(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("mlb-statcast-fielding-run-value", new Operation( + "mlb-statcast-fielding-run-value", + "GET", + "/mlb/statcast-fielding-run-value", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("fielder", "fielding-team", "batter", "batting-team", "pitcher")), + new QueryParam("season_start", false, "string", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "string", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("game_type", false, "string", List.of("Any", "Regular", "Playoff")), + new QueryParam("minimum", false, "string", List.of("q", "0.1", "1", "10", "25", "50", "100", "200", "500", "750", "1000", "2500", "5000")), + new QueryParam("minimum_split", false, "string", List.of("0.1", "1", "10", "25", "50", "100", "200", "500", "750", "1000", "2500", "5000")), + new QueryParam("position", false, "string", List.of("0", "11", "12", "111", "112", "121", "13", "2", "3", "4", "5", "6", "7", "8", "9")), + new QueryParam("team_id", 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("group_by", false, "array", List.of("year", "api_game_date_month_text", "position", "game_type")), + new QueryParam("date_start", false, "string", List.of()), + new QueryParam("date_end", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("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")), + 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-first-base-receiving", new Operation( + "mlb-statcast-first-base-receiving", + "GET", + "/mlb/statcast-first-base-receiving", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("fielder_3", "throw_fielder_id", "pitching-team", "batting-team", "league")), + new QueryParam("season[]", false, "array", List.of("2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("gameType[]", false, "array", List.of("R", "F", "D", "L", "W")), + new QueryParam("min", false, "string", List.of("q", "1", "5", "10", "25", "50", "75", "100", "200", "300", "400", "500", "750", "1000")), + new QueryParam("minSplit", false, "string", List.of("1", "5", "10", "25", "50", "75", "100", "200", "300", "400", "500", "750", "1000")), + new QueryParam("splitYear", false, "string", List.of("0", "1")), + new QueryParam("split[]", false, "array", List.of("throw_height_code", "throw_location_code_full", "runners_on_cd")), + new QueryParam("team[]", false, "array", List.of("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")), + new QueryParam("dateStart", false, "string", List.of()), + new QueryParam("dateEnd", false, "string", List.of()), + new QueryParam("fielder_3_hand", false, "string", List.of("L", "R")), + new QueryParam("min_height_in_inches", false, "string", List.of("70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80")), + new QueryParam("is_hit_into_play_field_out", false, "string", List.of("0", "1")), + new QueryParam("runners_on_cd[]", false, "array", List.of("0", "1", "2", "3", "4", "5", "6", "7")), + new QueryParam("throw_pos_id[]", false, "array", List.of("4", "5", "6")), + new QueryParam("throw_height_code[]", false, "array", List.of("1_Low", "2_Mid", "3_High")), + new QueryParam("throw_location_code_full[]", false, "array", List.of("A. On Target", "B. Scoop", "C. Bounce", "D. Low", "E. Wide", "F. High")), + new QueryParam("bin_time_X10[]", false, "array", List.of("-1", "0", "1", "2", "3", "4", "5")), + new QueryParam("sortColumn", false, "string", List.of("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")), + new QueryParam("sortDirection", 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-first-base-receiving-details", new Operation( + "mlb-statcast-first-base-receiving-details", + "GET", + "/mlb/statcast-first-base-receiving-details", + List.of(), + List.of( + new QueryParam("player_id", true, "integer", List.of()), + new QueryParam("type", false, "string", List.of("fielder_3", "throw_fielder_id", "pitching-team", "batting-team", "league")), + new QueryParam("season[]", false, "array", List.of("2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("gameType[]", false, "array", List.of("R", "F", "D", "L", "W")), + new QueryParam("min", false, "string", List.of("q", "1", "5", "10", "25", "50", "75", "100", "200", "300", "400", "500", "750", "1000")), + new QueryParam("minSplit", false, "string", List.of("1", "5", "10", "25", "50", "75", "100", "200", "300", "400", "500", "750", "1000")), + new QueryParam("split[]", false, "array", List.of("throw_height_code", "throw_location_code_full", "runners_on_cd")), + new QueryParam("splitYear", false, "string", List.of("0", "1")), + new QueryParam("team[]", false, "array", List.of("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")), + new QueryParam("dateStart", false, "string", List.of()), + new QueryParam("dateEnd", false, "string", List.of()), + new QueryParam("fielder_3_hand", false, "string", List.of("L", "R")), + new QueryParam("min_height_in_inches", false, "string", List.of("70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80")), + new QueryParam("is_hit_into_play_field_out", false, "string", List.of("0", "1")), + new QueryParam("runners_on_cd[]", false, "array", List.of("0", "1", "2", "3", "4", "5", "6", "7")), + new QueryParam("throw_pos_id[]", false, "array", List.of("4", "5", "6")), + new QueryParam("throw_height_code[]", false, "array", List.of("1_Low", "2_Mid", "3_High")), + new QueryParam("throw_location_code_full[]", false, "array", List.of("A. On Target", "B. Scoop", "C. Bounce", "D. Low", "E. Wide", "F. High")), + new QueryParam("bin_time_X10[]", false, "array", List.of("-1", "0", "1", "2", "3", "4", "5")), + 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-home-runs", new Operation( + "mlb-statcast-home-runs", + "GET", + "/mlb/statcast-home-runs", + List.of(), + List.of( + new QueryParam("player_type", false, "string", List.of("Batter", "Pitcher")), + new QueryParam("year", false, "string", List.of("2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("team", 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("min", false, "string", List.of("0", "5", "10", "15", "20", "25")), + new QueryParam("cat", false, "string", List.of("adj_xhr", "xhr")), + new QueryParam("sort", false, "string", List.of("player", "team", "year", "cat", "avg_hr_trot", "doubters", "mostly_gone", "no_doubters", "no_doubter_per", "hr_total", "xhr", "xhr_diff")), + 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-home-runs-details", new Operation( + "mlb-statcast-home-runs-details", + "GET", + "/mlb/statcast-home-runs-details", + List.of(), + List.of( + new QueryParam("player_id", true, "string", List.of()), + new QueryParam("player_type", false, "string", List.of("Batter", "Pitcher")), + new QueryParam("year", false, "string", List.of("2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("cat", false, "string", List.of("adj_xhr", "xhr")), + 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", new Operation( "mlb-statcast", "GET", @@ -25438,9 +27543,6 @@ private static void putOperations28(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations29(Map m) { m.put("mlb-statcast-oaa", new Operation( "mlb-statcast-oaa", "GET", @@ -25466,6 +27568,477 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("mlb-statcast-park-factors", new Operation( + "mlb-statcast-park-factors", + "GET", + "/mlb/statcast-park-factors", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("year", "venue", "distance", "distance-all", "raw", "dimensions")), + new QueryParam("year", false, "string", List.of()), + new QueryParam("bat_side", false, "string", List.of("R", "L")), + new QueryParam("condition", false, "string", List.of("All", "Day", "Night", "Roof Closed", "Open Air")), + new QueryParam("rolling", false, "string", List.of("1", "2", "3")), + new QueryParam("stat", false, "string", List.of("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")), + new QueryParam("parks", false, "string", List.of("mlb", "all")), + 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-statcast-percentile", new Operation( + "mlb-statcast-percentile", + "GET", + "/mlb/statcast-percentile", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("batter", "pitcher")), + new QueryParam("year", false, "string", List.of("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("team", 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("pctl", false, "array", List.of()), + 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-statcast-pitch-arsenal", new Operation( + "mlb-statcast-pitch-arsenal", + "GET", + "/mlb/statcast-pitch-arsenal", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("pitcher", "batter")), + new QueryParam("year", false, "string", List.of("2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("team_id", false, "string", List.of()), + new QueryParam("pitch_type", false, "string", List.of("FF", "CH", "CU", "FC", "KN", "SC", "SI", "SL", "SV", "FS", "ST", "CUKC", "SIFT")), + new QueryParam("min_pa", false, "string", List.of("1", "10", "25", "50", "100", "150", "200", "250", "350", "450", "500", "600")), + new QueryParam("min_pitches", false, "string", List.of("q", "1", "10", "50", "100", "200", "300", "500", "750")), + new QueryParam("sort", false, "string", List.of("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")), + 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-pitch-arsenal-details", new Operation( + "mlb-statcast-pitch-arsenal-details", + "GET", + "/mlb/statcast-pitch-arsenal-details", + List.of(), + List.of( + new QueryParam("player_id", true, "string", List.of()), + new QueryParam("player_type", false, "string", List.of("pitcher", "batter")), + new QueryParam("pitch_type", true, "string", List.of("FF", "CH", "CU", "FC", "KN", "SC", "SI", "SL", "SV", "FS", "ST", "CUKC", "SIFT")), + new QueryParam("year", false, "string", List.of("2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + 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-pitch-arsenals", new Operation( + "mlb-statcast-pitch-arsenals", + "GET", + "/mlb/statcast-pitch-arsenals", + List.of(), + List.of( + new QueryParam("year", false, "string", List.of("2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("type", false, "string", List.of("avg_speed", "n_", "avg_spin")), + new QueryParam("hand", false, "string", List.of("R", "L")), + new QueryParam("min_pitches", false, "string", List.of("q", "100", "250", "500", "750", "1000", "1500", "2000", "2500", "3000")), + new QueryParam("team", false, "string", List.of("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")), + new QueryParam("sort", false, "string", List.of("player_name", "four_seam", "sinker", "cutter", "slider", "changeup", "curve", "splitter", "sweeper", "slurve")), + 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-pitch-movement", new Operation( + "mlb-statcast-pitch-movement", + "GET", + "/mlb/statcast-pitch-movement", + List.of(), + List.of( + new QueryParam("year", false, "string", List.of("2026", "2025", "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017")), + new QueryParam("pitch_type", false, "string", List.of("FF", "CH", "CU", "FC", "FO", "KN", "SC", "SI", "SL", "SV", "FS", "ST", "ALL")), + new QueryParam("hand", false, "string", List.of("R", "L")), + new QueryParam("min", false, "string", List.of("q", "50", "100", "250", "500", "750", "1000", "1500", "2000", "2500", "3000")), + new QueryParam("sort", false, "string", List.of("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")), + 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-pitch-tempo", new Operation( + "mlb-statcast-pitch-tempo", + "GET", + "/mlb/statcast-pitch-tempo", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("Pit", "Bat", "Pitching Team", "Batting Team", "League")), + new QueryParam("season_start", false, "string", List.of("2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "string", List.of("2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + new QueryParam("n", false, "string", List.of("q", "1", "10", "50", "100", "250", "500", "1000", "2000", "5000")), + new QueryParam("team", 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("split", false, "string", List.of("yes", "no")), + new QueryParam("with_team_only", false, "string", List.of("0", "1")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("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")), + 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-pitch-tempo-player", new Operation( + "mlb-statcast-pitch-tempo-player", + "GET", + "/mlb/statcast-pitch-tempo-player", + List.of(), + List.of( + new QueryParam("entity_id", true, "string", List.of()), + new QueryParam("type", false, "string", List.of("Pit", "Bat")), + new QueryParam("season_start", false, "string", List.of("2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "string", List.of("2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-statcast-pitch-timer", new Operation( + "mlb-statcast-pitch-timer", + "GET", + "/mlb/statcast-pitch-timer", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("Pit", "Bat", "Cat", "Team", "Opp")), + new QueryParam("season", false, "string", List.of("2023", "2024", "2025", "2026")), + new QueryParam("min_pitches", false, "string", List.of("1", "5", "25", "50", "100", "250", "500", "1000")), + new QueryParam("include_zeroes", false, "string", List.of("0", "1")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("chart_sort", false, "string", List.of("violating", "violated", "net", "ballsAgainst", "ballsFor", "strikesAgainst", "strikesFor", "division")), + new QueryParam("sort", false, "string", List.of("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")), + 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-player-details", new Operation( + "mlb-statcast-player-details", + "GET", + "/mlb/statcast-player-details", + List.of(), + List.of( + new QueryParam("player_id", true, "string", List.of()), + new QueryParam("player_type", false, "string", List.of("batter", "pitcher")), + new QueryParam("year", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-statcast-rolling", new Operation( + "mlb-statcast-rolling", + "GET", + "/mlb/statcast-rolling", + List.of(), + List.of( + new QueryParam("metric", false, "string", List.of("xwoba", "woba", "ba", "xba", "slg", "xslg")), + new QueryParam("role", false, "string", List.of("Batter", "Pitcher")), + new QueryParam("window_pa", false, "string", List.of("50", "100", "250")), + 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-run-value", new Operation( + "mlb-statcast-run-value", + "GET", + "/mlb/statcast-run-value", + List.of(), + List.of( + new QueryParam("group", false, "string", List.of("Batter", "Pitcher")), + new QueryParam("year", false, "string", List.of("All", "Career", "2026", "2025", "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008")), + new QueryParam("team", false, "string", List.of()), + new QueryParam("min", false, "string", List.of("q", "10", "25", "50", "75", "100", "150", "200", "250", "500", "600", "700", "800", "900", "1000", "1500")), + new QueryParam("leverage", false, "string", List.of("Neutral", "Leveraged")), + new QueryParam("type", false, "string", List.of("All", "Swing-Take", "Pitch Type", "Attack Region", "Bat-side")), + new QueryParam("sub_type", false, "string", List.of("Swing", "Take", "4-Seam Fastball", "Changeup", "Curveball", "Cutter", "Knuckleball", "Screwball", "Sinker", "Slider", "Slurve", "Split-Finger", "Sweeper", "Heart", "Shadow", "Chase", "Waste")), + new QueryParam("sort", false, "string", List.of("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")), + 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-running-game", new Operation( + "mlb-statcast-running-game", + "GET", + "/mlb/statcast-running-game", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("Pit", "Pitching Team", "League")), + 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("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")), + new QueryParam("with_team_only", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("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")), + new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), + new QueryParam("search", 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("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", @@ -25840,6 +28413,9 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations32(Map m) { m.put("motleyfool-author", new Operation( "motleyfool-author", "GET", @@ -25954,6 +28530,70 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("national-article", new Operation( + "national-article", + "GET", + "/national/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("national-author", new Operation( + "national-author", + "GET", + "/national/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("national-headlines", new Operation( + "national-headlines", + "GET", + "/national/headlines", + 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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("national-news", new Operation( + "national-news", + "GET", + "/national/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("national-sections", new Operation( + "national-sections", + "GET", + "/national/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("nationalpost-article", new Operation( "nationalpost-article", "GET", @@ -26100,12 +28740,13 @@ private static void putOperations29(Map m) { "/ndtv/author", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("url", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - false, + true, List.of())); m.put("ndtv-headlines", new Operation( "ndtv-headlines", @@ -26120,6 +28761,45 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("ndtv-latest-videos", new Operation( + "ndtv-latest-videos", + "GET", + "/ndtv/latest-videos", + List.of(), + List.of( + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("ndtv-live-blog", new Operation( + "ndtv-live-blog", + "GET", + "/ndtv/live-blog", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ndtv-live-blogs", new Operation( + "ndtv-live-blogs", + "GET", + "/ndtv/live-blogs", + List.of(), + List.of( + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); m.put("ndtv-news", new Operation( "ndtv-news", "GET", @@ -26158,6 +28838,45 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("ndtv-video", new Operation( + "ndtv-video", + "GET", + "/ndtv/video", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ndtv-video-categories", new Operation( + "ndtv-video-categories", + "GET", + "/ndtv/video-categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ndtv-videos", new Operation( + "ndtv-videos", + "GET", + "/ndtv/videos", + List.of(), + List.of( + new QueryParam("category", true, "string", List.of("news", "business", "entertainment", "auto", "exclusive", "features", "environment", "fashion", "travel", "elections", "comedy", "property", "art", "beauty", "lifestyle", "tech360")), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); m.put("news18-article", new Operation( "news18-article", "GET", @@ -26247,9 +28966,6 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations30(Map m) { m.put("news24-news", new Operation( "news24-news", "GET", @@ -26465,6 +29181,9 @@ private static void putOperations30(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations33(Map m) { m.put("newyorker-article", new Operation( "newyorker-article", "GET", @@ -26652,6 +29371,69 @@ private static void putOperations30(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("ninetofivegoogle-article", new Operation( + "ninetofivegoogle-article", + "GET", + "/ninetofivegoogle/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ninetofivegoogle-author", new Operation( + "ninetofivegoogle-author", + "GET", + "/ninetofivegoogle/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ninetofivegoogle-headlines", new Operation( + "ninetofivegoogle-headlines", + "GET", + "/ninetofivegoogle/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ninetofivegoogle-news", new Operation( + "ninetofivegoogle-news", + "GET", + "/ninetofivegoogle/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ninetofivegoogle-sections", new Operation( + "ninetofivegoogle-sections", + "GET", + "/ninetofivegoogle/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("ninetofivemac-article", new Operation( "ninetofivemac-article", "GET", @@ -27023,9 +29805,6 @@ private static void putOperations30(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations31(Map m) { m.put("nypost-article", new Operation( "nypost-article", "GET", @@ -27178,6 +29957,9 @@ private static void putOperations31(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations34(Map m) { m.put("nzherald-headlines", new Operation( "nzherald-headlines", "GET", @@ -27839,9 +30621,6 @@ private static void putOperations31(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations32(Map m) { m.put("opensea-profile", new Operation( "opensea-profile", "GET", @@ -28014,6 +30793,9 @@ private static void putOperations32(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations35(Map m) { m.put("opentable-search", new Operation( "opentable-search", "GET", @@ -28686,9 +31468,6 @@ private static void putOperations32(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations33(Map m) { m.put("papajohns-poland-menu", new Operation( "papajohns-poland-menu", "GET", @@ -28846,6 +31625,9 @@ private static void putOperations33(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations36(Map m) { m.put("pcmag-article", new Operation( "pcmag-article", "GET", @@ -29165,6 +31947,56 @@ private static void putOperations33(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("physorg-article", new Operation( + "physorg-article", + "GET", + "/physorg/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("physorg-headlines", new Operation( + "physorg-headlines", + "GET", + "/physorg/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("nanotech-news", "physics-news", "space-news", "earth-news", "chemistry-news", "biology-news", "science-news", "breaking", "editorials"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("physorg-news", new Operation( + "physorg-news", + "GET", + "/physorg/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("physorg-sections", new Operation( + "physorg-sections", + "GET", + "/physorg/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("ping", new Operation( "ping", "GET", @@ -29494,9 +32326,6 @@ private static void putOperations33(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations34(Map m) { m.put("playstation-concept-reviews", new Operation( "playstation-concept-reviews", "GET", @@ -29620,6 +32449,9 @@ private static void putOperations34(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations37(Map m) { m.put("politico-author", new Operation( "politico-author", "GET", @@ -30349,9 +33181,6 @@ private static void putOperations34(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations35(Map m) { m.put("polymarket-related-tags-by-slug", new Operation( "polymarket-related-tags-by-slug", "GET", @@ -30477,6 +33306,9 @@ private static void putOperations35(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations38(Map m) { m.put("polymarket-team", new Operation( "polymarket-team", "GET", @@ -31187,9 +34019,6 @@ private static void putOperations35(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations36(Map m) { m.put("pristine-marketplace-store", new Operation( "pristine-marketplace-store", "GET", @@ -31308,6 +34137,9 @@ private static void putOperations36(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations39(Map m) { m.put("producthunt-launches", new Operation( "producthunt-launches", "GET", @@ -31995,9 +34827,6 @@ private static void putOperations36(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations37(Map m) { m.put("quince-suggest", new Operation( "quince-suggest", "GET", @@ -32104,6 +34933,9 @@ private static void putOperations37(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations40(Map m) { m.put("rappler-author", new Operation( "rappler-author", "GET", @@ -32798,6 +35630,184 @@ private static void putOperations37(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("retailmenot-autocomplete", new Operation( + "retailmenot-autocomplete", + "GET", + "/retailmenot/autocomplete", + List.of(), + List.of( + new QueryParam("term", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("retailmenot-blog-categories", new Operation( + "retailmenot-blog-categories", + "GET", + "/retailmenot/blog-categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("retailmenot-blog-post", new Operation( + "retailmenot-blog-post", + "GET", + "/retailmenot/blog-post", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("retailmenot-blog-posts", new Operation( + "retailmenot-blog-posts", + "GET", + "/retailmenot/blog-posts", + List.of(), + List.of( + new QueryParam("query", false, "string", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("tag", false, "string", List.of()), + new QueryParam("order_by", false, "string", List.of("date", "modified", "title", "relevance")), + new QueryParam("order", false, "string", List.of("desc", "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("retailmenot-blog-tags", new Operation( + "retailmenot-blog-tags", + "GET", + "/retailmenot/blog-tags", + List.of(), + List.of( + new QueryParam("query", false, "string", 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("retailmenot-cashback", new Operation( + "retailmenot-cashback", + "GET", + "/retailmenot/cashback", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("retailmenot-categories", new Operation( + "retailmenot-categories", + "GET", + "/retailmenot/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("retailmenot-category", new Operation( + "retailmenot-category", + "GET", + "/retailmenot/category", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("retailmenot-deal-event", new Operation( + "retailmenot-deal-event", + "GET", + "/retailmenot/deal-event", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("retailmenot-deal-events", new Operation( + "retailmenot-deal-events", + "GET", + "/retailmenot/deal-events", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("retailmenot-home", new Operation( + "retailmenot-home", + "GET", + "/retailmenot/home", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations41(Map m) { + m.put("retailmenot-store", new Operation( + "retailmenot-store", + "GET", + "/retailmenot/store", + List.of(), + List.of( + new QueryParam("domain", true, "string", List.of()), + new QueryParam("market", false, "string", List.of("us", "ca"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("retailmenot-stores", new Operation( + "retailmenot-stores", + "GET", + "/retailmenot/stores", + List.of(), + List.of( + new QueryParam("letter", true, "string", List.of("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", "0-9")), + new QueryParam("market", false, "string", List.of("us", "ca"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("reuters-article", new Operation( "reuters-article", "GET", @@ -32837,9 +35847,6 @@ private static void putOperations37(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations38(Map m) { m.put("reuters-news", new Operation( "reuters-news", "GET", @@ -33646,6 +36653,9 @@ private static void putOperations38(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations42(Map m) { m.put("rottentomatoes-sitemaps", new Operation( "rottentomatoes-sitemaps", "GET", @@ -33714,9 +36724,6 @@ private static void putOperations38(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations39(Map m) { m.put("rte-article", new Operation( "rte-article", "GET", @@ -34446,6 +37453,9 @@ private static void putOperations39(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations43(Map m) { m.put("sec-financials", new Operation( "sec-financials", "GET", @@ -34526,9 +37536,6 @@ private static void putOperations39(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations40(Map m) { m.put("sephora-brands", new Operation( "sephora-brands", "GET", @@ -35314,6 +38321,9 @@ private static void putOperations40(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations44(Map m) { m.put("shopify-sitemap-urls", new Operation( "shopify-sitemap-urls", "GET", @@ -35380,9 +38390,6 @@ private static void putOperations40(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations41(Map m) { m.put("skims-collections", new Operation( "skims-collections", "GET", @@ -36102,6 +39109,9 @@ private static void putOperations41(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations45(Map m) { m.put("sofascore-round-events", new Operation( "sofascore-round-events", "GET", @@ -36173,9 +39183,6 @@ private static void putOperations41(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations42(Map m) { m.put("sofascore-team-players", new Operation( "sofascore-team-players", "GET", @@ -36647,6 +39654,61 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("sportskeeda-college-basketball-schedule", new Operation( + "sportskeeda-college-basketball-schedule", + "GET", + "/sportskeeda/college-basketball-schedule", + List.of(), + List.of( + new QueryParam("date", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-college-basketball-schedule-options", new Operation( + "sportskeeda-college-basketball-schedule-options", + "GET", + "/sportskeeda/college-basketball-schedule-options", + List.of(), + List.of( + new QueryParam("season", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-cricket-commentary", new Operation( + "sportskeeda-cricket-commentary", + "GET", + "/sportskeeda/cricket-commentary", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("cursor", false, "string", List.of()), + new QueryParam("language", false, "string", List.of("en", "hi", "ta", "te", "bho"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("cursor"))); + m.put("sportskeeda-cricket-match", new Operation( + "sportskeeda-cricket-match", + "GET", + "/sportskeeda/cricket-match", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("sportskeeda-depth-chart", new Operation( "sportskeeda-depth-chart", "GET", @@ -36660,6 +39722,67 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("sportskeeda-draft-picks", new Operation( + "sportskeeda-draft-picks", + "GET", + "/sportskeeda/draft-picks", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("year", false, "integer", List.of()), + new QueryParam("round", false, "string", List.of()), + new QueryParam("position", false, "string", List.of()), + new QueryParam("q", false, "string", 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("sportskeeda-draft-picks-options", new Operation( + "sportskeeda-draft-picks-options", + "GET", + "/sportskeeda/draft-picks-options", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-event-calendar", new Operation( + "sportskeeda-event-calendar", + "GET", + "/sportskeeda/event-calendar", + List.of(), + List.of( + new QueryParam("region", false, "string", List.of("us", "india")), + new QueryParam("sport", false, "string", List.of("NFL", "Football", "MLB", "College Football", "NBA", "College Basketball", "NHL", "WNBA", "Golf", "Tennis", "NASCAR", "WWE", "Boxing", "UFC", "MMA", "Formula 1", "College Baseball", "IndyCar", "AEW", "MotoGP", "Wrestling", "Cricket", "Table Tennis", "Chess", "Kabaddi", "Hockey", "Badminton", "Athletics")), + new QueryParam("month", false, "array", List.of("2026-09", "2026-10", "2026-11", "2026-12")), + new QueryParam("start_date", false, "string", List.of()), + new QueryParam("end_date", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-event-calendar-options", new Operation( + "sportskeeda-event-calendar-options", + "GET", + "/sportskeeda/event-calendar-options", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("sportskeeda-feed", new Operation( "sportskeeda-feed", "GET", @@ -36701,6 +39824,60 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("sportskeeda-guessing-game", new Operation( + "sportskeeda-guessing-game", + "GET", + "/sportskeeda/guessing-game", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of("wwe/brainbuster-wwe-player-guessing-game", "nfl/gridle-nfl-player-guessing-game")), + new QueryParam("date", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-guessing-game-entities", new Operation( + "sportskeeda-guessing-game-entities", + "GET", + "/sportskeeda/guessing-game-entities", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of("wwe/brainbuster-wwe-player-guessing-game", "nfl/gridle-nfl-player-guessing-game"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-guessing-games", new Operation( + "sportskeeda-guessing-games", + "GET", + "/sportskeeda/guessing-games", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-nba-queries", new Operation( + "sportskeeda-nba-queries", + "GET", + "/sportskeeda/nba-queries", + List.of(), + List.of( + new QueryParam("category", false, "string", List.of("player-stat", "player-vs-team")), + 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("sportskeeda-news", new Operation( "sportskeeda-news", "GET", @@ -36721,7 +39898,8 @@ private static void putOperations42(Map m) { List.of( new QueryParam("slug", true, "string", List.of()), new QueryParam("season", false, "integer", List.of()), - new QueryParam("type", false, "string", List.of())), + new QueryParam("type", false, "string", List.of()), + new QueryParam("conference", false, "string", List.of("all-conferences", "all-fbs-i-a", "atlantic-coast", "big-ten", "mid-american", "pac-12", "southeastern", "independents-fbs", "big-12", "conference-usa", "mountain-west", "sun-belt", "aac", "all-fcs-i-aa", "big-sky", "missouri-valley", "ivy-league", "mid-eastern-athletic", "ohio-valley", "patriot-league", "pioneer-league", "southern", "southland", "swac", "northeast", "independents-fcs", "big-south", "caa", "united-athletic"))), List.of(), null, false, @@ -36755,6 +39933,9 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations46(Map m) { m.put("sportskeeda-profile", new Operation( "sportskeeda-profile", "GET", @@ -36768,6 +39949,60 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("sportskeeda-quiz", new Operation( + "sportskeeda-quiz", + "GET", + "/sportskeeda/quiz", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-quiz-categories", new Operation( + "sportskeeda-quiz-categories", + "GET", + "/sportskeeda/quiz-categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-quizzes", new Operation( + "sportskeeda-quizzes", + "GET", + "/sportskeeda/quizzes", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of("anime/quiz", "cricket/quiz", "daily-soaps/quiz", "esports/quiz", "fortnite/quiz", "minecraft/quiz", "movies/quiz", "pokemon/quiz", "shows/quiz", "tennis/quiz", "wwe/quiz"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-salary-cap", new Operation( + "sportskeeda-salary-cap", + "GET", + "/sportskeeda/salary-cap", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("q", false, "string", List.of()), + new QueryParam("sort_by", false, "string", List.of("player", "cap_number", "cut_pre_june_1_dead_money", "cut_pre_june_1_cap_saving", "cut_post_june_1_dead_money", "cut_post_june_1_cap_saving", "trade_pre_june_1_dead_money", "trade_pre_june_1_cap_saving", "trade_post_june_1_dead_money", "trade_post_june_1_cap_saving", "restructure_cap_saving", "extension_cap_saving")), + new QueryParam("order", false, "string", List.of("asc", "desc"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("sportskeeda-schedule", new Operation( "sportskeeda-schedule", "GET", @@ -36862,6 +40097,19 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("sportskeeda-topic", new Operation( + "sportskeeda-topic", + "GET", + "/sportskeeda/topic", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("sportskeeda-trade-values", new Operation( "sportskeeda-trade-values", "GET", @@ -36880,6 +40128,36 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("sportskeeda-transactions", new Operation( + "sportskeeda-transactions", + "GET", + "/sportskeeda/transactions", + List.of(), + List.of( + new QueryParam("slug", false, "string", List.of()), + new QueryParam("season", false, "integer", List.of("2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("month", true, "string", List.of("022020", "032020", "042020", "052020", "062020", "072020", "082020", "092020", "102020", "112020", "122020", "012021", "022021", "032021", "042021", "052021", "062021", "072021", "082021", "092021", "102021", "112021", "122021", "012022", "022022", "032022", "042022", "052022", "062022", "072022", "082022", "092022", "102022", "112022", "122022", "012023", "022023", "032023", "042023", "052023", "062023", "072023", "082023", "092023", "102023", "112023", "122023", "012024", "022024", "032024", "042024", "052024", "062024", "072024", "082024", "092024", "102024", "112024", "122024", "012025", "022025", "032025", "042025", "052025", "062025", "072025", "082025", "092025", "102025", "112025", "122025", "012026", "022026", "032026", "042026", "052026", "062026", "072026", "082026", "092026")), + 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("sportskeeda-transactions-options", new Operation( + "sportskeeda-transactions-options", + "GET", + "/sportskeeda/transactions-options", + List.of(), + List.of( + new QueryParam("season", false, "integer", List.of("2020", "2021", "2022", "2023", "2024", "2025", "2026"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("sportskeeda-video", new Operation( "sportskeeda-video", "GET", @@ -36906,6 +40184,125 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("sportskeeda-wiki-activity", new Operation( + "sportskeeda-wiki-activity", + "GET", + "/sportskeeda/wiki-activity", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("asc", "desc")), + new QueryParam("sort_by", false, "string", List.of("author_name", "updated_at"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("sportskeeda-wiki-article", new Operation( + "sportskeeda-wiki-article", + "GET", + "/sportskeeda/wiki-article", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-wiki-categories", new Operation( + "sportskeeda-wiki-categories", + "GET", + "/sportskeeda/wiki-categories", + List.of(), + List.of( + new QueryParam("wiki", true, "string", List.of("minecraft", "terraria", "naruto", "tiktok", "youtube", "gta", "one-piece", "sk-communities"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-wiki-contributors", new Operation( + "sportskeeda-wiki-contributors", + "GET", + "/sportskeeda/wiki-contributors", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("asc", "desc")), + new QueryParam("sort_by", false, "string", List.of("author_name", "contributions", "updated_at"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("sportskeeda-wiki-issues", new Operation( + "sportskeeda-wiki-issues", + "GET", + "/sportskeeda/wiki-issues", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("status", false, "string", List.of("opened", "closed"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("sportskeeda-wiki-options", new Operation( + "sportskeeda-wiki-options", + "GET", + "/sportskeeda/wiki-options", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("sportskeeda-wiki-pages", new Operation( + "sportskeeda-wiki-pages", + "GET", + "/sportskeeda/wiki-pages", + List.of(), + List.of( + new QueryParam("wiki", true, "string", List.of("minecraft", "terraria", "naruto", "tiktok", "youtube", "gta", "one-piece", "sk-communities")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("ASC", "DESC")), + new QueryParam("sort_by", false, "string", List.of("last_updated", "page_size", "ratings", "issues_count")), + new QueryParam("search", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("sportskeeda-wiki-summary", new Operation( + "sportskeeda-wiki-summary", + "GET", + "/sportskeeda/wiki-summary", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("spotify-podcasts-categories", new Operation( "spotify-podcasts-categories", "GET", @@ -37007,9 +40404,6 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations43(Map m) { m.put("spotify-podcasts-show-episodes", new Operation( "spotify-podcasts-show-episodes", "GET", @@ -37475,6 +40869,9 @@ private static void putOperations43(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations47(Map m) { m.put("spotify-track", new Operation( "spotify-track", "GET", @@ -37949,9 +41346,6 @@ private static void putOperations43(Map m) { List.of("ApiKeyAuth"), true, List.of("start"))); - } - - private static void putOperations44(Map m) { m.put("steam-steamspy", new Operation( "steam-steamspy", "GET", @@ -38349,6 +41743,9 @@ private static void putOperations44(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations48(Map m) { m.put("strava-route-detail", new Operation( "strava-route-detail", "GET", @@ -38362,6 +41759,203 @@ private static void putOperations44(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("streeteasy-areas", new Operation( + "streeteasy-areas", + "GET", + "/streeteasy/areas", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("streeteasy-building", new Operation( + "streeteasy-building", + "GET", + "/streeteasy/buildings/{slug}", + List.of("slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("streeteasy-market-data-catalog", new Operation( + "streeteasy-market-data-catalog", + "GET", + "/streeteasy/market-data/catalog", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("streeteasy-market-indices", new Operation( + "streeteasy-market-indices", + "GET", + "/streeteasy/market-data/indices", + List.of(), + List.of( + new QueryParam("start_month", false, "string", List.of()), + new QueryParam("end_month", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("streeteasy-market-inventory", new Operation( + "streeteasy-market-inventory", + "GET", + "/streeteasy/market-data/inventory", + List.of(), + List.of( + new QueryParam("start_month", false, "string", List.of()), + new QueryParam("end_month", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("streeteasy-market-data-series", new Operation( + "streeteasy-market-data-series", + "GET", + "/streeteasy/market-data/series", + List.of(), + List.of( + new QueryParam("dataset", true, "string", List.of("medianAskingPPSF", "medianAskingPPSFOneBd", "medianAskingPPSFStudio", "medianAskingPPSFThreePlusBd", "medianAskingPPSFTwoBd", "medianAskingPrice", "medianAskingPriceCondo", "medianAskingPriceCoop", "medianAskingPriceSfr", "medianAskingRent", "medianAskingRentOneBd", "medianAskingRentStudio", "medianAskingRentThreePlusBd", "medianAskingRentTwoBd", "medianDaysMarket", "medianDaysMarketCondo", "medianDaysMarketCoop", "medianRecordedSalesPrice", "medianRecordedSalesPriceCondo", "medianRecordedSalesPriceCoop", "medianRecordedSalesPriceSfr", "medianRentalDiscount", "medianRentalDiscountOneBd", "medianRentalDiscountStudio", "medianRentalDiscountThreePlusBd", "medianRentalDiscountTwoBd", "newInventory", "newInventoryCondo", "newInventoryCoop", "newInventorySfr", "priceIndex", "recordedSales", "recordedSalesCondo", "recordedSalesCoop", "recordedSalesSfr", "rentIndex", "rentalConcessions", "rentalInventory", "rentalInventoryOneBd", "rentalInventoryStudio", "rentalInventoryThreePlusBd", "rentalInventoryTwoBd", "saleListRatio", "saleListRatioCondo", "saleListRatioCoop", "saleListRatioSfr", "salesInventory", "salesInventoryCondo", "salesInventoryCoop", "salesInventoryOneBd", "salesInventorySfr", "salesInventoryStudio", "salesInventoryThreePlusBd", "salesInventoryTwoBd", "shareOfRentalsDiscounted", "shareOfRentalsDiscountedOneBd", "shareOfRentalsDiscountedStudio", "shareOfRentalsDiscountedThreePlusBd", "shareOfRentalsDiscountedTwoBd", "sharePriceCut", "sharePriceCutCondo", "sharePriceCutCoop", "sharePriceCutSfr")), + new QueryParam("start_month", false, "string", List.of()), + new QueryParam("end_month", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("streeteasy-quick-search", new Operation( + "streeteasy-quick-search", + "GET", + "/streeteasy/quick-search", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("streeteasy-rentals-search", new Operation( + "streeteasy-rentals-search", + "GET", + "/streeteasy/rentals/search", + List.of(), + List.of( + new QueryParam("area_id", true, "array", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("per_page", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("default", "newest", "recently_updated", "price_desc", "price_asc", "largest", "smallest")), + new QueryParam("min_price", false, "integer", List.of()), + new QueryParam("max_price", false, "integer", List.of()), + new QueryParam("min_bedrooms", false, "integer", List.of()), + new QueryParam("max_bedrooms", false, "integer", List.of()), + new QueryParam("min_bathrooms", false, "number", List.of()), + new QueryParam("max_bathrooms", false, "number", List.of()), + new QueryParam("min_sqft", false, "integer", List.of()), + new QueryParam("max_sqft", false, "integer", List.of()), + new QueryParam("building_type", false, "array", List.of("rental", "condo", "co-op", "house", "multifamily")), + new QueryParam("amenity", false, "array", List.of("washer_dryer", "dishwasher", "private_outdoor_space", "central_air", "furnished", "fireplace", "loft", "city_view", "garden_view", "park_view", "skyline_view", "water_view", "elevator", "doorman", "laundry", "gym", "parking", "shared_outdoor_space", "pool", "pied_a_terre", "childrens_playroom", "smoke_free", "storage")), + new QueryParam("optional_amenity", false, "array", List.of("washer_dryer", "dishwasher", "private_outdoor_space", "central_air", "furnished", "fireplace", "loft", "city_view", "garden_view", "park_view", "skyline_view", "water_view", "elevator", "doorman", "laundry", "gym", "parking", "shared_outdoor_space", "pool", "pied_a_terre", "childrens_playroom", "smoke_free", "storage")), + new QueryParam("pets_allowed", false, "boolean", List.of()), + new QueryParam("open_house", false, "boolean", List.of()), + new QueryParam("tour_3d", false, "boolean", List.of()), + new QueryParam("video_tour", false, "boolean", List.of()), + new QueryParam("transit_line", false, "array", List.of("1", "2", "3", "4", "5", "6", "7", "A", "C", "E", "B", "D", "F", "M", "G", "N", "Q", "R", "W", "J", "Z", "L", "S", "HBLR", "PATH"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("streeteasy-sales-search", new Operation( + "streeteasy-sales-search", + "GET", + "/streeteasy/sales/search", + List.of(), + List.of( + new QueryParam("area_id", true, "array", List.of()), + new QueryParam("sale_status", false, "array", List.of("active", "preview", "coming_soon", "in_contract", "sold", "unavailable")), + new QueryParam("sale_type", false, "array", List.of("sponsor_unit", "foreclosure", "resale", "restricted_sale")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("per_page", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("default", "newest", "recently_updated", "price_desc", "price_asc", "largest", "smallest")), + new QueryParam("min_price", false, "integer", List.of()), + new QueryParam("max_price", false, "integer", List.of()), + new QueryParam("min_bedrooms", false, "integer", List.of()), + new QueryParam("max_bedrooms", false, "integer", List.of()), + new QueryParam("min_bathrooms", false, "number", List.of()), + new QueryParam("max_bathrooms", false, "number", List.of()), + new QueryParam("min_sqft", false, "integer", List.of()), + new QueryParam("max_sqft", false, "integer", List.of()), + new QueryParam("min_maintenance", false, "integer", List.of()), + new QueryParam("max_maintenance", false, "integer", List.of()), + new QueryParam("min_monthly_taxes", false, "integer", List.of()), + new QueryParam("max_monthly_taxes", false, "integer", List.of()), + new QueryParam("min_price_per_sqft", false, "integer", List.of()), + new QueryParam("max_price_per_sqft", false, "integer", List.of()), + new QueryParam("include_unknown_price_per_sqft", false, "boolean", List.of()), + new QueryParam("min_year_built", false, "integer", List.of()), + new QueryParam("max_year_built", false, "integer", List.of()), + new QueryParam("prewar", false, "boolean", List.of()), + new QueryParam("development", false, "string", List.of("pre_construction")), + new QueryParam("income_restricted", false, "boolean", List.of()), + new QueryParam("school_id", false, "array", List.of()), + new QueryParam("zip_code", false, "string", List.of()), + new QueryParam("keywords", false, "string", List.of()), + new QueryParam("building_type", false, "array", List.of("condo", "co-op", "house", "multifamily")), + new QueryParam("amenity", false, "array", List.of("washer_dryer", "dishwasher", "private_outdoor_space", "central_air", "furnished", "fireplace", "loft", "city_view", "garden_view", "park_view", "skyline_view", "water_view", "elevator", "doorman", "laundry", "gym", "parking", "shared_outdoor_space", "pool", "pied_a_terre", "childrens_playroom", "smoke_free", "storage")), + new QueryParam("optional_amenity", false, "array", List.of("washer_dryer", "dishwasher", "private_outdoor_space", "central_air", "furnished", "fireplace", "loft", "city_view", "garden_view", "park_view", "skyline_view", "water_view", "elevator", "doorman", "laundry", "gym", "parking", "shared_outdoor_space", "pool", "pied_a_terre", "childrens_playroom", "smoke_free", "storage")), + new QueryParam("pets_allowed", false, "boolean", List.of()), + new QueryParam("open_house", false, "boolean", List.of()), + new QueryParam("tour_3d", false, "boolean", List.of()), + new QueryParam("video_tour", false, "boolean", List.of()), + new QueryParam("transit_line", false, "array", List.of("1", "2", "3", "4", "5", "6", "7", "A", "C", "E", "B", "D", "F", "M", "G", "N", "Q", "R", "W", "J", "Z", "L", "S", "HBLR", "PATH"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("streeteasy-school", new Operation( + "streeteasy-school", + "GET", + "/streeteasy/schools/{slug}", + List.of("slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("streeteasy-unit", new Operation( + "streeteasy-unit", + "GET", + "/streeteasy/units/{building_slug}/{unit}", + List.of("building_slug", "unit"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("stubhub-carousel", new Operation( "stubhub-carousel", "GET", @@ -38808,9 +42402,6 @@ private static void putOperations44(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations45(Map m) { m.put("substack-user", new Operation( "substack-user", "GET", @@ -39047,6 +42638,9 @@ private static void putOperations45(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations49(Map m) { m.put("swiggy-restaurant-menu", new Operation( "swiggy-restaurant-menu", "GET", @@ -39662,9 +43256,6 @@ private static void putOperations45(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations46(Map m) { m.put("theage-author", new Operation( "theage-author", "GET", @@ -39766,6 +43357,70 @@ private static void putOperations46(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("theblaze-article", new Operation( + "theblaze-article", + "GET", + "/theblaze/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("theblaze-author", new Operation( + "theblaze-author", + "GET", + "/theblaze/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("theblaze-headlines", new Operation( + "theblaze-headlines", + "GET", + "/theblaze/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("theblaze-news", new Operation( + "theblaze-news", + "GET", + "/theblaze/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("theblaze-sections", new Operation( + "theblaze-sections", + "GET", + "/theblaze/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("thebodyshop-collections", new Operation( "thebodyshop-collections", "GET", @@ -39820,6 +43475,9 @@ private static void putOperations46(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations50(Map m) { m.put("thebodyshop-products", new Operation( "thebodyshop-products", "GET", @@ -40166,6 +43824,70 @@ private static void putOperations46(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("thenextweb-article", new Operation( + "thenextweb-article", + "GET", + "/thenextweb/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("thenextweb-author", new Operation( + "thenextweb-author", + "GET", + "/thenextweb/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("thenextweb-headlines", new Operation( + "thenextweb-headlines", + "GET", + "/thenextweb/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("deep-tech", "sustainability", "ecosystems", "data-security", "fintech-ecommerce", "future-of-work", "startups-technology", "investors-funding", "government-policy", "corporates-innovation"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("thenextweb-news", new Operation( + "thenextweb-news", + "GET", + "/thenextweb/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("thenextweb-sections", new Operation( + "thenextweb-sections", + "GET", + "/thenextweb/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("therealreal-autocomplete", new Operation( "therealreal-autocomplete", "GET", @@ -40448,9 +44170,6 @@ private static void putOperations46(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations47(Map m) { m.put("thisismoney-article", new Operation( "thisismoney-article", "GET", @@ -40538,6 +44257,9 @@ private static void putOperations47(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations51(Map m) { m.put("threads-profile", new Operation( "threads-profile", "GET", @@ -41286,9 +45008,6 @@ private static void putOperations47(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations48(Map m) { m.put("tiktok-trending", new Operation( "tiktok-trending", "GET", @@ -41364,6 +45083,59 @@ private static void putOperations48(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("timeslive-article", new Operation( + "timeslive-article", + "GET", + "/timeslive/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 putOperations52(Map m) { + m.put("timeslive-headlines", new Operation( + "timeslive-headlines", + "GET", + "/timeslive/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("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"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("timeslive-news", new Operation( + "timeslive-news", + "GET", + "/timeslive/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("timeslive-sections", new Operation( + "timeslive-sections", + "GET", + "/timeslive/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("timesofindia-article", new Operation( "timesofindia-article", "GET", @@ -42096,9 +45868,6 @@ private static void putOperations48(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations49(Map m) { m.put("tripadvisor-hotels", new Operation( "tripadvisor-hotels", "GET", @@ -42149,9 +45918,9 @@ private static void putOperations49(Map m) { new QueryParam("page", false, "integer", List.of()), new QueryParam("limit", false, "integer", List.of()), new QueryParam("language", false, "string", List.of()), - new QueryParam("sort_type", false, "string", List.of()), - new QueryParam("sort_by", false, "string", List.of()), - new QueryParam("ratings", false, "array", List.of()), + new QueryParam("sort_type", false, "string", List.of("ML_SORTED", "DEFAULT")), + new QueryParam("sort_by", false, "string", List.of("FAVORABLE_RATING", "DATE")), + new QueryParam("ratings", false, "array", List.of("1", "2", "3", "4", "5")), new QueryParam("do_machine_translation", false, "boolean", List.of()), new QueryParam("photos_per_review_limit", false, "integer", List.of())), List.of(), @@ -42160,6 +45929,9 @@ private static void putOperations49(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations53(Map m) { m.put("tripadvisor-search", new Operation( "tripadvisor-search", "GET", @@ -42949,9 +46721,6 @@ private static void putOperations49(Map m) { List.of("JWTAuth"), false, List.of())); - } - - private static void putOperations50(Map m) { m.put("account-deletion-cancel", new Operation( "account-deletion-cancel", "DELETE", @@ -42988,6 +46757,9 @@ private static void putOperations50(Map m) { List.of("JWTAuth"), false, List.of())); + } + + private static void putOperations54(Map m) { m.put("usmagazine-article", new Operation( "usmagazine-article", "GET", @@ -43607,6 +47379,96 @@ private static void putOperations50(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("vrbo-location-suggestions", new Operation( + "vrbo-location-suggestions", + "GET", + "/vrbo/locations/search", + List.of(), + List.of( + new QueryParam("search_term", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("vrbo-property", new Operation( + "vrbo-property", + "GET", + "/vrbo/properties/{property_id}", + List.of("property_id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("vrbo-rate-calendar", new Operation( + "vrbo-rate-calendar", + "GET", + "/vrbo/properties/{property_id}/rate-calendar", + List.of("property_id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("vrbo-property-reviews", new Operation( + "vrbo-property-reviews", + "GET", + "/vrbo/properties/{property_id}/reviews", + List.of("property_id"), + List.of( + new QueryParam("start_index", false, "integer", List.of()), + new QueryParam("size", false, "integer", List.of()), + new QueryParam("sort_by", false, "string", List.of("HIGHEST_TO_LOWEST_RATED", "LOWEST_TO_HIGHEST_RATED", "NEWEST_TO_OLDEST", "NEWEST_TO_OLDEST_BY_LANGUAGE", "NEWEST_TO_OLDEST_BY_RELEVANCY")), + new QueryParam("include_recent_reviews", false, "boolean", List.of()), + new QueryParam("include_ratings_only_reviews", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("vrbo-search", new Operation( + "vrbo-search", + "POST", + "/vrbo/search", + List.of(), + List.of(), + List.of(), + "request", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("vrbo-travel-pages", new Operation( + "vrbo-travel-pages", + "GET", + "/vrbo/travel-pages", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("vrbo-travel-page-detail", new Operation( + "vrbo-travel-page-detail", + "GET", + "/vrbo/travel-pages/{slug}", + List.of("slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("walesonline-article", new Operation( "walesonline-article", "GET", @@ -43687,6 +47549,9 @@ private static void putOperations50(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations55(Map m) { m.put("walmart-product", new Operation( "walmart-product", "GET", @@ -43739,9 +47604,6 @@ private static void putOperations50(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations51(Map m) { m.put("wapo-author", new Operation( "wapo-author", "GET", @@ -43835,6 +47697,70 @@ private static void putOperations51(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("wccftech-article", new Operation( + "wccftech-article", + "GET", + "/wccftech/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wccftech-author", new Operation( + "wccftech-author", + "GET", + "/wccftech/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("wccftech-headlines", new Operation( + "wccftech-headlines", + "GET", + "/wccftech/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wccftech-news", new Operation( + "wccftech-news", + "GET", + "/wccftech/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wccftech-sections", new Operation( + "wccftech-sections", + "GET", + "/wccftech/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("web-scrape", new Operation( "web-scrape", "POST", @@ -44431,6 +48357,9 @@ private static void putOperations51(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations56(Map m) { m.put("wsj-author", new Operation( "wsj-author", "GET", @@ -44581,9 +48510,6 @@ private static void putOperations51(Map m) { List.of("ApiKeyAuth"), true, List.of("cursor"))); - } - - private static void putOperations52(Map m) { m.put("xda-article", new Operation( "xda-article", "GET", @@ -45245,6 +49171,9 @@ private static void putOperations52(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations57(Map m) { m.put("yahoo-health-category", new Operation( "yahoo-health-category", "GET", @@ -45367,9 +49296,6 @@ private static void putOperations52(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations53(Map m) { m.put("yahoo-news-related", new Operation( "yahoo-news-related", "GET", @@ -45847,6 +49773,69 @@ private static void putOperations53(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yardbarker-article", new Operation( + "yardbarker-article", + "GET", + "/yardbarker/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yardbarker-author", new Operation( + "yardbarker-author", + "GET", + "/yardbarker/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yardbarker-headlines", new Operation( + "yardbarker-headlines", + "GET", + "/yardbarker/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yardbarker-news", new Operation( + "yardbarker-news", + "GET", + "/yardbarker/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yardbarker-sections", new Operation( + "yardbarker-sections", + "GET", + "/yardbarker/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yelp-business", new Operation( "yelp-business", "GET", @@ -45978,6 +49967,9 @@ private static void putOperations53(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations58(Map m) { m.put("yoox-product", new Operation( "yoox-product", "GET", @@ -46184,9 +50176,6 @@ private static void putOperations53(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations54(Map m) { m.put("youtube-video", new Operation( "youtube-video", "GET", @@ -46769,6 +50758,13 @@ private static Map> buildGroups() { group.put("alcomSections", "alcom-sections"); g.put("alCom", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("aliexpressReviews", "aliexpress-reviews"); + group.put("aliexpressSearch", "aliexpress-search"); + group.put("aliexpressSearchFilters", "aliexpress-search-filters"); + g.put("aliExpress", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("aljazeeraArticle", "aljazeera-article"); @@ -46830,6 +50826,15 @@ private static Map> buildGroups() { group.put("androidauthoritySections", "androidauthority-sections"); g.put("androidAuthority", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("androidpoliceArticle", "androidpolice-article"); + group.put("androidpoliceAuthor", "androidpolice-author"); + group.put("androidpoliceHeadlines", "androidpolice-headlines"); + group.put("androidpoliceNews", "androidpolice-news"); + group.put("androidpoliceSections", "androidpolice-sections"); + g.put("androidPolice", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("airingSchedule", "anime-airing-schedule"); @@ -46925,6 +50930,8 @@ private static Map> buildGroups() { Map group = new LinkedHashMap<>(); group.put("app", "appstore-app"); group.put("categories", "appstore-categories"); + group.put("collection", "appstore-collection"); + group.put("collections", "appstore-collections"); group.put("developer", "appstore-developer"); group.put("editorial", "appstore-editorial"); group.put("editorialCategory", "appstore-editorial-category"); @@ -47026,6 +51033,15 @@ private static Map> buildGroups() { group.put("search", "bbc-search"); g.put("bbc", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("article", "benzinga-article"); + group.put("headlines", "benzinga-headlines"); + group.put("news", "benzinga-news"); + group.put("search", "benzinga-search"); + group.put("sections", "benzinga-sections"); + g.put("benzinga", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("bestbuyBrands", "bestbuy-brands"); @@ -47217,6 +51233,15 @@ private static Map> buildGroups() { group.put("sections", "breitbart-sections"); g.put("breitbart", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("brisbanetimesArticle", "brisbanetimes-article"); + group.put("brisbanetimesAuthor", "brisbanetimes-author"); + group.put("brisbanetimesHeadlines", "brisbanetimes-headlines"); + group.put("brisbanetimesNews", "brisbanetimes-news"); + group.put("brisbanetimesSections", "brisbanetimes-sections"); + g.put("brisbaneTimes", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("collections", "brooklinen-collections"); @@ -47610,6 +51635,14 @@ private static Map> buildGroups() { group.put("dailyexpressSections", "dailyexpress-sections"); g.put("dailyExpress", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("dailykosArticle", "dailykos-article"); + group.put("dailykosHeadlines", "dailykos-headlines"); + group.put("dailykosNews", "dailykos-news"); + group.put("dailykosSections", "dailykos-sections"); + g.put("dailyKos", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("dailymailArticle", "dailymail-article"); @@ -47619,6 +51652,14 @@ private static Map> buildGroups() { group.put("dailymailSections", "dailymail-sections"); g.put("dailyMail", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("dailymaverickArticle", "dailymaverick-article"); + group.put("dailymaverickHeadlines", "dailymaverick-headlines"); + group.put("dailymaverickNews", "dailymaverick-news"); + group.put("dailymaverickSections", "dailymaverick-sections"); + g.put("dailyMaverick", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("dailyrecordArticle", "dailyrecord-article"); @@ -47673,6 +51714,10 @@ private static Map> buildGroups() { group.put("chromeExtensionsSearch", "datasets-chrome-extensions-search"); group.put("chromeExtensionsTrending", "datasets-chrome-extensions-trending"); group.put("creatorsSearch", "datasets-creators-search"); + group.put("doordashStoresFacets", "datasets-doordash-stores-facets"); + group.put("doordashStoresItem", "datasets-doordash-stores-item"); + group.put("doordashStoresNearby", "datasets-doordash-stores-nearby"); + group.put("doordashStoresSearch", "datasets-doordash-stores-search"); group.put("facebookPagesFacets", "datasets-facebook-pages-facets"); group.put("facebookPagesItem", "datasets-facebook-pages-item"); group.put("facebookPagesSearch", "datasets-facebook-pages-search"); @@ -47803,6 +51848,15 @@ private static Map> buildGroups() { group.put("searchFilters", "deliveroo-search-filters"); g.put("deliveroo", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("denverpostArticle", "denverpost-article"); + group.put("denverpostAuthor", "denverpost-author"); + group.put("denverpostHeadlines", "denverpost-headlines"); + group.put("denverpostNews", "denverpost-news"); + group.put("denverpostSections", "denverpost-sections"); + g.put("theDenverPost", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("brands", "depop-brands"); @@ -48005,6 +52059,15 @@ private static Map> buildGroups() { group.put("propertiesSearch", "expedia-properties-search"); g.put("expedia", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("expresstribuneArticle", "expresstribune-article"); + group.put("expresstribuneAuthor", "expresstribune-author"); + group.put("expresstribuneHeadlines", "expresstribune-headlines"); + group.put("expresstribuneNews", "expresstribune-news"); + group.put("expresstribuneSections", "expresstribune-sections"); + g.put("theExpressTribune", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("marketplaceSearch", "facebook-marketplace-search"); @@ -48429,6 +52492,30 @@ private static Map> buildGroups() { group.put("search", "goodreads-search"); g.put("goodreads", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("goodrxAnswer", "goodrx-answer"); + group.put("goodrxAnswers", "goodrx-answers"); + group.put("goodrxBrands", "goodrx-brands"); + group.put("goodrxClass", "goodrx-class"); + group.put("goodrxClasses", "goodrx-classes"); + group.put("goodrxComparison", "goodrx-comparison"); + group.put("goodrxComparisons", "goodrx-comparisons"); + group.put("goodrxCondition", "goodrx-condition"); + group.put("goodrxConditionDrugs", "goodrx-condition-drugs"); + group.put("goodrxConditions", "goodrx-conditions"); + group.put("goodrxDrugGuide", "goodrx-drug-guide"); + group.put("goodrxDrugGuides", "goodrx-drug-guides"); + group.put("goodrxDrugInfo", "goodrx-drug-info"); + group.put("goodrxDrugOptions", "goodrx-drug-options"); + group.put("goodrxDrugPrices", "goodrx-drug-prices"); + group.put("goodrxDrugs", "goodrx-drugs"); + group.put("goodrxHealthArticle", "goodrx-health-article"); + group.put("goodrxHealthArticles", "goodrx-health-articles"); + group.put("goodrxHealthTopics", "goodrx-health-topics"); + group.put("goodrxPetMedications", "goodrx-pet-medications"); + g.put("goodRx", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("job", "google-jobs-job"); @@ -48528,6 +52615,19 @@ private static Map> buildGroups() { group.put("suggest", "grailed-suggest"); g.put("grailed", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("articles", "greystar-articles"); + group.put("article", "greystar-article"); + group.put("location", "greystar-location"); + group.put("locations", "greystar-locations"); + group.put("markets", "greystar-markets"); + group.put("newsroom", "greystar-newsroom"); + group.put("newsroomArticle", "greystar-newsroom-article"); + group.put("property", "greystar-property"); + group.put("search", "greystar-search"); + g.put("greystar", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("availability", "grubhub-availability"); @@ -48593,6 +52693,26 @@ private static Map> buildGroups() { group.put("hbrTopic", "hbr-topic"); g.put("harvardBusinessReview", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("autocomplete", "healthgrades-autocomplete"); + group.put("facilitiesFilters", "healthgrades-facilities-filters"); + group.put("facilitiesSearch", "healthgrades-facilities-search"); + group.put("facility", "healthgrades-facility"); + group.put("healthArticle", "healthgrades-health-article"); + group.put("healthArticles", "healthgrades-health-articles"); + group.put("healthTopics", "healthgrades-health-topics"); + group.put("hospital", "healthgrades-hospital"); + group.put("hospitalAwards", "healthgrades-hospital-awards"); + group.put("hospitalAwardFilters", "healthgrades-hospital-award-filters"); + group.put("locations", "healthgrades-locations"); + group.put("physician", "healthgrades-physician"); + group.put("physiciansFilters", "healthgrades-physicians-filters"); + group.put("physiciansSearch", "healthgrades-physicians-search"); + group.put("specialties", "healthgrades-specialties"); + group.put("topSearches", "healthgrades-top-searches"); + g.put("healthgrades", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("categories", "hermes-categories"); @@ -48655,6 +52775,15 @@ private static Map> buildGroups() { group.put("hotelsSearch", "hotels-search"); g.put("hotelsCom", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("article", "houston-chronicle-article"); + group.put("author", "houston-chronicle-author"); + group.put("headlines", "houston-chronicle-headlines"); + group.put("news", "houston-chronicle-news"); + group.put("sections", "houston-chronicle-sections"); + g.put("houstonChronicle", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("howtogeekNews", "howtogeek-news"); @@ -48845,6 +52974,15 @@ private static Map> buildGroups() { group.put("irishtimesSections", "irishtimes-sections"); g.put("irishTimes", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("japantimesArticle", "japantimes-article"); + group.put("japantimesAuthor", "japantimes-author"); + group.put("japantimesHeadlines", "japantimes-headlines"); + group.put("japantimesNews", "japantimes-news"); + group.put("japantimesSections", "japantimes-sections"); + g.put("theJapanTimes", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("jcrewCategories", "jcrew-categories"); @@ -49158,6 +53296,23 @@ private static Map> buildGroups() { group.put("macysSuggest", "macys-suggest"); g.put("macyS", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("makeuseofArticle", "makeuseof-article"); + group.put("makeuseofAuthor", "makeuseof-author"); + group.put("makeuseofHeadlines", "makeuseof-headlines"); + group.put("makeuseofNews", "makeuseof-news"); + group.put("makeuseofSections", "makeuseof-sections"); + g.put("makeUseOf", Map.copyOf(group)); + } + { + Map group = new LinkedHashMap<>(); + group.put("malaymailArticle", "malaymail-article"); + group.put("malaymailHeadlines", "malaymail-headlines"); + group.put("malaymailNews", "malaymail-news"); + group.put("malaymailSections", "malaymail-sections"); + g.put("malayMail", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("rankings", "manga-rankings"); @@ -49315,13 +53470,59 @@ private static Map> buildGroups() { group.put("leagueStats", "mlb-league-stats"); group.put("player", "mlb-player"); group.put("playerStats", "mlb-player-stats"); + group.put("prospectRankings", "mlb-prospect-rankings"); group.put("prospectStats", "mlb-prospect-stats"); group.put("schedule", "mlb-schedule"); group.put("search", "mlb-search"); group.put("standings", "mlb-standings"); + group.put("statcastAbsChallenges", "mlb-statcast-abs-challenges"); + group.put("statcastActiveSpin", "mlb-statcast-active-spin"); + group.put("statcastArmAngle", "mlb-statcast-arm-angle"); + group.put("statcastArmStrength", "mlb-statcast-arm-strength"); + group.put("statcastArmStrengthPlayer", "mlb-statcast-arm-strength-player"); + group.put("statcastArmValue", "mlb-statcast-arm-value"); + group.put("statcastArmValueDetails", "mlb-statcast-arm-value-details"); + group.put("statcastBaserunning", "mlb-statcast-baserunning"); + group.put("statcastBatTracking", "mlb-statcast-bat-tracking"); + group.put("statcastBattedBall", "mlb-statcast-batted-ball"); + group.put("statcastBirthdayIndex", "mlb-statcast-birthday-index"); + group.put("statcastCatcherBlocking", "mlb-statcast-catcher-blocking"); + group.put("statcastCatcherBlockingDetails", "mlb-statcast-catcher-blocking-details"); + group.put("statcastCatcherFraming", "mlb-statcast-catcher-framing"); + group.put("statcastCatcherFramingDetails", "mlb-statcast-catcher-framing-details"); + group.put("statcastCatcherPopTime", "mlb-statcast-catcher-pop-time"); + group.put("statcastCatcherStance", "mlb-statcast-catcher-stance"); + group.put("statcastCatcherThrowing", "mlb-statcast-catcher-throwing"); + group.put("statcastCatcherThrowingDetails", "mlb-statcast-catcher-throwing-details"); group.put("statcastExpected", "mlb-statcast-expected"); + group.put("statcastFieldingRunValue", "mlb-statcast-fielding-run-value"); + group.put("statcastFirstBaseReceiving", "mlb-statcast-first-base-receiving"); + group.put("statcastFirstBaseReceivingDetails", "mlb-statcast-first-base-receiving-details"); + group.put("statcastHomeRuns", "mlb-statcast-home-runs"); + group.put("statcastHomeRunsDetails", "mlb-statcast-home-runs-details"); group.put("statcast", "mlb-statcast"); group.put("statcastOaa", "mlb-statcast-oaa"); + group.put("statcastParkFactors", "mlb-statcast-park-factors"); + group.put("statcastPercentile", "mlb-statcast-percentile"); + group.put("statcastPitchArsenal", "mlb-statcast-pitch-arsenal"); + group.put("statcastPitchArsenalDetails", "mlb-statcast-pitch-arsenal-details"); + group.put("statcastPitchArsenals", "mlb-statcast-pitch-arsenals"); + group.put("statcastPitchMovement", "mlb-statcast-pitch-movement"); + group.put("statcastPitchTempo", "mlb-statcast-pitch-tempo"); + group.put("statcastPitchTempoPlayer", "mlb-statcast-pitch-tempo-player"); + group.put("statcastPitchTimer", "mlb-statcast-pitch-timer"); + group.put("statcastPlayerDetails", "mlb-statcast-player-details"); + group.put("statcastRolling", "mlb-statcast-rolling"); + group.put("statcastRunValue", "mlb-statcast-run-value"); + group.put("statcastRunningGame", "mlb-statcast-running-game"); + group.put("statcastRunningGameDetails", "mlb-statcast-running-game-details"); + group.put("statcastSprintSpeed", "mlb-statcast-sprint-speed"); + group.put("statcastSprintSpeedTeams", "mlb-statcast-sprint-speed-teams"); + group.put("statcastSwingPath", "mlb-statcast-swing-path"); + group.put("statcastSwingTiming", "mlb-statcast-swing-timing"); + group.put("statcastSwingTimingDetails", "mlb-statcast-swing-timing-details"); + group.put("statcastTopPerformers", "mlb-statcast-top-performers"); + group.put("statcastYearToYear", "mlb-statcast-year-to-year"); group.put("teamRoster", "mlb-team-roster"); group.put("teamStats", "mlb-team-stats"); group.put("teams", "mlb-teams"); @@ -49388,6 +53589,15 @@ private static Map> buildGroups() { group.put("nationafricaSections", "nationafrica-sections"); g.put("nationAfrica", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("nationalArticle", "national-article"); + group.put("nationalAuthor", "national-author"); + group.put("nationalHeadlines", "national-headlines"); + group.put("nationalNews", "national-news"); + group.put("nationalSections", "national-sections"); + g.put("theNational", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("nationalpostArticle", "nationalpost-article"); @@ -49411,9 +53621,15 @@ private static Map> buildGroups() { group.put("article", "ndtv-article"); group.put("author", "ndtv-author"); group.put("headlines", "ndtv-headlines"); + group.put("latestVideos", "ndtv-latest-videos"); + group.put("liveBlog", "ndtv-live-blog"); + group.put("liveBlogs", "ndtv-live-blogs"); group.put("news", "ndtv-news"); group.put("search", "ndtv-search"); group.put("sections", "ndtv-sections"); + group.put("video", "ndtv-video"); + group.put("videoCategories", "ndtv-video-categories"); + group.put("videos", "ndtv-videos"); g.put("ndtv", Map.copyOf(group)); } { @@ -49482,6 +53698,15 @@ private static Map> buildGroups() { group.put("suggest", "nike-suggest"); g.put("nike", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("article", "ninetofivegoogle-article"); + group.put("author", "ninetofivegoogle-author"); + group.put("headlines", "ninetofivegoogle-headlines"); + group.put("news", "ninetofivegoogle-news"); + group.put("sections", "ninetofivegoogle-sections"); + g.put("nineToFiveGoogle", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("article", "ninetofivemac-article"); @@ -49768,6 +53993,14 @@ private static Map> buildGroups() { group.put("phonearenaSections", "phonearena-sections"); g.put("phoneArena", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("physorgArticle", "physorg-article"); + group.put("physorgHeadlines", "physorg-headlines"); + group.put("physorgNews", "physorg-news"); + group.put("physorgSections", "physorg-sections"); + g.put("physOrg", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("ping", "ping"); @@ -50140,6 +54373,23 @@ private static Map> buildGroups() { group.put("search", "resy-search"); g.put("resy", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("retailmenotAutocomplete", "retailmenot-autocomplete"); + group.put("retailmenotBlogCategories", "retailmenot-blog-categories"); + group.put("retailmenotBlogPost", "retailmenot-blog-post"); + group.put("retailmenotBlogPosts", "retailmenot-blog-posts"); + group.put("retailmenotBlogTags", "retailmenot-blog-tags"); + group.put("retailmenotCashback", "retailmenot-cashback"); + group.put("retailmenotCategories", "retailmenot-categories"); + group.put("retailmenotCategory", "retailmenot-category"); + group.put("retailmenotDealEvent", "retailmenot-deal-event"); + group.put("retailmenotDealEvents", "retailmenot-deal-events"); + group.put("retailmenotHome", "retailmenot-home"); + group.put("retailmenotStore", "retailmenot-store"); + group.put("retailmenotStores", "retailmenot-stores"); + g.put("retailMeNot", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("article", "reuters-article"); @@ -50576,15 +54826,31 @@ private static Map> buildGroups() { Map group = new LinkedHashMap<>(); group.put("article", "sportskeeda-article"); group.put("author", "sportskeeda-author"); + group.put("collegeBasketballSchedule", "sportskeeda-college-basketball-schedule"); + group.put("collegeBasketballScheduleOptions", "sportskeeda-college-basketball-schedule-options"); + group.put("cricketCommentary", "sportskeeda-cricket-commentary"); + group.put("cricketMatch", "sportskeeda-cricket-match"); group.put("depthChart", "sportskeeda-depth-chart"); + group.put("draftPicks", "sportskeeda-draft-picks"); + group.put("draftPicksOptions", "sportskeeda-draft-picks-options"); + group.put("eventCalendar", "sportskeeda-event-calendar"); + group.put("eventCalendarOptions", "sportskeeda-event-calendar-options"); group.put("feed", "sportskeeda-feed"); group.put("footballData", "sportskeeda-football-data"); group.put("footballOptions", "sportskeeda-football-options"); + group.put("guessingGame", "sportskeeda-guessing-game"); + group.put("guessingGameEntities", "sportskeeda-guessing-game-entities"); + group.put("guessingGames", "sportskeeda-guessing-games"); + group.put("nbaQueries", "sportskeeda-nba-queries"); group.put("news", "sportskeeda-news"); group.put("pageData", "sportskeeda-page-data"); group.put("pageOptions", "sportskeeda-page-options"); group.put("playerStats", "sportskeeda-player-stats"); group.put("profile", "sportskeeda-profile"); + group.put("quiz", "sportskeeda-quiz"); + group.put("quizCategories", "sportskeeda-quiz-categories"); + group.put("quizzes", "sportskeeda-quizzes"); + group.put("salaryCap", "sportskeeda-salary-cap"); group.put("schedule", "sportskeeda-schedule"); group.put("sections", "sportskeeda-sections"); group.put("sitemapItems", "sportskeeda-sitemap-items"); @@ -50592,9 +54858,20 @@ private static Map> buildGroups() { group.put("standings", "sportskeeda-standings"); group.put("standingsOptions", "sportskeeda-standings-options"); group.put("taxonomySearch", "sportskeeda-taxonomy-search"); + group.put("topic", "sportskeeda-topic"); group.put("tradeValues", "sportskeeda-trade-values"); + group.put("transactions", "sportskeeda-transactions"); + group.put("transactionsOptions", "sportskeeda-transactions-options"); group.put("video", "sportskeeda-video"); group.put("videos", "sportskeeda-videos"); + group.put("wikiActivity", "sportskeeda-wiki-activity"); + group.put("wikiArticle", "sportskeeda-wiki-article"); + group.put("wikiCategories", "sportskeeda-wiki-categories"); + group.put("wikiContributors", "sportskeeda-wiki-contributors"); + group.put("wikiIssues", "sportskeeda-wiki-issues"); + group.put("wikiOptions", "sportskeeda-wiki-options"); + group.put("wikiPages", "sportskeeda-wiki-pages"); + group.put("wikiSummary", "sportskeeda-wiki-summary"); g.put("sportskeeda", Map.copyOf(group)); } { @@ -50732,6 +55009,21 @@ private static Map> buildGroups() { group.put("routeDetail", "strava-route-detail"); g.put("strava", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("streeteasyAreas", "streeteasy-areas"); + group.put("streeteasyBuilding", "streeteasy-building"); + group.put("streeteasyMarketDataCatalog", "streeteasy-market-data-catalog"); + group.put("streeteasyMarketIndices", "streeteasy-market-indices"); + group.put("streeteasyMarketInventory", "streeteasy-market-inventory"); + group.put("streeteasyMarketDataSeries", "streeteasy-market-data-series"); + group.put("streeteasyQuickSearch", "streeteasy-quick-search"); + group.put("streeteasyRentalsSearch", "streeteasy-rentals-search"); + group.put("streeteasySalesSearch", "streeteasy-sales-search"); + group.put("streeteasySchool", "streeteasy-school"); + group.put("streeteasyUnit", "streeteasy-unit"); + g.put("streetEasy", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("stubhubCarousel", "stubhub-carousel"); @@ -50891,6 +55183,15 @@ private static Map> buildGroups() { group.put("theatlanticSections", "theatlantic-sections"); g.put("theAtlantic", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("theblazeArticle", "theblaze-article"); + group.put("theblazeAuthor", "theblaze-author"); + group.put("theblazeHeadlines", "theblaze-headlines"); + group.put("theblazeNews", "theblaze-news"); + group.put("theblazeSections", "theblaze-sections"); + g.put("theBlaze", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("thebodyshopCollections", "thebodyshop-collections"); @@ -50942,6 +55243,15 @@ private static Map> buildGroups() { group.put("thejournalSections", "thejournal-sections"); g.put("theJournalIe", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("thenextwebArticle", "thenextweb-article"); + group.put("thenextwebAuthor", "thenextweb-author"); + group.put("thenextwebHeadlines", "thenextweb-headlines"); + group.put("thenextwebNews", "thenextweb-news"); + group.put("thenextwebSections", "thenextweb-sections"); + g.put("theNextWeb", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("therealrealAutocomplete", "therealreal-autocomplete"); @@ -51069,6 +55379,14 @@ private static Map> buildGroups() { group.put("sections", "time-sections"); g.put("time", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("timesliveArticle", "timeslive-article"); + group.put("timesliveHeadlines", "timeslive-headlines"); + group.put("timesliveNews", "timeslive-news"); + group.put("timesliveSections", "timeslive-sections"); + g.put("timesLive", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("timesofindiaArticle", "timesofindia-article"); @@ -51353,6 +55671,17 @@ private static Map> buildGroups() { group.put("sections", "vox-sections"); g.put("vox", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("locationSuggestions", "vrbo-location-suggestions"); + group.put("property", "vrbo-property"); + group.put("rateCalendar", "vrbo-rate-calendar"); + group.put("propertyReviews", "vrbo-property-reviews"); + group.put("search", "vrbo-search"); + group.put("travelPages", "vrbo-travel-pages"); + group.put("travelPageDetail", "vrbo-travel-page-detail"); + g.put("vrbo", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("walesonlineArticle", "walesonline-article"); @@ -51390,6 +55719,15 @@ private static Map> buildGroups() { group.put("product", "wayfair-product"); g.put("wayfair", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("article", "wccftech-article"); + group.put("author", "wccftech-author"); + group.put("headlines", "wccftech-headlines"); + group.put("news", "wccftech-news"); + group.put("sections", "wccftech-sections"); + g.put("wccftech", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("categories", "wendys-categories"); @@ -51621,6 +55959,15 @@ private static Map> buildGroups() { group.put("home", "yahoo-tech-home"); g.put("yahooTech", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("article", "yardbarker-article"); + group.put("author", "yardbarker-author"); + group.put("headlines", "yardbarker-headlines"); + group.put("news", "yardbarker-news"); + group.put("sections", "yardbarker-sections"); + g.put("yardbarker", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("business", "yelp-business"); diff --git a/src/main/java/net/crawlora/Version.java b/src/main/java/net/crawlora/Version.java index d14f5b7..007bedb 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.44.0-sdk.2"; + public static final String VERSION = "1.45.0-sdk.1"; } diff --git a/src/main/java/net/crawlora/groups/AliExpressGroup.java b/src/main/java/net/crawlora/groups/AliExpressGroup.java new file mode 100644 index 0000000..2e6b77a --- /dev/null +++ b/src/main/java/net/crawlora/groups/AliExpressGroup.java @@ -0,0 +1,87 @@ +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 "aliExpress" operation group. + * Reach it via {@code client.aliExpress()}. + */ +public final class AliExpressGroup { + private final CrawloraClient client; + + public AliExpressGroup(CrawloraClient client) { + this.client = client; + } + + /** + * aliexpress-reviews (GET /aliexpress/reviews). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object aliexpressReviews(Map params) { + return aliexpressReviews(params, null); + } + + /** + * aliexpress-reviews (GET /aliexpress/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 aliexpressReviews(Map params, RequestOptions options) { + OperationGroup.checkParams("aliexpress-reviews", params); + return client.request("aliexpress-reviews", params, options); + } + + /** + * aliexpress-search (GET /aliexpress/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object aliexpressSearch(Map params) { + return aliexpressSearch(params, null); + } + + /** + * aliexpress-search (GET /aliexpress/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 aliexpressSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("aliexpress-search", params); + return client.request("aliexpress-search", params, options); + } + + /** + * aliexpress-search-filters (GET /aliexpress/search-filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object aliexpressSearchFilters(Map params) { + return aliexpressSearchFilters(params, null); + } + + /** + * aliexpress-search-filters (GET /aliexpress/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 aliexpressSearchFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("aliexpress-search-filters", params); + return client.request("aliexpress-search-filters", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/AndroidPoliceGroup.java b/src/main/java/net/crawlora/groups/AndroidPoliceGroup.java new file mode 100644 index 0000000..062f7d1 --- /dev/null +++ b/src/main/java/net/crawlora/groups/AndroidPoliceGroup.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 "androidPolice" operation group. + * Reach it via {@code client.androidPolice()}. + */ +public final class AndroidPoliceGroup { + private final CrawloraClient client; + + public AndroidPoliceGroup(CrawloraClient client) { + this.client = client; + } + + /** + * androidpolice-article (GET /androidpolice/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object androidpoliceArticle(Map params) { + return androidpoliceArticle(params, null); + } + + /** + * androidpolice-article (GET /androidpolice/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 androidpoliceArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("androidpolice-article", params); + return client.request("androidpolice-article", params, options); + } + + /** + * androidpolice-author (GET /androidpolice/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object androidpoliceAuthor(Map params) { + return androidpoliceAuthor(params, null); + } + + /** + * androidpolice-author (GET /androidpolice/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 androidpoliceAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("androidpolice-author", params); + return client.request("androidpolice-author", params, options); + } + + /** + * androidpolice-headlines (GET /androidpolice/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object androidpoliceHeadlines(Map params) { + return androidpoliceHeadlines(params, null); + } + + /** + * androidpolice-headlines (GET /androidpolice/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 androidpoliceHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("androidpolice-headlines", params); + return client.request("androidpolice-headlines", params, options); + } + + /** + * androidpolice-news (GET /androidpolice/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object androidpoliceNews(Map params) { + return androidpoliceNews(params, null); + } + + /** + * androidpolice-news (GET /androidpolice/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 androidpoliceNews(Map params, RequestOptions options) { + OperationGroup.checkParams("androidpolice-news", params); + return client.request("androidpolice-news", params, options); + } + + /** + * androidpolice-news (GET /androidpolice/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object androidpoliceNews() { + return androidpoliceNews(Map.of(), null); + } + + /** + * androidpolice-sections (GET /androidpolice/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object androidpoliceSections(Map params) { + return androidpoliceSections(params, null); + } + + /** + * androidpolice-sections (GET /androidpolice/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object androidpoliceSections(Map params, RequestOptions options) { + OperationGroup.checkParams("androidpolice-sections", params); + return client.request("androidpolice-sections", params, options); + } + + /** + * androidpolice-sections (GET /androidpolice/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object androidpoliceSections() { + return androidpoliceSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/AppStoreGroup.java b/src/main/java/net/crawlora/groups/AppStoreGroup.java index 6a59775..8c62d97 100644 --- a/src/main/java/net/crawlora/groups/AppStoreGroup.java +++ b/src/main/java/net/crawlora/groups/AppStoreGroup.java @@ -80,6 +80,50 @@ public Object categories() { return categories(Map.of(), null); } + /** + * appstore-collection (GET /appstore/collection). + * + * @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); + } + + /** + * appstore-collection (GET /appstore/collection). with explicit request options. + * + * @param params operation parameters + * @param options per-request 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("appstore-collection", params); + return client.request("appstore-collection", params, options); + } + + /** + * appstore-collections (GET /appstore/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); + } + + /** + * appstore-collections (GET /appstore/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("appstore-collections", params); + return client.request("appstore-collections", params, options); + } + /** * appstore-developer (GET /appstore/developer/{dev_id}). * diff --git a/src/main/java/net/crawlora/groups/BenzingaGroup.java b/src/main/java/net/crawlora/groups/BenzingaGroup.java new file mode 100644 index 0000000..e61a627 --- /dev/null +++ b/src/main/java/net/crawlora/groups/BenzingaGroup.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 "benzinga" operation group. + * Reach it via {@code client.benzinga()}. + */ +public final class BenzingaGroup { + private final CrawloraClient client; + + public BenzingaGroup(CrawloraClient client) { + this.client = client; + } + + /** + * benzinga-article (GET /benzinga/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object article(Map params) { + return article(params, null); + } + + /** + * benzinga-article (GET /benzinga/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 article(Map params, RequestOptions options) { + OperationGroup.checkParams("benzinga-article", params); + return client.request("benzinga-article", params, options); + } + + /** + * benzinga-headlines (GET /benzinga/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object headlines(Map params) { + return headlines(params, null); + } + + /** + * benzinga-headlines (GET /benzinga/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 headlines(Map params, RequestOptions options) { + OperationGroup.checkParams("benzinga-headlines", params); + return client.request("benzinga-headlines", params, options); + } + + /** + * benzinga-news (GET /benzinga/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); + } + + /** + * benzinga-news (GET /benzinga/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("benzinga-news", params); + return client.request("benzinga-news", params, options); + } + + /** + * benzinga-news (GET /benzinga/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); + } + + /** + * benzinga-search (GET /benzinga/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); + } + + /** + * benzinga-search (GET /benzinga/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("benzinga-search", params); + return client.request("benzinga-search", params, options); + } + + /** + * benzinga-sections (GET /benzinga/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params) { + return sections(params, null); + } + + /** + * benzinga-sections (GET /benzinga/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params, RequestOptions options) { + OperationGroup.checkParams("benzinga-sections", params); + return client.request("benzinga-sections", params, options); + } + + /** + * benzinga-sections (GET /benzinga/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections() { + return sections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/BrisbaneTimesGroup.java b/src/main/java/net/crawlora/groups/BrisbaneTimesGroup.java new file mode 100644 index 0000000..73c18f3 --- /dev/null +++ b/src/main/java/net/crawlora/groups/BrisbaneTimesGroup.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 "brisbaneTimes" operation group. + * Reach it via {@code client.brisbaneTimes()}. + */ +public final class BrisbaneTimesGroup { + private final CrawloraClient client; + + public BrisbaneTimesGroup(CrawloraClient client) { + this.client = client; + } + + /** + * brisbanetimes-article (GET /brisbanetimes/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object brisbanetimesArticle(Map params) { + return brisbanetimesArticle(params, null); + } + + /** + * brisbanetimes-article (GET /brisbanetimes/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 brisbanetimesArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("brisbanetimes-article", params); + return client.request("brisbanetimes-article", params, options); + } + + /** + * brisbanetimes-author (GET /brisbanetimes/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object brisbanetimesAuthor(Map params) { + return brisbanetimesAuthor(params, null); + } + + /** + * brisbanetimes-author (GET /brisbanetimes/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 brisbanetimesAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("brisbanetimes-author", params); + return client.request("brisbanetimes-author", params, options); + } + + /** + * brisbanetimes-headlines (GET /brisbanetimes/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object brisbanetimesHeadlines(Map params) { + return brisbanetimesHeadlines(params, null); + } + + /** + * brisbanetimes-headlines (GET /brisbanetimes/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 brisbanetimesHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("brisbanetimes-headlines", params); + return client.request("brisbanetimes-headlines", params, options); + } + + /** + * brisbanetimes-news (GET /brisbanetimes/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object brisbanetimesNews(Map params) { + return brisbanetimesNews(params, null); + } + + /** + * brisbanetimes-news (GET /brisbanetimes/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 brisbanetimesNews(Map params, RequestOptions options) { + OperationGroup.checkParams("brisbanetimes-news", params); + return client.request("brisbanetimes-news", params, options); + } + + /** + * brisbanetimes-news (GET /brisbanetimes/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object brisbanetimesNews() { + return brisbanetimesNews(Map.of(), null); + } + + /** + * brisbanetimes-sections (GET /brisbanetimes/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object brisbanetimesSections(Map params) { + return brisbanetimesSections(params, null); + } + + /** + * brisbanetimes-sections (GET /brisbanetimes/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object brisbanetimesSections(Map params, RequestOptions options) { + OperationGroup.checkParams("brisbanetimes-sections", params); + return client.request("brisbanetimes-sections", params, options); + } + + /** + * brisbanetimes-sections (GET /brisbanetimes/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object brisbanetimesSections() { + return brisbanetimesSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/DailyKosGroup.java b/src/main/java/net/crawlora/groups/DailyKosGroup.java new file mode 100644 index 0000000..10d2e39 --- /dev/null +++ b/src/main/java/net/crawlora/groups/DailyKosGroup.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 "dailyKos" operation group. + * Reach it via {@code client.dailyKos()}. + */ +public final class DailyKosGroup { + private final CrawloraClient client; + + public DailyKosGroup(CrawloraClient client) { + this.client = client; + } + + /** + * dailykos-article (GET /dailykos/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailykosArticle(Map params) { + return dailykosArticle(params, null); + } + + /** + * dailykos-article (GET /dailykos/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 dailykosArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("dailykos-article", params); + return client.request("dailykos-article", params, options); + } + + /** + * dailykos-headlines (GET /dailykos/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailykosHeadlines(Map params) { + return dailykosHeadlines(params, null); + } + + /** + * dailykos-headlines (GET /dailykos/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 dailykosHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("dailykos-headlines", params); + return client.request("dailykos-headlines", params, options); + } + + /** + * dailykos-news (GET /dailykos/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailykosNews(Map params) { + return dailykosNews(params, null); + } + + /** + * dailykos-news (GET /dailykos/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 dailykosNews(Map params, RequestOptions options) { + OperationGroup.checkParams("dailykos-news", params); + return client.request("dailykos-news", params, options); + } + + /** + * dailykos-news (GET /dailykos/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailykosNews() { + return dailykosNews(Map.of(), null); + } + + /** + * dailykos-sections (GET /dailykos/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailykosSections(Map params) { + return dailykosSections(params, null); + } + + /** + * dailykos-sections (GET /dailykos/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailykosSections(Map params, RequestOptions options) { + OperationGroup.checkParams("dailykos-sections", params); + return client.request("dailykos-sections", params, options); + } + + /** + * dailykos-sections (GET /dailykos/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailykosSections() { + return dailykosSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/DailyMaverickGroup.java b/src/main/java/net/crawlora/groups/DailyMaverickGroup.java new file mode 100644 index 0000000..46d56dc --- /dev/null +++ b/src/main/java/net/crawlora/groups/DailyMaverickGroup.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 "dailyMaverick" operation group. + * Reach it via {@code client.dailyMaverick()}. + */ +public final class DailyMaverickGroup { + private final CrawloraClient client; + + public DailyMaverickGroup(CrawloraClient client) { + this.client = client; + } + + /** + * dailymaverick-article (GET /dailymaverick/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailymaverickArticle(Map params) { + return dailymaverickArticle(params, null); + } + + /** + * dailymaverick-article (GET /dailymaverick/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 dailymaverickArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("dailymaverick-article", params); + return client.request("dailymaverick-article", params, options); + } + + /** + * dailymaverick-headlines (GET /dailymaverick/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailymaverickHeadlines(Map params) { + return dailymaverickHeadlines(params, null); + } + + /** + * dailymaverick-headlines (GET /dailymaverick/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 dailymaverickHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("dailymaverick-headlines", params); + return client.request("dailymaverick-headlines", params, options); + } + + /** + * dailymaverick-news (GET /dailymaverick/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailymaverickNews(Map params) { + return dailymaverickNews(params, null); + } + + /** + * dailymaverick-news (GET /dailymaverick/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 dailymaverickNews(Map params, RequestOptions options) { + OperationGroup.checkParams("dailymaverick-news", params); + return client.request("dailymaverick-news", params, options); + } + + /** + * dailymaverick-news (GET /dailymaverick/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailymaverickNews() { + return dailymaverickNews(Map.of(), null); + } + + /** + * dailymaverick-sections (GET /dailymaverick/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailymaverickSections(Map params) { + return dailymaverickSections(params, null); + } + + /** + * dailymaverick-sections (GET /dailymaverick/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailymaverickSections(Map params, RequestOptions options) { + OperationGroup.checkParams("dailymaverick-sections", params); + return client.request("dailymaverick-sections", params, options); + } + + /** + * dailymaverick-sections (GET /dailymaverick/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dailymaverickSections() { + return dailymaverickSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/DatasetsGroup.java b/src/main/java/net/crawlora/groups/DatasetsGroup.java index 949b3a1..d4e0f2e 100644 --- a/src/main/java/net/crawlora/groups/DatasetsGroup.java +++ b/src/main/java/net/crawlora/groups/DatasetsGroup.java @@ -685,6 +685,103 @@ public Object creatorsSearch() { return creatorsSearch(Map.of(), null); } + /** + * datasets-doordash-stores-facets (GET /datasets/doordash-stores/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object doordashStoresFacets(Map params) { + return doordashStoresFacets(params, null); + } + + /** + * datasets-doordash-stores-facets (GET /datasets/doordash-stores/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 doordashStoresFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-doordash-stores-facets", params); + return client.request("datasets-doordash-stores-facets", params, options); + } + + /** + * datasets-doordash-stores-item (GET /datasets/doordash-stores/items/{store_id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object doordashStoresItem(Map params) { + return doordashStoresItem(params, null); + } + + /** + * datasets-doordash-stores-item (GET /datasets/doordash-stores/items/{store_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 doordashStoresItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-doordash-stores-item", params); + return client.request("datasets-doordash-stores-item", params, options); + } + + /** + * datasets-doordash-stores-nearby (GET /datasets/doordash-stores/nearby). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object doordashStoresNearby(Map params) { + return doordashStoresNearby(params, null); + } + + /** + * datasets-doordash-stores-nearby (GET /datasets/doordash-stores/nearby). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object doordashStoresNearby(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-doordash-stores-nearby", params); + return client.request("datasets-doordash-stores-nearby", params, options); + } + + /** + * datasets-doordash-stores-search (GET /datasets/doordash-stores/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object doordashStoresSearch(Map params) { + return doordashStoresSearch(params, null); + } + + /** + * datasets-doordash-stores-search (GET /datasets/doordash-stores/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 doordashStoresSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-doordash-stores-search", params); + return client.request("datasets-doordash-stores-search", params, options); + } + + /** + * datasets-doordash-stores-search (GET /datasets/doordash-stores/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object doordashStoresSearch() { + return doordashStoresSearch(Map.of(), null); + } + /** * datasets-facebook-pages-facets (GET /datasets/facebook-pages/facets). * diff --git a/src/main/java/net/crawlora/groups/GoodRxGroup.java b/src/main/java/net/crawlora/groups/GoodRxGroup.java new file mode 100644 index 0000000..d7ad1d1 --- /dev/null +++ b/src/main/java/net/crawlora/groups/GoodRxGroup.java @@ -0,0 +1,533 @@ +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 "goodRx" operation group. + * Reach it via {@code client.goodRx()}. + */ +public final class GoodRxGroup { + private final CrawloraClient client; + + public GoodRxGroup(CrawloraClient client) { + this.client = client; + } + + /** + * goodrx-answer (GET /goodrx/answer). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxAnswer(Map params) { + return goodrxAnswer(params, null); + } + + /** + * goodrx-answer (GET /goodrx/answer). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxAnswer(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-answer", params); + return client.request("goodrx-answer", params, options); + } + + /** + * goodrx-answers (GET /goodrx/answers). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxAnswers(Map params) { + return goodrxAnswers(params, null); + } + + /** + * goodrx-answers (GET /goodrx/answers). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxAnswers(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-answers", params); + return client.request("goodrx-answers", params, options); + } + + /** + * goodrx-answers (GET /goodrx/answers). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxAnswers() { + return goodrxAnswers(Map.of(), null); + } + + /** + * goodrx-brands (GET /goodrx/brands). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxBrands(Map params) { + return goodrxBrands(params, null); + } + + /** + * goodrx-brands (GET /goodrx/brands). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxBrands(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-brands", params); + return client.request("goodrx-brands", params, options); + } + + /** + * goodrx-brands (GET /goodrx/brands). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxBrands() { + return goodrxBrands(Map.of(), null); + } + + /** + * goodrx-class (GET /goodrx/class). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxClass(Map params) { + return goodrxClass(params, null); + } + + /** + * goodrx-class (GET /goodrx/class). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxClass(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-class", params); + return client.request("goodrx-class", params, options); + } + + /** + * goodrx-classes (GET /goodrx/classes). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxClasses(Map params) { + return goodrxClasses(params, null); + } + + /** + * goodrx-classes (GET /goodrx/classes). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxClasses(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-classes", params); + return client.request("goodrx-classes", params, options); + } + + /** + * goodrx-classes (GET /goodrx/classes). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxClasses() { + return goodrxClasses(Map.of(), null); + } + + /** + * goodrx-comparison (GET /goodrx/comparison). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxComparison(Map params) { + return goodrxComparison(params, null); + } + + /** + * goodrx-comparison (GET /goodrx/comparison). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxComparison(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-comparison", params); + return client.request("goodrx-comparison", params, options); + } + + /** + * goodrx-comparisons (GET /goodrx/comparisons). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxComparisons(Map params) { + return goodrxComparisons(params, null); + } + + /** + * goodrx-comparisons (GET /goodrx/comparisons). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxComparisons(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-comparisons", params); + return client.request("goodrx-comparisons", params, options); + } + + /** + * goodrx-comparisons (GET /goodrx/comparisons). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxComparisons() { + return goodrxComparisons(Map.of(), null); + } + + /** + * goodrx-condition (GET /goodrx/condition). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxCondition(Map params) { + return goodrxCondition(params, null); + } + + /** + * goodrx-condition (GET /goodrx/condition). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxCondition(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-condition", params); + return client.request("goodrx-condition", params, options); + } + + /** + * goodrx-condition-drugs (GET /goodrx/condition-drugs). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxConditionDrugs(Map params) { + return goodrxConditionDrugs(params, null); + } + + /** + * goodrx-condition-drugs (GET /goodrx/condition-drugs). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxConditionDrugs(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-condition-drugs", params); + return client.request("goodrx-condition-drugs", params, options); + } + + /** + * goodrx-conditions (GET /goodrx/conditions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxConditions(Map params) { + return goodrxConditions(params, null); + } + + /** + * goodrx-conditions (GET /goodrx/conditions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxConditions(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-conditions", params); + return client.request("goodrx-conditions", params, options); + } + + /** + * goodrx-conditions (GET /goodrx/conditions). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxConditions() { + return goodrxConditions(Map.of(), null); + } + + /** + * goodrx-drug-guide (GET /goodrx/drug-guide). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugGuide(Map params) { + return goodrxDrugGuide(params, null); + } + + /** + * goodrx-drug-guide (GET /goodrx/drug-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 goodrxDrugGuide(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-drug-guide", params); + return client.request("goodrx-drug-guide", params, options); + } + + /** + * goodrx-drug-guides (GET /goodrx/drug-guides). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugGuides(Map params) { + return goodrxDrugGuides(params, null); + } + + /** + * goodrx-drug-guides (GET /goodrx/drug-guides). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugGuides(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-drug-guides", params); + return client.request("goodrx-drug-guides", params, options); + } + + /** + * goodrx-drug-guides (GET /goodrx/drug-guides). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugGuides() { + return goodrxDrugGuides(Map.of(), null); + } + + /** + * goodrx-drug-info (GET /goodrx/drug-info). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugInfo(Map params) { + return goodrxDrugInfo(params, null); + } + + /** + * goodrx-drug-info (GET /goodrx/drug-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 goodrxDrugInfo(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-drug-info", params); + return client.request("goodrx-drug-info", params, options); + } + + /** + * goodrx-drug-options (GET /goodrx/drug-options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugOptions(Map params) { + return goodrxDrugOptions(params, null); + } + + /** + * goodrx-drug-options (GET /goodrx/drug-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 goodrxDrugOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-drug-options", params); + return client.request("goodrx-drug-options", params, options); + } + + /** + * goodrx-drug-prices (GET /goodrx/drug-prices). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugPrices(Map params) { + return goodrxDrugPrices(params, null); + } + + /** + * goodrx-drug-prices (GET /goodrx/drug-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 goodrxDrugPrices(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-drug-prices", params); + return client.request("goodrx-drug-prices", params, options); + } + + /** + * goodrx-drugs (GET /goodrx/drugs). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugs(Map params) { + return goodrxDrugs(params, null); + } + + /** + * goodrx-drugs (GET /goodrx/drugs). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxDrugs(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-drugs", params); + return client.request("goodrx-drugs", params, options); + } + + /** + * goodrx-health-article (GET /goodrx/health-article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxHealthArticle(Map params) { + return goodrxHealthArticle(params, null); + } + + /** + * goodrx-health-article (GET /goodrx/health-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 goodrxHealthArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-health-article", params); + return client.request("goodrx-health-article", params, options); + } + + /** + * goodrx-health-articles (GET /goodrx/health-articles). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxHealthArticles(Map params) { + return goodrxHealthArticles(params, null); + } + + /** + * goodrx-health-articles (GET /goodrx/health-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 goodrxHealthArticles(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-health-articles", params); + return client.request("goodrx-health-articles", params, options); + } + + /** + * goodrx-health-topics (GET /goodrx/health-topics). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxHealthTopics(Map params) { + return goodrxHealthTopics(params, null); + } + + /** + * goodrx-health-topics (GET /goodrx/health-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 goodrxHealthTopics(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-health-topics", params); + return client.request("goodrx-health-topics", params, options); + } + + /** + * goodrx-health-topics (GET /goodrx/health-topics). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxHealthTopics() { + return goodrxHealthTopics(Map.of(), null); + } + + /** + * goodrx-pet-medications (GET /goodrx/pet-medications). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxPetMedications(Map params) { + return goodrxPetMedications(params, null); + } + + /** + * goodrx-pet-medications (GET /goodrx/pet-medications). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxPetMedications(Map params, RequestOptions options) { + OperationGroup.checkParams("goodrx-pet-medications", params); + return client.request("goodrx-pet-medications", params, options); + } + + /** + * goodrx-pet-medications (GET /goodrx/pet-medications). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object goodrxPetMedications() { + return goodrxPetMedications(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/GreystarGroup.java b/src/main/java/net/crawlora/groups/GreystarGroup.java new file mode 100644 index 0000000..540fe36 --- /dev/null +++ b/src/main/java/net/crawlora/groups/GreystarGroup.java @@ -0,0 +1,264 @@ +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 "greystar" operation group. + * Reach it via {@code client.greystar()}. + */ +public final class GreystarGroup { + private final CrawloraClient client; + + public GreystarGroup(CrawloraClient client) { + this.client = client; + } + + /** + * greystar-articles (GET /greystar/articles). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object articles(Map params) { + return articles(params, null); + } + + /** + * greystar-articles (GET /greystar/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 articles(Map params, RequestOptions options) { + OperationGroup.checkParams("greystar-articles", params); + return client.request("greystar-articles", params, options); + } + + /** + * greystar-articles (GET /greystar/articles). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object articles() { + return articles(Map.of(), null); + } + + /** + * greystar-article (GET /greystar/articles/{section}/{slug}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object article(Map params) { + return article(params, null); + } + + /** + * greystar-article (GET /greystar/articles/{section}/{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 article(Map params, RequestOptions options) { + OperationGroup.checkParams("greystar-article", params); + return client.request("greystar-article", params, options); + } + + /** + * greystar-location (GET /greystar/location). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object location(Map params) { + return location(params, null); + } + + /** + * greystar-location (GET /greystar/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 location(Map params, RequestOptions options) { + OperationGroup.checkParams("greystar-location", params); + return client.request("greystar-location", params, options); + } + + /** + * greystar-locations (GET /greystar/locations). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object locations(Map params) { + return locations(params, null); + } + + /** + * greystar-locations (GET /greystar/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 locations(Map params, RequestOptions options) { + OperationGroup.checkParams("greystar-locations", params); + return client.request("greystar-locations", params, options); + } + + /** + * greystar-locations (GET /greystar/locations). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object locations() { + return locations(Map.of(), null); + } + + /** + * greystar-markets (GET /greystar/markets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object markets(Map params) { + return markets(params, null); + } + + /** + * greystar-markets (GET /greystar/markets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object markets(Map params, RequestOptions options) { + OperationGroup.checkParams("greystar-markets", params); + return client.request("greystar-markets", params, options); + } + + /** + * greystar-markets (GET /greystar/markets). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object markets() { + return markets(Map.of(), null); + } + + /** + * greystar-newsroom (GET /greystar/newsroom). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsroom(Map params) { + return newsroom(params, null); + } + + /** + * greystar-newsroom (GET /greystar/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 newsroom(Map params, RequestOptions options) { + OperationGroup.checkParams("greystar-newsroom", params); + return client.request("greystar-newsroom", params, options); + } + + /** + * greystar-newsroom (GET /greystar/newsroom). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsroom() { + return newsroom(Map.of(), null); + } + + /** + * greystar-newsroom-article (GET /greystar/newsroom/{slug}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsroomArticle(Map params) { + return newsroomArticle(params, null); + } + + /** + * greystar-newsroom-article (GET /greystar/newsroom/{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 newsroomArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("greystar-newsroom-article", params); + return client.request("greystar-newsroom-article", params, options); + } + + /** + * greystar-property (GET /greystar/properties/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object property(Map params) { + return property(params, null); + } + + /** + * greystar-property (GET /greystar/properties/{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 property(Map params, RequestOptions options) { + OperationGroup.checkParams("greystar-property", params); + return client.request("greystar-property", params, options); + } + + /** + * greystar-search (GET /greystar/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); + } + + /** + * greystar-search (GET /greystar/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("greystar-search", params); + return client.request("greystar-search", params, options); + } + + /** + * greystar-search (GET /greystar/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); + } + +} diff --git a/src/main/java/net/crawlora/groups/HealthgradesGroup.java b/src/main/java/net/crawlora/groups/HealthgradesGroup.java new file mode 100644 index 0000000..50514f9 --- /dev/null +++ b/src/main/java/net/crawlora/groups/HealthgradesGroup.java @@ -0,0 +1,400 @@ +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 "healthgrades" operation group. + * Reach it via {@code client.healthgrades()}. + */ +public final class HealthgradesGroup { + private final CrawloraClient client; + + public HealthgradesGroup(CrawloraClient client) { + this.client = client; + } + + /** + * healthgrades-autocomplete (GET /healthgrades/autocomplete). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object autocomplete(Map params) { + return autocomplete(params, null); + } + + /** + * healthgrades-autocomplete (GET /healthgrades/autocomplete). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object autocomplete(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-autocomplete", params); + return client.request("healthgrades-autocomplete", params, options); + } + + /** + * healthgrades-facilities-filters (GET /healthgrades/facilities/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object facilitiesFilters(Map params) { + return facilitiesFilters(params, null); + } + + /** + * healthgrades-facilities-filters (GET /healthgrades/facilities/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 facilitiesFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-facilities-filters", params); + return client.request("healthgrades-facilities-filters", params, options); + } + + /** + * healthgrades-facilities-search (GET /healthgrades/facilities/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object facilitiesSearch(Map params) { + return facilitiesSearch(params, null); + } + + /** + * healthgrades-facilities-search (GET /healthgrades/facilities/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 facilitiesSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-facilities-search", params); + return client.request("healthgrades-facilities-search", params, options); + } + + /** + * healthgrades-facility (GET /healthgrades/facility). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object facility(Map params) { + return facility(params, null); + } + + /** + * healthgrades-facility (GET /healthgrades/facility). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object facility(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-facility", params); + return client.request("healthgrades-facility", params, options); + } + + /** + * healthgrades-health-article (GET /healthgrades/health-article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object healthArticle(Map params) { + return healthArticle(params, null); + } + + /** + * healthgrades-health-article (GET /healthgrades/health-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 healthArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-health-article", params); + return client.request("healthgrades-health-article", params, options); + } + + /** + * healthgrades-health-articles (GET /healthgrades/health-articles). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object healthArticles(Map params) { + return healthArticles(params, null); + } + + /** + * healthgrades-health-articles (GET /healthgrades/health-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 healthArticles(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-health-articles", params); + return client.request("healthgrades-health-articles", params, options); + } + + /** + * healthgrades-health-topics (GET /healthgrades/health-topics). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object healthTopics(Map params) { + return healthTopics(params, null); + } + + /** + * healthgrades-health-topics (GET /healthgrades/health-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 healthTopics(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-health-topics", params); + return client.request("healthgrades-health-topics", params, options); + } + + /** + * healthgrades-health-topics (GET /healthgrades/health-topics). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object healthTopics() { + return healthTopics(Map.of(), null); + } + + /** + * healthgrades-hospital (GET /healthgrades/hospital). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hospital(Map params) { + return hospital(params, null); + } + + /** + * healthgrades-hospital (GET /healthgrades/hospital). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hospital(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-hospital", params); + return client.request("healthgrades-hospital", params, options); + } + + /** + * healthgrades-hospital-awards (GET /healthgrades/hospital-awards). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hospitalAwards(Map params) { + return hospitalAwards(params, null); + } + + /** + * healthgrades-hospital-awards (GET /healthgrades/hospital-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 hospitalAwards(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-hospital-awards", params); + return client.request("healthgrades-hospital-awards", params, options); + } + + /** + * healthgrades-hospital-award-filters (GET /healthgrades/hospital-awards/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hospitalAwardFilters(Map params) { + return hospitalAwardFilters(params, null); + } + + /** + * healthgrades-hospital-award-filters (GET /healthgrades/hospital-awards/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 hospitalAwardFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-hospital-award-filters", params); + return client.request("healthgrades-hospital-award-filters", params, options); + } + + /** + * healthgrades-locations (GET /healthgrades/locations). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object locations(Map params) { + return locations(params, null); + } + + /** + * healthgrades-locations (GET /healthgrades/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 locations(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-locations", params); + return client.request("healthgrades-locations", params, options); + } + + /** + * healthgrades-physician (GET /healthgrades/physician). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physician(Map params) { + return physician(params, null); + } + + /** + * healthgrades-physician (GET /healthgrades/physician). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physician(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-physician", params); + return client.request("healthgrades-physician", params, options); + } + + /** + * healthgrades-physicians-filters (GET /healthgrades/physicians/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physiciansFilters(Map params) { + return physiciansFilters(params, null); + } + + /** + * healthgrades-physicians-filters (GET /healthgrades/physicians/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 physiciansFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-physicians-filters", params); + return client.request("healthgrades-physicians-filters", params, options); + } + + /** + * healthgrades-physicians-search (GET /healthgrades/physicians/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physiciansSearch(Map params) { + return physiciansSearch(params, null); + } + + /** + * healthgrades-physicians-search (GET /healthgrades/physicians/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 physiciansSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-physicians-search", params); + return client.request("healthgrades-physicians-search", params, options); + } + + /** + * healthgrades-specialties (GET /healthgrades/specialties). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object specialties(Map params) { + return specialties(params, null); + } + + /** + * healthgrades-specialties (GET /healthgrades/specialties). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object specialties(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-specialties", params); + return client.request("healthgrades-specialties", params, options); + } + + /** + * healthgrades-specialties (GET /healthgrades/specialties). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object specialties() { + return specialties(Map.of(), null); + } + + /** + * healthgrades-top-searches (GET /healthgrades/top-searches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topSearches(Map params) { + return topSearches(params, null); + } + + /** + * healthgrades-top-searches (GET /healthgrades/top-searches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topSearches(Map params, RequestOptions options) { + OperationGroup.checkParams("healthgrades-top-searches", params); + return client.request("healthgrades-top-searches", params, options); + } + + /** + * healthgrades-top-searches (GET /healthgrades/top-searches). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topSearches() { + return topSearches(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/HoustonChronicleGroup.java b/src/main/java/net/crawlora/groups/HoustonChronicleGroup.java new file mode 100644 index 0000000..988e304 --- /dev/null +++ b/src/main/java/net/crawlora/groups/HoustonChronicleGroup.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 "houstonChronicle" operation group. + * Reach it via {@code client.houstonChronicle()}. + */ +public final class HoustonChronicleGroup { + private final CrawloraClient client; + + public HoustonChronicleGroup(CrawloraClient client) { + this.client = client; + } + + /** + * houston-chronicle-article (GET /houston-chronicle/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object article(Map params) { + return article(params, null); + } + + /** + * houston-chronicle-article (GET /houston-chronicle/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 article(Map params, RequestOptions options) { + OperationGroup.checkParams("houston-chronicle-article", params); + return client.request("houston-chronicle-article", params, options); + } + + /** + * houston-chronicle-author (GET /houston-chronicle/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); + } + + /** + * houston-chronicle-author (GET /houston-chronicle/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("houston-chronicle-author", params); + return client.request("houston-chronicle-author", params, options); + } + + /** + * houston-chronicle-headlines (GET /houston-chronicle/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object headlines(Map params) { + return headlines(params, null); + } + + /** + * houston-chronicle-headlines (GET /houston-chronicle/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 headlines(Map params, RequestOptions options) { + OperationGroup.checkParams("houston-chronicle-headlines", params); + return client.request("houston-chronicle-headlines", params, options); + } + + /** + * houston-chronicle-news (GET /houston-chronicle/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); + } + + /** + * houston-chronicle-news (GET /houston-chronicle/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("houston-chronicle-news", params); + return client.request("houston-chronicle-news", params, options); + } + + /** + * houston-chronicle-news (GET /houston-chronicle/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); + } + + /** + * houston-chronicle-sections (GET /houston-chronicle/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params) { + return sections(params, null); + } + + /** + * houston-chronicle-sections (GET /houston-chronicle/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params, RequestOptions options) { + OperationGroup.checkParams("houston-chronicle-sections", params); + return client.request("houston-chronicle-sections", params, options); + } + + /** + * houston-chronicle-sections (GET /houston-chronicle/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections() { + return sections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/MakeUseOfGroup.java b/src/main/java/net/crawlora/groups/MakeUseOfGroup.java new file mode 100644 index 0000000..b9dc717 --- /dev/null +++ b/src/main/java/net/crawlora/groups/MakeUseOfGroup.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 "makeUseOf" operation group. + * Reach it via {@code client.makeUseOf()}. + */ +public final class MakeUseOfGroup { + private final CrawloraClient client; + + public MakeUseOfGroup(CrawloraClient client) { + this.client = client; + } + + /** + * makeuseof-article (GET /makeuseof/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object makeuseofArticle(Map params) { + return makeuseofArticle(params, null); + } + + /** + * makeuseof-article (GET /makeuseof/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 makeuseofArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("makeuseof-article", params); + return client.request("makeuseof-article", params, options); + } + + /** + * makeuseof-author (GET /makeuseof/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object makeuseofAuthor(Map params) { + return makeuseofAuthor(params, null); + } + + /** + * makeuseof-author (GET /makeuseof/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 makeuseofAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("makeuseof-author", params); + return client.request("makeuseof-author", params, options); + } + + /** + * makeuseof-headlines (GET /makeuseof/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object makeuseofHeadlines(Map params) { + return makeuseofHeadlines(params, null); + } + + /** + * makeuseof-headlines (GET /makeuseof/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 makeuseofHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("makeuseof-headlines", params); + return client.request("makeuseof-headlines", params, options); + } + + /** + * makeuseof-news (GET /makeuseof/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object makeuseofNews(Map params) { + return makeuseofNews(params, null); + } + + /** + * makeuseof-news (GET /makeuseof/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 makeuseofNews(Map params, RequestOptions options) { + OperationGroup.checkParams("makeuseof-news", params); + return client.request("makeuseof-news", params, options); + } + + /** + * makeuseof-news (GET /makeuseof/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object makeuseofNews() { + return makeuseofNews(Map.of(), null); + } + + /** + * makeuseof-sections (GET /makeuseof/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object makeuseofSections(Map params) { + return makeuseofSections(params, null); + } + + /** + * makeuseof-sections (GET /makeuseof/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object makeuseofSections(Map params, RequestOptions options) { + OperationGroup.checkParams("makeuseof-sections", params); + return client.request("makeuseof-sections", params, options); + } + + /** + * makeuseof-sections (GET /makeuseof/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object makeuseofSections() { + return makeuseofSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/MalayMailGroup.java b/src/main/java/net/crawlora/groups/MalayMailGroup.java new file mode 100644 index 0000000..1fbefc0 --- /dev/null +++ b/src/main/java/net/crawlora/groups/MalayMailGroup.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 "malayMail" operation group. + * Reach it via {@code client.malayMail()}. + */ +public final class MalayMailGroup { + private final CrawloraClient client; + + public MalayMailGroup(CrawloraClient client) { + this.client = client; + } + + /** + * malaymail-article (GET /malaymail/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object malaymailArticle(Map params) { + return malaymailArticle(params, null); + } + + /** + * malaymail-article (GET /malaymail/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 malaymailArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("malaymail-article", params); + return client.request("malaymail-article", params, options); + } + + /** + * malaymail-headlines (GET /malaymail/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object malaymailHeadlines(Map params) { + return malaymailHeadlines(params, null); + } + + /** + * malaymail-headlines (GET /malaymail/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 malaymailHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("malaymail-headlines", params); + return client.request("malaymail-headlines", params, options); + } + + /** + * malaymail-news (GET /malaymail/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object malaymailNews(Map params) { + return malaymailNews(params, null); + } + + /** + * malaymail-news (GET /malaymail/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 malaymailNews(Map params, RequestOptions options) { + OperationGroup.checkParams("malaymail-news", params); + return client.request("malaymail-news", params, options); + } + + /** + * malaymail-news (GET /malaymail/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object malaymailNews() { + return malaymailNews(Map.of(), null); + } + + /** + * malaymail-sections (GET /malaymail/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object malaymailSections(Map params) { + return malaymailSections(params, null); + } + + /** + * malaymail-sections (GET /malaymail/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object malaymailSections(Map params, RequestOptions options) { + OperationGroup.checkParams("malaymail-sections", params); + return client.request("malaymail-sections", params, options); + } + + /** + * malaymail-sections (GET /malaymail/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object malaymailSections() { + return malaymailSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/MlbGroup.java b/src/main/java/net/crawlora/groups/MlbGroup.java index b75233e..67b2896 100644 --- a/src/main/java/net/crawlora/groups/MlbGroup.java +++ b/src/main/java/net/crawlora/groups/MlbGroup.java @@ -225,6 +225,37 @@ public Object playerStats(Map params, RequestOptions options) { return client.request("mlb-player-stats", params, options); } + /** + * mlb-prospect-rankings (GET /mlb/prospect-rankings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object prospectRankings(Map params) { + return prospectRankings(params, null); + } + + /** + * mlb-prospect-rankings (GET /mlb/prospect-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 prospectRankings(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-prospect-rankings", params); + return client.request("mlb-prospect-rankings", params, options); + } + + /** + * mlb-prospect-rankings (GET /mlb/prospect-rankings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object prospectRankings() { + return prospectRankings(Map.of(), null); + } + /** * mlb-prospect-stats (GET /mlb/prospect-stats). * @@ -341,96 +372,1374 @@ public Object standings() { } /** - * mlb-statcast-expected (GET /mlb/statcast-expected). + * mlb-statcast-abs-challenges (GET /mlb/statcast-abs-challenges). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcastExpected(Map params) { - return statcastExpected(params, null); + public Object statcastAbsChallenges(Map params) { + return statcastAbsChallenges(params, null); } /** - * mlb-statcast-expected (GET /mlb/statcast-expected). with explicit request options. + * mlb-statcast-abs-challenges (GET /mlb/statcast-abs-challenges). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcastExpected(Map params, RequestOptions options) { - OperationGroup.checkParams("mlb-statcast-expected", params); - return client.request("mlb-statcast-expected", params, options); + public Object statcastAbsChallenges(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-abs-challenges", params); + return client.request("mlb-statcast-abs-challenges", params, options); } /** - * mlb-statcast-expected (GET /mlb/statcast-expected). with no parameters. + * mlb-statcast-abs-challenges (GET /mlb/statcast-abs-challenges). with no parameters. * * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcastExpected() { - return statcastExpected(Map.of(), null); + public Object statcastAbsChallenges() { + return statcastAbsChallenges(Map.of(), null); } /** - * mlb-statcast (GET /mlb/statcast-leaders). + * mlb-statcast-active-spin (GET /mlb/statcast-active-spin). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcast(Map params) { - return statcast(params, null); + public Object statcastActiveSpin(Map params) { + return statcastActiveSpin(params, null); } /** - * mlb-statcast (GET /mlb/statcast-leaders). with explicit request options. + * mlb-statcast-active-spin (GET /mlb/statcast-active-spin). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcast(Map params, RequestOptions options) { - OperationGroup.checkParams("mlb-statcast", params); - return client.request("mlb-statcast", params, options); + public Object statcastActiveSpin(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-active-spin", params); + return client.request("mlb-statcast-active-spin", params, options); } /** - * mlb-statcast (GET /mlb/statcast-leaders). with no parameters. + * mlb-statcast-active-spin (GET /mlb/statcast-active-spin). with no parameters. * * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcast() { - return statcast(Map.of(), null); + public Object statcastActiveSpin() { + return statcastActiveSpin(Map.of(), null); } /** - * mlb-statcast-oaa (GET /mlb/statcast-oaa). + * mlb-statcast-arm-angle (GET /mlb/statcast-arm-angle). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcastOaa(Map params) { - return statcastOaa(params, null); + public Object statcastArmAngle(Map params) { + return statcastArmAngle(params, null); } /** - * mlb-statcast-oaa (GET /mlb/statcast-oaa). with explicit request options. + * mlb-statcast-arm-angle (GET /mlb/statcast-arm-angle). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcastOaa(Map params, RequestOptions options) { - OperationGroup.checkParams("mlb-statcast-oaa", params); - return client.request("mlb-statcast-oaa", params, options); + public Object statcastArmAngle(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-arm-angle", params); + return client.request("mlb-statcast-arm-angle", params, options); } /** - * mlb-statcast-oaa (GET /mlb/statcast-oaa). with no parameters. + * mlb-statcast-arm-angle (GET /mlb/statcast-arm-angle). with no parameters. * * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object statcastOaa() { - return statcastOaa(Map.of(), null); + public Object statcastArmAngle() { + return statcastArmAngle(Map.of(), null); + } + + /** + * mlb-statcast-arm-strength (GET /mlb/statcast-arm-strength). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastArmStrength(Map params) { + return statcastArmStrength(params, null); + } + + /** + * mlb-statcast-arm-strength (GET /mlb/statcast-arm-strength). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastArmStrength(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-arm-strength", params); + return client.request("mlb-statcast-arm-strength", params, options); + } + + /** + * mlb-statcast-arm-strength (GET /mlb/statcast-arm-strength). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastArmStrength() { + return statcastArmStrength(Map.of(), null); + } + + /** + * mlb-statcast-arm-strength-player (GET /mlb/statcast-arm-strength-player). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastArmStrengthPlayer(Map params) { + return statcastArmStrengthPlayer(params, null); + } + + /** + * mlb-statcast-arm-strength-player (GET /mlb/statcast-arm-strength-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 statcastArmStrengthPlayer(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-arm-strength-player", params); + return client.request("mlb-statcast-arm-strength-player", params, options); + } + + /** + * mlb-statcast-arm-value (GET /mlb/statcast-arm-value). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastArmValue(Map params) { + return statcastArmValue(params, null); + } + + /** + * mlb-statcast-arm-value (GET /mlb/statcast-arm-value). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastArmValue(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-arm-value", params); + return client.request("mlb-statcast-arm-value", params, options); + } + + /** + * mlb-statcast-arm-value (GET /mlb/statcast-arm-value). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastArmValue() { + return statcastArmValue(Map.of(), null); + } + + /** + * mlb-statcast-arm-value-details (GET /mlb/statcast-arm-value-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastArmValueDetails(Map params) { + return statcastArmValueDetails(params, null); + } + + /** + * mlb-statcast-arm-value-details (GET /mlb/statcast-arm-value-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 statcastArmValueDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-arm-value-details", params); + return client.request("mlb-statcast-arm-value-details", params, options); + } + + /** + * mlb-statcast-baserunning (GET /mlb/statcast-baserunning). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBaserunning(Map params) { + return statcastBaserunning(params, null); + } + + /** + * mlb-statcast-baserunning (GET /mlb/statcast-baserunning). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBaserunning(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-baserunning", params); + return client.request("mlb-statcast-baserunning", params, options); + } + + /** + * mlb-statcast-bat-tracking (GET /mlb/statcast-bat-tracking). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBatTracking(Map params) { + return statcastBatTracking(params, null); + } + + /** + * mlb-statcast-bat-tracking (GET /mlb/statcast-bat-tracking). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBatTracking(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-bat-tracking", params); + return client.request("mlb-statcast-bat-tracking", params, options); + } + + /** + * mlb-statcast-bat-tracking (GET /mlb/statcast-bat-tracking). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBatTracking() { + return statcastBatTracking(Map.of(), null); + } + + /** + * mlb-statcast-batted-ball (GET /mlb/statcast-batted-ball). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBattedBall(Map params) { + return statcastBattedBall(params, null); + } + + /** + * mlb-statcast-batted-ball (GET /mlb/statcast-batted-ball). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBattedBall(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-batted-ball", params); + return client.request("mlb-statcast-batted-ball", params, options); + } + + /** + * mlb-statcast-batted-ball (GET /mlb/statcast-batted-ball). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBattedBall() { + return statcastBattedBall(Map.of(), null); + } + + /** + * mlb-statcast-birthday-index (GET /mlb/statcast-birthday-index). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBirthdayIndex(Map params) { + return statcastBirthdayIndex(params, null); + } + + /** + * mlb-statcast-birthday-index (GET /mlb/statcast-birthday-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 statcastBirthdayIndex(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-birthday-index", params); + return client.request("mlb-statcast-birthday-index", params, options); + } + + /** + * mlb-statcast-birthday-index (GET /mlb/statcast-birthday-index). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastBirthdayIndex() { + return statcastBirthdayIndex(Map.of(), null); + } + + /** + * mlb-statcast-catcher-blocking (GET /mlb/statcast-catcher-blocking). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherBlocking(Map params) { + return statcastCatcherBlocking(params, null); + } + + /** + * mlb-statcast-catcher-blocking (GET /mlb/statcast-catcher-blocking). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherBlocking(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-catcher-blocking", params); + return client.request("mlb-statcast-catcher-blocking", params, options); + } + + /** + * mlb-statcast-catcher-blocking (GET /mlb/statcast-catcher-blocking). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherBlocking() { + return statcastCatcherBlocking(Map.of(), null); + } + + /** + * mlb-statcast-catcher-blocking-details (GET /mlb/statcast-catcher-blocking-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherBlockingDetails(Map params) { + return statcastCatcherBlockingDetails(params, null); + } + + /** + * mlb-statcast-catcher-blocking-details (GET /mlb/statcast-catcher-blocking-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 statcastCatcherBlockingDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-catcher-blocking-details", params); + return client.request("mlb-statcast-catcher-blocking-details", params, options); + } + + /** + * mlb-statcast-catcher-framing (GET /mlb/statcast-catcher-framing). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherFraming(Map params) { + return statcastCatcherFraming(params, null); + } + + /** + * mlb-statcast-catcher-framing (GET /mlb/statcast-catcher-framing). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherFraming(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-catcher-framing", params); + return client.request("mlb-statcast-catcher-framing", params, options); + } + + /** + * mlb-statcast-catcher-framing (GET /mlb/statcast-catcher-framing). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherFraming() { + return statcastCatcherFraming(Map.of(), null); + } + + /** + * mlb-statcast-catcher-framing-details (GET /mlb/statcast-catcher-framing-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherFramingDetails(Map params) { + return statcastCatcherFramingDetails(params, null); + } + + /** + * mlb-statcast-catcher-framing-details (GET /mlb/statcast-catcher-framing-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 statcastCatcherFramingDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-catcher-framing-details", params); + return client.request("mlb-statcast-catcher-framing-details", params, options); + } + + /** + * mlb-statcast-catcher-pop-time (GET /mlb/statcast-catcher-pop-time). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherPopTime(Map params) { + return statcastCatcherPopTime(params, null); + } + + /** + * mlb-statcast-catcher-pop-time (GET /mlb/statcast-catcher-pop-time). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherPopTime(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-catcher-pop-time", params); + return client.request("mlb-statcast-catcher-pop-time", params, options); + } + + /** + * mlb-statcast-catcher-pop-time (GET /mlb/statcast-catcher-pop-time). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherPopTime() { + return statcastCatcherPopTime(Map.of(), null); + } + + /** + * mlb-statcast-catcher-stance (GET /mlb/statcast-catcher-stance). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherStance(Map params) { + return statcastCatcherStance(params, null); + } + + /** + * mlb-statcast-catcher-stance (GET /mlb/statcast-catcher-stance). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherStance(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-catcher-stance", params); + return client.request("mlb-statcast-catcher-stance", params, options); + } + + /** + * mlb-statcast-catcher-stance (GET /mlb/statcast-catcher-stance). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherStance() { + return statcastCatcherStance(Map.of(), null); + } + + /** + * mlb-statcast-catcher-throwing (GET /mlb/statcast-catcher-throwing). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherThrowing(Map params) { + return statcastCatcherThrowing(params, null); + } + + /** + * mlb-statcast-catcher-throwing (GET /mlb/statcast-catcher-throwing). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherThrowing(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-catcher-throwing", params); + return client.request("mlb-statcast-catcher-throwing", params, options); + } + + /** + * mlb-statcast-catcher-throwing (GET /mlb/statcast-catcher-throwing). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherThrowing() { + return statcastCatcherThrowing(Map.of(), null); + } + + /** + * mlb-statcast-catcher-throwing-details (GET /mlb/statcast-catcher-throwing-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastCatcherThrowingDetails(Map params) { + return statcastCatcherThrowingDetails(params, null); + } + + /** + * mlb-statcast-catcher-throwing-details (GET /mlb/statcast-catcher-throwing-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 statcastCatcherThrowingDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-catcher-throwing-details", params); + return client.request("mlb-statcast-catcher-throwing-details", params, options); + } + + /** + * mlb-statcast-expected (GET /mlb/statcast-expected). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastExpected(Map params) { + return statcastExpected(params, null); + } + + /** + * mlb-statcast-expected (GET /mlb/statcast-expected). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastExpected(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-expected", params); + return client.request("mlb-statcast-expected", params, options); + } + + /** + * mlb-statcast-expected (GET /mlb/statcast-expected). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastExpected() { + return statcastExpected(Map.of(), null); + } + + /** + * mlb-statcast-fielding-run-value (GET /mlb/statcast-fielding-run-value). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastFieldingRunValue(Map params) { + return statcastFieldingRunValue(params, null); + } + + /** + * mlb-statcast-fielding-run-value (GET /mlb/statcast-fielding-run-value). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastFieldingRunValue(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-fielding-run-value", params); + return client.request("mlb-statcast-fielding-run-value", params, options); + } + + /** + * mlb-statcast-fielding-run-value (GET /mlb/statcast-fielding-run-value). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastFieldingRunValue() { + return statcastFieldingRunValue(Map.of(), null); + } + + /** + * mlb-statcast-first-base-receiving (GET /mlb/statcast-first-base-receiving). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastFirstBaseReceiving(Map params) { + return statcastFirstBaseReceiving(params, null); + } + + /** + * mlb-statcast-first-base-receiving (GET /mlb/statcast-first-base-receiving). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastFirstBaseReceiving(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-first-base-receiving", params); + return client.request("mlb-statcast-first-base-receiving", params, options); + } + + /** + * mlb-statcast-first-base-receiving (GET /mlb/statcast-first-base-receiving). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastFirstBaseReceiving() { + return statcastFirstBaseReceiving(Map.of(), null); + } + + /** + * mlb-statcast-first-base-receiving-details (GET /mlb/statcast-first-base-receiving-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastFirstBaseReceivingDetails(Map params) { + return statcastFirstBaseReceivingDetails(params, null); + } + + /** + * mlb-statcast-first-base-receiving-details (GET /mlb/statcast-first-base-receiving-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 statcastFirstBaseReceivingDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-first-base-receiving-details", params); + return client.request("mlb-statcast-first-base-receiving-details", params, options); + } + + /** + * mlb-statcast-home-runs (GET /mlb/statcast-home-runs). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastHomeRuns(Map params) { + return statcastHomeRuns(params, null); + } + + /** + * mlb-statcast-home-runs (GET /mlb/statcast-home-runs). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastHomeRuns(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-home-runs", params); + return client.request("mlb-statcast-home-runs", params, options); + } + + /** + * mlb-statcast-home-runs (GET /mlb/statcast-home-runs). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastHomeRuns() { + return statcastHomeRuns(Map.of(), null); + } + + /** + * mlb-statcast-home-runs-details (GET /mlb/statcast-home-runs-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastHomeRunsDetails(Map params) { + return statcastHomeRunsDetails(params, null); + } + + /** + * mlb-statcast-home-runs-details (GET /mlb/statcast-home-runs-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 statcastHomeRunsDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-home-runs-details", params); + return client.request("mlb-statcast-home-runs-details", params, options); + } + + /** + * mlb-statcast (GET /mlb/statcast-leaders). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcast(Map params) { + return statcast(params, null); + } + + /** + * mlb-statcast (GET /mlb/statcast-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 statcast(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast", params); + return client.request("mlb-statcast", params, options); + } + + /** + * mlb-statcast (GET /mlb/statcast-leaders). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcast() { + return statcast(Map.of(), null); + } + + /** + * mlb-statcast-oaa (GET /mlb/statcast-oaa). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastOaa(Map params) { + return statcastOaa(params, null); + } + + /** + * mlb-statcast-oaa (GET /mlb/statcast-oaa). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastOaa(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-oaa", params); + return client.request("mlb-statcast-oaa", params, options); + } + + /** + * mlb-statcast-oaa (GET /mlb/statcast-oaa). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastOaa() { + return statcastOaa(Map.of(), null); + } + + /** + * mlb-statcast-park-factors (GET /mlb/statcast-park-factors). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastParkFactors(Map params) { + return statcastParkFactors(params, null); + } + + /** + * mlb-statcast-park-factors (GET /mlb/statcast-park-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 statcastParkFactors(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-park-factors", params); + return client.request("mlb-statcast-park-factors", params, options); + } + + /** + * mlb-statcast-park-factors (GET /mlb/statcast-park-factors). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastParkFactors() { + return statcastParkFactors(Map.of(), null); + } + + /** + * mlb-statcast-percentile (GET /mlb/statcast-percentile). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPercentile(Map params) { + return statcastPercentile(params, null); + } + + /** + * mlb-statcast-percentile (GET /mlb/statcast-percentile). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPercentile(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-percentile", params); + return client.request("mlb-statcast-percentile", params, options); + } + + /** + * mlb-statcast-percentile (GET /mlb/statcast-percentile). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPercentile() { + return statcastPercentile(Map.of(), null); + } + + /** + * mlb-statcast-pitch-arsenal (GET /mlb/statcast-pitch-arsenal). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchArsenal(Map params) { + return statcastPitchArsenal(params, null); + } + + /** + * mlb-statcast-pitch-arsenal (GET /mlb/statcast-pitch-arsenal). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchArsenal(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-pitch-arsenal", params); + return client.request("mlb-statcast-pitch-arsenal", params, options); + } + + /** + * mlb-statcast-pitch-arsenal (GET /mlb/statcast-pitch-arsenal). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchArsenal() { + return statcastPitchArsenal(Map.of(), null); + } + + /** + * mlb-statcast-pitch-arsenal-details (GET /mlb/statcast-pitch-arsenal-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchArsenalDetails(Map params) { + return statcastPitchArsenalDetails(params, null); + } + + /** + * mlb-statcast-pitch-arsenal-details (GET /mlb/statcast-pitch-arsenal-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 statcastPitchArsenalDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-pitch-arsenal-details", params); + return client.request("mlb-statcast-pitch-arsenal-details", params, options); + } + + /** + * mlb-statcast-pitch-arsenals (GET /mlb/statcast-pitch-arsenals). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchArsenals(Map params) { + return statcastPitchArsenals(params, null); + } + + /** + * mlb-statcast-pitch-arsenals (GET /mlb/statcast-pitch-arsenals). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchArsenals(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-pitch-arsenals", params); + return client.request("mlb-statcast-pitch-arsenals", params, options); + } + + /** + * mlb-statcast-pitch-arsenals (GET /mlb/statcast-pitch-arsenals). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchArsenals() { + return statcastPitchArsenals(Map.of(), null); + } + + /** + * mlb-statcast-pitch-movement (GET /mlb/statcast-pitch-movement). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchMovement(Map params) { + return statcastPitchMovement(params, null); + } + + /** + * mlb-statcast-pitch-movement (GET /mlb/statcast-pitch-movement). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchMovement(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-pitch-movement", params); + return client.request("mlb-statcast-pitch-movement", params, options); + } + + /** + * mlb-statcast-pitch-movement (GET /mlb/statcast-pitch-movement). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchMovement() { + return statcastPitchMovement(Map.of(), null); + } + + /** + * mlb-statcast-pitch-tempo (GET /mlb/statcast-pitch-tempo). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchTempo(Map params) { + return statcastPitchTempo(params, null); + } + + /** + * mlb-statcast-pitch-tempo (GET /mlb/statcast-pitch-tempo). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchTempo(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-pitch-tempo", params); + return client.request("mlb-statcast-pitch-tempo", params, options); + } + + /** + * mlb-statcast-pitch-tempo (GET /mlb/statcast-pitch-tempo). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchTempo() { + return statcastPitchTempo(Map.of(), null); + } + + /** + * mlb-statcast-pitch-tempo-player (GET /mlb/statcast-pitch-tempo-player). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchTempoPlayer(Map params) { + return statcastPitchTempoPlayer(params, null); + } + + /** + * mlb-statcast-pitch-tempo-player (GET /mlb/statcast-pitch-tempo-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 statcastPitchTempoPlayer(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-pitch-tempo-player", params); + return client.request("mlb-statcast-pitch-tempo-player", params, options); + } + + /** + * mlb-statcast-pitch-timer (GET /mlb/statcast-pitch-timer). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchTimer(Map params) { + return statcastPitchTimer(params, null); + } + + /** + * mlb-statcast-pitch-timer (GET /mlb/statcast-pitch-timer). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchTimer(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-pitch-timer", params); + return client.request("mlb-statcast-pitch-timer", params, options); + } + + /** + * mlb-statcast-pitch-timer (GET /mlb/statcast-pitch-timer). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPitchTimer() { + return statcastPitchTimer(Map.of(), null); + } + + /** + * mlb-statcast-player-details (GET /mlb/statcast-player-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastPlayerDetails(Map params) { + return statcastPlayerDetails(params, null); + } + + /** + * mlb-statcast-player-details (GET /mlb/statcast-player-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 statcastPlayerDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-player-details", params); + return client.request("mlb-statcast-player-details", params, options); + } + + /** + * mlb-statcast-rolling (GET /mlb/statcast-rolling). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRolling(Map params) { + return statcastRolling(params, null); + } + + /** + * mlb-statcast-rolling (GET /mlb/statcast-rolling). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRolling(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-rolling", params); + return client.request("mlb-statcast-rolling", params, options); + } + + /** + * mlb-statcast-rolling (GET /mlb/statcast-rolling). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRolling() { + return statcastRolling(Map.of(), null); + } + + /** + * mlb-statcast-run-value (GET /mlb/statcast-run-value). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRunValue(Map params) { + return statcastRunValue(params, null); + } + + /** + * mlb-statcast-run-value (GET /mlb/statcast-run-value). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRunValue(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-run-value", params); + return client.request("mlb-statcast-run-value", params, options); + } + + /** + * mlb-statcast-run-value (GET /mlb/statcast-run-value). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRunValue() { + return statcastRunValue(Map.of(), null); + } + + /** + * mlb-statcast-running-game (GET /mlb/statcast-running-game). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRunningGame(Map params) { + return statcastRunningGame(params, null); + } + + /** + * mlb-statcast-running-game (GET /mlb/statcast-running-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 statcastRunningGame(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-running-game", params); + return client.request("mlb-statcast-running-game", params, options); + } + + /** + * mlb-statcast-running-game (GET /mlb/statcast-running-game). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRunningGame() { + return statcastRunningGame(Map.of(), null); + } + + /** + * mlb-statcast-running-game-details (GET /mlb/statcast-running-game-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastRunningGameDetails(Map params) { + return statcastRunningGameDetails(params, null); + } + + /** + * mlb-statcast-running-game-details (GET /mlb/statcast-running-game-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 statcastRunningGameDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-running-game-details", params); + return client.request("mlb-statcast-running-game-details", params, options); + } + + /** + * mlb-statcast-sprint-speed (GET /mlb/statcast-sprint-speed). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSprintSpeed(Map params) { + return statcastSprintSpeed(params, null); + } + + /** + * mlb-statcast-sprint-speed (GET /mlb/statcast-sprint-speed). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSprintSpeed(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-sprint-speed", params); + return client.request("mlb-statcast-sprint-speed", params, options); + } + + /** + * mlb-statcast-sprint-speed (GET /mlb/statcast-sprint-speed). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSprintSpeed() { + return statcastSprintSpeed(Map.of(), null); + } + + /** + * mlb-statcast-sprint-speed-teams (GET /mlb/statcast-sprint-speed-teams). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSprintSpeedTeams(Map params) { + return statcastSprintSpeedTeams(params, null); + } + + /** + * mlb-statcast-sprint-speed-teams (GET /mlb/statcast-sprint-speed-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 statcastSprintSpeedTeams(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-sprint-speed-teams", params); + return client.request("mlb-statcast-sprint-speed-teams", params, options); + } + + /** + * mlb-statcast-sprint-speed-teams (GET /mlb/statcast-sprint-speed-teams). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSprintSpeedTeams() { + return statcastSprintSpeedTeams(Map.of(), null); + } + + /** + * mlb-statcast-swing-path (GET /mlb/statcast-swing-path). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSwingPath(Map params) { + return statcastSwingPath(params, null); + } + + /** + * mlb-statcast-swing-path (GET /mlb/statcast-swing-path). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSwingPath(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-swing-path", params); + return client.request("mlb-statcast-swing-path", params, options); + } + + /** + * mlb-statcast-swing-path (GET /mlb/statcast-swing-path). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSwingPath() { + return statcastSwingPath(Map.of(), null); + } + + /** + * mlb-statcast-swing-timing (GET /mlb/statcast-swing-timing). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSwingTiming(Map params) { + return statcastSwingTiming(params, null); + } + + /** + * mlb-statcast-swing-timing (GET /mlb/statcast-swing-timing). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSwingTiming(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-swing-timing", params); + return client.request("mlb-statcast-swing-timing", params, options); + } + + /** + * mlb-statcast-swing-timing (GET /mlb/statcast-swing-timing). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSwingTiming() { + return statcastSwingTiming(Map.of(), null); + } + + /** + * mlb-statcast-swing-timing-details (GET /mlb/statcast-swing-timing-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastSwingTimingDetails(Map params) { + return statcastSwingTimingDetails(params, null); + } + + /** + * mlb-statcast-swing-timing-details (GET /mlb/statcast-swing-timing-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 statcastSwingTimingDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-swing-timing-details", params); + return client.request("mlb-statcast-swing-timing-details", params, options); + } + + /** + * mlb-statcast-top-performers (GET /mlb/statcast-top-performers). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastTopPerformers(Map params) { + return statcastTopPerformers(params, null); + } + + /** + * mlb-statcast-top-performers (GET /mlb/statcast-top-performers). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastTopPerformers(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-top-performers", params); + return client.request("mlb-statcast-top-performers", params, options); + } + + /** + * mlb-statcast-top-performers (GET /mlb/statcast-top-performers). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastTopPerformers() { + return statcastTopPerformers(Map.of(), null); + } + + /** + * mlb-statcast-year-to-year (GET /mlb/statcast-year-to-year). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastYearToYear(Map params) { + return statcastYearToYear(params, null); + } + + /** + * mlb-statcast-year-to-year (GET /mlb/statcast-year-to-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 statcastYearToYear(Map params, RequestOptions options) { + OperationGroup.checkParams("mlb-statcast-year-to-year", params); + return client.request("mlb-statcast-year-to-year", params, options); + } + + /** + * mlb-statcast-year-to-year (GET /mlb/statcast-year-to-year). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statcastYearToYear() { + return statcastYearToYear(Map.of(), null); } /** diff --git a/src/main/java/net/crawlora/groups/NdtvGroup.java b/src/main/java/net/crawlora/groups/NdtvGroup.java index e29c5c5..23fcb58 100644 --- a/src/main/java/net/crawlora/groups/NdtvGroup.java +++ b/src/main/java/net/crawlora/groups/NdtvGroup.java @@ -84,6 +84,90 @@ public Object headlines(Map params, RequestOptions options) { return client.request("ndtv-headlines", params, options); } + /** + * ndtv-latest-videos (GET /ndtv/latest-videos). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object latestVideos(Map params) { + return latestVideos(params, null); + } + + /** + * ndtv-latest-videos (GET /ndtv/latest-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 latestVideos(Map params, RequestOptions options) { + OperationGroup.checkParams("ndtv-latest-videos", params); + return client.request("ndtv-latest-videos", params, options); + } + + /** + * ndtv-latest-videos (GET /ndtv/latest-videos). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object latestVideos() { + return latestVideos(Map.of(), null); + } + + /** + * ndtv-live-blog (GET /ndtv/live-blog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object liveBlog(Map params) { + return liveBlog(params, null); + } + + /** + * ndtv-live-blog (GET /ndtv/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 liveBlog(Map params, RequestOptions options) { + OperationGroup.checkParams("ndtv-live-blog", params); + return client.request("ndtv-live-blog", params, options); + } + + /** + * ndtv-live-blogs (GET /ndtv/live-blogs). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object liveBlogs(Map params) { + return liveBlogs(params, null); + } + + /** + * ndtv-live-blogs (GET /ndtv/live-blogs). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object liveBlogs(Map params, RequestOptions options) { + OperationGroup.checkParams("ndtv-live-blogs", params); + return client.request("ndtv-live-blogs", params, options); + } + + /** + * ndtv-live-blogs (GET /ndtv/live-blogs). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object liveBlogs() { + return liveBlogs(Map.of(), null); + } + /** * ndtv-news (GET /ndtv/news). * @@ -168,4 +252,79 @@ public Object sections() { return sections(Map.of(), null); } + /** + * ndtv-video (GET /ndtv/video). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object video(Map params) { + return video(params, null); + } + + /** + * ndtv-video (GET /ndtv/video). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object video(Map params, RequestOptions options) { + OperationGroup.checkParams("ndtv-video", params); + return client.request("ndtv-video", params, options); + } + + /** + * ndtv-video-categories (GET /ndtv/video-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); + } + + /** + * ndtv-video-categories (GET /ndtv/video-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("ndtv-video-categories", params); + return client.request("ndtv-video-categories", params, options); + } + + /** + * ndtv-video-categories (GET /ndtv/video-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); + } + + /** + * ndtv-videos (GET /ndtv/videos). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videos(Map params) { + return videos(params, null); + } + + /** + * ndtv-videos (GET /ndtv/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 videos(Map params, RequestOptions options) { + OperationGroup.checkParams("ndtv-videos", params); + return client.request("ndtv-videos", params, options); + } + } diff --git a/src/main/java/net/crawlora/groups/NineToFiveGoogleGroup.java b/src/main/java/net/crawlora/groups/NineToFiveGoogleGroup.java new file mode 100644 index 0000000..caa1f8b --- /dev/null +++ b/src/main/java/net/crawlora/groups/NineToFiveGoogleGroup.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 "nineToFiveGoogle" operation group. + * Reach it via {@code client.nineToFiveGoogle()}. + */ +public final class NineToFiveGoogleGroup { + private final CrawloraClient client; + + public NineToFiveGoogleGroup(CrawloraClient client) { + this.client = client; + } + + /** + * ninetofivegoogle-article (GET /ninetofivegoogle/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object article(Map params) { + return article(params, null); + } + + /** + * ninetofivegoogle-article (GET /ninetofivegoogle/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 article(Map params, RequestOptions options) { + OperationGroup.checkParams("ninetofivegoogle-article", params); + return client.request("ninetofivegoogle-article", params, options); + } + + /** + * ninetofivegoogle-author (GET /ninetofivegoogle/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); + } + + /** + * ninetofivegoogle-author (GET /ninetofivegoogle/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("ninetofivegoogle-author", params); + return client.request("ninetofivegoogle-author", params, options); + } + + /** + * ninetofivegoogle-headlines (GET /ninetofivegoogle/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object headlines(Map params) { + return headlines(params, null); + } + + /** + * ninetofivegoogle-headlines (GET /ninetofivegoogle/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 headlines(Map params, RequestOptions options) { + OperationGroup.checkParams("ninetofivegoogle-headlines", params); + return client.request("ninetofivegoogle-headlines", params, options); + } + + /** + * ninetofivegoogle-news (GET /ninetofivegoogle/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); + } + + /** + * ninetofivegoogle-news (GET /ninetofivegoogle/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("ninetofivegoogle-news", params); + return client.request("ninetofivegoogle-news", params, options); + } + + /** + * ninetofivegoogle-news (GET /ninetofivegoogle/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); + } + + /** + * ninetofivegoogle-sections (GET /ninetofivegoogle/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params) { + return sections(params, null); + } + + /** + * ninetofivegoogle-sections (GET /ninetofivegoogle/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params, RequestOptions options) { + OperationGroup.checkParams("ninetofivegoogle-sections", params); + return client.request("ninetofivegoogle-sections", params, options); + } + + /** + * ninetofivegoogle-sections (GET /ninetofivegoogle/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections() { + return sections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/PhysOrgGroup.java b/src/main/java/net/crawlora/groups/PhysOrgGroup.java new file mode 100644 index 0000000..4196726 --- /dev/null +++ b/src/main/java/net/crawlora/groups/PhysOrgGroup.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 "physOrg" operation group. + * Reach it via {@code client.physOrg()}. + */ +public final class PhysOrgGroup { + private final CrawloraClient client; + + public PhysOrgGroup(CrawloraClient client) { + this.client = client; + } + + /** + * physorg-article (GET /physorg/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physorgArticle(Map params) { + return physorgArticle(params, null); + } + + /** + * physorg-article (GET /physorg/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 physorgArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("physorg-article", params); + return client.request("physorg-article", params, options); + } + + /** + * physorg-headlines (GET /physorg/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physorgHeadlines(Map params) { + return physorgHeadlines(params, null); + } + + /** + * physorg-headlines (GET /physorg/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 physorgHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("physorg-headlines", params); + return client.request("physorg-headlines", params, options); + } + + /** + * physorg-news (GET /physorg/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physorgNews(Map params) { + return physorgNews(params, null); + } + + /** + * physorg-news (GET /physorg/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 physorgNews(Map params, RequestOptions options) { + OperationGroup.checkParams("physorg-news", params); + return client.request("physorg-news", params, options); + } + + /** + * physorg-news (GET /physorg/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physorgNews() { + return physorgNews(Map.of(), null); + } + + /** + * physorg-sections (GET /physorg/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physorgSections(Map params) { + return physorgSections(params, null); + } + + /** + * physorg-sections (GET /physorg/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physorgSections(Map params, RequestOptions options) { + OperationGroup.checkParams("physorg-sections", params); + return client.request("physorg-sections", params, options); + } + + /** + * physorg-sections (GET /physorg/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object physorgSections() { + return physorgSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/RetailMeNotGroup.java b/src/main/java/net/crawlora/groups/RetailMeNotGroup.java new file mode 100644 index 0000000..1d56da6 --- /dev/null +++ b/src/main/java/net/crawlora/groups/RetailMeNotGroup.java @@ -0,0 +1,370 @@ +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 "retailMeNot" operation group. + * Reach it via {@code client.retailMeNot()}. + */ +public final class RetailMeNotGroup { + private final CrawloraClient client; + + public RetailMeNotGroup(CrawloraClient client) { + this.client = client; + } + + /** + * retailmenot-autocomplete (GET /retailmenot/autocomplete). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotAutocomplete(Map params) { + return retailmenotAutocomplete(params, null); + } + + /** + * retailmenot-autocomplete (GET /retailmenot/autocomplete). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotAutocomplete(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-autocomplete", params); + return client.request("retailmenot-autocomplete", params, options); + } + + /** + * retailmenot-blog-categories (GET /retailmenot/blog-categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogCategories(Map params) { + return retailmenotBlogCategories(params, null); + } + + /** + * retailmenot-blog-categories (GET /retailmenot/blog-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 retailmenotBlogCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-blog-categories", params); + return client.request("retailmenot-blog-categories", params, options); + } + + /** + * retailmenot-blog-categories (GET /retailmenot/blog-categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogCategories() { + return retailmenotBlogCategories(Map.of(), null); + } + + /** + * retailmenot-blog-post (GET /retailmenot/blog-post). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogPost(Map params) { + return retailmenotBlogPost(params, null); + } + + /** + * retailmenot-blog-post (GET /retailmenot/blog-post). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogPost(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-blog-post", params); + return client.request("retailmenot-blog-post", params, options); + } + + /** + * retailmenot-blog-posts (GET /retailmenot/blog-posts). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogPosts(Map params) { + return retailmenotBlogPosts(params, null); + } + + /** + * retailmenot-blog-posts (GET /retailmenot/blog-posts). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogPosts(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-blog-posts", params); + return client.request("retailmenot-blog-posts", params, options); + } + + /** + * retailmenot-blog-posts (GET /retailmenot/blog-posts). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogPosts() { + return retailmenotBlogPosts(Map.of(), null); + } + + /** + * retailmenot-blog-tags (GET /retailmenot/blog-tags). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogTags(Map params) { + return retailmenotBlogTags(params, null); + } + + /** + * retailmenot-blog-tags (GET /retailmenot/blog-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 retailmenotBlogTags(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-blog-tags", params); + return client.request("retailmenot-blog-tags", params, options); + } + + /** + * retailmenot-blog-tags (GET /retailmenot/blog-tags). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotBlogTags() { + return retailmenotBlogTags(Map.of(), null); + } + + /** + * retailmenot-cashback (GET /retailmenot/cashback). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotCashback(Map params) { + return retailmenotCashback(params, null); + } + + /** + * retailmenot-cashback (GET /retailmenot/cashback). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotCashback(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-cashback", params); + return client.request("retailmenot-cashback", params, options); + } + + /** + * retailmenot-cashback (GET /retailmenot/cashback). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotCashback() { + return retailmenotCashback(Map.of(), null); + } + + /** + * retailmenot-categories (GET /retailmenot/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotCategories(Map params) { + return retailmenotCategories(params, null); + } + + /** + * retailmenot-categories (GET /retailmenot/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 retailmenotCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-categories", params); + return client.request("retailmenot-categories", params, options); + } + + /** + * retailmenot-categories (GET /retailmenot/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotCategories() { + return retailmenotCategories(Map.of(), null); + } + + /** + * retailmenot-category (GET /retailmenot/category). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotCategory(Map params) { + return retailmenotCategory(params, null); + } + + /** + * retailmenot-category (GET /retailmenot/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 retailmenotCategory(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-category", params); + return client.request("retailmenot-category", params, options); + } + + /** + * retailmenot-deal-event (GET /retailmenot/deal-event). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotDealEvent(Map params) { + return retailmenotDealEvent(params, null); + } + + /** + * retailmenot-deal-event (GET /retailmenot/deal-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 retailmenotDealEvent(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-deal-event", params); + return client.request("retailmenot-deal-event", params, options); + } + + /** + * retailmenot-deal-events (GET /retailmenot/deal-events). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotDealEvents(Map params) { + return retailmenotDealEvents(params, null); + } + + /** + * retailmenot-deal-events (GET /retailmenot/deal-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 retailmenotDealEvents(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-deal-events", params); + return client.request("retailmenot-deal-events", params, options); + } + + /** + * retailmenot-deal-events (GET /retailmenot/deal-events). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotDealEvents() { + return retailmenotDealEvents(Map.of(), null); + } + + /** + * retailmenot-home (GET /retailmenot/home). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotHome(Map params) { + return retailmenotHome(params, null); + } + + /** + * retailmenot-home (GET /retailmenot/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 retailmenotHome(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-home", params); + return client.request("retailmenot-home", params, options); + } + + /** + * retailmenot-home (GET /retailmenot/home). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotHome() { + return retailmenotHome(Map.of(), null); + } + + /** + * retailmenot-store (GET /retailmenot/store). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotStore(Map params) { + return retailmenotStore(params, null); + } + + /** + * retailmenot-store (GET /retailmenot/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 retailmenotStore(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-store", params); + return client.request("retailmenot-store", params, options); + } + + /** + * retailmenot-stores (GET /retailmenot/stores). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object retailmenotStores(Map params) { + return retailmenotStores(params, null); + } + + /** + * retailmenot-stores (GET /retailmenot/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 retailmenotStores(Map params, RequestOptions options) { + OperationGroup.checkParams("retailmenot-stores", params); + return client.request("retailmenot-stores", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/SportskeedaGroup.java b/src/main/java/net/crawlora/groups/SportskeedaGroup.java index 82efc01..75ddc31 100644 --- a/src/main/java/net/crawlora/groups/SportskeedaGroup.java +++ b/src/main/java/net/crawlora/groups/SportskeedaGroup.java @@ -80,6 +80,103 @@ public Object author() { return author(Map.of(), null); } + /** + * sportskeeda-college-basketball-schedule (GET /sportskeeda/college-basketball-schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collegeBasketballSchedule(Map params) { + return collegeBasketballSchedule(params, null); + } + + /** + * sportskeeda-college-basketball-schedule (GET /sportskeeda/college-basketball-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 collegeBasketballSchedule(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-college-basketball-schedule", params); + return client.request("sportskeeda-college-basketball-schedule", params, options); + } + + /** + * sportskeeda-college-basketball-schedule-options (GET /sportskeeda/college-basketball-schedule-options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collegeBasketballScheduleOptions(Map params) { + return collegeBasketballScheduleOptions(params, null); + } + + /** + * sportskeeda-college-basketball-schedule-options (GET /sportskeeda/college-basketball-schedule-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 collegeBasketballScheduleOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-college-basketball-schedule-options", params); + return client.request("sportskeeda-college-basketball-schedule-options", params, options); + } + + /** + * sportskeeda-college-basketball-schedule-options (GET /sportskeeda/college-basketball-schedule-options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collegeBasketballScheduleOptions() { + return collegeBasketballScheduleOptions(Map.of(), null); + } + + /** + * sportskeeda-cricket-commentary (GET /sportskeeda/cricket-commentary). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cricketCommentary(Map params) { + return cricketCommentary(params, null); + } + + /** + * sportskeeda-cricket-commentary (GET /sportskeeda/cricket-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 cricketCommentary(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-cricket-commentary", params); + return client.request("sportskeeda-cricket-commentary", params, options); + } + + /** + * sportskeeda-cricket-match (GET /sportskeeda/cricket-match). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cricketMatch(Map params) { + return cricketMatch(params, null); + } + + /** + * sportskeeda-cricket-match (GET /sportskeeda/cricket-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 cricketMatch(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-cricket-match", params); + return client.request("sportskeeda-cricket-match", params, options); + } + /** * sportskeeda-depth-chart (GET /sportskeeda/depth-chart). * @@ -102,6 +199,112 @@ public Object depthChart(Map params, RequestOptions options) { return client.request("sportskeeda-depth-chart", params, options); } + /** + * sportskeeda-draft-picks (GET /sportskeeda/draft-picks). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object draftPicks(Map params) { + return draftPicks(params, null); + } + + /** + * sportskeeda-draft-picks (GET /sportskeeda/draft-picks). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object draftPicks(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-draft-picks", params); + return client.request("sportskeeda-draft-picks", params, options); + } + + /** + * sportskeeda-draft-picks-options (GET /sportskeeda/draft-picks-options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object draftPicksOptions(Map params) { + return draftPicksOptions(params, null); + } + + /** + * sportskeeda-draft-picks-options (GET /sportskeeda/draft-picks-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 draftPicksOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-draft-picks-options", params); + return client.request("sportskeeda-draft-picks-options", params, options); + } + + /** + * sportskeeda-event-calendar (GET /sportskeeda/event-calendar). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object eventCalendar(Map params) { + return eventCalendar(params, null); + } + + /** + * sportskeeda-event-calendar (GET /sportskeeda/event-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 eventCalendar(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-event-calendar", params); + return client.request("sportskeeda-event-calendar", params, options); + } + + /** + * sportskeeda-event-calendar (GET /sportskeeda/event-calendar). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object eventCalendar() { + return eventCalendar(Map.of(), null); + } + + /** + * sportskeeda-event-calendar-options (GET /sportskeeda/event-calendar-options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object eventCalendarOptions(Map params) { + return eventCalendarOptions(params, null); + } + + /** + * sportskeeda-event-calendar-options (GET /sportskeeda/event-calendar-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 eventCalendarOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-event-calendar-options", params); + return client.request("sportskeeda-event-calendar-options", params, options); + } + + /** + * sportskeeda-event-calendar-options (GET /sportskeeda/event-calendar-options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object eventCalendarOptions() { + return eventCalendarOptions(Map.of(), null); + } + /** * sportskeeda-feed (GET /sportskeeda/feed). * @@ -177,6 +380,112 @@ public Object footballOptions() { return footballOptions(Map.of(), null); } + /** + * sportskeeda-guessing-game (GET /sportskeeda/guessing-game). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object guessingGame(Map params) { + return guessingGame(params, null); + } + + /** + * sportskeeda-guessing-game (GET /sportskeeda/guessing-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 guessingGame(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-guessing-game", params); + return client.request("sportskeeda-guessing-game", params, options); + } + + /** + * sportskeeda-guessing-game-entities (GET /sportskeeda/guessing-game-entities). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object guessingGameEntities(Map params) { + return guessingGameEntities(params, null); + } + + /** + * sportskeeda-guessing-game-entities (GET /sportskeeda/guessing-game-entities). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object guessingGameEntities(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-guessing-game-entities", params); + return client.request("sportskeeda-guessing-game-entities", params, options); + } + + /** + * sportskeeda-guessing-games (GET /sportskeeda/guessing-games). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object guessingGames(Map params) { + return guessingGames(params, null); + } + + /** + * sportskeeda-guessing-games (GET /sportskeeda/guessing-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 guessingGames(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-guessing-games", params); + return client.request("sportskeeda-guessing-games", params, options); + } + + /** + * sportskeeda-guessing-games (GET /sportskeeda/guessing-games). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object guessingGames() { + return guessingGames(Map.of(), null); + } + + /** + * sportskeeda-nba-queries (GET /sportskeeda/nba-queries). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nbaQueries(Map params) { + return nbaQueries(params, null); + } + + /** + * sportskeeda-nba-queries (GET /sportskeeda/nba-queries). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nbaQueries(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-nba-queries", params); + return client.request("sportskeeda-nba-queries", params, options); + } + + /** + * sportskeeda-nba-queries (GET /sportskeeda/nba-queries). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nbaQueries() { + return nbaQueries(Map.of(), null); + } + /** * sportskeeda-news (GET /sportskeeda/news). * @@ -296,6 +605,103 @@ public Object profile(Map params, RequestOptions options) { return client.request("sportskeeda-profile", params, options); } + /** + * sportskeeda-quiz (GET /sportskeeda/quiz). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object quiz(Map params) { + return quiz(params, null); + } + + /** + * sportskeeda-quiz (GET /sportskeeda/quiz). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object quiz(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-quiz", params); + return client.request("sportskeeda-quiz", params, options); + } + + /** + * sportskeeda-quiz-categories (GET /sportskeeda/quiz-categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object quizCategories(Map params) { + return quizCategories(params, null); + } + + /** + * sportskeeda-quiz-categories (GET /sportskeeda/quiz-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 quizCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-quiz-categories", params); + return client.request("sportskeeda-quiz-categories", params, options); + } + + /** + * sportskeeda-quiz-categories (GET /sportskeeda/quiz-categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object quizCategories() { + return quizCategories(Map.of(), null); + } + + /** + * sportskeeda-quizzes (GET /sportskeeda/quizzes). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object quizzes(Map params) { + return quizzes(params, null); + } + + /** + * sportskeeda-quizzes (GET /sportskeeda/quizzes). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object quizzes(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-quizzes", params); + return client.request("sportskeeda-quizzes", params, options); + } + + /** + * sportskeeda-salary-cap (GET /sportskeeda/salary-cap). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object salaryCap(Map params) { + return salaryCap(params, null); + } + + /** + * sportskeeda-salary-cap (GET /sportskeeda/salary-cap). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object salaryCap(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-salary-cap", params); + return client.request("sportskeeda-salary-cap", params, options); + } + /** * sportskeeda-schedule (GET /sportskeeda/schedule). * @@ -477,6 +883,28 @@ public Object taxonomySearch(Map params, RequestOptions options) return client.request("sportskeeda-taxonomy-search", params, options); } + /** + * sportskeeda-topic (GET /sportskeeda/topic). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topic(Map params) { + return topic(params, null); + } + + /** + * sportskeeda-topic (GET /sportskeeda/topic). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topic(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-topic", params); + return client.request("sportskeeda-topic", params, options); + } + /** * sportskeeda-trade-values (GET /sportskeeda/trade-values). * @@ -499,6 +927,59 @@ public Object tradeValues(Map params, RequestOptions options) { return client.request("sportskeeda-trade-values", params, options); } + /** + * sportskeeda-transactions (GET /sportskeeda/transactions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object transactions(Map params) { + return transactions(params, null); + } + + /** + * sportskeeda-transactions (GET /sportskeeda/transactions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object transactions(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-transactions", params); + return client.request("sportskeeda-transactions", params, options); + } + + /** + * sportskeeda-transactions-options (GET /sportskeeda/transactions-options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object transactionsOptions(Map params) { + return transactionsOptions(params, null); + } + + /** + * sportskeeda-transactions-options (GET /sportskeeda/transactions-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 transactionsOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-transactions-options", params); + return client.request("sportskeeda-transactions-options", params, options); + } + + /** + * sportskeeda-transactions-options (GET /sportskeeda/transactions-options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object transactionsOptions() { + return transactionsOptions(Map.of(), null); + } + /** * sportskeeda-video (GET /sportskeeda/video). * @@ -552,4 +1033,189 @@ public Object videos() { return videos(Map.of(), null); } + /** + * sportskeeda-wiki-activity (GET /sportskeeda/wiki-activity). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiActivity(Map params) { + return wikiActivity(params, null); + } + + /** + * sportskeeda-wiki-activity (GET /sportskeeda/wiki-activity). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiActivity(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-wiki-activity", params); + return client.request("sportskeeda-wiki-activity", params, options); + } + + /** + * sportskeeda-wiki-article (GET /sportskeeda/wiki-article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiArticle(Map params) { + return wikiArticle(params, null); + } + + /** + * sportskeeda-wiki-article (GET /sportskeeda/wiki-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 wikiArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-wiki-article", params); + return client.request("sportskeeda-wiki-article", params, options); + } + + /** + * sportskeeda-wiki-categories (GET /sportskeeda/wiki-categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiCategories(Map params) { + return wikiCategories(params, null); + } + + /** + * sportskeeda-wiki-categories (GET /sportskeeda/wiki-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 wikiCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-wiki-categories", params); + return client.request("sportskeeda-wiki-categories", params, options); + } + + /** + * sportskeeda-wiki-contributors (GET /sportskeeda/wiki-contributors). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiContributors(Map params) { + return wikiContributors(params, null); + } + + /** + * sportskeeda-wiki-contributors (GET /sportskeeda/wiki-contributors). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiContributors(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-wiki-contributors", params); + return client.request("sportskeeda-wiki-contributors", params, options); + } + + /** + * sportskeeda-wiki-issues (GET /sportskeeda/wiki-issues). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiIssues(Map params) { + return wikiIssues(params, null); + } + + /** + * sportskeeda-wiki-issues (GET /sportskeeda/wiki-issues). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiIssues(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-wiki-issues", params); + return client.request("sportskeeda-wiki-issues", params, options); + } + + /** + * sportskeeda-wiki-options (GET /sportskeeda/wiki-options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiOptions(Map params) { + return wikiOptions(params, null); + } + + /** + * sportskeeda-wiki-options (GET /sportskeeda/wiki-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 wikiOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-wiki-options", params); + return client.request("sportskeeda-wiki-options", params, options); + } + + /** + * sportskeeda-wiki-options (GET /sportskeeda/wiki-options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiOptions() { + return wikiOptions(Map.of(), null); + } + + /** + * sportskeeda-wiki-pages (GET /sportskeeda/wiki-pages). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiPages(Map params) { + return wikiPages(params, null); + } + + /** + * sportskeeda-wiki-pages (GET /sportskeeda/wiki-pages). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiPages(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-wiki-pages", params); + return client.request("sportskeeda-wiki-pages", params, options); + } + + /** + * sportskeeda-wiki-summary (GET /sportskeeda/wiki-summary). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wikiSummary(Map params) { + return wikiSummary(params, null); + } + + /** + * sportskeeda-wiki-summary (GET /sportskeeda/wiki-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 wikiSummary(Map params, RequestOptions options) { + OperationGroup.checkParams("sportskeeda-wiki-summary", params); + return client.request("sportskeeda-wiki-summary", params, options); + } + } diff --git a/src/main/java/net/crawlora/groups/StreetEasyGroup.java b/src/main/java/net/crawlora/groups/StreetEasyGroup.java new file mode 100644 index 0000000..1ffb69a --- /dev/null +++ b/src/main/java/net/crawlora/groups/StreetEasyGroup.java @@ -0,0 +1,299 @@ +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 "streetEasy" operation group. + * Reach it via {@code client.streetEasy()}. + */ +public final class StreetEasyGroup { + private final CrawloraClient client; + + public StreetEasyGroup(CrawloraClient client) { + this.client = client; + } + + /** + * streeteasy-areas (GET /streeteasy/areas). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyAreas(Map params) { + return streeteasyAreas(params, null); + } + + /** + * streeteasy-areas (GET /streeteasy/areas). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyAreas(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-areas", params); + return client.request("streeteasy-areas", params, options); + } + + /** + * streeteasy-areas (GET /streeteasy/areas). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyAreas() { + return streeteasyAreas(Map.of(), null); + } + + /** + * streeteasy-building (GET /streeteasy/buildings/{slug}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyBuilding(Map params) { + return streeteasyBuilding(params, null); + } + + /** + * streeteasy-building (GET /streeteasy/buildings/{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 streeteasyBuilding(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-building", params); + return client.request("streeteasy-building", params, options); + } + + /** + * streeteasy-market-data-catalog (GET /streeteasy/market-data/catalog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyMarketDataCatalog(Map params) { + return streeteasyMarketDataCatalog(params, null); + } + + /** + * streeteasy-market-data-catalog (GET /streeteasy/market-data/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 streeteasyMarketDataCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-market-data-catalog", params); + return client.request("streeteasy-market-data-catalog", params, options); + } + + /** + * streeteasy-market-data-catalog (GET /streeteasy/market-data/catalog). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyMarketDataCatalog() { + return streeteasyMarketDataCatalog(Map.of(), null); + } + + /** + * streeteasy-market-indices (GET /streeteasy/market-data/indices). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyMarketIndices(Map params) { + return streeteasyMarketIndices(params, null); + } + + /** + * streeteasy-market-indices (GET /streeteasy/market-data/indices). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyMarketIndices(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-market-indices", params); + return client.request("streeteasy-market-indices", params, options); + } + + /** + * streeteasy-market-indices (GET /streeteasy/market-data/indices). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyMarketIndices() { + return streeteasyMarketIndices(Map.of(), null); + } + + /** + * streeteasy-market-inventory (GET /streeteasy/market-data/inventory). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyMarketInventory(Map params) { + return streeteasyMarketInventory(params, null); + } + + /** + * streeteasy-market-inventory (GET /streeteasy/market-data/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 streeteasyMarketInventory(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-market-inventory", params); + return client.request("streeteasy-market-inventory", params, options); + } + + /** + * streeteasy-market-inventory (GET /streeteasy/market-data/inventory). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyMarketInventory() { + return streeteasyMarketInventory(Map.of(), null); + } + + /** + * streeteasy-market-data-series (GET /streeteasy/market-data/series). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyMarketDataSeries(Map params) { + return streeteasyMarketDataSeries(params, null); + } + + /** + * streeteasy-market-data-series (GET /streeteasy/market-data/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 streeteasyMarketDataSeries(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-market-data-series", params); + return client.request("streeteasy-market-data-series", params, options); + } + + /** + * streeteasy-quick-search (GET /streeteasy/quick-search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyQuickSearch(Map params) { + return streeteasyQuickSearch(params, null); + } + + /** + * streeteasy-quick-search (GET /streeteasy/quick-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 streeteasyQuickSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-quick-search", params); + return client.request("streeteasy-quick-search", params, options); + } + + /** + * streeteasy-rentals-search (GET /streeteasy/rentals/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyRentalsSearch(Map params) { + return streeteasyRentalsSearch(params, null); + } + + /** + * streeteasy-rentals-search (GET /streeteasy/rentals/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 streeteasyRentalsSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-rentals-search", params); + return client.request("streeteasy-rentals-search", params, options); + } + + /** + * streeteasy-sales-search (GET /streeteasy/sales/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasySalesSearch(Map params) { + return streeteasySalesSearch(params, null); + } + + /** + * streeteasy-sales-search (GET /streeteasy/sales/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 streeteasySalesSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-sales-search", params); + return client.request("streeteasy-sales-search", params, options); + } + + /** + * streeteasy-school (GET /streeteasy/schools/{slug}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasySchool(Map params) { + return streeteasySchool(params, null); + } + + /** + * streeteasy-school (GET /streeteasy/schools/{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 streeteasySchool(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-school", params); + return client.request("streeteasy-school", params, options); + } + + /** + * streeteasy-unit (GET /streeteasy/units/{building_slug}/{unit}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyUnit(Map params) { + return streeteasyUnit(params, null); + } + + /** + * streeteasy-unit (GET /streeteasy/units/{building_slug}/{unit}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object streeteasyUnit(Map params, RequestOptions options) { + OperationGroup.checkParams("streeteasy-unit", params); + return client.request("streeteasy-unit", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/TheBlazeGroup.java b/src/main/java/net/crawlora/groups/TheBlazeGroup.java new file mode 100644 index 0000000..76867b2 --- /dev/null +++ b/src/main/java/net/crawlora/groups/TheBlazeGroup.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 "theBlaze" operation group. + * Reach it via {@code client.theBlaze()}. + */ +public final class TheBlazeGroup { + private final CrawloraClient client; + + public TheBlazeGroup(CrawloraClient client) { + this.client = client; + } + + /** + * theblaze-article (GET /theblaze/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeArticle(Map params) { + return theblazeArticle(params, null); + } + + /** + * theblaze-article (GET /theblaze/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 theblazeArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("theblaze-article", params); + return client.request("theblaze-article", params, options); + } + + /** + * theblaze-author (GET /theblaze/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeAuthor(Map params) { + return theblazeAuthor(params, null); + } + + /** + * theblaze-author (GET /theblaze/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 theblazeAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("theblaze-author", params); + return client.request("theblaze-author", params, options); + } + + /** + * theblaze-author (GET /theblaze/author). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeAuthor() { + return theblazeAuthor(Map.of(), null); + } + + /** + * theblaze-headlines (GET /theblaze/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeHeadlines(Map params) { + return theblazeHeadlines(params, null); + } + + /** + * theblaze-headlines (GET /theblaze/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 theblazeHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("theblaze-headlines", params); + return client.request("theblaze-headlines", params, options); + } + + /** + * theblaze-news (GET /theblaze/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeNews(Map params) { + return theblazeNews(params, null); + } + + /** + * theblaze-news (GET /theblaze/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 theblazeNews(Map params, RequestOptions options) { + OperationGroup.checkParams("theblaze-news", params); + return client.request("theblaze-news", params, options); + } + + /** + * theblaze-news (GET /theblaze/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeNews() { + return theblazeNews(Map.of(), null); + } + + /** + * theblaze-sections (GET /theblaze/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeSections(Map params) { + return theblazeSections(params, null); + } + + /** + * theblaze-sections (GET /theblaze/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeSections(Map params, RequestOptions options) { + OperationGroup.checkParams("theblaze-sections", params); + return client.request("theblaze-sections", params, options); + } + + /** + * theblaze-sections (GET /theblaze/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object theblazeSections() { + return theblazeSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/TheDenverPostGroup.java b/src/main/java/net/crawlora/groups/TheDenverPostGroup.java new file mode 100644 index 0000000..65d114c --- /dev/null +++ b/src/main/java/net/crawlora/groups/TheDenverPostGroup.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 "theDenverPost" operation group. + * Reach it via {@code client.theDenverPost()}. + */ +public final class TheDenverPostGroup { + private final CrawloraClient client; + + public TheDenverPostGroup(CrawloraClient client) { + this.client = client; + } + + /** + * denverpost-article (GET /denverpost/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostArticle(Map params) { + return denverpostArticle(params, null); + } + + /** + * denverpost-article (GET /denverpost/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 denverpostArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("denverpost-article", params); + return client.request("denverpost-article", params, options); + } + + /** + * denverpost-author (GET /denverpost/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostAuthor(Map params) { + return denverpostAuthor(params, null); + } + + /** + * denverpost-author (GET /denverpost/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 denverpostAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("denverpost-author", params); + return client.request("denverpost-author", params, options); + } + + /** + * denverpost-author (GET /denverpost/author). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostAuthor() { + return denverpostAuthor(Map.of(), null); + } + + /** + * denverpost-headlines (GET /denverpost/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostHeadlines(Map params) { + return denverpostHeadlines(params, null); + } + + /** + * denverpost-headlines (GET /denverpost/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 denverpostHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("denverpost-headlines", params); + return client.request("denverpost-headlines", params, options); + } + + /** + * denverpost-news (GET /denverpost/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostNews(Map params) { + return denverpostNews(params, null); + } + + /** + * denverpost-news (GET /denverpost/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 denverpostNews(Map params, RequestOptions options) { + OperationGroup.checkParams("denverpost-news", params); + return client.request("denverpost-news", params, options); + } + + /** + * denverpost-news (GET /denverpost/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostNews() { + return denverpostNews(Map.of(), null); + } + + /** + * denverpost-sections (GET /denverpost/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostSections(Map params) { + return denverpostSections(params, null); + } + + /** + * denverpost-sections (GET /denverpost/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostSections(Map params, RequestOptions options) { + OperationGroup.checkParams("denverpost-sections", params); + return client.request("denverpost-sections", params, options); + } + + /** + * denverpost-sections (GET /denverpost/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object denverpostSections() { + return denverpostSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/TheExpressTribuneGroup.java b/src/main/java/net/crawlora/groups/TheExpressTribuneGroup.java new file mode 100644 index 0000000..a7725ac --- /dev/null +++ b/src/main/java/net/crawlora/groups/TheExpressTribuneGroup.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 "theExpressTribune" operation group. + * Reach it via {@code client.theExpressTribune()}. + */ +public final class TheExpressTribuneGroup { + private final CrawloraClient client; + + public TheExpressTribuneGroup(CrawloraClient client) { + this.client = client; + } + + /** + * expresstribune-article (GET /expresstribune/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object expresstribuneArticle(Map params) { + return expresstribuneArticle(params, null); + } + + /** + * expresstribune-article (GET /expresstribune/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 expresstribuneArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("expresstribune-article", params); + return client.request("expresstribune-article", params, options); + } + + /** + * expresstribune-author (GET /expresstribune/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object expresstribuneAuthor(Map params) { + return expresstribuneAuthor(params, null); + } + + /** + * expresstribune-author (GET /expresstribune/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 expresstribuneAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("expresstribune-author", params); + return client.request("expresstribune-author", params, options); + } + + /** + * expresstribune-headlines (GET /expresstribune/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object expresstribuneHeadlines(Map params) { + return expresstribuneHeadlines(params, null); + } + + /** + * expresstribune-headlines (GET /expresstribune/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 expresstribuneHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("expresstribune-headlines", params); + return client.request("expresstribune-headlines", params, options); + } + + /** + * expresstribune-news (GET /expresstribune/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object expresstribuneNews(Map params) { + return expresstribuneNews(params, null); + } + + /** + * expresstribune-news (GET /expresstribune/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 expresstribuneNews(Map params, RequestOptions options) { + OperationGroup.checkParams("expresstribune-news", params); + return client.request("expresstribune-news", params, options); + } + + /** + * expresstribune-news (GET /expresstribune/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object expresstribuneNews() { + return expresstribuneNews(Map.of(), null); + } + + /** + * expresstribune-sections (GET /expresstribune/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object expresstribuneSections(Map params) { + return expresstribuneSections(params, null); + } + + /** + * expresstribune-sections (GET /expresstribune/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object expresstribuneSections(Map params, RequestOptions options) { + OperationGroup.checkParams("expresstribune-sections", params); + return client.request("expresstribune-sections", params, options); + } + + /** + * expresstribune-sections (GET /expresstribune/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object expresstribuneSections() { + return expresstribuneSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/TheJapanTimesGroup.java b/src/main/java/net/crawlora/groups/TheJapanTimesGroup.java new file mode 100644 index 0000000..d62189a --- /dev/null +++ b/src/main/java/net/crawlora/groups/TheJapanTimesGroup.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 "theJapanTimes" operation group. + * Reach it via {@code client.theJapanTimes()}. + */ +public final class TheJapanTimesGroup { + private final CrawloraClient client; + + public TheJapanTimesGroup(CrawloraClient client) { + this.client = client; + } + + /** + * japantimes-article (GET /japantimes/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object japantimesArticle(Map params) { + return japantimesArticle(params, null); + } + + /** + * japantimes-article (GET /japantimes/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 japantimesArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("japantimes-article", params); + return client.request("japantimes-article", params, options); + } + + /** + * japantimes-author (GET /japantimes/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object japantimesAuthor(Map params) { + return japantimesAuthor(params, null); + } + + /** + * japantimes-author (GET /japantimes/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 japantimesAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("japantimes-author", params); + return client.request("japantimes-author", params, options); + } + + /** + * japantimes-headlines (GET /japantimes/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object japantimesHeadlines(Map params) { + return japantimesHeadlines(params, null); + } + + /** + * japantimes-headlines (GET /japantimes/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 japantimesHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("japantimes-headlines", params); + return client.request("japantimes-headlines", params, options); + } + + /** + * japantimes-news (GET /japantimes/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object japantimesNews(Map params) { + return japantimesNews(params, null); + } + + /** + * japantimes-news (GET /japantimes/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 japantimesNews(Map params, RequestOptions options) { + OperationGroup.checkParams("japantimes-news", params); + return client.request("japantimes-news", params, options); + } + + /** + * japantimes-news (GET /japantimes/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object japantimesNews() { + return japantimesNews(Map.of(), null); + } + + /** + * japantimes-sections (GET /japantimes/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object japantimesSections(Map params) { + return japantimesSections(params, null); + } + + /** + * japantimes-sections (GET /japantimes/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object japantimesSections(Map params, RequestOptions options) { + OperationGroup.checkParams("japantimes-sections", params); + return client.request("japantimes-sections", params, options); + } + + /** + * japantimes-sections (GET /japantimes/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object japantimesSections() { + return japantimesSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/TheNationalGroup.java b/src/main/java/net/crawlora/groups/TheNationalGroup.java new file mode 100644 index 0000000..0378496 --- /dev/null +++ b/src/main/java/net/crawlora/groups/TheNationalGroup.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 "theNational" operation group. + * Reach it via {@code client.theNational()}. + */ +public final class TheNationalGroup { + private final CrawloraClient client; + + public TheNationalGroup(CrawloraClient client) { + this.client = client; + } + + /** + * national-article (GET /national/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalArticle(Map params) { + return nationalArticle(params, null); + } + + /** + * national-article (GET /national/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 nationalArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("national-article", params); + return client.request("national-article", params, options); + } + + /** + * national-author (GET /national/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalAuthor(Map params) { + return nationalAuthor(params, null); + } + + /** + * national-author (GET /national/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 nationalAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("national-author", params); + return client.request("national-author", params, options); + } + + /** + * national-author (GET /national/author). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalAuthor() { + return nationalAuthor(Map.of(), null); + } + + /** + * national-headlines (GET /national/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalHeadlines(Map params) { + return nationalHeadlines(params, null); + } + + /** + * national-headlines (GET /national/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 nationalHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("national-headlines", params); + return client.request("national-headlines", params, options); + } + + /** + * national-news (GET /national/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalNews(Map params) { + return nationalNews(params, null); + } + + /** + * national-news (GET /national/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 nationalNews(Map params, RequestOptions options) { + OperationGroup.checkParams("national-news", params); + return client.request("national-news", params, options); + } + + /** + * national-news (GET /national/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalNews() { + return nationalNews(Map.of(), null); + } + + /** + * national-sections (GET /national/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalSections(Map params) { + return nationalSections(params, null); + } + + /** + * national-sections (GET /national/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalSections(Map params, RequestOptions options) { + OperationGroup.checkParams("national-sections", params); + return client.request("national-sections", params, options); + } + + /** + * national-sections (GET /national/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object nationalSections() { + return nationalSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/TheNextWebGroup.java b/src/main/java/net/crawlora/groups/TheNextWebGroup.java new file mode 100644 index 0000000..297aa6a --- /dev/null +++ b/src/main/java/net/crawlora/groups/TheNextWebGroup.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 "theNextWeb" operation group. + * Reach it via {@code client.theNextWeb()}. + */ +public final class TheNextWebGroup { + private final CrawloraClient client; + + public TheNextWebGroup(CrawloraClient client) { + this.client = client; + } + + /** + * thenextweb-article (GET /thenextweb/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebArticle(Map params) { + return thenextwebArticle(params, null); + } + + /** + * thenextweb-article (GET /thenextweb/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 thenextwebArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("thenextweb-article", params); + return client.request("thenextweb-article", params, options); + } + + /** + * thenextweb-author (GET /thenextweb/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebAuthor(Map params) { + return thenextwebAuthor(params, null); + } + + /** + * thenextweb-author (GET /thenextweb/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 thenextwebAuthor(Map params, RequestOptions options) { + OperationGroup.checkParams("thenextweb-author", params); + return client.request("thenextweb-author", params, options); + } + + /** + * thenextweb-author (GET /thenextweb/author). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebAuthor() { + return thenextwebAuthor(Map.of(), null); + } + + /** + * thenextweb-headlines (GET /thenextweb/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebHeadlines(Map params) { + return thenextwebHeadlines(params, null); + } + + /** + * thenextweb-headlines (GET /thenextweb/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 thenextwebHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("thenextweb-headlines", params); + return client.request("thenextweb-headlines", params, options); + } + + /** + * thenextweb-news (GET /thenextweb/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebNews(Map params) { + return thenextwebNews(params, null); + } + + /** + * thenextweb-news (GET /thenextweb/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 thenextwebNews(Map params, RequestOptions options) { + OperationGroup.checkParams("thenextweb-news", params); + return client.request("thenextweb-news", params, options); + } + + /** + * thenextweb-news (GET /thenextweb/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebNews() { + return thenextwebNews(Map.of(), null); + } + + /** + * thenextweb-sections (GET /thenextweb/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebSections(Map params) { + return thenextwebSections(params, null); + } + + /** + * thenextweb-sections (GET /thenextweb/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebSections(Map params, RequestOptions options) { + OperationGroup.checkParams("thenextweb-sections", params); + return client.request("thenextweb-sections", params, options); + } + + /** + * thenextweb-sections (GET /thenextweb/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object thenextwebSections() { + return thenextwebSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/TimesLiveGroup.java b/src/main/java/net/crawlora/groups/TimesLiveGroup.java new file mode 100644 index 0000000..ed72bff --- /dev/null +++ b/src/main/java/net/crawlora/groups/TimesLiveGroup.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 "timesLive" operation group. + * Reach it via {@code client.timesLive()}. + */ +public final class TimesLiveGroup { + private final CrawloraClient client; + + public TimesLiveGroup(CrawloraClient client) { + this.client = client; + } + + /** + * timeslive-article (GET /timeslive/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object timesliveArticle(Map params) { + return timesliveArticle(params, null); + } + + /** + * timeslive-article (GET /timeslive/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 timesliveArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("timeslive-article", params); + return client.request("timeslive-article", params, options); + } + + /** + * timeslive-headlines (GET /timeslive/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object timesliveHeadlines(Map params) { + return timesliveHeadlines(params, null); + } + + /** + * timeslive-headlines (GET /timeslive/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 timesliveHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("timeslive-headlines", params); + return client.request("timeslive-headlines", params, options); + } + + /** + * timeslive-news (GET /timeslive/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object timesliveNews(Map params) { + return timesliveNews(params, null); + } + + /** + * timeslive-news (GET /timeslive/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 timesliveNews(Map params, RequestOptions options) { + OperationGroup.checkParams("timeslive-news", params); + return client.request("timeslive-news", params, options); + } + + /** + * timeslive-news (GET /timeslive/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object timesliveNews() { + return timesliveNews(Map.of(), null); + } + + /** + * timeslive-sections (GET /timeslive/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object timesliveSections(Map params) { + return timesliveSections(params, null); + } + + /** + * timeslive-sections (GET /timeslive/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object timesliveSections(Map params, RequestOptions options) { + OperationGroup.checkParams("timeslive-sections", params); + return client.request("timeslive-sections", params, options); + } + + /** + * timeslive-sections (GET /timeslive/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object timesliveSections() { + return timesliveSections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/VrboGroup.java b/src/main/java/net/crawlora/groups/VrboGroup.java new file mode 100644 index 0000000..ac708d0 --- /dev/null +++ b/src/main/java/net/crawlora/groups/VrboGroup.java @@ -0,0 +1,184 @@ +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 "vrbo" operation group. + * Reach it via {@code client.vrbo()}. + */ +public final class VrboGroup { + private final CrawloraClient client; + + public VrboGroup(CrawloraClient client) { + this.client = client; + } + + /** + * vrbo-location-suggestions (GET /vrbo/locations/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object locationSuggestions(Map params) { + return locationSuggestions(params, null); + } + + /** + * vrbo-location-suggestions (GET /vrbo/locations/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 locationSuggestions(Map params, RequestOptions options) { + OperationGroup.checkParams("vrbo-location-suggestions", params); + return client.request("vrbo-location-suggestions", params, options); + } + + /** + * vrbo-property (GET /vrbo/properties/{property_id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object property(Map params) { + return property(params, null); + } + + /** + * vrbo-property (GET /vrbo/properties/{property_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 property(Map params, RequestOptions options) { + OperationGroup.checkParams("vrbo-property", params); + return client.request("vrbo-property", params, options); + } + + /** + * vrbo-rate-calendar (GET /vrbo/properties/{property_id}/rate-calendar). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rateCalendar(Map params) { + return rateCalendar(params, null); + } + + /** + * vrbo-rate-calendar (GET /vrbo/properties/{property_id}/rate-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 rateCalendar(Map params, RequestOptions options) { + OperationGroup.checkParams("vrbo-rate-calendar", params); + return client.request("vrbo-rate-calendar", params, options); + } + + /** + * vrbo-property-reviews (GET /vrbo/properties/{property_id}/reviews). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object propertyReviews(Map params) { + return propertyReviews(params, null); + } + + /** + * vrbo-property-reviews (GET /vrbo/properties/{property_id}/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 propertyReviews(Map params, RequestOptions options) { + OperationGroup.checkParams("vrbo-property-reviews", params); + return client.request("vrbo-property-reviews", params, options); + } + + /** + * vrbo-search (POST /vrbo/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); + } + + /** + * vrbo-search (POST /vrbo/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("vrbo-search", params); + return client.request("vrbo-search", params, options); + } + + /** + * vrbo-travel-pages (GET /vrbo/travel-pages). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object travelPages(Map params) { + return travelPages(params, null); + } + + /** + * vrbo-travel-pages (GET /vrbo/travel-pages). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object travelPages(Map params, RequestOptions options) { + OperationGroup.checkParams("vrbo-travel-pages", params); + return client.request("vrbo-travel-pages", params, options); + } + + /** + * vrbo-travel-pages (GET /vrbo/travel-pages). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object travelPages() { + return travelPages(Map.of(), null); + } + + /** + * vrbo-travel-page-detail (GET /vrbo/travel-pages/{slug}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object travelPageDetail(Map params) { + return travelPageDetail(params, null); + } + + /** + * vrbo-travel-page-detail (GET /vrbo/travel-pages/{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 travelPageDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("vrbo-travel-page-detail", params); + return client.request("vrbo-travel-page-detail", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/WccftechGroup.java b/src/main/java/net/crawlora/groups/WccftechGroup.java new file mode 100644 index 0000000..a62e121 --- /dev/null +++ b/src/main/java/net/crawlora/groups/WccftechGroup.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 "wccftech" operation group. + * Reach it via {@code client.wccftech()}. + */ +public final class WccftechGroup { + private final CrawloraClient client; + + public WccftechGroup(CrawloraClient client) { + this.client = client; + } + + /** + * wccftech-article (GET /wccftech/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object article(Map params) { + return article(params, null); + } + + /** + * wccftech-article (GET /wccftech/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 article(Map params, RequestOptions options) { + OperationGroup.checkParams("wccftech-article", params); + return client.request("wccftech-article", params, options); + } + + /** + * wccftech-author (GET /wccftech/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); + } + + /** + * wccftech-author (GET /wccftech/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("wccftech-author", params); + return client.request("wccftech-author", params, options); + } + + /** + * wccftech-author (GET /wccftech/author). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object author() { + return author(Map.of(), null); + } + + /** + * wccftech-headlines (GET /wccftech/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object headlines(Map params) { + return headlines(params, null); + } + + /** + * wccftech-headlines (GET /wccftech/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 headlines(Map params, RequestOptions options) { + OperationGroup.checkParams("wccftech-headlines", params); + return client.request("wccftech-headlines", params, options); + } + + /** + * wccftech-news (GET /wccftech/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); + } + + /** + * wccftech-news (GET /wccftech/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("wccftech-news", params); + return client.request("wccftech-news", params, options); + } + + /** + * wccftech-news (GET /wccftech/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); + } + + /** + * wccftech-sections (GET /wccftech/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params) { + return sections(params, null); + } + + /** + * wccftech-sections (GET /wccftech/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params, RequestOptions options) { + OperationGroup.checkParams("wccftech-sections", params); + return client.request("wccftech-sections", params, options); + } + + /** + * wccftech-sections (GET /wccftech/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections() { + return sections(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/YardbarkerGroup.java b/src/main/java/net/crawlora/groups/YardbarkerGroup.java new file mode 100644 index 0000000..8d9ebed --- /dev/null +++ b/src/main/java/net/crawlora/groups/YardbarkerGroup.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 "yardbarker" operation group. + * Reach it via {@code client.yardbarker()}. + */ +public final class YardbarkerGroup { + private final CrawloraClient client; + + public YardbarkerGroup(CrawloraClient client) { + this.client = client; + } + + /** + * yardbarker-article (GET /yardbarker/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object article(Map params) { + return article(params, null); + } + + /** + * yardbarker-article (GET /yardbarker/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 article(Map params, RequestOptions options) { + OperationGroup.checkParams("yardbarker-article", params); + return client.request("yardbarker-article", params, options); + } + + /** + * yardbarker-author (GET /yardbarker/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); + } + + /** + * yardbarker-author (GET /yardbarker/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("yardbarker-author", params); + return client.request("yardbarker-author", params, options); + } + + /** + * yardbarker-headlines (GET /yardbarker/headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object headlines(Map params) { + return headlines(params, null); + } + + /** + * yardbarker-headlines (GET /yardbarker/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 headlines(Map params, RequestOptions options) { + OperationGroup.checkParams("yardbarker-headlines", params); + return client.request("yardbarker-headlines", params, options); + } + + /** + * yardbarker-news (GET /yardbarker/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); + } + + /** + * yardbarker-news (GET /yardbarker/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("yardbarker-news", params); + return client.request("yardbarker-news", params, options); + } + + /** + * yardbarker-news (GET /yardbarker/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); + } + + /** + * yardbarker-sections (GET /yardbarker/sections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params) { + return sections(params, null); + } + + /** + * yardbarker-sections (GET /yardbarker/sections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections(Map params, RequestOptions options) { + OperationGroup.checkParams("yardbarker-sections", params); + return client.request("yardbarker-sections", params, options); + } + + /** + * yardbarker-sections (GET /yardbarker/sections). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sections() { + return sections(Map.of(), null); + } + +}